@rocicorp/zero 1.6.0-canary.0 → 1.6.0-canary.10

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 (1777) hide show
  1. package/README.md +28 -3
  2. package/out/_virtual/_@oxc-project_runtime@0.130.0/helpers/usingCtx.js +57 -0
  3. package/out/_virtual/__vite-optional-peer-dep_pg-native_pg.js +13 -0
  4. package/out/_virtual/__vite-optional-peer-dep_pg-native_pg.js.map +1 -0
  5. package/out/_virtual/_rolldown/runtime.js +12 -1
  6. package/out/node_modules/.pnpm/@opentelemetry_semantic-conventions@1.41.1/node_modules/@opentelemetry/semantic-conventions/build/esm/stable_attributes.js +12 -0
  7. package/out/node_modules/.pnpm/@opentelemetry_semantic-conventions@1.41.1/node_modules/@opentelemetry/semantic-conventions/build/esm/stable_attributes.js.map +1 -0
  8. package/out/node_modules/.pnpm/pg-cloudflare@1.3.0/node_modules/pg-cloudflare/dist/empty.js +11 -0
  9. package/out/node_modules/.pnpm/pg-cloudflare@1.3.0/node_modules/pg-cloudflare/dist/empty.js.map +1 -0
  10. package/out/node_modules/.pnpm/pg-connection-string@2.12.0/node_modules/pg-connection-string/index.js +130 -0
  11. package/out/node_modules/.pnpm/pg-connection-string@2.12.0/node_modules/pg-connection-string/index.js.map +1 -0
  12. package/out/node_modules/.pnpm/pg-int8@1.0.1/node_modules/pg-int8/index.js +62 -0
  13. package/out/node_modules/.pnpm/pg-int8@1.0.1/node_modules/pg-int8/index.js.map +1 -0
  14. package/out/node_modules/.pnpm/pg-pool@3.13.0_pg@8.20.0/node_modules/pg-pool/index.js +353 -0
  15. package/out/node_modules/.pnpm/pg-pool@3.13.0_pg@8.20.0/node_modules/pg-pool/index.js.map +1 -0
  16. package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/buffer-reader.js +60 -0
  17. package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/buffer-reader.js.map +1 -0
  18. package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/buffer-writer.js +81 -0
  19. package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/buffer-writer.js.map +1 -0
  20. package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/index.js +35 -0
  21. package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/index.js.map +1 -0
  22. package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/messages.js +167 -0
  23. package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/messages.js.map +1 -0
  24. package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/parser.js +288 -0
  25. package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/parser.js.map +1 -0
  26. package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/serializer.js +177 -0
  27. package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/serializer.js.map +1 -0
  28. package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/index.js +46 -0
  29. package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/index.js.map +1 -0
  30. package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/arrayParser.js +16 -0
  31. package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/arrayParser.js.map +1 -0
  32. package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/binaryParsers.js +165 -0
  33. package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/binaryParsers.js.map +1 -0
  34. package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/builtins.js +81 -0
  35. package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/builtins.js.map +1 -0
  36. package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/textParsers.js +167 -0
  37. package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/textParsers.js.map +1 -0
  38. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/esm/index.js +19 -0
  39. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/esm/index.js.map +1 -0
  40. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/client.js +508 -0
  41. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/client.js.map +1 -0
  42. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/connection-parameters.js +104 -0
  43. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/connection-parameters.js.map +1 -0
  44. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/connection.js +160 -0
  45. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/connection.js.map +1 -0
  46. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/cert-signatures.js +97 -0
  47. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/cert-signatures.js.map +1 -0
  48. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/sasl.js +131 -0
  49. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/sasl.js.map +1 -0
  50. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils-legacy.js +39 -0
  51. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils-legacy.js.map +1 -0
  52. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils-webcrypto.js +89 -0
  53. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils-webcrypto.js.map +1 -0
  54. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils.js +13 -0
  55. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils.js.map +1 -0
  56. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/defaults.js +46 -0
  57. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/defaults.js.map +1 -0
  58. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/index.js +71 -0
  59. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/index.js.map +1 -0
  60. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/client.js +226 -0
  61. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/client.js.map +1 -0
  62. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/index.js +11 -0
  63. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/index.js.map +1 -0
  64. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/query.js +117 -0
  65. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/query.js.map +1 -0
  66. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/query.js +151 -0
  67. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/query.js.map +1 -0
  68. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/result.js +76 -0
  69. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/result.js.map +1 -0
  70. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/stream.js +73 -0
  71. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/stream.js.map +1 -0
  72. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/type-overrides.js +35 -0
  73. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/type-overrides.js.map +1 -0
  74. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/utils.js +118 -0
  75. package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/utils.js.map +1 -0
  76. package/out/node_modules/.pnpm/pgpass@1.0.5/node_modules/pgpass/lib/helper.js +147 -0
  77. package/out/node_modules/.pnpm/pgpass@1.0.5/node_modules/pgpass/lib/helper.js.map +1 -0
  78. package/out/node_modules/.pnpm/pgpass@1.0.5/node_modules/pgpass/lib/index.js +21 -0
  79. package/out/node_modules/.pnpm/pgpass@1.0.5/node_modules/pgpass/lib/index.js.map +1 -0
  80. package/out/node_modules/.pnpm/postgres-array@2.0.0/node_modules/postgres-array/index.js +84 -0
  81. package/out/node_modules/.pnpm/postgres-array@2.0.0/node_modules/postgres-array/index.js.map +1 -0
  82. package/out/node_modules/.pnpm/postgres-bytea@1.0.1/node_modules/postgres-bytea/index.js +28 -0
  83. package/out/node_modules/.pnpm/postgres-bytea@1.0.1/node_modules/postgres-bytea/index.js.map +1 -0
  84. package/out/node_modules/.pnpm/postgres-date@1.0.7/node_modules/postgres-date/index.js +65 -0
  85. package/out/node_modules/.pnpm/postgres-date@1.0.7/node_modules/postgres-date/index.js.map +1 -0
  86. package/out/node_modules/.pnpm/postgres-interval@1.2.0/node_modules/postgres-interval/index.js +107 -0
  87. package/out/node_modules/.pnpm/postgres-interval@1.2.0/node_modules/postgres-interval/index.js.map +1 -0
  88. package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.development.js +696 -0
  89. package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -0
  90. package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js +44 -0
  91. package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js.map +1 -0
  92. package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.development.js +1585 -0
  93. package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.development.js.map +1 -0
  94. package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js +329 -0
  95. package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js.map +1 -0
  96. package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/index.js +13 -0
  97. package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/index.js.map +1 -0
  98. package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js +13 -0
  99. package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js.map +1 -0
  100. package/out/node_modules/.pnpm/solid-js@1.9.13/node_modules/solid-js/dist/server.js +131 -0
  101. package/out/node_modules/.pnpm/solid-js@1.9.13/node_modules/solid-js/dist/server.js.map +1 -0
  102. package/out/node_modules/.pnpm/solid-js@1.9.13/node_modules/solid-js/store/dist/server.js +96 -0
  103. package/out/node_modules/.pnpm/solid-js@1.9.13/node_modules/solid-js/store/dist/server.js.map +1 -0
  104. package/out/node_modules/.pnpm/split2@4.2.0/node_modules/split2/index.js +95 -0
  105. package/out/node_modules/.pnpm/split2@4.2.0/node_modules/split2/index.js.map +1 -0
  106. package/out/node_modules/.pnpm/xtend@4.0.2/node_modules/xtend/mutable.js +18 -0
  107. package/out/node_modules/.pnpm/xtend@4.0.2/node_modules/xtend/mutable.js.map +1 -0
  108. package/out/packages/analyze-query/src/analyze-cli.js +288 -0
  109. package/out/packages/analyze-query/src/analyze-cli.js.map +1 -0
  110. package/out/packages/analyze-query/src/bin-analyze.js +282 -0
  111. package/out/packages/analyze-query/src/bin-analyze.js.map +1 -0
  112. package/out/packages/analyze-query/src/bin-transform.js.map +1 -0
  113. package/out/packages/ast-to-zql/src/ast-to-zql.js.map +1 -0
  114. package/out/packages/ast-to-zql/src/bin.js.map +1 -0
  115. package/out/packages/ast-to-zql/src/format.js.map +1 -0
  116. package/out/packages/datadog/src/datadog-log-sink.js.map +1 -0
  117. package/out/packages/otel/src/enabled.js.map +1 -0
  118. package/out/packages/otel/src/log-options.js.map +1 -0
  119. package/out/packages/otel/src/maybe-time.js.map +1 -0
  120. package/out/packages/otel/src/span.js.map +1 -0
  121. package/out/packages/otel/src/version.js.map +1 -0
  122. package/out/packages/replicache/src/async-iterable-to-array.js.map +1 -0
  123. package/out/packages/replicache/src/bg-interval.js.map +1 -0
  124. package/out/packages/replicache/src/btree/diff.js.map +1 -0
  125. package/out/packages/replicache/src/btree/node.js.map +1 -0
  126. package/out/packages/replicache/src/btree/read.js.map +1 -0
  127. package/out/packages/replicache/src/btree/splice.js.map +1 -0
  128. package/out/packages/replicache/src/btree/write.js +191 -0
  129. package/out/packages/replicache/src/btree/write.js.map +1 -0
  130. package/out/packages/replicache/src/call-default-fetch.js.map +1 -0
  131. package/out/packages/replicache/src/connection-loop-delegates.js.map +1 -0
  132. package/out/packages/replicache/src/connection-loop.js.map +1 -0
  133. package/out/packages/replicache/src/cookies.js.map +1 -0
  134. package/out/packages/replicache/src/dag/chunk.js.map +1 -0
  135. package/out/packages/replicache/src/dag/gc.js.map +1 -0
  136. package/out/packages/replicache/src/dag/key.js.map +1 -0
  137. package/out/packages/replicache/src/dag/lazy-store.js.map +1 -0
  138. package/out/packages/replicache/src/dag/store-impl.js +157 -0
  139. package/out/packages/replicache/src/dag/store-impl.js.map +1 -0
  140. package/out/packages/replicache/src/dag/store.js.map +1 -0
  141. package/out/packages/replicache/src/dag/visitor.js.map +1 -0
  142. package/out/packages/replicache/src/db/commit.js.map +1 -0
  143. package/out/packages/replicache/src/db/index.js.map +1 -0
  144. package/out/packages/replicache/src/db/read.js.map +1 -0
  145. package/out/packages/replicache/src/db/rebase.js.map +1 -0
  146. package/out/packages/replicache/src/db/write.js.map +1 -0
  147. package/out/packages/replicache/src/deleted-clients.js.map +1 -0
  148. package/out/packages/replicache/src/error-responses.js.map +1 -0
  149. package/out/packages/replicache/src/frozen-json.js.map +1 -0
  150. package/out/packages/replicache/src/get-default-puller.js.map +1 -0
  151. package/out/packages/replicache/src/get-default-pusher.js.map +1 -0
  152. package/out/packages/replicache/src/get-kv-store-provider.js.map +1 -0
  153. package/out/packages/replicache/src/hash.js.map +1 -0
  154. package/out/packages/replicache/src/http-request-info.js.map +1 -0
  155. package/out/packages/replicache/src/index-defs.js.map +1 -0
  156. package/out/packages/replicache/src/kv/expo-sqlite/store.js +57 -0
  157. package/out/packages/replicache/src/kv/expo-sqlite/store.js.map +1 -0
  158. package/out/packages/replicache/src/kv/idb-store-with-mem-fallback.js.map +1 -0
  159. package/out/packages/replicache/src/kv/idb-store.js.map +1 -0
  160. package/out/packages/replicache/src/kv/mem-store.js.map +1 -0
  161. package/out/packages/replicache/src/kv/op-sqlite/store.js +63 -0
  162. package/out/packages/replicache/src/kv/op-sqlite/store.js.map +1 -0
  163. package/out/packages/replicache/src/kv/op-sqlite/types.js.map +1 -0
  164. package/out/packages/replicache/src/kv/read-impl.js.map +1 -0
  165. package/out/packages/replicache/src/kv/sqlite-store.js +301 -0
  166. package/out/packages/replicache/src/kv/sqlite-store.js.map +1 -0
  167. package/out/packages/replicache/src/kv/throw-if-closed.js +23 -0
  168. package/out/packages/replicache/src/kv/throw-if-closed.js.map +1 -0
  169. package/out/packages/replicache/src/kv/write-impl-base.js.map +1 -0
  170. package/out/packages/replicache/src/kv/write-impl.js.map +1 -0
  171. package/out/packages/replicache/src/lazy.js.map +1 -0
  172. package/out/packages/replicache/src/log-options.js.map +1 -0
  173. package/out/packages/replicache/src/make-idb-name.js.map +1 -0
  174. package/out/packages/replicache/src/new-client-channel.js.map +1 -0
  175. package/out/packages/replicache/src/on-persist-channel.js.map +1 -0
  176. package/out/packages/replicache/src/patch-operation.js.map +1 -0
  177. package/out/packages/replicache/src/pending-mutations.js.map +1 -0
  178. package/out/packages/replicache/src/persist/client-gc.js.map +1 -0
  179. package/out/packages/replicache/src/persist/client-group-gc.js.map +1 -0
  180. package/out/packages/replicache/src/persist/client-groups.js +150 -0
  181. package/out/packages/replicache/src/persist/client-groups.js.map +1 -0
  182. package/out/packages/replicache/src/persist/clients.js +289 -0
  183. package/out/packages/replicache/src/persist/clients.js.map +1 -0
  184. package/out/packages/replicache/src/persist/collect-idb-databases.js.map +1 -0
  185. package/out/packages/replicache/src/persist/gather-mem-only-visitor.js.map +1 -0
  186. package/out/packages/replicache/src/persist/gather-not-cached-visitor.js.map +1 -0
  187. package/out/packages/replicache/src/persist/heartbeat.js.map +1 -0
  188. package/out/packages/replicache/src/persist/idb-databases-store-db-name.js.map +1 -0
  189. package/out/packages/replicache/src/persist/idb-databases-store.js.map +1 -0
  190. package/out/packages/replicache/src/persist/make-client-id.js.map +1 -0
  191. package/out/packages/replicache/src/persist/persist.js +124 -0
  192. package/out/packages/replicache/src/persist/persist.js.map +1 -0
  193. package/out/packages/replicache/src/persist/refresh.js.map +1 -0
  194. package/out/packages/replicache/src/process-scheduler.js.map +1 -0
  195. package/out/packages/replicache/src/pusher.js.map +1 -0
  196. package/out/packages/replicache/src/replicache-impl.js.map +1 -0
  197. package/out/packages/replicache/src/report-error.js.map +1 -0
  198. package/out/packages/replicache/src/request-idle.js.map +1 -0
  199. package/out/packages/replicache/src/scan-iterator.js.map +1 -0
  200. package/out/packages/replicache/src/scan-options.js.map +1 -0
  201. package/out/packages/replicache/src/set-interval-with-signal.js.map +1 -0
  202. package/out/packages/replicache/src/subscriptions.js.map +1 -0
  203. package/out/packages/replicache/src/sync/diff.js.map +1 -0
  204. package/out/packages/replicache/src/sync/ids.js.map +1 -0
  205. package/out/packages/replicache/src/sync/patch.js.map +1 -0
  206. package/out/packages/replicache/src/sync/pull-error.js.map +1 -0
  207. package/out/packages/replicache/src/sync/pull.js +169 -0
  208. package/out/packages/replicache/src/sync/pull.js.map +1 -0
  209. package/out/packages/replicache/src/sync/push.js.map +1 -0
  210. package/out/packages/replicache/src/sync/request-id.js.map +1 -0
  211. package/out/packages/replicache/src/sync/sync-head-name.js.map +1 -0
  212. package/out/packages/replicache/src/to-error.js.map +1 -0
  213. package/out/packages/replicache/src/transaction-closed-error.js.map +1 -0
  214. package/out/packages/replicache/src/transactions.js.map +1 -0
  215. package/out/packages/replicache/src/version.js.map +1 -0
  216. package/out/packages/replicache/src/with-transactions.js.map +1 -0
  217. package/out/packages/shared/src/abort-error.js.map +1 -0
  218. package/out/packages/shared/src/arrays.js.map +1 -0
  219. package/out/packages/shared/src/asserts.js.map +1 -0
  220. package/out/packages/shared/src/bigint-json.js.map +1 -0
  221. package/out/packages/shared/src/binary-search.js.map +1 -0
  222. package/out/packages/shared/src/broadcast-channel.js.map +1 -0
  223. package/out/packages/shared/src/browser-env.js.map +1 -0
  224. package/out/packages/shared/src/btree-set.js.map +1 -0
  225. package/out/packages/shared/src/cache.js.map +1 -0
  226. package/out/packages/shared/src/centroid.js.map +1 -0
  227. package/out/packages/shared/src/config.js.map +1 -0
  228. package/out/packages/shared/src/custom-key-map.js.map +1 -0
  229. package/out/packages/shared/src/custom-key-set.js.map +1 -0
  230. package/out/packages/shared/src/deep-clone.js.map +1 -0
  231. package/out/packages/shared/src/deep-merge.js.map +1 -0
  232. package/out/packages/shared/src/document-visible.js.map +1 -0
  233. package/out/packages/shared/src/dotenv.js.map +1 -0
  234. package/out/packages/shared/src/error.js.map +1 -0
  235. package/out/packages/shared/src/has-own.js.map +1 -0
  236. package/out/packages/shared/src/hash.js.map +1 -0
  237. package/out/packages/shared/src/iterables.js.map +1 -0
  238. package/out/packages/shared/src/json-schema.js.map +1 -0
  239. package/out/packages/shared/src/json.js.map +1 -0
  240. package/out/packages/shared/src/logging-test-utils.js.map +1 -0
  241. package/out/packages/shared/src/logging.js.map +1 -0
  242. package/out/packages/shared/src/map.js +39 -0
  243. package/out/packages/shared/src/map.js.map +1 -0
  244. package/out/packages/shared/src/must.js.map +1 -0
  245. package/out/packages/shared/src/navigator.js.map +1 -0
  246. package/out/packages/shared/src/object-traversal.js.map +1 -0
  247. package/out/packages/shared/src/objects.js.map +1 -0
  248. package/out/packages/shared/src/options.js.map +1 -0
  249. package/out/packages/shared/src/parse-big-int.js.map +1 -0
  250. package/out/packages/shared/src/promise-race.js.map +1 -0
  251. package/out/packages/shared/src/queue.js +120 -0
  252. package/out/packages/shared/src/queue.js.map +1 -0
  253. package/out/packages/shared/src/rand.js.map +1 -0
  254. package/out/packages/shared/src/random-uint64.js.map +1 -0
  255. package/out/packages/shared/src/random-values.js.map +1 -0
  256. package/out/packages/shared/src/record-proxy.js.map +1 -0
  257. package/out/packages/shared/src/resolved-promises.js.map +1 -0
  258. package/out/packages/shared/src/ring-buffer.js +109 -0
  259. package/out/packages/shared/src/ring-buffer.js.map +1 -0
  260. package/out/packages/shared/src/sentinels.js.map +1 -0
  261. package/out/packages/shared/src/set-utils.js.map +1 -0
  262. package/out/packages/shared/src/size-of-value.js.map +1 -0
  263. package/out/packages/shared/src/sleep.js.map +1 -0
  264. package/out/packages/shared/src/sorted-entries.js.map +1 -0
  265. package/out/packages/shared/src/string-compare.js.map +1 -0
  266. package/out/packages/shared/src/subscribable.js.map +1 -0
  267. package/out/packages/shared/src/tdigest-schema.js.map +1 -0
  268. package/out/packages/shared/src/tdigest.js.map +1 -0
  269. package/out/packages/shared/src/valita.js +172 -0
  270. package/out/packages/shared/src/valita.js.map +1 -0
  271. package/out/packages/z2s/src/compiler.js.map +1 -0
  272. package/out/packages/z2s/src/sql.js.map +1 -0
  273. package/out/packages/zero/package.js +205 -0
  274. package/out/packages/zero/package.js.map +1 -0
  275. package/out/packages/zero-cache/src/auth/auth.js.map +1 -0
  276. package/out/packages/zero-cache/src/auth/jwt.js.map +1 -0
  277. package/out/packages/zero-cache/src/auth/load-permissions.js.map +1 -0
  278. package/out/packages/zero-cache/src/auth/read-authorizer.js.map +1 -0
  279. package/out/packages/zero-cache/src/auth/write-authorizer.js.map +1 -0
  280. package/out/packages/zero-cache/src/config/network.js.map +1 -0
  281. package/out/packages/zero-cache/src/config/normalize.js.map +1 -0
  282. package/out/packages/zero-cache/src/config/server-context.js.map +1 -0
  283. package/out/packages/zero-cache/src/config/zero-config.js +921 -0
  284. package/out/packages/zero-cache/src/config/zero-config.js.map +1 -0
  285. package/out/packages/zero-cache/src/custom/fetch.js.map +1 -0
  286. package/out/packages/zero-cache/src/custom-queries/transform-query.js.map +1 -0
  287. package/out/packages/zero-cache/src/db/create.js.map +1 -0
  288. package/out/packages/zero-cache/src/db/delete-lite-db.js.map +1 -0
  289. package/out/packages/zero-cache/src/db/lite-tables.js.map +1 -0
  290. package/out/packages/zero-cache/src/db/migration-lite.js +166 -0
  291. package/out/packages/zero-cache/src/db/migration-lite.js.map +1 -0
  292. package/out/packages/zero-cache/src/db/migration.js +139 -0
  293. package/out/packages/zero-cache/src/db/migration.js.map +1 -0
  294. package/out/packages/zero-cache/src/db/mode-enum.js.map +1 -0
  295. package/out/packages/zero-cache/src/db/pg-copy-binary.js.map +1 -0
  296. package/out/packages/zero-cache/src/db/pg-copy.js.map +1 -0
  297. package/out/packages/zero-cache/src/db/pg-to-lite.js.map +1 -0
  298. package/out/packages/zero-cache/src/db/pg-type-parser.js.map +1 -0
  299. package/out/packages/zero-cache/src/db/run-transaction.js.map +1 -0
  300. package/out/packages/zero-cache/src/db/specs.js.map +1 -0
  301. package/out/packages/zero-cache/src/db/statements.js.map +1 -0
  302. package/out/packages/zero-cache/src/db/transaction-pool.js.map +1 -0
  303. package/out/packages/zero-cache/src/db/warmup.js.map +1 -0
  304. package/out/packages/zero-cache/src/observability/events.js.map +1 -0
  305. package/out/packages/zero-cache/src/observability/metrics.js.map +1 -0
  306. package/out/packages/zero-cache/src/scripts/decommission.js.map +1 -0
  307. package/out/packages/zero-cache/src/scripts/deploy-permissions.js.map +1 -0
  308. package/out/packages/zero-cache/src/scripts/permissions.js.map +1 -0
  309. package/out/packages/zero-cache/src/server/anonymous-otel-start.js +306 -0
  310. package/out/packages/zero-cache/src/server/anonymous-otel-start.js.map +1 -0
  311. package/out/packages/zero-cache/src/server/inspector-delegate.js.map +1 -0
  312. package/out/packages/zero-cache/src/server/logging.js.map +1 -0
  313. package/out/packages/zero-cache/src/server/otel-diag-logger.js.map +1 -0
  314. package/out/packages/zero-cache/src/server/otel-log-sink.js.map +1 -0
  315. package/out/packages/zero-cache/src/server/otel-start.js +53 -0
  316. package/out/packages/zero-cache/src/server/otel-start.js.map +1 -0
  317. package/out/packages/zero-cache/src/server/priority-op.js.map +1 -0
  318. package/out/packages/zero-cache/src/server/runner/main.js +11 -0
  319. package/out/packages/zero-cache/src/server/runner/main.js.map +1 -0
  320. package/out/packages/zero-cache/src/server/runner/run-worker.js.map +1 -0
  321. package/out/packages/zero-cache/src/server/runner/runtime.js.map +1 -0
  322. package/out/packages/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -0
  323. package/out/packages/zero-cache/src/server/worker-dispatcher.js.map +1 -0
  324. package/out/packages/zero-cache/src/server/worker-urls.js.map +1 -0
  325. package/out/packages/zero-cache/src/services/analyze.js +72 -0
  326. package/out/packages/zero-cache/src/services/analyze.js.map +1 -0
  327. package/out/packages/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -0
  328. package/out/packages/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +1 -0
  329. package/out/packages/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -0
  330. package/out/packages/zero-cache/src/services/change-source/custom/change-source.js +176 -0
  331. package/out/packages/zero-cache/src/services/change-source/custom/change-source.js.map +1 -0
  332. package/out/packages/zero-cache/src/services/change-source/pg/backfill-metadata.js.map +1 -0
  333. package/out/packages/zero-cache/src/services/change-source/pg/backfill-stream.js +197 -0
  334. package/out/packages/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -0
  335. package/out/packages/zero-cache/src/services/change-source/pg/change-source.js +929 -0
  336. package/out/packages/zero-cache/src/services/change-source/pg/change-source.js.map +1 -0
  337. package/out/packages/zero-cache/src/services/change-source/pg/decommission.js.map +1 -0
  338. package/out/packages/zero-cache/src/services/change-source/pg/initial-sync.js +553 -0
  339. package/out/packages/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -0
  340. package/out/packages/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -0
  341. package/out/packages/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -0
  342. package/out/packages/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -0
  343. package/out/packages/zero-cache/src/services/change-source/pg/lsn.js.map +1 -0
  344. package/out/packages/zero-cache/src/services/change-source/pg/replication-slots.js +162 -0
  345. package/out/packages/zero-cache/src/services/change-source/pg/replication-slots.js.map +1 -0
  346. package/out/packages/zero-cache/src/services/change-source/pg/schema/ddl.js +334 -0
  347. package/out/packages/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -0
  348. package/out/packages/zero-cache/src/services/change-source/pg/schema/init.js +155 -0
  349. package/out/packages/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -0
  350. package/out/packages/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -0
  351. package/out/packages/zero-cache/src/services/change-source/pg/schema/shard.js +330 -0
  352. package/out/packages/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -0
  353. package/out/packages/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -0
  354. package/out/packages/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -0
  355. package/out/packages/zero-cache/src/services/change-source/protocol/current/data.js +194 -0
  356. package/out/packages/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -0
  357. package/out/packages/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -0
  358. package/out/packages/zero-cache/src/services/change-source/protocol/current/json.js.map +1 -0
  359. package/out/packages/zero-cache/src/services/change-source/protocol/current/path.js.map +1 -0
  360. package/out/packages/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -0
  361. package/out/packages/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -0
  362. package/out/packages/zero-cache/src/services/change-source/protocol/current.js +56 -0
  363. package/out/packages/zero-cache/src/services/change-source/protocol/current.js.map +1 -0
  364. package/out/packages/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -0
  365. package/out/packages/zero-cache/src/services/change-streamer/broadcast.js.map +1 -0
  366. package/out/packages/zero-cache/src/services/change-streamer/change-streamer-http.js +158 -0
  367. package/out/packages/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -0
  368. package/out/packages/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -0
  369. package/out/packages/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -0
  370. package/out/packages/zero-cache/src/services/change-streamer/forwarder.js.map +1 -0
  371. package/out/packages/zero-cache/src/services/change-streamer/replica-monitor.js.map +1 -0
  372. package/out/packages/zero-cache/src/services/change-streamer/schema/init.js +70 -0
  373. package/out/packages/zero-cache/src/services/change-streamer/schema/init.js.map +1 -0
  374. package/out/packages/zero-cache/src/services/change-streamer/schema/tables.js +191 -0
  375. package/out/packages/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -0
  376. package/out/packages/zero-cache/src/services/change-streamer/snapshot.js +42 -0
  377. package/out/packages/zero-cache/src/services/change-streamer/snapshot.js.map +1 -0
  378. package/out/packages/zero-cache/src/services/change-streamer/storer.js.map +1 -0
  379. package/out/packages/zero-cache/src/services/change-streamer/subscriber.js.map +1 -0
  380. package/out/packages/zero-cache/src/services/heapz.js.map +1 -0
  381. package/out/packages/zero-cache/src/services/http-service.js.map +1 -0
  382. package/out/packages/zero-cache/src/services/life-cycle.js +200 -0
  383. package/out/packages/zero-cache/src/services/life-cycle.js.map +1 -0
  384. package/out/packages/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -0
  385. package/out/packages/zero-cache/src/services/litestream/commands.js.map +1 -0
  386. package/out/packages/zero-cache/src/services/mutagen/error.js.map +1 -0
  387. package/out/packages/zero-cache/src/services/mutagen/mutagen.js.map +1 -0
  388. package/out/packages/zero-cache/src/services/mutagen/pusher.js.map +1 -0
  389. package/out/packages/zero-cache/src/services/replicator/change-processor.js.map +1 -0
  390. package/out/packages/zero-cache/src/services/replicator/incremental-sync.js.map +1 -0
  391. package/out/packages/zero-cache/src/services/replicator/notifier.js.map +1 -0
  392. package/out/packages/zero-cache/src/services/replicator/replication-status.js.map +1 -0
  393. package/out/packages/zero-cache/src/services/replicator/replicator.js.map +1 -0
  394. package/out/packages/zero-cache/src/services/replicator/reporter/recorder.js.map +1 -0
  395. package/out/packages/zero-cache/src/services/replicator/reporter/report-schema.js.map +1 -0
  396. package/out/packages/zero-cache/src/services/replicator/schema/change-log.js.map +1 -0
  397. package/out/packages/zero-cache/src/services/replicator/schema/column-metadata.js.map +1 -0
  398. package/out/packages/zero-cache/src/services/replicator/schema/constants.js.map +1 -0
  399. package/out/packages/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -0
  400. package/out/packages/zero-cache/src/services/replicator/schema/table-metadata.js.map +1 -0
  401. package/out/packages/zero-cache/src/services/replicator/write-worker-client.js.map +1 -0
  402. package/out/packages/zero-cache/src/services/replicator/write-worker.js.map +1 -0
  403. package/out/packages/zero-cache/src/services/run-ast.js +88 -0
  404. package/out/packages/zero-cache/src/services/run-ast.js.map +1 -0
  405. package/out/packages/zero-cache/src/services/runner.js.map +1 -0
  406. package/out/packages/zero-cache/src/services/running-state.js +139 -0
  407. package/out/packages/zero-cache/src/services/running-state.js.map +1 -0
  408. package/out/packages/zero-cache/src/services/shadow-sync/shadow-sync-service.js +57 -0
  409. package/out/packages/zero-cache/src/services/shadow-sync/shadow-sync-service.js.map +1 -0
  410. package/out/packages/zero-cache/src/services/statz.js.map +1 -0
  411. package/out/packages/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -0
  412. package/out/packages/zero-cache/src/services/view-syncer/client-handler.js +270 -0
  413. package/out/packages/zero-cache/src/services/view-syncer/client-handler.js.map +1 -0
  414. package/out/packages/zero-cache/src/services/view-syncer/client-schema.js.map +1 -0
  415. package/out/packages/zero-cache/src/services/view-syncer/connection-context-manager.js.map +1 -0
  416. package/out/packages/zero-cache/src/services/view-syncer/cvr-purger.js +110 -0
  417. package/out/packages/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -0
  418. package/out/packages/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -0
  419. package/out/packages/zero-cache/src/services/view-syncer/cvr.js.map +1 -0
  420. package/out/packages/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -0
  421. package/out/packages/zero-cache/src/services/view-syncer/inspect-handler.js +102 -0
  422. package/out/packages/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -0
  423. package/out/packages/zero-cache/src/services/view-syncer/pipeline-driver.js +628 -0
  424. package/out/packages/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -0
  425. package/out/packages/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -0
  426. package/out/packages/zero-cache/src/services/view-syncer/row-set-signature.js.map +1 -0
  427. package/out/packages/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -0
  428. package/out/packages/zero-cache/src/services/view-syncer/schema/init.js +142 -0
  429. package/out/packages/zero-cache/src/services/view-syncer/schema/init.js.map +1 -0
  430. package/out/packages/zero-cache/src/services/view-syncer/schema/types.js +278 -0
  431. package/out/packages/zero-cache/src/services/view-syncer/schema/types.js.map +1 -0
  432. package/out/packages/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -0
  433. package/out/packages/zero-cache/src/services/view-syncer/tracer.js.map +1 -0
  434. package/out/packages/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -0
  435. package/out/packages/zero-cache/src/services/view-syncer/view-syncer.js +1245 -0
  436. package/out/packages/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -0
  437. package/out/packages/zero-cache/src/types/configuration-error.js +11 -0
  438. package/out/packages/zero-cache/src/types/configuration-error.js.map +1 -0
  439. package/out/packages/zero-cache/src/types/error-with-level.js.map +1 -0
  440. package/out/packages/zero-cache/src/types/http.js.map +1 -0
  441. package/out/packages/zero-cache/src/types/lexi-version.js.map +1 -0
  442. package/out/packages/zero-cache/src/types/lite.js.map +1 -0
  443. package/out/packages/zero-cache/src/types/names.js.map +1 -0
  444. package/out/packages/zero-cache/src/types/pg-data-type.js.map +1 -0
  445. package/out/packages/zero-cache/src/types/pg-types.js.map +1 -0
  446. package/out/packages/zero-cache/src/types/pg-versions.js.map +1 -0
  447. package/out/packages/zero-cache/src/types/pg.js +222 -0
  448. package/out/packages/zero-cache/src/types/pg.js.map +1 -0
  449. package/out/packages/zero-cache/src/types/processes.js.map +1 -0
  450. package/out/packages/zero-cache/src/types/profiler.js.map +1 -0
  451. package/out/packages/zero-cache/src/types/row-key.js.map +1 -0
  452. package/out/packages/zero-cache/src/types/shards.js.map +1 -0
  453. package/out/packages/zero-cache/src/types/sql.js.map +1 -0
  454. package/out/packages/zero-cache/src/types/state-version.js.map +1 -0
  455. package/out/packages/zero-cache/src/types/streams.js.map +1 -0
  456. package/out/packages/zero-cache/src/types/strings.js.map +1 -0
  457. package/out/packages/zero-cache/src/types/subscription.js.map +1 -0
  458. package/out/packages/zero-cache/src/types/timeout.js.map +1 -0
  459. package/out/packages/zero-cache/src/types/url-params.js.map +1 -0
  460. package/out/packages/zero-cache/src/types/websocket-handoff.js.map +1 -0
  461. package/out/packages/zero-cache/src/types/ws.js.map +1 -0
  462. package/out/packages/zero-cache/src/workers/connect-params.js.map +1 -0
  463. package/out/packages/zero-cache/src/workers/connection.js +229 -0
  464. package/out/packages/zero-cache/src/workers/connection.js.map +1 -0
  465. package/out/packages/zero-cache/src/workers/mutator.js.map +1 -0
  466. package/out/packages/zero-cache/src/workers/replicator.js.map +1 -0
  467. package/out/packages/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -0
  468. package/out/packages/zero-cache/src/workers/syncer.js.map +1 -0
  469. package/out/packages/zero-client/src/client/active-clients-manager.js.map +1 -0
  470. package/out/packages/zero-client/src/client/client-error-kind-enum.js.map +1 -0
  471. package/out/packages/zero-client/src/client/connection-manager.js +296 -0
  472. package/out/packages/zero-client/src/client/connection-manager.js.map +1 -0
  473. package/out/packages/zero-client/src/client/connection-status-enum.js +20 -0
  474. package/out/packages/zero-client/src/client/connection-status-enum.js.map +1 -0
  475. package/out/packages/zero-client/src/client/connection.js.map +1 -0
  476. package/out/packages/zero-client/src/client/context.js.map +1 -0
  477. package/out/packages/zero-client/src/client/crud-impl.js +61 -0
  478. package/out/packages/zero-client/src/client/crud-impl.js.map +1 -0
  479. package/out/packages/zero-client/src/client/crud.js.map +1 -0
  480. package/out/packages/zero-client/src/client/custom.js +64 -0
  481. package/out/packages/zero-client/src/client/custom.js.map +1 -0
  482. package/out/packages/zero-client/src/client/delete-clients-manager.js.map +1 -0
  483. package/out/packages/zero-client/src/client/enable-analytics.js.map +1 -0
  484. package/out/packages/zero-client/src/client/error.js.map +1 -0
  485. package/out/packages/zero-client/src/client/http-string.js.map +1 -0
  486. package/out/packages/zero-client/src/client/inspector/client-group.js.map +1 -0
  487. package/out/packages/zero-client/src/client/inspector/client.js.map +1 -0
  488. package/out/packages/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -0
  489. package/out/packages/zero-client/src/client/inspector/inspector.js.map +1 -0
  490. package/out/packages/zero-client/src/client/inspector/lazy-inspector.js.map +1 -0
  491. package/out/packages/zero-client/src/client/inspector/query.js.map +1 -0
  492. package/out/packages/zero-client/src/client/ivm-branch.js.map +1 -0
  493. package/out/packages/zero-client/src/client/keys.js.map +1 -0
  494. package/out/packages/zero-client/src/client/log-options.js.map +1 -0
  495. package/out/packages/zero-client/src/client/make-mutate-property.js.map +1 -0
  496. package/out/packages/zero-client/src/client/make-replicache-mutators.js.map +1 -0
  497. package/out/packages/zero-client/src/client/metric-name-enum.js.map +1 -0
  498. package/out/packages/zero-client/src/client/metrics.js.map +1 -0
  499. package/out/packages/zero-client/src/client/mutation-tracker.js.map +1 -0
  500. package/out/packages/zero-client/src/client/mutator-proxy.js.map +1 -0
  501. package/out/packages/zero-client/src/client/options.js.map +1 -0
  502. package/out/packages/zero-client/src/client/query-manager.js.map +1 -0
  503. package/out/packages/zero-client/src/client/reload-error-handler.js.map +1 -0
  504. package/out/packages/zero-client/src/client/server-option.js.map +1 -0
  505. package/out/packages/zero-client/src/client/update-needed-reason-type-enum.js +27 -0
  506. package/out/packages/zero-client/src/client/update-needed-reason-type-enum.js.map +1 -0
  507. package/out/packages/zero-client/src/client/version.js +9 -0
  508. package/out/packages/zero-client/src/client/version.js.map +1 -0
  509. package/out/packages/zero-client/src/client/zero-poke-handler.js.map +1 -0
  510. package/out/packages/zero-client/src/client/zero-rep.js.map +1 -0
  511. package/out/packages/zero-client/src/client/zero.js +1469 -0
  512. package/out/packages/zero-client/src/client/zero.js.map +1 -0
  513. package/out/packages/zero-client/src/util/nanoid.js.map +1 -0
  514. package/out/packages/zero-protocol/src/analyze-query-result.js +123 -0
  515. package/out/packages/zero-protocol/src/analyze-query-result.js.map +1 -0
  516. package/out/packages/zero-protocol/src/application-error.js.map +1 -0
  517. package/out/packages/zero-protocol/src/ast.js.map +1 -0
  518. package/out/packages/zero-protocol/src/change-desired-queries.js +13 -0
  519. package/out/packages/zero-protocol/src/change-desired-queries.js.map +1 -0
  520. package/out/packages/zero-protocol/src/client-schema.js.map +1 -0
  521. package/out/packages/zero-protocol/src/close-connection.js.map +1 -0
  522. package/out/packages/zero-protocol/src/connect.js +54 -0
  523. package/out/packages/zero-protocol/src/connect.js.map +1 -0
  524. package/out/packages/zero-protocol/src/custom-queries.js.map +1 -0
  525. package/out/packages/zero-protocol/src/data.js.map +1 -0
  526. package/out/packages/zero-protocol/src/delete-clients.js.map +1 -0
  527. package/out/packages/zero-protocol/src/down.js.map +1 -0
  528. package/out/packages/zero-protocol/src/error-kind-enum.js.map +1 -0
  529. package/out/packages/zero-protocol/src/error-origin-enum.js.map +1 -0
  530. package/out/packages/zero-protocol/src/error-reason-enum.js.map +1 -0
  531. package/out/packages/zero-protocol/src/error.js +91 -0
  532. package/out/packages/zero-protocol/src/error.js.map +1 -0
  533. package/out/packages/zero-protocol/src/inspect-down.js.map +1 -0
  534. package/out/packages/zero-protocol/src/inspect-up.js +35 -0
  535. package/out/packages/zero-protocol/src/inspect-up.js.map +1 -0
  536. package/out/packages/zero-protocol/src/mutate-server.js.map +1 -0
  537. package/out/packages/zero-protocol/src/mutation-id.js.map +1 -0
  538. package/out/packages/zero-protocol/src/mutation-type-enum.js.map +1 -0
  539. package/out/packages/zero-protocol/src/mutation.js.map +1 -0
  540. package/out/packages/zero-protocol/src/mutations-patch.js.map +1 -0
  541. package/out/packages/zero-protocol/src/ping.js.map +1 -0
  542. package/out/packages/zero-protocol/src/poke.js +63 -0
  543. package/out/packages/zero-protocol/src/poke.js.map +1 -0
  544. package/out/packages/zero-protocol/src/pong.js.map +1 -0
  545. package/out/packages/zero-protocol/src/primary-key.js.map +1 -0
  546. package/out/packages/zero-protocol/src/protocol-version.js.map +1 -0
  547. package/out/packages/zero-protocol/src/pull.js.map +1 -0
  548. package/out/packages/zero-protocol/src/push.js +76 -0
  549. package/out/packages/zero-protocol/src/push.js.map +1 -0
  550. package/out/packages/zero-protocol/src/queries-patch.js.map +1 -0
  551. package/out/packages/zero-protocol/src/query-hash.js.map +1 -0
  552. package/out/packages/zero-protocol/src/query-server.js.map +1 -0
  553. package/out/packages/zero-protocol/src/row-patch.js.map +1 -0
  554. package/out/packages/zero-protocol/src/up.js.map +1 -0
  555. package/out/packages/zero-protocol/src/update-auth.js.map +1 -0
  556. package/out/packages/zero-protocol/src/version.js.map +1 -0
  557. package/out/packages/zero-react/src/use-connection-state.js +19 -0
  558. package/out/packages/zero-react/src/use-connection-state.js.map +1 -0
  559. package/out/packages/zero-react/src/use-query.js +301 -0
  560. package/out/packages/zero-react/src/use-query.js.map +1 -0
  561. package/out/packages/zero-react/src/use-zero-online.js +22 -0
  562. package/out/packages/zero-react/src/use-zero-online.js.map +1 -0
  563. package/out/packages/zero-react/src/zero-provider.js +90 -0
  564. package/out/packages/zero-react/src/zero-provider.js.map +1 -0
  565. package/out/packages/zero-schema/src/builder/relationship-builder.js.map +1 -0
  566. package/out/packages/zero-schema/src/builder/schema-builder.js.map +1 -0
  567. package/out/packages/zero-schema/src/builder/table-builder.js.map +1 -0
  568. package/out/packages/zero-schema/src/compiled-permissions.js.map +1 -0
  569. package/out/packages/zero-schema/src/name-mapper.js.map +1 -0
  570. package/out/packages/zero-schema/src/permissions.js.map +1 -0
  571. package/out/packages/zero-schema/src/schema-config.js.map +1 -0
  572. package/out/packages/zero-server/src/adapters/drizzle.js.map +1 -0
  573. package/out/packages/zero-server/src/adapters/kysely.js.map +1 -0
  574. package/out/packages/zero-server/src/adapters/pg.js +83 -0
  575. package/out/packages/zero-server/src/adapters/pg.js.map +1 -0
  576. package/out/packages/zero-server/src/adapters/postgresjs.js.map +1 -0
  577. package/out/packages/zero-server/src/adapters/prisma.js.map +1 -0
  578. package/out/packages/zero-server/src/custom.js +215 -0
  579. package/out/packages/zero-server/src/custom.js.map +1 -0
  580. package/out/packages/zero-server/src/logging.js.map +1 -0
  581. package/out/packages/zero-server/src/pg-query-executor.js.map +1 -0
  582. package/out/packages/zero-server/src/process-mutations.js.map +1 -0
  583. package/out/packages/zero-server/src/push-processor.js.map +1 -0
  584. package/out/packages/zero-server/src/queries/process-queries.js.map +1 -0
  585. package/out/packages/zero-server/src/schema.js.map +1 -0
  586. package/out/packages/zero-server/src/zql-database.js.map +1 -0
  587. package/out/packages/zero-solid/src/solid-view.js +145 -0
  588. package/out/packages/zero-solid/src/solid-view.js.map +1 -0
  589. package/out/packages/zero-solid/src/use-connection-state.js +21 -0
  590. package/out/packages/zero-solid/src/use-connection-state.js.map +1 -0
  591. package/out/packages/zero-solid/src/use-query.js +64 -0
  592. package/out/packages/zero-solid/src/use-query.js.map +1 -0
  593. package/out/packages/zero-solid/src/use-zero-online.js +21 -0
  594. package/out/packages/zero-solid/src/use-zero-online.js.map +1 -0
  595. package/out/packages/zero-solid/src/use-zero.js +93 -0
  596. package/out/packages/zero-solid/src/use-zero.js.map +1 -0
  597. package/out/packages/zero-types/src/format.js.map +1 -0
  598. package/out/packages/zero-types/src/name-mapper.js.map +1 -0
  599. package/out/packages/zql/src/builder/builder.js +381 -0
  600. package/out/packages/zql/src/builder/builder.js.map +1 -0
  601. package/out/packages/zql/src/builder/debug-delegate.js +81 -0
  602. package/out/packages/zql/src/builder/debug-delegate.js.map +1 -0
  603. package/out/packages/zql/src/builder/filter.js.map +1 -0
  604. package/out/packages/zql/src/builder/like.js.map +1 -0
  605. package/out/packages/zql/src/error.js.map +1 -0
  606. package/out/packages/zql/src/ivm/array-view.js.map +1 -0
  607. package/out/packages/zql/src/ivm/cap.js.map +1 -0
  608. package/out/packages/zql/src/ivm/change.js.map +1 -0
  609. package/out/packages/zql/src/ivm/constraint.js +82 -0
  610. package/out/packages/zql/src/ivm/constraint.js.map +1 -0
  611. package/out/packages/zql/src/ivm/data.js.map +1 -0
  612. package/out/packages/zql/src/ivm/exists.js.map +1 -0
  613. package/out/packages/zql/src/ivm/fan-in.js.map +1 -0
  614. package/out/packages/zql/src/ivm/fan-out.js.map +1 -0
  615. package/out/packages/zql/src/ivm/filter-operators.js.map +1 -0
  616. package/out/packages/zql/src/ivm/filter-push.js.map +1 -0
  617. package/out/packages/zql/src/ivm/filter.js.map +1 -0
  618. package/out/packages/zql/src/ivm/flipped-join.js +307 -0
  619. package/out/packages/zql/src/ivm/flipped-join.js.map +1 -0
  620. package/out/packages/zql/src/ivm/join-utils.js.map +1 -0
  621. package/out/packages/zql/src/ivm/join.js.map +1 -0
  622. package/out/packages/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -0
  623. package/out/packages/zql/src/ivm/memory-source.js.map +1 -0
  624. package/out/packages/zql/src/ivm/memory-storage.js.map +1 -0
  625. package/out/packages/zql/src/ivm/operator.js.map +1 -0
  626. package/out/packages/zql/src/ivm/push-accumulated.js.map +1 -0
  627. package/out/packages/zql/src/ivm/skip-yields.js.map +1 -0
  628. package/out/packages/zql/src/ivm/skip.js.map +1 -0
  629. package/out/packages/zql/src/ivm/source.js.map +1 -0
  630. package/out/packages/zql/src/ivm/stream.js.map +1 -0
  631. package/out/packages/zql/src/ivm/take.js.map +1 -0
  632. package/out/packages/zql/src/ivm/union-fan-in.js +165 -0
  633. package/out/packages/zql/src/ivm/union-fan-in.js.map +1 -0
  634. package/out/packages/zql/src/ivm/union-fan-out.js.map +1 -0
  635. package/out/packages/zql/src/ivm/view-apply-change.js.map +1 -0
  636. package/out/packages/zql/src/mutate/crud.js.map +1 -0
  637. package/out/packages/zql/src/mutate/custom.js.map +1 -0
  638. package/out/packages/zql/src/mutate/mutator-registry.js.map +1 -0
  639. package/out/packages/zql/src/mutate/mutator.js.map +1 -0
  640. package/out/packages/zql/src/planner/planner-builder.js.map +1 -0
  641. package/out/packages/zql/src/planner/planner-connection.js.map +1 -0
  642. package/out/packages/zql/src/planner/planner-constraint.js.map +1 -0
  643. package/out/packages/zql/src/planner/planner-debug.js.map +1 -0
  644. package/out/packages/zql/src/planner/planner-fan-in.js.map +1 -0
  645. package/out/packages/zql/src/planner/planner-fan-out.js.map +1 -0
  646. package/out/packages/zql/src/planner/planner-graph.js.map +1 -0
  647. package/out/packages/zql/src/planner/planner-join.js +262 -0
  648. package/out/packages/zql/src/planner/planner-join.js.map +1 -0
  649. package/out/packages/zql/src/planner/planner-node.js.map +1 -0
  650. package/out/packages/zql/src/planner/planner-source.js.map +1 -0
  651. package/out/packages/zql/src/planner/planner-terminus.js.map +1 -0
  652. package/out/packages/zql/src/query/complete-ordering.js.map +1 -0
  653. package/out/packages/zql/src/query/create-builder.js.map +1 -0
  654. package/out/packages/zql/src/query/error.js.map +1 -0
  655. package/out/packages/zql/src/query/escape-like.js.map +1 -0
  656. package/out/packages/zql/src/query/expression.js.map +1 -0
  657. package/out/packages/zql/src/query/measure-push-operator.js.map +1 -0
  658. package/out/packages/zql/src/query/metrics-delegate.js.map +1 -0
  659. package/out/packages/zql/src/query/named.js.map +1 -0
  660. package/out/packages/zql/src/query/query-delegate-base.js.map +1 -0
  661. package/out/packages/zql/src/query/query-impl.js +290 -0
  662. package/out/packages/zql/src/query/query-impl.js.map +1 -0
  663. package/out/packages/zql/src/query/query-internals.js.map +1 -0
  664. package/out/packages/zql/src/query/query-registry.js.map +1 -0
  665. package/out/packages/zql/src/query/runnable-query-impl.js.map +1 -0
  666. package/out/packages/zql/src/query/static-query.js.map +1 -0
  667. package/out/packages/zql/src/query/ttl.js.map +1 -0
  668. package/out/packages/zql/src/query/validate-input.js.map +1 -0
  669. package/out/packages/zqlite/src/database-storage.js.map +1 -0
  670. package/out/packages/zqlite/src/db.js.map +1 -0
  671. package/out/packages/zqlite/src/explain-queries.js.map +1 -0
  672. package/out/packages/zqlite/src/internal/sql-inline.js.map +1 -0
  673. package/out/packages/zqlite/src/internal/sql.js.map +1 -0
  674. package/out/packages/zqlite/src/internal/statement-cache.js.map +1 -0
  675. package/out/packages/zqlite/src/query-builder.js.map +1 -0
  676. package/out/packages/zqlite/src/query-delegate.js.map +1 -0
  677. package/out/packages/zqlite/src/resolve-scalar-subqueries.js.map +1 -0
  678. package/out/packages/zqlite/src/sqlite-cost-model.js.map +1 -0
  679. package/out/packages/zqlite/src/sqlite-stat-fanout.js.map +1 -0
  680. package/out/packages/zqlite/src/table-source.js +313 -0
  681. package/out/packages/zqlite/src/table-source.js.map +1 -0
  682. package/out/replicache/src/dag/store-impl.d.ts.map +1 -1
  683. package/out/replicache/src/kv/expo-sqlite/store.d.ts +1 -1
  684. package/out/replicache/src/kv/expo-sqlite/store.d.ts.map +1 -1
  685. package/out/replicache/src/kv/op-sqlite/store.d.ts.map +1 -1
  686. package/out/replicache/src/kv/sqlite-store.d.ts +6 -6
  687. package/out/replicache/src/kv/sqlite-store.d.ts.map +1 -1
  688. package/out/replicache/src/kv/throw-if-closed.d.ts +1 -0
  689. package/out/replicache/src/kv/throw-if-closed.d.ts.map +1 -1
  690. package/out/replicache/src/persist/persist.d.ts.map +1 -1
  691. package/out/replicache/src/sync/pull.d.ts.map +1 -1
  692. package/out/shared/src/map.d.ts +6 -0
  693. package/out/shared/src/map.d.ts.map +1 -0
  694. package/out/shared/src/queue.d.ts.map +1 -1
  695. package/out/shared/src/ring-buffer.d.ts +32 -0
  696. package/out/shared/src/ring-buffer.d.ts.map +1 -0
  697. package/out/zero/src/adapters/drizzle.js +1 -1
  698. package/out/zero/src/adapters/kysely.js +1 -1
  699. package/out/zero/src/adapters/pg.js +1 -1
  700. package/out/zero/src/adapters/postgresjs.js +1 -1
  701. package/out/zero/src/adapters/prisma.js +1 -1
  702. package/out/zero/src/analyze-query.js +1 -1
  703. package/out/zero/src/analyze.js +1 -1
  704. package/out/zero/src/ast-to-zql.js +1 -1
  705. package/out/zero/src/bindings.js +11 -11
  706. package/out/zero/src/build-schema.js.map +1 -1
  707. package/out/zero/src/change-protocol/v0.js +2 -2
  708. package/out/zero/src/cli.js +1 -1
  709. package/out/zero/src/deploy-permissions.js +1 -1
  710. package/out/zero/src/expo-sqlite.js +2 -2
  711. package/out/zero/src/op-sqlite.js +2 -2
  712. package/out/zero/src/pg.js +9 -9
  713. package/out/zero/src/react-native.js +2 -2
  714. package/out/zero/src/react.js +5 -5
  715. package/out/zero/src/server.js +8 -8
  716. package/out/zero/src/solid.js +5 -5
  717. package/out/zero/src/sqlite.js +2 -2
  718. package/out/zero/src/transform-query.js +1 -1
  719. package/out/zero/src/zero-cache-dev.js +6 -6
  720. package/out/zero/src/zero-cache-dev.js.map +1 -1
  721. package/out/zero/src/zero-out.js +5 -5
  722. package/out/zero/src/zero-out.js.map +1 -1
  723. package/out/zero/src/zero.js +22 -22
  724. package/out/zero/src/zqlite.js +5 -5
  725. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  726. package/out/zero-cache/src/server/change-streamer.js +38 -32
  727. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  728. package/out/zero-cache/src/server/main.d.ts.map +1 -1
  729. package/out/zero-cache/src/server/main.js +15 -13
  730. package/out/zero-cache/src/server/main.js.map +1 -1
  731. package/out/zero-cache/src/server/mutator.js +12 -10
  732. package/out/zero-cache/src/server/mutator.js.map +1 -1
  733. package/out/zero-cache/src/server/reaper.d.ts.map +1 -1
  734. package/out/zero-cache/src/server/reaper.js +18 -16
  735. package/out/zero-cache/src/server/reaper.js.map +1 -1
  736. package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
  737. package/out/zero-cache/src/server/replicator.js +20 -18
  738. package/out/zero-cache/src/server/replicator.js.map +1 -1
  739. package/out/zero-cache/src/server/runner/main.d.ts.map +1 -1
  740. package/out/zero-cache/src/server/shadow-syncer.js +16 -13
  741. package/out/zero-cache/src/server/shadow-syncer.js.map +1 -1
  742. package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
  743. package/out/zero-cache/src/server/syncer.js +36 -34
  744. package/out/zero-cache/src/server/syncer.js.map +1 -1
  745. package/out/zero-cache/src/server/write-worker.js +1 -1
  746. package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
  747. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
  748. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +8 -2
  749. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
  750. package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts +1 -1
  751. package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts.map +1 -1
  752. package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts.map +1 -1
  753. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
  754. package/out/zero-cache/src/services/life-cycle.d.ts +1 -1
  755. package/out/zero-cache/src/services/life-cycle.d.ts.map +1 -1
  756. package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
  757. package/out/zero-cache/src/services/running-state.d.ts.map +1 -1
  758. package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts.map +1 -1
  759. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  760. package/out/zero-cache/src/types/configuration-error.d.ts +4 -0
  761. package/out/zero-cache/src/types/configuration-error.d.ts.map +1 -0
  762. package/out/zero-cache/src/types/pg.d.ts +2 -0
  763. package/out/zero-cache/src/types/pg.d.ts.map +1 -1
  764. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  765. package/out/zql/src/builder/builder.d.ts.map +1 -1
  766. package/out/zql/src/builder/debug-delegate.d.ts +5 -0
  767. package/out/zql/src/builder/debug-delegate.d.ts.map +1 -1
  768. package/out/zql/src/ivm/flipped-join.d.ts +4 -8
  769. package/out/zql/src/ivm/flipped-join.d.ts.map +1 -1
  770. package/out/zql/src/ivm/operator.d.ts +1 -1
  771. package/out/zql/src/ivm/schema.d.ts +0 -8
  772. package/out/zql/src/ivm/schema.d.ts.map +1 -1
  773. package/out/zql/src/ivm/union-fan-in.d.ts.map +1 -1
  774. package/out/zql/src/mutate/mutator.d.ts +12 -3
  775. package/out/zql/src/mutate/mutator.d.ts.map +1 -1
  776. package/out/zql/src/planner/planner-join.d.ts.map +1 -1
  777. package/out/zql/src/query/query-registry.d.ts +10 -3
  778. package/out/zql/src/query/query-registry.d.ts.map +1 -1
  779. package/out/zqlite/src/table-source.d.ts.map +1 -1
  780. package/package.json +23 -23
  781. package/out/_virtual/_@oxc-project_runtime@0.122.0/helpers/usingCtx.js +0 -57
  782. package/out/analyze-query/src/analyze-cli.js +0 -288
  783. package/out/analyze-query/src/analyze-cli.js.map +0 -1
  784. package/out/analyze-query/src/bin-analyze.js +0 -277
  785. package/out/analyze-query/src/bin-analyze.js.map +0 -1
  786. package/out/analyze-query/src/bin-transform.js.map +0 -1
  787. package/out/ast-to-zql/src/ast-to-zql.js.map +0 -1
  788. package/out/ast-to-zql/src/bin.js.map +0 -1
  789. package/out/ast-to-zql/src/format.js.map +0 -1
  790. package/out/datadog/src/datadog-log-sink.js.map +0 -1
  791. package/out/otel/src/enabled.js.map +0 -1
  792. package/out/otel/src/log-options.js.map +0 -1
  793. package/out/otel/src/maybe-time.js.map +0 -1
  794. package/out/otel/src/span.js.map +0 -1
  795. package/out/otel/src/version.js.map +0 -1
  796. package/out/replicache/src/async-iterable-to-array.js.map +0 -1
  797. package/out/replicache/src/bg-interval.js.map +0 -1
  798. package/out/replicache/src/btree/diff.js.map +0 -1
  799. package/out/replicache/src/btree/node.js.map +0 -1
  800. package/out/replicache/src/btree/read.js.map +0 -1
  801. package/out/replicache/src/btree/splice.js.map +0 -1
  802. package/out/replicache/src/btree/write.js +0 -188
  803. package/out/replicache/src/btree/write.js.map +0 -1
  804. package/out/replicache/src/call-default-fetch.js.map +0 -1
  805. package/out/replicache/src/connection-loop-delegates.js.map +0 -1
  806. package/out/replicache/src/connection-loop.js.map +0 -1
  807. package/out/replicache/src/cookies.js.map +0 -1
  808. package/out/replicache/src/dag/chunk.js.map +0 -1
  809. package/out/replicache/src/dag/gc.js.map +0 -1
  810. package/out/replicache/src/dag/key.js.map +0 -1
  811. package/out/replicache/src/dag/lazy-store.js.map +0 -1
  812. package/out/replicache/src/dag/store-impl.js +0 -152
  813. package/out/replicache/src/dag/store-impl.js.map +0 -1
  814. package/out/replicache/src/dag/store.js.map +0 -1
  815. package/out/replicache/src/dag/visitor.js.map +0 -1
  816. package/out/replicache/src/db/commit.js.map +0 -1
  817. package/out/replicache/src/db/index.js.map +0 -1
  818. package/out/replicache/src/db/read.js.map +0 -1
  819. package/out/replicache/src/db/rebase.js.map +0 -1
  820. package/out/replicache/src/db/write.js.map +0 -1
  821. package/out/replicache/src/deleted-clients.js.map +0 -1
  822. package/out/replicache/src/error-responses.js.map +0 -1
  823. package/out/replicache/src/frozen-json.js.map +0 -1
  824. package/out/replicache/src/get-default-puller.js.map +0 -1
  825. package/out/replicache/src/get-default-pusher.js.map +0 -1
  826. package/out/replicache/src/get-kv-store-provider.js.map +0 -1
  827. package/out/replicache/src/hash.js.map +0 -1
  828. package/out/replicache/src/http-request-info.js.map +0 -1
  829. package/out/replicache/src/index-defs.js.map +0 -1
  830. package/out/replicache/src/kv/expo-sqlite/store.js +0 -58
  831. package/out/replicache/src/kv/expo-sqlite/store.js.map +0 -1
  832. package/out/replicache/src/kv/idb-store-with-mem-fallback.js.map +0 -1
  833. package/out/replicache/src/kv/idb-store.js.map +0 -1
  834. package/out/replicache/src/kv/mem-store.js.map +0 -1
  835. package/out/replicache/src/kv/op-sqlite/store.js +0 -63
  836. package/out/replicache/src/kv/op-sqlite/store.js.map +0 -1
  837. package/out/replicache/src/kv/op-sqlite/types.js.map +0 -1
  838. package/out/replicache/src/kv/read-impl.js.map +0 -1
  839. package/out/replicache/src/kv/sqlite-store.js +0 -216
  840. package/out/replicache/src/kv/sqlite-store.js.map +0 -1
  841. package/out/replicache/src/kv/throw-if-closed.js +0 -26
  842. package/out/replicache/src/kv/throw-if-closed.js.map +0 -1
  843. package/out/replicache/src/kv/write-impl-base.js.map +0 -1
  844. package/out/replicache/src/kv/write-impl.js.map +0 -1
  845. package/out/replicache/src/lazy.js.map +0 -1
  846. package/out/replicache/src/log-options.js.map +0 -1
  847. package/out/replicache/src/make-idb-name.js.map +0 -1
  848. package/out/replicache/src/new-client-channel.js.map +0 -1
  849. package/out/replicache/src/on-persist-channel.js.map +0 -1
  850. package/out/replicache/src/patch-operation.js.map +0 -1
  851. package/out/replicache/src/pending-mutations.js.map +0 -1
  852. package/out/replicache/src/persist/client-gc.js.map +0 -1
  853. package/out/replicache/src/persist/client-group-gc.js.map +0 -1
  854. package/out/replicache/src/persist/client-groups.js +0 -110
  855. package/out/replicache/src/persist/client-groups.js.map +0 -1
  856. package/out/replicache/src/persist/clients.js +0 -261
  857. package/out/replicache/src/persist/clients.js.map +0 -1
  858. package/out/replicache/src/persist/collect-idb-databases.js.map +0 -1
  859. package/out/replicache/src/persist/gather-mem-only-visitor.js.map +0 -1
  860. package/out/replicache/src/persist/gather-not-cached-visitor.js.map +0 -1
  861. package/out/replicache/src/persist/heartbeat.js.map +0 -1
  862. package/out/replicache/src/persist/idb-databases-store-db-name.js.map +0 -1
  863. package/out/replicache/src/persist/idb-databases-store.js.map +0 -1
  864. package/out/replicache/src/persist/make-client-id.js.map +0 -1
  865. package/out/replicache/src/persist/persist.js +0 -122
  866. package/out/replicache/src/persist/persist.js.map +0 -1
  867. package/out/replicache/src/persist/refresh.js.map +0 -1
  868. package/out/replicache/src/process-scheduler.js.map +0 -1
  869. package/out/replicache/src/pusher.js.map +0 -1
  870. package/out/replicache/src/replicache-impl.js.map +0 -1
  871. package/out/replicache/src/report-error.js.map +0 -1
  872. package/out/replicache/src/request-idle.js.map +0 -1
  873. package/out/replicache/src/scan-iterator.js.map +0 -1
  874. package/out/replicache/src/scan-options.js.map +0 -1
  875. package/out/replicache/src/set-interval-with-signal.js.map +0 -1
  876. package/out/replicache/src/subscriptions.js.map +0 -1
  877. package/out/replicache/src/sync/diff.js.map +0 -1
  878. package/out/replicache/src/sync/ids.js.map +0 -1
  879. package/out/replicache/src/sync/patch.js.map +0 -1
  880. package/out/replicache/src/sync/pull-error.js.map +0 -1
  881. package/out/replicache/src/sync/pull.js +0 -166
  882. package/out/replicache/src/sync/pull.js.map +0 -1
  883. package/out/replicache/src/sync/push.js.map +0 -1
  884. package/out/replicache/src/sync/request-id.js.map +0 -1
  885. package/out/replicache/src/sync/sync-head-name.js.map +0 -1
  886. package/out/replicache/src/to-error.js.map +0 -1
  887. package/out/replicache/src/transaction-closed-error.js.map +0 -1
  888. package/out/replicache/src/transactions.js.map +0 -1
  889. package/out/replicache/src/version.js.map +0 -1
  890. package/out/replicache/src/with-transactions.js.map +0 -1
  891. package/out/shared/src/abort-error.js.map +0 -1
  892. package/out/shared/src/arrays.js.map +0 -1
  893. package/out/shared/src/asserts.js.map +0 -1
  894. package/out/shared/src/bigint-json.js.map +0 -1
  895. package/out/shared/src/binary-search.js.map +0 -1
  896. package/out/shared/src/broadcast-channel.js.map +0 -1
  897. package/out/shared/src/browser-env.js.map +0 -1
  898. package/out/shared/src/btree-set.js.map +0 -1
  899. package/out/shared/src/cache.js.map +0 -1
  900. package/out/shared/src/centroid.js.map +0 -1
  901. package/out/shared/src/config.js.map +0 -1
  902. package/out/shared/src/custom-key-map.js.map +0 -1
  903. package/out/shared/src/custom-key-set.js.map +0 -1
  904. package/out/shared/src/deep-clone.js.map +0 -1
  905. package/out/shared/src/deep-merge.js.map +0 -1
  906. package/out/shared/src/document-visible.js.map +0 -1
  907. package/out/shared/src/dotenv.js.map +0 -1
  908. package/out/shared/src/error.js.map +0 -1
  909. package/out/shared/src/has-own.js.map +0 -1
  910. package/out/shared/src/hash.js.map +0 -1
  911. package/out/shared/src/iterables.js.map +0 -1
  912. package/out/shared/src/json-schema.js.map +0 -1
  913. package/out/shared/src/json.js.map +0 -1
  914. package/out/shared/src/logging-test-utils.js.map +0 -1
  915. package/out/shared/src/logging.js.map +0 -1
  916. package/out/shared/src/must.js.map +0 -1
  917. package/out/shared/src/navigator.js.map +0 -1
  918. package/out/shared/src/object-traversal.js.map +0 -1
  919. package/out/shared/src/objects.js.map +0 -1
  920. package/out/shared/src/options.js.map +0 -1
  921. package/out/shared/src/parse-big-int.js.map +0 -1
  922. package/out/shared/src/promise-race.js.map +0 -1
  923. package/out/shared/src/queue.js +0 -126
  924. package/out/shared/src/queue.js.map +0 -1
  925. package/out/shared/src/rand.js.map +0 -1
  926. package/out/shared/src/random-uint64.js.map +0 -1
  927. package/out/shared/src/random-values.js.map +0 -1
  928. package/out/shared/src/record-proxy.js.map +0 -1
  929. package/out/shared/src/resolved-promises.js.map +0 -1
  930. package/out/shared/src/sentinels.js.map +0 -1
  931. package/out/shared/src/set-utils.js.map +0 -1
  932. package/out/shared/src/size-of-value.js.map +0 -1
  933. package/out/shared/src/sleep.js.map +0 -1
  934. package/out/shared/src/sorted-entries.js.map +0 -1
  935. package/out/shared/src/string-compare.js.map +0 -1
  936. package/out/shared/src/subscribable.js.map +0 -1
  937. package/out/shared/src/tdigest-schema.js.map +0 -1
  938. package/out/shared/src/tdigest.js.map +0 -1
  939. package/out/shared/src/valita.js +0 -172
  940. package/out/shared/src/valita.js.map +0 -1
  941. package/out/z2s/src/compiler.js.map +0 -1
  942. package/out/z2s/src/sql.js.map +0 -1
  943. package/out/zero/package.js +0 -205
  944. package/out/zero/package.js.map +0 -1
  945. package/out/zero-cache/src/auth/auth.js.map +0 -1
  946. package/out/zero-cache/src/auth/jwt.js.map +0 -1
  947. package/out/zero-cache/src/auth/load-permissions.js.map +0 -1
  948. package/out/zero-cache/src/auth/read-authorizer.js.map +0 -1
  949. package/out/zero-cache/src/auth/write-authorizer.js.map +0 -1
  950. package/out/zero-cache/src/config/network.js.map +0 -1
  951. package/out/zero-cache/src/config/normalize.js.map +0 -1
  952. package/out/zero-cache/src/config/server-context.js.map +0 -1
  953. package/out/zero-cache/src/config/zero-config.js +0 -916
  954. package/out/zero-cache/src/config/zero-config.js.map +0 -1
  955. package/out/zero-cache/src/custom/fetch.js.map +0 -1
  956. package/out/zero-cache/src/custom-queries/transform-query.js.map +0 -1
  957. package/out/zero-cache/src/db/create.js.map +0 -1
  958. package/out/zero-cache/src/db/delete-lite-db.js.map +0 -1
  959. package/out/zero-cache/src/db/lite-tables.js.map +0 -1
  960. package/out/zero-cache/src/db/migration-lite.js +0 -147
  961. package/out/zero-cache/src/db/migration-lite.js.map +0 -1
  962. package/out/zero-cache/src/db/migration.js +0 -120
  963. package/out/zero-cache/src/db/migration.js.map +0 -1
  964. package/out/zero-cache/src/db/mode-enum.js.map +0 -1
  965. package/out/zero-cache/src/db/pg-copy-binary.js.map +0 -1
  966. package/out/zero-cache/src/db/pg-copy.js.map +0 -1
  967. package/out/zero-cache/src/db/pg-to-lite.js.map +0 -1
  968. package/out/zero-cache/src/db/pg-type-parser.js.map +0 -1
  969. package/out/zero-cache/src/db/run-transaction.js.map +0 -1
  970. package/out/zero-cache/src/db/specs.js.map +0 -1
  971. package/out/zero-cache/src/db/statements.js.map +0 -1
  972. package/out/zero-cache/src/db/transaction-pool.js.map +0 -1
  973. package/out/zero-cache/src/db/warmup.js.map +0 -1
  974. package/out/zero-cache/src/observability/events.js.map +0 -1
  975. package/out/zero-cache/src/observability/metrics.js.map +0 -1
  976. package/out/zero-cache/src/scripts/decommission.js.map +0 -1
  977. package/out/zero-cache/src/scripts/deploy-permissions.js.map +0 -1
  978. package/out/zero-cache/src/scripts/permissions.js.map +0 -1
  979. package/out/zero-cache/src/server/anonymous-otel-start.js +0 -305
  980. package/out/zero-cache/src/server/anonymous-otel-start.js.map +0 -1
  981. package/out/zero-cache/src/server/inspector-delegate.js.map +0 -1
  982. package/out/zero-cache/src/server/logging.js.map +0 -1
  983. package/out/zero-cache/src/server/otel-diag-logger.js.map +0 -1
  984. package/out/zero-cache/src/server/otel-log-sink.js.map +0 -1
  985. package/out/zero-cache/src/server/otel-start.js +0 -53
  986. package/out/zero-cache/src/server/otel-start.js.map +0 -1
  987. package/out/zero-cache/src/server/priority-op.js.map +0 -1
  988. package/out/zero-cache/src/server/runner/main.js +0 -10
  989. package/out/zero-cache/src/server/runner/main.js.map +0 -1
  990. package/out/zero-cache/src/server/runner/run-worker.js.map +0 -1
  991. package/out/zero-cache/src/server/runner/runtime.js.map +0 -1
  992. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +0 -1
  993. package/out/zero-cache/src/server/worker-dispatcher.js.map +0 -1
  994. package/out/zero-cache/src/server/worker-urls.js.map +0 -1
  995. package/out/zero-cache/src/services/analyze.js +0 -69
  996. package/out/zero-cache/src/services/analyze.js.map +0 -1
  997. package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +0 -1
  998. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +0 -1
  999. package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +0 -1
  1000. package/out/zero-cache/src/services/change-source/custom/change-source.js +0 -176
  1001. package/out/zero-cache/src/services/change-source/custom/change-source.js.map +0 -1
  1002. package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js.map +0 -1
  1003. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +0 -197
  1004. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +0 -1
  1005. package/out/zero-cache/src/services/change-source/pg/change-source.js +0 -920
  1006. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +0 -1
  1007. package/out/zero-cache/src/services/change-source/pg/decommission.js.map +0 -1
  1008. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +0 -545
  1009. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +0 -1
  1010. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +0 -1
  1011. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +0 -1
  1012. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +0 -1
  1013. package/out/zero-cache/src/services/change-source/pg/lsn.js.map +0 -1
  1014. package/out/zero-cache/src/services/change-source/pg/replication-slots.js +0 -162
  1015. package/out/zero-cache/src/services/change-source/pg/replication-slots.js.map +0 -1
  1016. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +0 -334
  1017. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +0 -1
  1018. package/out/zero-cache/src/services/change-source/pg/schema/init.js +0 -155
  1019. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +0 -1
  1020. package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +0 -1
  1021. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +0 -330
  1022. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +0 -1
  1023. package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +0 -1
  1024. package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +0 -1
  1025. package/out/zero-cache/src/services/change-source/protocol/current/data.js +0 -192
  1026. package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +0 -1
  1027. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +0 -1
  1028. package/out/zero-cache/src/services/change-source/protocol/current/json.js.map +0 -1
  1029. package/out/zero-cache/src/services/change-source/protocol/current/path.js.map +0 -1
  1030. package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +0 -1
  1031. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +0 -1
  1032. package/out/zero-cache/src/services/change-source/protocol/current.js +0 -56
  1033. package/out/zero-cache/src/services/change-source/protocol/current.js.map +0 -1
  1034. package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +0 -1
  1035. package/out/zero-cache/src/services/change-streamer/broadcast.js.map +0 -1
  1036. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +0 -158
  1037. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +0 -1
  1038. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +0 -1
  1039. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +0 -1
  1040. package/out/zero-cache/src/services/change-streamer/forwarder.js.map +0 -1
  1041. package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +0 -1
  1042. package/out/zero-cache/src/services/change-streamer/schema/init.js +0 -74
  1043. package/out/zero-cache/src/services/change-streamer/schema/init.js.map +0 -1
  1044. package/out/zero-cache/src/services/change-streamer/schema/tables.js +0 -191
  1045. package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +0 -1
  1046. package/out/zero-cache/src/services/change-streamer/snapshot.js +0 -27
  1047. package/out/zero-cache/src/services/change-streamer/snapshot.js.map +0 -1
  1048. package/out/zero-cache/src/services/change-streamer/storer.js.map +0 -1
  1049. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +0 -1
  1050. package/out/zero-cache/src/services/heapz.js.map +0 -1
  1051. package/out/zero-cache/src/services/http-service.js.map +0 -1
  1052. package/out/zero-cache/src/services/life-cycle.js +0 -195
  1053. package/out/zero-cache/src/services/life-cycle.js.map +0 -1
  1054. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +0 -1
  1055. package/out/zero-cache/src/services/litestream/commands.js.map +0 -1
  1056. package/out/zero-cache/src/services/mutagen/error.js.map +0 -1
  1057. package/out/zero-cache/src/services/mutagen/mutagen.js.map +0 -1
  1058. package/out/zero-cache/src/services/mutagen/pusher.js.map +0 -1
  1059. package/out/zero-cache/src/services/replicator/change-processor.js.map +0 -1
  1060. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +0 -1
  1061. package/out/zero-cache/src/services/replicator/notifier.js.map +0 -1
  1062. package/out/zero-cache/src/services/replicator/replication-status.js.map +0 -1
  1063. package/out/zero-cache/src/services/replicator/replicator.js.map +0 -1
  1064. package/out/zero-cache/src/services/replicator/reporter/recorder.js.map +0 -1
  1065. package/out/zero-cache/src/services/replicator/reporter/report-schema.js.map +0 -1
  1066. package/out/zero-cache/src/services/replicator/schema/change-log.js.map +0 -1
  1067. package/out/zero-cache/src/services/replicator/schema/column-metadata.js.map +0 -1
  1068. package/out/zero-cache/src/services/replicator/schema/constants.js.map +0 -1
  1069. package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +0 -1
  1070. package/out/zero-cache/src/services/replicator/schema/table-metadata.js.map +0 -1
  1071. package/out/zero-cache/src/services/replicator/write-worker-client.js.map +0 -1
  1072. package/out/zero-cache/src/services/replicator/write-worker.js.map +0 -1
  1073. package/out/zero-cache/src/services/run-ast.js +0 -87
  1074. package/out/zero-cache/src/services/run-ast.js.map +0 -1
  1075. package/out/zero-cache/src/services/runner.js.map +0 -1
  1076. package/out/zero-cache/src/services/running-state.js +0 -136
  1077. package/out/zero-cache/src/services/running-state.js.map +0 -1
  1078. package/out/zero-cache/src/services/shadow-sync/shadow-sync-service.js +0 -50
  1079. package/out/zero-cache/src/services/shadow-sync/shadow-sync-service.js.map +0 -1
  1080. package/out/zero-cache/src/services/statz.js.map +0 -1
  1081. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +0 -1
  1082. package/out/zero-cache/src/services/view-syncer/client-handler.js +0 -270
  1083. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +0 -1
  1084. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +0 -1
  1085. package/out/zero-cache/src/services/view-syncer/connection-context-manager.js.map +0 -1
  1086. package/out/zero-cache/src/services/view-syncer/cvr-purger.js +0 -109
  1087. package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +0 -1
  1088. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +0 -1
  1089. package/out/zero-cache/src/services/view-syncer/cvr.js.map +0 -1
  1090. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +0 -1
  1091. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +0 -102
  1092. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +0 -1
  1093. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +0 -628
  1094. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +0 -1
  1095. package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +0 -1
  1096. package/out/zero-cache/src/services/view-syncer/row-set-signature.js.map +0 -1
  1097. package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +0 -1
  1098. package/out/zero-cache/src/services/view-syncer/schema/init.js +0 -158
  1099. package/out/zero-cache/src/services/view-syncer/schema/init.js.map +0 -1
  1100. package/out/zero-cache/src/services/view-syncer/schema/types.js +0 -176
  1101. package/out/zero-cache/src/services/view-syncer/schema/types.js.map +0 -1
  1102. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +0 -1
  1103. package/out/zero-cache/src/services/view-syncer/tracer.js.map +0 -1
  1104. package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +0 -1
  1105. package/out/zero-cache/src/services/view-syncer/view-syncer.js +0 -1235
  1106. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +0 -1
  1107. package/out/zero-cache/src/types/error-with-level.js.map +0 -1
  1108. package/out/zero-cache/src/types/http.js.map +0 -1
  1109. package/out/zero-cache/src/types/lexi-version.js.map +0 -1
  1110. package/out/zero-cache/src/types/lite.js.map +0 -1
  1111. package/out/zero-cache/src/types/names.js.map +0 -1
  1112. package/out/zero-cache/src/types/pg-data-type.js.map +0 -1
  1113. package/out/zero-cache/src/types/pg-types.js.map +0 -1
  1114. package/out/zero-cache/src/types/pg-versions.js.map +0 -1
  1115. package/out/zero-cache/src/types/pg.js +0 -189
  1116. package/out/zero-cache/src/types/pg.js.map +0 -1
  1117. package/out/zero-cache/src/types/processes.js.map +0 -1
  1118. package/out/zero-cache/src/types/profiler.js.map +0 -1
  1119. package/out/zero-cache/src/types/row-key.js.map +0 -1
  1120. package/out/zero-cache/src/types/shards.js.map +0 -1
  1121. package/out/zero-cache/src/types/sql.js.map +0 -1
  1122. package/out/zero-cache/src/types/state-version.js.map +0 -1
  1123. package/out/zero-cache/src/types/streams.js.map +0 -1
  1124. package/out/zero-cache/src/types/strings.js.map +0 -1
  1125. package/out/zero-cache/src/types/subscription.js.map +0 -1
  1126. package/out/zero-cache/src/types/timeout.js.map +0 -1
  1127. package/out/zero-cache/src/types/url-params.js.map +0 -1
  1128. package/out/zero-cache/src/types/websocket-handoff.js.map +0 -1
  1129. package/out/zero-cache/src/types/ws.js.map +0 -1
  1130. package/out/zero-cache/src/workers/connect-params.js.map +0 -1
  1131. package/out/zero-cache/src/workers/connection.js +0 -229
  1132. package/out/zero-cache/src/workers/connection.js.map +0 -1
  1133. package/out/zero-cache/src/workers/mutator.js.map +0 -1
  1134. package/out/zero-cache/src/workers/replicator.js.map +0 -1
  1135. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +0 -1
  1136. package/out/zero-cache/src/workers/syncer.js.map +0 -1
  1137. package/out/zero-client/src/client/active-clients-manager.js.map +0 -1
  1138. package/out/zero-client/src/client/client-error-kind-enum.js.map +0 -1
  1139. package/out/zero-client/src/client/connection-manager.js +0 -295
  1140. package/out/zero-client/src/client/connection-manager.js.map +0 -1
  1141. package/out/zero-client/src/client/connection-status-enum.js +0 -20
  1142. package/out/zero-client/src/client/connection-status-enum.js.map +0 -1
  1143. package/out/zero-client/src/client/connection.js.map +0 -1
  1144. package/out/zero-client/src/client/context.js.map +0 -1
  1145. package/out/zero-client/src/client/crud-impl.js +0 -61
  1146. package/out/zero-client/src/client/crud-impl.js.map +0 -1
  1147. package/out/zero-client/src/client/crud.js.map +0 -1
  1148. package/out/zero-client/src/client/custom.js +0 -63
  1149. package/out/zero-client/src/client/custom.js.map +0 -1
  1150. package/out/zero-client/src/client/delete-clients-manager.js.map +0 -1
  1151. package/out/zero-client/src/client/enable-analytics.js.map +0 -1
  1152. package/out/zero-client/src/client/error.js.map +0 -1
  1153. package/out/zero-client/src/client/http-string.js.map +0 -1
  1154. package/out/zero-client/src/client/inspector/client-group.js.map +0 -1
  1155. package/out/zero-client/src/client/inspector/client.js.map +0 -1
  1156. package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +0 -1
  1157. package/out/zero-client/src/client/inspector/inspector.js.map +0 -1
  1158. package/out/zero-client/src/client/inspector/lazy-inspector.js.map +0 -1
  1159. package/out/zero-client/src/client/inspector/query.js.map +0 -1
  1160. package/out/zero-client/src/client/ivm-branch.js.map +0 -1
  1161. package/out/zero-client/src/client/keys.js.map +0 -1
  1162. package/out/zero-client/src/client/log-options.js.map +0 -1
  1163. package/out/zero-client/src/client/make-mutate-property.js.map +0 -1
  1164. package/out/zero-client/src/client/make-replicache-mutators.js.map +0 -1
  1165. package/out/zero-client/src/client/metric-name-enum.js.map +0 -1
  1166. package/out/zero-client/src/client/metrics.js.map +0 -1
  1167. package/out/zero-client/src/client/mutation-tracker.js.map +0 -1
  1168. package/out/zero-client/src/client/mutator-proxy.js.map +0 -1
  1169. package/out/zero-client/src/client/options.js.map +0 -1
  1170. package/out/zero-client/src/client/query-manager.js.map +0 -1
  1171. package/out/zero-client/src/client/reload-error-handler.js.map +0 -1
  1172. package/out/zero-client/src/client/server-option.js.map +0 -1
  1173. package/out/zero-client/src/client/update-needed-reason-type-enum.js +0 -27
  1174. package/out/zero-client/src/client/update-needed-reason-type-enum.js.map +0 -1
  1175. package/out/zero-client/src/client/version.js +0 -9
  1176. package/out/zero-client/src/client/version.js.map +0 -1
  1177. package/out/zero-client/src/client/zero-poke-handler.js.map +0 -1
  1178. package/out/zero-client/src/client/zero-rep.js.map +0 -1
  1179. package/out/zero-client/src/client/zero.js +0 -1443
  1180. package/out/zero-client/src/client/zero.js.map +0 -1
  1181. package/out/zero-client/src/util/nanoid.js.map +0 -1
  1182. package/out/zero-client/src/util/socket.d.ts +0 -3
  1183. package/out/zero-client/src/util/socket.d.ts.map +0 -1
  1184. package/out/zero-client/src/util/socket.js +0 -8
  1185. package/out/zero-client/src/util/socket.js.map +0 -1
  1186. package/out/zero-protocol/src/analyze-query-result.js +0 -120
  1187. package/out/zero-protocol/src/analyze-query-result.js.map +0 -1
  1188. package/out/zero-protocol/src/application-error.js.map +0 -1
  1189. package/out/zero-protocol/src/ast.js.map +0 -1
  1190. package/out/zero-protocol/src/change-desired-queries.js +0 -12
  1191. package/out/zero-protocol/src/change-desired-queries.js.map +0 -1
  1192. package/out/zero-protocol/src/client-schema.js.map +0 -1
  1193. package/out/zero-protocol/src/close-connection.js.map +0 -1
  1194. package/out/zero-protocol/src/connect.js +0 -47
  1195. package/out/zero-protocol/src/connect.js.map +0 -1
  1196. package/out/zero-protocol/src/custom-queries.js.map +0 -1
  1197. package/out/zero-protocol/src/data.js.map +0 -1
  1198. package/out/zero-protocol/src/delete-clients.js.map +0 -1
  1199. package/out/zero-protocol/src/down.js.map +0 -1
  1200. package/out/zero-protocol/src/error-kind-enum.js.map +0 -1
  1201. package/out/zero-protocol/src/error-origin-enum.js.map +0 -1
  1202. package/out/zero-protocol/src/error-reason-enum.js.map +0 -1
  1203. package/out/zero-protocol/src/error.js +0 -84
  1204. package/out/zero-protocol/src/error.js.map +0 -1
  1205. package/out/zero-protocol/src/inspect-down.js.map +0 -1
  1206. package/out/zero-protocol/src/inspect-up.js +0 -34
  1207. package/out/zero-protocol/src/inspect-up.js.map +0 -1
  1208. package/out/zero-protocol/src/mutate-server.js.map +0 -1
  1209. package/out/zero-protocol/src/mutation-id.js.map +0 -1
  1210. package/out/zero-protocol/src/mutation-type-enum.js.map +0 -1
  1211. package/out/zero-protocol/src/mutation.js.map +0 -1
  1212. package/out/zero-protocol/src/mutations-patch.js.map +0 -1
  1213. package/out/zero-protocol/src/ping.js.map +0 -1
  1214. package/out/zero-protocol/src/poke.js +0 -59
  1215. package/out/zero-protocol/src/poke.js.map +0 -1
  1216. package/out/zero-protocol/src/pong.js.map +0 -1
  1217. package/out/zero-protocol/src/primary-key.js.map +0 -1
  1218. package/out/zero-protocol/src/protocol-version.js.map +0 -1
  1219. package/out/zero-protocol/src/pull.js.map +0 -1
  1220. package/out/zero-protocol/src/push.js +0 -60
  1221. package/out/zero-protocol/src/push.js.map +0 -1
  1222. package/out/zero-protocol/src/queries-patch.js.map +0 -1
  1223. package/out/zero-protocol/src/query-hash.js.map +0 -1
  1224. package/out/zero-protocol/src/query-server.js.map +0 -1
  1225. package/out/zero-protocol/src/row-patch.js.map +0 -1
  1226. package/out/zero-protocol/src/up.js.map +0 -1
  1227. package/out/zero-protocol/src/update-auth.js.map +0 -1
  1228. package/out/zero-protocol/src/version.js.map +0 -1
  1229. package/out/zero-react/src/use-connection-state.js +0 -17
  1230. package/out/zero-react/src/use-connection-state.js.map +0 -1
  1231. package/out/zero-react/src/use-query.js +0 -299
  1232. package/out/zero-react/src/use-query.js.map +0 -1
  1233. package/out/zero-react/src/use-zero-online.js +0 -20
  1234. package/out/zero-react/src/use-zero-online.js.map +0 -1
  1235. package/out/zero-react/src/zero-provider.js +0 -87
  1236. package/out/zero-react/src/zero-provider.js.map +0 -1
  1237. package/out/zero-schema/src/builder/relationship-builder.js.map +0 -1
  1238. package/out/zero-schema/src/builder/schema-builder.js.map +0 -1
  1239. package/out/zero-schema/src/builder/table-builder.js.map +0 -1
  1240. package/out/zero-schema/src/compiled-permissions.js.map +0 -1
  1241. package/out/zero-schema/src/name-mapper.js.map +0 -1
  1242. package/out/zero-schema/src/permissions.js.map +0 -1
  1243. package/out/zero-schema/src/schema-config.js.map +0 -1
  1244. package/out/zero-server/src/adapters/drizzle.js.map +0 -1
  1245. package/out/zero-server/src/adapters/kysely.js.map +0 -1
  1246. package/out/zero-server/src/adapters/pg.js +0 -83
  1247. package/out/zero-server/src/adapters/pg.js.map +0 -1
  1248. package/out/zero-server/src/adapters/postgresjs.js.map +0 -1
  1249. package/out/zero-server/src/adapters/prisma.js.map +0 -1
  1250. package/out/zero-server/src/custom.js +0 -214
  1251. package/out/zero-server/src/custom.js.map +0 -1
  1252. package/out/zero-server/src/logging.js.map +0 -1
  1253. package/out/zero-server/src/pg-query-executor.js.map +0 -1
  1254. package/out/zero-server/src/process-mutations.js.map +0 -1
  1255. package/out/zero-server/src/push-processor.js.map +0 -1
  1256. package/out/zero-server/src/queries/process-queries.js.map +0 -1
  1257. package/out/zero-server/src/schema.js.map +0 -1
  1258. package/out/zero-server/src/zql-database.js.map +0 -1
  1259. package/out/zero-solid/src/solid-view.js +0 -145
  1260. package/out/zero-solid/src/solid-view.js.map +0 -1
  1261. package/out/zero-solid/src/use-connection-state.js +0 -21
  1262. package/out/zero-solid/src/use-connection-state.js.map +0 -1
  1263. package/out/zero-solid/src/use-query.js +0 -64
  1264. package/out/zero-solid/src/use-query.js.map +0 -1
  1265. package/out/zero-solid/src/use-zero-online.js +0 -21
  1266. package/out/zero-solid/src/use-zero-online.js.map +0 -1
  1267. package/out/zero-solid/src/use-zero.js +0 -93
  1268. package/out/zero-solid/src/use-zero.js.map +0 -1
  1269. package/out/zero-types/src/format.js.map +0 -1
  1270. package/out/zero-types/src/name-mapper.js.map +0 -1
  1271. package/out/zql/src/builder/builder.js +0 -380
  1272. package/out/zql/src/builder/builder.js.map +0 -1
  1273. package/out/zql/src/builder/debug-delegate.js +0 -72
  1274. package/out/zql/src/builder/debug-delegate.js.map +0 -1
  1275. package/out/zql/src/builder/filter.js.map +0 -1
  1276. package/out/zql/src/builder/like.js.map +0 -1
  1277. package/out/zql/src/error.js.map +0 -1
  1278. package/out/zql/src/ivm/array-view.js.map +0 -1
  1279. package/out/zql/src/ivm/cap.js.map +0 -1
  1280. package/out/zql/src/ivm/change.js.map +0 -1
  1281. package/out/zql/src/ivm/constraint.js +0 -82
  1282. package/out/zql/src/ivm/constraint.js.map +0 -1
  1283. package/out/zql/src/ivm/data.js.map +0 -1
  1284. package/out/zql/src/ivm/exists.js.map +0 -1
  1285. package/out/zql/src/ivm/fan-in.js.map +0 -1
  1286. package/out/zql/src/ivm/fan-out.js.map +0 -1
  1287. package/out/zql/src/ivm/filter-operators.js.map +0 -1
  1288. package/out/zql/src/ivm/filter-push.js.map +0 -1
  1289. package/out/zql/src/ivm/filter.js.map +0 -1
  1290. package/out/zql/src/ivm/flipped-join.js +0 -311
  1291. package/out/zql/src/ivm/flipped-join.js.map +0 -1
  1292. package/out/zql/src/ivm/join-utils.js.map +0 -1
  1293. package/out/zql/src/ivm/join.js.map +0 -1
  1294. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +0 -1
  1295. package/out/zql/src/ivm/memory-source.js.map +0 -1
  1296. package/out/zql/src/ivm/memory-storage.js.map +0 -1
  1297. package/out/zql/src/ivm/operator.js.map +0 -1
  1298. package/out/zql/src/ivm/push-accumulated.js.map +0 -1
  1299. package/out/zql/src/ivm/skip-yields.js.map +0 -1
  1300. package/out/zql/src/ivm/skip.js.map +0 -1
  1301. package/out/zql/src/ivm/source.js.map +0 -1
  1302. package/out/zql/src/ivm/stream.js.map +0 -1
  1303. package/out/zql/src/ivm/take.js.map +0 -1
  1304. package/out/zql/src/ivm/union-fan-in.js +0 -163
  1305. package/out/zql/src/ivm/union-fan-in.js.map +0 -1
  1306. package/out/zql/src/ivm/union-fan-out.js.map +0 -1
  1307. package/out/zql/src/ivm/view-apply-change.js.map +0 -1
  1308. package/out/zql/src/mutate/crud.js.map +0 -1
  1309. package/out/zql/src/mutate/custom.js.map +0 -1
  1310. package/out/zql/src/mutate/mutator-registry.js.map +0 -1
  1311. package/out/zql/src/mutate/mutator.js.map +0 -1
  1312. package/out/zql/src/planner/planner-builder.js.map +0 -1
  1313. package/out/zql/src/planner/planner-connection.js.map +0 -1
  1314. package/out/zql/src/planner/planner-constraint.js.map +0 -1
  1315. package/out/zql/src/planner/planner-debug.js.map +0 -1
  1316. package/out/zql/src/planner/planner-fan-in.js.map +0 -1
  1317. package/out/zql/src/planner/planner-fan-out.js.map +0 -1
  1318. package/out/zql/src/planner/planner-graph.js.map +0 -1
  1319. package/out/zql/src/planner/planner-join.js +0 -261
  1320. package/out/zql/src/planner/planner-join.js.map +0 -1
  1321. package/out/zql/src/planner/planner-node.js.map +0 -1
  1322. package/out/zql/src/planner/planner-source.js.map +0 -1
  1323. package/out/zql/src/planner/planner-terminus.js.map +0 -1
  1324. package/out/zql/src/query/complete-ordering.js.map +0 -1
  1325. package/out/zql/src/query/create-builder.js.map +0 -1
  1326. package/out/zql/src/query/error.js.map +0 -1
  1327. package/out/zql/src/query/escape-like.js.map +0 -1
  1328. package/out/zql/src/query/expression.js.map +0 -1
  1329. package/out/zql/src/query/measure-push-operator.js.map +0 -1
  1330. package/out/zql/src/query/metrics-delegate.js.map +0 -1
  1331. package/out/zql/src/query/named.js.map +0 -1
  1332. package/out/zql/src/query/query-delegate-base.js.map +0 -1
  1333. package/out/zql/src/query/query-impl.js +0 -290
  1334. package/out/zql/src/query/query-impl.js.map +0 -1
  1335. package/out/zql/src/query/query-internals.js.map +0 -1
  1336. package/out/zql/src/query/query-registry.js.map +0 -1
  1337. package/out/zql/src/query/runnable-query-impl.js.map +0 -1
  1338. package/out/zql/src/query/static-query.js.map +0 -1
  1339. package/out/zql/src/query/ttl.js.map +0 -1
  1340. package/out/zql/src/query/validate-input.js.map +0 -1
  1341. package/out/zqlite/src/database-storage.js.map +0 -1
  1342. package/out/zqlite/src/db.js.map +0 -1
  1343. package/out/zqlite/src/explain-queries.js.map +0 -1
  1344. package/out/zqlite/src/internal/sql-inline.js.map +0 -1
  1345. package/out/zqlite/src/internal/sql.js.map +0 -1
  1346. package/out/zqlite/src/internal/statement-cache.js.map +0 -1
  1347. package/out/zqlite/src/query-builder.js.map +0 -1
  1348. package/out/zqlite/src/query-delegate.js.map +0 -1
  1349. package/out/zqlite/src/resolve-scalar-subqueries.js.map +0 -1
  1350. package/out/zqlite/src/sqlite-cost-model.js.map +0 -1
  1351. package/out/zqlite/src/sqlite-stat-fanout.js.map +0 -1
  1352. package/out/zqlite/src/table-source.js +0 -313
  1353. package/out/zqlite/src/table-source.js.map +0 -1
  1354. /package/out/{analyze-query → packages/analyze-query}/src/bin-transform.js +0 -0
  1355. /package/out/{ast-to-zql → packages/ast-to-zql}/src/ast-to-zql.js +0 -0
  1356. /package/out/{ast-to-zql → packages/ast-to-zql}/src/bin.js +0 -0
  1357. /package/out/{ast-to-zql → packages/ast-to-zql}/src/format.js +0 -0
  1358. /package/out/{datadog → packages/datadog}/src/datadog-log-sink.js +0 -0
  1359. /package/out/{otel → packages/otel}/src/enabled.js +0 -0
  1360. /package/out/{otel → packages/otel}/src/log-options.js +0 -0
  1361. /package/out/{otel → packages/otel}/src/maybe-time.js +0 -0
  1362. /package/out/{otel → packages/otel}/src/span.js +0 -0
  1363. /package/out/{otel → packages/otel}/src/version.js +0 -0
  1364. /package/out/{replicache → packages/replicache}/src/async-iterable-to-array.js +0 -0
  1365. /package/out/{replicache → packages/replicache}/src/bg-interval.js +0 -0
  1366. /package/out/{replicache → packages/replicache}/src/btree/diff.js +0 -0
  1367. /package/out/{replicache → packages/replicache}/src/btree/node.js +0 -0
  1368. /package/out/{replicache → packages/replicache}/src/btree/read.js +0 -0
  1369. /package/out/{replicache → packages/replicache}/src/btree/splice.js +0 -0
  1370. /package/out/{replicache → packages/replicache}/src/call-default-fetch.js +0 -0
  1371. /package/out/{replicache → packages/replicache}/src/config.js +0 -0
  1372. /package/out/{replicache → packages/replicache}/src/connection-loop-delegates.js +0 -0
  1373. /package/out/{replicache → packages/replicache}/src/connection-loop.js +0 -0
  1374. /package/out/{replicache → packages/replicache}/src/cookies.js +0 -0
  1375. /package/out/{replicache → packages/replicache}/src/dag/chunk.js +0 -0
  1376. /package/out/{replicache → packages/replicache}/src/dag/gc.js +0 -0
  1377. /package/out/{replicache → packages/replicache}/src/dag/key.js +0 -0
  1378. /package/out/{replicache → packages/replicache}/src/dag/lazy-store.js +0 -0
  1379. /package/out/{replicache → packages/replicache}/src/dag/store.js +0 -0
  1380. /package/out/{replicache → packages/replicache}/src/dag/visitor.js +0 -0
  1381. /package/out/{replicache → packages/replicache}/src/db/commit.js +0 -0
  1382. /package/out/{replicache → packages/replicache}/src/db/index.js +0 -0
  1383. /package/out/{replicache → packages/replicache}/src/db/read.js +0 -0
  1384. /package/out/{replicache → packages/replicache}/src/db/rebase.js +0 -0
  1385. /package/out/{replicache → packages/replicache}/src/db/write.js +0 -0
  1386. /package/out/{replicache → packages/replicache}/src/deleted-clients.js +0 -0
  1387. /package/out/{replicache → packages/replicache}/src/error-responses.js +0 -0
  1388. /package/out/{replicache → packages/replicache}/src/expo-sqlite.js +0 -0
  1389. /package/out/{replicache → packages/replicache}/src/frozen-json.js +0 -0
  1390. /package/out/{replicache → packages/replicache}/src/get-default-puller.js +0 -0
  1391. /package/out/{replicache → packages/replicache}/src/get-default-pusher.js +0 -0
  1392. /package/out/{replicache → packages/replicache}/src/get-kv-store-provider.js +0 -0
  1393. /package/out/{replicache → packages/replicache}/src/hash.js +0 -0
  1394. /package/out/{replicache → packages/replicache}/src/http-request-info.js +0 -0
  1395. /package/out/{replicache → packages/replicache}/src/impl.js +0 -0
  1396. /package/out/{replicache → packages/replicache}/src/index-defs.js +0 -0
  1397. /package/out/{replicache → packages/replicache}/src/kv/idb-store-with-mem-fallback.js +0 -0
  1398. /package/out/{replicache → packages/replicache}/src/kv/idb-store.js +0 -0
  1399. /package/out/{replicache → packages/replicache}/src/kv/mem-store.js +0 -0
  1400. /package/out/{replicache → packages/replicache}/src/kv/op-sqlite/types.js +0 -0
  1401. /package/out/{replicache → packages/replicache}/src/kv/read-impl.js +0 -0
  1402. /package/out/{replicache → packages/replicache}/src/kv/write-impl-base.js +0 -0
  1403. /package/out/{replicache → packages/replicache}/src/kv/write-impl.js +0 -0
  1404. /package/out/{replicache → packages/replicache}/src/lazy.js +0 -0
  1405. /package/out/{replicache → packages/replicache}/src/log-options.js +0 -0
  1406. /package/out/{replicache → packages/replicache}/src/make-idb-name.js +0 -0
  1407. /package/out/{replicache → packages/replicache}/src/mutation-recovery.js +0 -0
  1408. /package/out/{replicache → packages/replicache}/src/new-client-channel.js +0 -0
  1409. /package/out/{replicache → packages/replicache}/src/on-persist-channel.js +0 -0
  1410. /package/out/{replicache → packages/replicache}/src/op-sqlite.js +0 -0
  1411. /package/out/{replicache → packages/replicache}/src/patch-operation.js +0 -0
  1412. /package/out/{replicache → packages/replicache}/src/pending-mutations.js +0 -0
  1413. /package/out/{replicache → packages/replicache}/src/persist/client-gc.js +0 -0
  1414. /package/out/{replicache → packages/replicache}/src/persist/client-group-gc.js +0 -0
  1415. /package/out/{replicache → packages/replicache}/src/persist/collect-idb-databases.js +0 -0
  1416. /package/out/{replicache → packages/replicache}/src/persist/gather-mem-only-visitor.js +0 -0
  1417. /package/out/{replicache → packages/replicache}/src/persist/gather-not-cached-visitor.js +0 -0
  1418. /package/out/{replicache → packages/replicache}/src/persist/heartbeat.js +0 -0
  1419. /package/out/{replicache → packages/replicache}/src/persist/idb-databases-store-db-name.js +0 -0
  1420. /package/out/{replicache → packages/replicache}/src/persist/idb-databases-store.js +0 -0
  1421. /package/out/{replicache → packages/replicache}/src/persist/make-client-id.js +0 -0
  1422. /package/out/{replicache → packages/replicache}/src/persist/refresh.js +0 -0
  1423. /package/out/{replicache → packages/replicache}/src/process-scheduler.js +0 -0
  1424. /package/out/{replicache → packages/replicache}/src/pusher.js +0 -0
  1425. /package/out/{replicache → packages/replicache}/src/replicache-impl.js +0 -0
  1426. /package/out/{replicache → packages/replicache}/src/report-error.js +0 -0
  1427. /package/out/{replicache → packages/replicache}/src/request-idle.js +0 -0
  1428. /package/out/{replicache → packages/replicache}/src/scan-iterator.js +0 -0
  1429. /package/out/{replicache → packages/replicache}/src/scan-options.js +0 -0
  1430. /package/out/{replicache → packages/replicache}/src/set-interval-with-signal.js +0 -0
  1431. /package/out/{replicache → packages/replicache}/src/sqlite.js +0 -0
  1432. /package/out/{replicache → packages/replicache}/src/subscriptions.js +0 -0
  1433. /package/out/{replicache → packages/replicache}/src/sync/diff.js +0 -0
  1434. /package/out/{replicache → packages/replicache}/src/sync/ids.js +0 -0
  1435. /package/out/{replicache → packages/replicache}/src/sync/patch.js +0 -0
  1436. /package/out/{replicache → packages/replicache}/src/sync/pull-error.js +0 -0
  1437. /package/out/{replicache → packages/replicache}/src/sync/push.js +0 -0
  1438. /package/out/{replicache → packages/replicache}/src/sync/request-id.js +0 -0
  1439. /package/out/{replicache → packages/replicache}/src/sync/sync-head-name.js +0 -0
  1440. /package/out/{replicache → packages/replicache}/src/to-error.js +0 -0
  1441. /package/out/{replicache → packages/replicache}/src/transaction-closed-error.js +0 -0
  1442. /package/out/{replicache → packages/replicache}/src/transactions.js +0 -0
  1443. /package/out/{replicache → packages/replicache}/src/version.js +0 -0
  1444. /package/out/{replicache → packages/replicache}/src/with-transactions.js +0 -0
  1445. /package/out/{shared → packages/shared}/src/abort-error.js +0 -0
  1446. /package/out/{shared → packages/shared}/src/arrays.js +0 -0
  1447. /package/out/{shared → packages/shared}/src/asserts.js +0 -0
  1448. /package/out/{shared → packages/shared}/src/bigint-json.js +0 -0
  1449. /package/out/{shared → packages/shared}/src/binary-search.js +0 -0
  1450. /package/out/{shared → packages/shared}/src/broadcast-channel.js +0 -0
  1451. /package/out/{shared → packages/shared}/src/browser-env.js +0 -0
  1452. /package/out/{shared → packages/shared}/src/btree-set.js +0 -0
  1453. /package/out/{shared → packages/shared}/src/cache.js +0 -0
  1454. /package/out/{shared → packages/shared}/src/centroid.js +0 -0
  1455. /package/out/{shared → packages/shared}/src/config.js +0 -0
  1456. /package/out/{shared → packages/shared}/src/custom-key-map.js +0 -0
  1457. /package/out/{shared → packages/shared}/src/custom-key-set.js +0 -0
  1458. /package/out/{shared → packages/shared}/src/deep-clone.js +0 -0
  1459. /package/out/{shared → packages/shared}/src/deep-merge.js +0 -0
  1460. /package/out/{shared → packages/shared}/src/document-visible.js +0 -0
  1461. /package/out/{shared → packages/shared}/src/dotenv.js +0 -0
  1462. /package/out/{shared → packages/shared}/src/error.js +0 -0
  1463. /package/out/{shared → packages/shared}/src/has-own.js +0 -0
  1464. /package/out/{shared → packages/shared}/src/hash.js +0 -0
  1465. /package/out/{shared → packages/shared}/src/iterables.js +0 -0
  1466. /package/out/{shared → packages/shared}/src/json-schema.js +0 -0
  1467. /package/out/{shared → packages/shared}/src/json.js +0 -0
  1468. /package/out/{shared → packages/shared}/src/logging-test-utils.js +0 -0
  1469. /package/out/{shared → packages/shared}/src/logging.js +0 -0
  1470. /package/out/{shared → packages/shared}/src/must.js +0 -0
  1471. /package/out/{shared → packages/shared}/src/navigator.js +0 -0
  1472. /package/out/{shared → packages/shared}/src/object-traversal.js +0 -0
  1473. /package/out/{shared → packages/shared}/src/objects.js +0 -0
  1474. /package/out/{shared → packages/shared}/src/options.js +0 -0
  1475. /package/out/{shared → packages/shared}/src/parse-big-int.js +0 -0
  1476. /package/out/{shared → packages/shared}/src/promise-race.js +0 -0
  1477. /package/out/{shared → packages/shared}/src/rand.js +0 -0
  1478. /package/out/{shared → packages/shared}/src/random-uint64.js +0 -0
  1479. /package/out/{shared → packages/shared}/src/random-values.js +0 -0
  1480. /package/out/{shared → packages/shared}/src/record-proxy.js +0 -0
  1481. /package/out/{shared → packages/shared}/src/resolved-promises.js +0 -0
  1482. /package/out/{shared → packages/shared}/src/sentinels.js +0 -0
  1483. /package/out/{shared → packages/shared}/src/set-utils.js +0 -0
  1484. /package/out/{shared → packages/shared}/src/size-of-value.js +0 -0
  1485. /package/out/{shared → packages/shared}/src/sleep.js +0 -0
  1486. /package/out/{shared → packages/shared}/src/sorted-entries.js +0 -0
  1487. /package/out/{shared → packages/shared}/src/string-compare.js +0 -0
  1488. /package/out/{shared → packages/shared}/src/subscribable.js +0 -0
  1489. /package/out/{shared → packages/shared}/src/tdigest-schema.js +0 -0
  1490. /package/out/{shared → packages/shared}/src/tdigest.js +0 -0
  1491. /package/out/{z2s → packages/z2s}/src/compiler.js +0 -0
  1492. /package/out/{z2s → packages/z2s}/src/sql.js +0 -0
  1493. /package/out/{zero → packages/zero}/src/server/runner/main.js +0 -0
  1494. /package/out/{zero-cache → packages/zero-cache}/src/auth/auth.js +0 -0
  1495. /package/out/{zero-cache → packages/zero-cache}/src/auth/jwt.js +0 -0
  1496. /package/out/{zero-cache → packages/zero-cache}/src/auth/load-permissions.js +0 -0
  1497. /package/out/{zero-cache → packages/zero-cache}/src/auth/read-authorizer.js +0 -0
  1498. /package/out/{zero-cache → packages/zero-cache}/src/auth/write-authorizer.js +0 -0
  1499. /package/out/{zero-cache → packages/zero-cache}/src/config/network.js +0 -0
  1500. /package/out/{zero-cache → packages/zero-cache}/src/config/normalize.js +0 -0
  1501. /package/out/{zero-cache → packages/zero-cache}/src/config/server-context.js +0 -0
  1502. /package/out/{zero-cache → packages/zero-cache}/src/custom/fetch.js +0 -0
  1503. /package/out/{zero-cache → packages/zero-cache}/src/custom-queries/transform-query.js +0 -0
  1504. /package/out/{zero-cache → packages/zero-cache}/src/db/create.js +0 -0
  1505. /package/out/{zero-cache → packages/zero-cache}/src/db/delete-lite-db.js +0 -0
  1506. /package/out/{zero-cache → packages/zero-cache}/src/db/lite-tables.js +0 -0
  1507. /package/out/{zero-cache → packages/zero-cache}/src/db/mode-enum.js +0 -0
  1508. /package/out/{zero-cache → packages/zero-cache}/src/db/pg-copy-binary.js +0 -0
  1509. /package/out/{zero-cache → packages/zero-cache}/src/db/pg-copy.js +0 -0
  1510. /package/out/{zero-cache → packages/zero-cache}/src/db/pg-to-lite.js +0 -0
  1511. /package/out/{zero-cache → packages/zero-cache}/src/db/pg-type-parser.js +0 -0
  1512. /package/out/{zero-cache → packages/zero-cache}/src/db/run-transaction.js +0 -0
  1513. /package/out/{zero-cache → packages/zero-cache}/src/db/specs.js +0 -0
  1514. /package/out/{zero-cache → packages/zero-cache}/src/db/statements.js +0 -0
  1515. /package/out/{zero-cache → packages/zero-cache}/src/db/transaction-pool.js +0 -0
  1516. /package/out/{zero-cache → packages/zero-cache}/src/db/warmup.js +0 -0
  1517. /package/out/{zero-cache → packages/zero-cache}/src/observability/events.js +0 -0
  1518. /package/out/{zero-cache → packages/zero-cache}/src/observability/metrics.js +0 -0
  1519. /package/out/{zero-cache → packages/zero-cache}/src/scripts/decommission.js +0 -0
  1520. /package/out/{zero-cache → packages/zero-cache}/src/scripts/deploy-permissions.js +0 -0
  1521. /package/out/{zero-cache → packages/zero-cache}/src/scripts/permissions.js +0 -0
  1522. /package/out/{zero-cache → packages/zero-cache}/src/server/inspector-delegate.js +0 -0
  1523. /package/out/{zero-cache → packages/zero-cache}/src/server/logging.js +0 -0
  1524. /package/out/{zero-cache → packages/zero-cache}/src/server/otel-diag-logger.js +0 -0
  1525. /package/out/{zero-cache → packages/zero-cache}/src/server/otel-log-sink.js +0 -0
  1526. /package/out/{zero-cache → packages/zero-cache}/src/server/priority-op.js +0 -0
  1527. /package/out/{zero-cache → packages/zero-cache}/src/server/runner/run-worker.js +0 -0
  1528. /package/out/{zero-cache → packages/zero-cache}/src/server/runner/runtime.js +0 -0
  1529. /package/out/{zero-cache → packages/zero-cache}/src/server/runner/zero-dispatcher.js +0 -0
  1530. /package/out/{zero-cache → packages/zero-cache}/src/server/worker-dispatcher.js +0 -0
  1531. /package/out/{zero-cache → packages/zero-cache}/src/server/worker-urls.js +0 -0
  1532. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/common/backfill-manager.js +0 -0
  1533. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/common/change-stream-multiplexer.js +0 -0
  1534. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/common/replica-schema.js +0 -0
  1535. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/backfill-metadata.js +0 -0
  1536. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/decommission.js +0 -0
  1537. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/logical-replication/binary-reader.js +0 -0
  1538. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/logical-replication/pgoutput-parser.js +0 -0
  1539. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/logical-replication/stream.js +0 -0
  1540. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/lsn.js +0 -0
  1541. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/schema/published.js +0 -0
  1542. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/schema/validation.js +0 -0
  1543. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/protocol/current/control.js +0 -0
  1544. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/protocol/current/downstream.js +0 -0
  1545. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/protocol/current/json.js +0 -0
  1546. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/protocol/current/path.js +0 -0
  1547. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/protocol/current/status.js +0 -0
  1548. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/protocol/current/upstream.js +0 -0
  1549. /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/protocol/mod.js +0 -0
  1550. /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/backup-monitor.js +0 -0
  1551. /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/broadcast.js +0 -0
  1552. /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/change-streamer-service.js +0 -0
  1553. /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/change-streamer.js +0 -0
  1554. /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/forwarder.js +0 -0
  1555. /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/replica-monitor.js +0 -0
  1556. /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/storer.js +0 -0
  1557. /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/subscriber.js +0 -0
  1558. /package/out/{zero-cache → packages/zero-cache}/src/services/heapz.js +0 -0
  1559. /package/out/{zero-cache → packages/zero-cache}/src/services/http-service.js +0 -0
  1560. /package/out/{zero-cache → packages/zero-cache}/src/services/limiter/sliding-window-limiter.js +0 -0
  1561. /package/out/{zero-cache → packages/zero-cache}/src/services/litestream/commands.js +0 -0
  1562. /package/out/{zero-cache → packages/zero-cache}/src/services/mutagen/error.js +0 -0
  1563. /package/out/{zero-cache → packages/zero-cache}/src/services/mutagen/mutagen.js +0 -0
  1564. /package/out/{zero-cache → packages/zero-cache}/src/services/mutagen/pusher.js +0 -0
  1565. /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/change-processor.js +0 -0
  1566. /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/incremental-sync.js +0 -0
  1567. /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/notifier.js +0 -0
  1568. /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/replication-status.js +0 -0
  1569. /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/replicator.js +0 -0
  1570. /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/reporter/recorder.js +0 -0
  1571. /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/reporter/report-schema.js +0 -0
  1572. /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/schema/change-log.js +0 -0
  1573. /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/schema/column-metadata.js +0 -0
  1574. /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/schema/constants.js +0 -0
  1575. /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/schema/replication-state.js +0 -0
  1576. /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/schema/table-metadata.js +0 -0
  1577. /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/write-worker-client.js +0 -0
  1578. /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/write-worker.js +0 -0
  1579. /package/out/{zero-cache → packages/zero-cache}/src/services/runner.js +0 -0
  1580. /package/out/{zero-cache → packages/zero-cache}/src/services/statz.js +0 -0
  1581. /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/active-users-gauge.js +0 -0
  1582. /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/client-schema.js +0 -0
  1583. /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/connection-context-manager.js +0 -0
  1584. /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/cvr-store.js +0 -0
  1585. /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/cvr.js +0 -0
  1586. /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/drain-coordinator.js +0 -0
  1587. /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/row-record-cache.js +0 -0
  1588. /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/row-set-signature.js +0 -0
  1589. /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/schema/cvr.js +0 -0
  1590. /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/snapshotter.js +0 -0
  1591. /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/tracer.js +0 -0
  1592. /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/ttl-clock.js +0 -0
  1593. /package/out/{zero-cache → packages/zero-cache}/src/types/error-with-level.js +0 -0
  1594. /package/out/{zero-cache → packages/zero-cache}/src/types/http.js +0 -0
  1595. /package/out/{zero-cache → packages/zero-cache}/src/types/lexi-version.js +0 -0
  1596. /package/out/{zero-cache → packages/zero-cache}/src/types/lite.js +0 -0
  1597. /package/out/{zero-cache → packages/zero-cache}/src/types/names.js +0 -0
  1598. /package/out/{zero-cache → packages/zero-cache}/src/types/pg-data-type.js +0 -0
  1599. /package/out/{zero-cache → packages/zero-cache}/src/types/pg-types.js +0 -0
  1600. /package/out/{zero-cache → packages/zero-cache}/src/types/pg-versions.js +0 -0
  1601. /package/out/{zero-cache → packages/zero-cache}/src/types/processes.js +0 -0
  1602. /package/out/{zero-cache → packages/zero-cache}/src/types/profiler.js +0 -0
  1603. /package/out/{zero-cache → packages/zero-cache}/src/types/row-key.js +0 -0
  1604. /package/out/{zero-cache → packages/zero-cache}/src/types/shards.js +0 -0
  1605. /package/out/{zero-cache → packages/zero-cache}/src/types/sql.js +0 -0
  1606. /package/out/{zero-cache → packages/zero-cache}/src/types/state-version.js +0 -0
  1607. /package/out/{zero-cache → packages/zero-cache}/src/types/streams.js +0 -0
  1608. /package/out/{zero-cache → packages/zero-cache}/src/types/strings.js +0 -0
  1609. /package/out/{zero-cache → packages/zero-cache}/src/types/subscription.js +0 -0
  1610. /package/out/{zero-cache → packages/zero-cache}/src/types/timeout.js +0 -0
  1611. /package/out/{zero-cache → packages/zero-cache}/src/types/url-params.js +0 -0
  1612. /package/out/{zero-cache → packages/zero-cache}/src/types/websocket-handoff.js +0 -0
  1613. /package/out/{zero-cache → packages/zero-cache}/src/types/ws.js +0 -0
  1614. /package/out/{zero-cache → packages/zero-cache}/src/workers/connect-params.js +0 -0
  1615. /package/out/{zero-cache → packages/zero-cache}/src/workers/mutator.js +0 -0
  1616. /package/out/{zero-cache → packages/zero-cache}/src/workers/replicator.js +0 -0
  1617. /package/out/{zero-cache → packages/zero-cache}/src/workers/syncer-ws-message-handler.js +0 -0
  1618. /package/out/{zero-cache → packages/zero-cache}/src/workers/syncer.js +0 -0
  1619. /package/out/{zero-client → packages/zero-client}/src/client/active-clients-manager.js +0 -0
  1620. /package/out/{zero-client → packages/zero-client}/src/client/bindings.js +0 -0
  1621. /package/out/{zero-client → packages/zero-client}/src/client/client-error-kind-enum.js +0 -0
  1622. /package/out/{zero-client → packages/zero-client}/src/client/connection.js +0 -0
  1623. /package/out/{zero-client → packages/zero-client}/src/client/context.js +0 -0
  1624. /package/out/{zero-client → packages/zero-client}/src/client/crud.js +0 -0
  1625. /package/out/{zero-client → packages/zero-client}/src/client/delete-clients-manager.js +0 -0
  1626. /package/out/{zero-client → packages/zero-client}/src/client/enable-analytics.js +0 -0
  1627. /package/out/{zero-client → packages/zero-client}/src/client/error.js +0 -0
  1628. /package/out/{zero-client → packages/zero-client}/src/client/http-string.js +0 -0
  1629. /package/out/{zero-client → packages/zero-client}/src/client/inspector/client-group.js +0 -0
  1630. /package/out/{zero-client → packages/zero-client}/src/client/inspector/client.js +0 -0
  1631. /package/out/{zero-client → packages/zero-client}/src/client/inspector/html-dialog-prompt.js +0 -0
  1632. /package/out/{zero-client → packages/zero-client}/src/client/inspector/inspector.js +0 -0
  1633. /package/out/{zero-client → packages/zero-client}/src/client/inspector/lazy-inspector.js +0 -0
  1634. /package/out/{zero-client → packages/zero-client}/src/client/inspector/query.js +0 -0
  1635. /package/out/{zero-client → packages/zero-client}/src/client/ivm-branch.js +0 -0
  1636. /package/out/{zero-client → packages/zero-client}/src/client/keys.js +0 -0
  1637. /package/out/{zero-client → packages/zero-client}/src/client/log-options.js +0 -0
  1638. /package/out/{zero-client → packages/zero-client}/src/client/make-mutate-property.js +0 -0
  1639. /package/out/{zero-client → packages/zero-client}/src/client/make-replicache-mutators.js +0 -0
  1640. /package/out/{zero-client → packages/zero-client}/src/client/metric-name-enum.js +0 -0
  1641. /package/out/{zero-client → packages/zero-client}/src/client/metrics.js +0 -0
  1642. /package/out/{zero-client → packages/zero-client}/src/client/mutation-tracker.js +0 -0
  1643. /package/out/{zero-client → packages/zero-client}/src/client/mutator-proxy.js +0 -0
  1644. /package/out/{zero-client → packages/zero-client}/src/client/options.js +0 -0
  1645. /package/out/{zero-client → packages/zero-client}/src/client/query-manager.js +0 -0
  1646. /package/out/{zero-client → packages/zero-client}/src/client/reload-error-handler.js +0 -0
  1647. /package/out/{zero-client → packages/zero-client}/src/client/server-option.js +0 -0
  1648. /package/out/{zero-client → packages/zero-client}/src/client/zero-poke-handler.js +0 -0
  1649. /package/out/{zero-client → packages/zero-client}/src/client/zero-rep.js +0 -0
  1650. /package/out/{zero-client → packages/zero-client}/src/mod.js +0 -0
  1651. /package/out/{zero-client → packages/zero-client}/src/util/nanoid.js +0 -0
  1652. /package/out/{zero-pg → packages/zero-pg}/src/mod.js +0 -0
  1653. /package/out/{zero-protocol → packages/zero-protocol}/src/application-error.js +0 -0
  1654. /package/out/{zero-protocol → packages/zero-protocol}/src/ast.js +0 -0
  1655. /package/out/{zero-protocol → packages/zero-protocol}/src/client-schema.js +0 -0
  1656. /package/out/{zero-protocol → packages/zero-protocol}/src/close-connection.js +0 -0
  1657. /package/out/{zero-protocol → packages/zero-protocol}/src/custom-queries.js +0 -0
  1658. /package/out/{zero-protocol → packages/zero-protocol}/src/data.js +0 -0
  1659. /package/out/{zero-protocol → packages/zero-protocol}/src/delete-clients.js +0 -0
  1660. /package/out/{zero-protocol → packages/zero-protocol}/src/down.js +0 -0
  1661. /package/out/{zero-protocol → packages/zero-protocol}/src/error-kind-enum.js +0 -0
  1662. /package/out/{zero-protocol → packages/zero-protocol}/src/error-origin-enum.js +0 -0
  1663. /package/out/{zero-protocol → packages/zero-protocol}/src/error-reason-enum.js +0 -0
  1664. /package/out/{zero-protocol → packages/zero-protocol}/src/inspect-down.js +0 -0
  1665. /package/out/{zero-protocol → packages/zero-protocol}/src/mutate-server.js +0 -0
  1666. /package/out/{zero-protocol → packages/zero-protocol}/src/mutation-id.js +0 -0
  1667. /package/out/{zero-protocol → packages/zero-protocol}/src/mutation-type-enum.js +0 -0
  1668. /package/out/{zero-protocol → packages/zero-protocol}/src/mutation.js +0 -0
  1669. /package/out/{zero-protocol → packages/zero-protocol}/src/mutations-patch.js +0 -0
  1670. /package/out/{zero-protocol → packages/zero-protocol}/src/ping.js +0 -0
  1671. /package/out/{zero-protocol → packages/zero-protocol}/src/pong.js +0 -0
  1672. /package/out/{zero-protocol → packages/zero-protocol}/src/primary-key.js +0 -0
  1673. /package/out/{zero-protocol → packages/zero-protocol}/src/protocol-version.js +0 -0
  1674. /package/out/{zero-protocol → packages/zero-protocol}/src/pull.js +0 -0
  1675. /package/out/{zero-protocol → packages/zero-protocol}/src/queries-patch.js +0 -0
  1676. /package/out/{zero-protocol → packages/zero-protocol}/src/query-hash.js +0 -0
  1677. /package/out/{zero-protocol → packages/zero-protocol}/src/query-server.js +0 -0
  1678. /package/out/{zero-protocol → packages/zero-protocol}/src/row-patch.js +0 -0
  1679. /package/out/{zero-protocol → packages/zero-protocol}/src/up.js +0 -0
  1680. /package/out/{zero-protocol → packages/zero-protocol}/src/update-auth.js +0 -0
  1681. /package/out/{zero-protocol → packages/zero-protocol}/src/version.js +0 -0
  1682. /package/out/{zero-react → packages/zero-react}/src/bindings.js +0 -0
  1683. /package/out/{zero-react → packages/zero-react}/src/mod.js +0 -0
  1684. /package/out/{zero-react → packages/zero-react}/src/zero.js +0 -0
  1685. /package/out/{zero-schema → packages/zero-schema}/src/builder/relationship-builder.js +0 -0
  1686. /package/out/{zero-schema → packages/zero-schema}/src/builder/schema-builder.js +0 -0
  1687. /package/out/{zero-schema → packages/zero-schema}/src/builder/table-builder.js +0 -0
  1688. /package/out/{zero-schema → packages/zero-schema}/src/compiled-permissions.js +0 -0
  1689. /package/out/{zero-schema → packages/zero-schema}/src/name-mapper.js +0 -0
  1690. /package/out/{zero-schema → packages/zero-schema}/src/permissions.js +0 -0
  1691. /package/out/{zero-schema → packages/zero-schema}/src/schema-config.js +0 -0
  1692. /package/out/{zero-server → packages/zero-server}/src/adapters/drizzle.js +0 -0
  1693. /package/out/{zero-server → packages/zero-server}/src/adapters/kysely.js +0 -0
  1694. /package/out/{zero-server → packages/zero-server}/src/adapters/postgresjs.js +0 -0
  1695. /package/out/{zero-server → packages/zero-server}/src/adapters/prisma.js +0 -0
  1696. /package/out/{zero-server → packages/zero-server}/src/logging.js +0 -0
  1697. /package/out/{zero-server → packages/zero-server}/src/mod.js +0 -0
  1698. /package/out/{zero-server → packages/zero-server}/src/pg-query-executor.js +0 -0
  1699. /package/out/{zero-server → packages/zero-server}/src/process-mutations.js +0 -0
  1700. /package/out/{zero-server → packages/zero-server}/src/push-processor.js +0 -0
  1701. /package/out/{zero-server → packages/zero-server}/src/queries/process-queries.js +0 -0
  1702. /package/out/{zero-server → packages/zero-server}/src/schema.js +0 -0
  1703. /package/out/{zero-server → packages/zero-server}/src/zql-database.js +0 -0
  1704. /package/out/{zero-solid → packages/zero-solid}/src/bindings.js +0 -0
  1705. /package/out/{zero-solid → packages/zero-solid}/src/mod.js +0 -0
  1706. /package/out/{zero-solid → packages/zero-solid}/src/zero.js +0 -0
  1707. /package/out/{zero-types → packages/zero-types}/src/format.js +0 -0
  1708. /package/out/{zero-types → packages/zero-types}/src/name-mapper.js +0 -0
  1709. /package/out/{zql → packages/zql}/src/builder/filter.js +0 -0
  1710. /package/out/{zql → packages/zql}/src/builder/like.js +0 -0
  1711. /package/out/{zql → packages/zql}/src/error.js +0 -0
  1712. /package/out/{zql → packages/zql}/src/ivm/array-view.js +0 -0
  1713. /package/out/{zql → packages/zql}/src/ivm/cap.js +0 -0
  1714. /package/out/{zql → packages/zql}/src/ivm/change.js +0 -0
  1715. /package/out/{zql → packages/zql}/src/ivm/data.js +0 -0
  1716. /package/out/{zql → packages/zql}/src/ivm/exists.js +0 -0
  1717. /package/out/{zql → packages/zql}/src/ivm/fan-in.js +0 -0
  1718. /package/out/{zql → packages/zql}/src/ivm/fan-out.js +0 -0
  1719. /package/out/{zql → packages/zql}/src/ivm/filter-operators.js +0 -0
  1720. /package/out/{zql → packages/zql}/src/ivm/filter-push.js +0 -0
  1721. /package/out/{zql → packages/zql}/src/ivm/filter.js +0 -0
  1722. /package/out/{zql → packages/zql}/src/ivm/join-utils.js +0 -0
  1723. /package/out/{zql → packages/zql}/src/ivm/join.js +0 -0
  1724. /package/out/{zql → packages/zql}/src/ivm/maybe-split-and-push-edit-change.js +0 -0
  1725. /package/out/{zql → packages/zql}/src/ivm/memory-source.js +0 -0
  1726. /package/out/{zql → packages/zql}/src/ivm/memory-storage.js +0 -0
  1727. /package/out/{zql → packages/zql}/src/ivm/operator.js +0 -0
  1728. /package/out/{zql → packages/zql}/src/ivm/push-accumulated.js +0 -0
  1729. /package/out/{zql → packages/zql}/src/ivm/skip-yields.js +0 -0
  1730. /package/out/{zql → packages/zql}/src/ivm/skip.js +0 -0
  1731. /package/out/{zql → packages/zql}/src/ivm/source.js +0 -0
  1732. /package/out/{zql → packages/zql}/src/ivm/stream.js +0 -0
  1733. /package/out/{zql → packages/zql}/src/ivm/take.js +0 -0
  1734. /package/out/{zql → packages/zql}/src/ivm/union-fan-out.js +0 -0
  1735. /package/out/{zql → packages/zql}/src/ivm/view-apply-change.js +0 -0
  1736. /package/out/{zql → packages/zql}/src/mutate/crud.js +0 -0
  1737. /package/out/{zql → packages/zql}/src/mutate/custom.js +0 -0
  1738. /package/out/{zql → packages/zql}/src/mutate/mutator-registry.js +0 -0
  1739. /package/out/{zql → packages/zql}/src/mutate/mutator.js +0 -0
  1740. /package/out/{zql → packages/zql}/src/planner/planner-builder.js +0 -0
  1741. /package/out/{zql → packages/zql}/src/planner/planner-connection.js +0 -0
  1742. /package/out/{zql → packages/zql}/src/planner/planner-constraint.js +0 -0
  1743. /package/out/{zql → packages/zql}/src/planner/planner-debug.js +0 -0
  1744. /package/out/{zql → packages/zql}/src/planner/planner-fan-in.js +0 -0
  1745. /package/out/{zql → packages/zql}/src/planner/planner-fan-out.js +0 -0
  1746. /package/out/{zql → packages/zql}/src/planner/planner-graph.js +0 -0
  1747. /package/out/{zql → packages/zql}/src/planner/planner-node.js +0 -0
  1748. /package/out/{zql → packages/zql}/src/planner/planner-source.js +0 -0
  1749. /package/out/{zql → packages/zql}/src/planner/planner-terminus.js +0 -0
  1750. /package/out/{zql → packages/zql}/src/query/complete-ordering.js +0 -0
  1751. /package/out/{zql → packages/zql}/src/query/create-builder.js +0 -0
  1752. /package/out/{zql → packages/zql}/src/query/error.js +0 -0
  1753. /package/out/{zql → packages/zql}/src/query/escape-like.js +0 -0
  1754. /package/out/{zql → packages/zql}/src/query/expression.js +0 -0
  1755. /package/out/{zql → packages/zql}/src/query/measure-push-operator.js +0 -0
  1756. /package/out/{zql → packages/zql}/src/query/metrics-delegate.js +0 -0
  1757. /package/out/{zql → packages/zql}/src/query/named.js +0 -0
  1758. /package/out/{zql → packages/zql}/src/query/query-delegate-base.js +0 -0
  1759. /package/out/{zql → packages/zql}/src/query/query-internals.js +0 -0
  1760. /package/out/{zql → packages/zql}/src/query/query-registry.js +0 -0
  1761. /package/out/{zql → packages/zql}/src/query/query.js +0 -0
  1762. /package/out/{zql → packages/zql}/src/query/runnable-query-impl.js +0 -0
  1763. /package/out/{zql → packages/zql}/src/query/static-query.js +0 -0
  1764. /package/out/{zql → packages/zql}/src/query/ttl.js +0 -0
  1765. /package/out/{zql → packages/zql}/src/query/validate-input.js +0 -0
  1766. /package/out/{zqlite → packages/zqlite}/src/database-storage.js +0 -0
  1767. /package/out/{zqlite → packages/zqlite}/src/db.js +0 -0
  1768. /package/out/{zqlite → packages/zqlite}/src/explain-queries.js +0 -0
  1769. /package/out/{zqlite → packages/zqlite}/src/internal/sql-inline.js +0 -0
  1770. /package/out/{zqlite → packages/zqlite}/src/internal/sql.js +0 -0
  1771. /package/out/{zqlite → packages/zqlite}/src/internal/statement-cache.js +0 -0
  1772. /package/out/{zqlite → packages/zqlite}/src/mod.js +0 -0
  1773. /package/out/{zqlite → packages/zqlite}/src/query-builder.js +0 -0
  1774. /package/out/{zqlite → packages/zqlite}/src/query-delegate.js +0 -0
  1775. /package/out/{zqlite → packages/zqlite}/src/resolve-scalar-subqueries.js +0 -0
  1776. /package/out/{zqlite → packages/zqlite}/src/sqlite-cost-model.js +0 -0
  1777. /package/out/{zqlite → packages/zqlite}/src/sqlite-stat-fanout.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maybe-split-and-push-edit-change.js","names":[],"sources":["../../../../../../zql/src/ivm/maybe-split-and-push-edit-change.ts"],"sourcesContent":["import type {Row} from '../../../zero-protocol/src/data.ts';\nimport {ChangeIndex} from './change-index.ts';\nimport {makeAddChange, makeRemoveChange, type EditChange} from './change.ts';\nimport type {InputBase, Output} from './operator.ts';\n\n/**\n * This takes an {@linkcode EditChange} and a predicate that determines if a row\n * should be present based on the row's data. It then splits the change and\n * pushes the appropriate changes to the output based on the predicate.\n */\nexport function* maybeSplitAndPushEditChange(\n change: EditChange,\n predicate: (row: Row) => boolean,\n output: Output,\n pusher: InputBase,\n) {\n const oldWasPresent = predicate(change[ChangeIndex.OLD_NODE].row);\n const newIsPresent = predicate(change[ChangeIndex.NODE].row);\n\n if (oldWasPresent && newIsPresent) {\n yield* output.push(change, pusher);\n } else if (oldWasPresent && !newIsPresent) {\n yield* output.push(makeRemoveChange(change[ChangeIndex.OLD_NODE]), pusher);\n } else if (!oldWasPresent && newIsPresent) {\n yield* output.push(makeAddChange(change[ChangeIndex.NODE]), pusher);\n }\n}\n"],"mappings":";;;;;;;AAUA,UAAiB,4BACf,QACA,WACA,QACA,QACA;CACA,MAAM,gBAAgB,UAAU,OAAO,GAAsB,GAAG;CAChE,MAAM,eAAe,UAAU,OAAO,GAAkB,GAAG;CAE3D,IAAI,iBAAiB,cACnB,OAAO,OAAO,KAAK,QAAQ,MAAM;MAC5B,IAAI,iBAAiB,CAAC,cAC3B,OAAO,OAAO,KAAK,iBAAiB,OAAO,EAAqB,GAAG,MAAM;MACpE,IAAI,CAAC,iBAAiB,cAC3B,OAAO,OAAO,KAAK,cAAc,OAAO,EAAiB,GAAG,MAAM;AAEtE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-source.js","names":["#tableName","#columns","#primaryKey","#primaryIndexSort","#indexes","#connections","#getPrimaryIndex","#fetch","#disconnect","#getSchema","#fetchMulti","#getOrCreateIndex","#overlay","#writeChange","#pushEpoch"],"sources":["../../../../../../zql/src/ivm/memory-source.ts"],"sourcesContent":["import {assert, unreachable} from '../../../shared/src/asserts.ts';\nimport {BTreeSet} from '../../../shared/src/btree-set.ts';\nimport {hasOwn} from '../../../shared/src/has-own.ts';\nimport {once, toSorted} from '../../../shared/src/iterables.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport type {\n Condition,\n Ordering,\n OrderPart,\n} from '../../../zero-protocol/src/ast.ts';\nimport type {Row, Value} from '../../../zero-protocol/src/data.ts';\nimport type {PrimaryKey} from '../../../zero-protocol/src/primary-key.ts';\nimport type {SchemaValue} from '../../../zero-types/src/schema-value.ts';\nimport type {DebugDelegate} from '../builder/debug-delegate.ts';\nimport {\n createPredicate,\n transformFilters,\n type NoSubqueryCondition,\n} from '../builder/filter.ts';\nimport {assertOrderingIncludesPK} from '../query/complete-ordering.ts';\nimport {ChangeType} from './change-type.ts';\nimport type {Change} from './change.ts';\nimport {makeAddChange, makeEditChange, makeRemoveChange} from './change.ts';\nimport {\n constraintMatchesPrimaryKey,\n constraintMatchesRow,\n primaryKeyConstraintFromFilters,\n type Constraint,\n} from './constraint.ts';\nimport {\n compareValues,\n makeComparator,\n valuesEqual,\n type Comparator,\n type Node,\n} from './data.ts';\nimport {filterPush} from './filter-push.ts';\nimport {\n skipYields,\n type FetchRequest,\n type Input,\n type MultiConstraint,\n type Output,\n type Start,\n} from './operator.ts';\nimport type {SourceSchema} from './schema.ts';\nimport {SourceChangeIndex} from './source-change-index.ts';\nimport type {\n Source,\n SourceChange,\n SourceChangeAdd,\n SourceChangeEdit,\n SourceChangeRemove,\n SourceInput,\n} from './source.ts';\nimport {makeSourceChangeAdd, makeSourceChangeRemove} from './source.ts';\nimport type {Stream} from './stream.ts';\n\nexport type Overlay = {\n epoch: number;\n change: SourceChange;\n};\n\nexport type Overlays = {\n add: Row | undefined;\n remove: Row | undefined;\n};\n\ntype Index = {\n comparator: Comparator;\n data: BTreeSet<Row>;\n usedBy: Set<Connection>;\n};\n\nexport type Connection = {\n input: Input;\n output: Output | undefined;\n sort?: Ordering | undefined;\n splitEditKeys: Set<string> | undefined;\n compareRows: Comparator;\n filters:\n | {\n condition: NoSubqueryCondition;\n predicate: (row: Row) => boolean;\n }\n | undefined;\n readonly debug?: DebugDelegate | undefined;\n lastPushedEpoch: number;\n};\n\n/**\n * A `MemorySource` is a source that provides data to the pipeline from an\n * in-memory data source.\n *\n * This data is kept in sorted order as downstream pipelines will always expect\n * the data they receive from `pull` to be in sorted order.\n */\nexport class MemorySource implements Source {\n readonly #tableName: string;\n readonly #columns: Record<string, SchemaValue>;\n readonly #primaryKey: PrimaryKey;\n readonly #primaryIndexSort: Ordering;\n readonly #indexes: Map<string, Index> = new Map();\n readonly #connections: Connection[] = [];\n\n #overlay: Overlay | undefined;\n #pushEpoch = 0;\n\n constructor(\n tableName: string,\n columns: Record<string, SchemaValue>,\n primaryKey: PrimaryKey,\n primaryIndexData?: BTreeSet<Row>,\n ) {\n this.#tableName = tableName;\n this.#columns = columns;\n this.#primaryKey = primaryKey;\n this.#primaryIndexSort = primaryKey.map(k => [k, 'asc']);\n const comparator = makeBoundComparator(this.#primaryIndexSort);\n this.#indexes.set(JSON.stringify(this.#primaryIndexSort), {\n comparator,\n data: primaryIndexData ?? new BTreeSet<Row>(comparator),\n usedBy: new Set(),\n });\n }\n\n get tableSchema() {\n return {\n name: this.#tableName,\n columns: this.#columns,\n primaryKey: this.#primaryKey,\n };\n }\n\n fork() {\n const primaryIndex = this.#getPrimaryIndex();\n return new MemorySource(\n this.#tableName,\n this.#columns,\n this.#primaryKey,\n primaryIndex.data.clone(),\n );\n }\n\n get data(): BTreeSet<Row> {\n return this.#getPrimaryIndex().data;\n }\n\n #getSchema(connection: Connection, unordered: boolean): SourceSchema {\n return {\n tableName: this.#tableName,\n columns: this.#columns,\n primaryKey: this.#primaryKey,\n sort: unordered ? undefined : connection.sort,\n system: 'client',\n relationships: {},\n isHidden: false,\n compareRows: connection.compareRows,\n };\n }\n\n connect(\n sort: Ordering | undefined,\n filters?: Condition,\n splitEditKeys?: Set<string>,\n ): SourceInput {\n const transformedFilters = transformFilters(filters);\n const unordered = sort === undefined;\n const internalSort = sort ?? this.#primaryIndexSort;\n\n const input: SourceInput = {\n getSchema: () => schema,\n fetch: req => this.#fetch(req, connection),\n setOutput: output => {\n connection.output = output;\n },\n destroy: () => {\n this.#disconnect(input);\n },\n fullyAppliedFilters: !transformedFilters.conditionsRemoved,\n };\n\n const connection: Connection = {\n input,\n output: undefined,\n sort: internalSort,\n splitEditKeys,\n compareRows: makeComparator(internalSort),\n filters: transformedFilters.filters\n ? {\n condition: transformedFilters.filters,\n predicate: createPredicate(transformedFilters.filters),\n }\n : undefined,\n lastPushedEpoch: 0,\n };\n const schema = this.#getSchema(connection, unordered);\n if (!unordered) {\n assertOrderingIncludesPK(internalSort, this.#primaryKey);\n }\n this.#connections.push(connection);\n return input;\n }\n\n #disconnect(input: Input): void {\n const idx = this.#connections.findIndex(c => c.input === input);\n assert(idx !== -1, 'Connection not found');\n this.#connections.splice(idx, 1);\n\n // TODO: We used to delete unused indexes here. But in common cases like\n // navigating into issue detail pages it caused a ton of constantly\n // building and destroying indexes.\n //\n // Perhaps some intelligent LRU or something is needed here but for now,\n // the opposite extreme of keeping all indexes for the lifetime of the\n // page seems better.\n }\n\n #getPrimaryIndex(): Index {\n const index = this.#indexes.get(JSON.stringify(this.#primaryIndexSort));\n assert(index, 'Primary index not found');\n return index;\n }\n\n #getOrCreateIndex(sort: Ordering, usedBy: Connection): Index {\n const key = JSON.stringify(sort);\n const index = this.#indexes.get(key);\n // Future optimization could use existing index if it's the same just sorted\n // in reverse of needed.\n if (index) {\n index.usedBy.add(usedBy);\n return index;\n }\n\n const comparator = makeBoundComparator(sort);\n\n // When creating these synchronously becomes a problem, a few options:\n // 1. Allow users to specify needed indexes up front\n // 2. Create indexes in a different thread asynchronously (this would require\n // modifying the BTree to be able to be passed over structured-clone, or using\n // a different library.)\n // 3. We could even theoretically do (2) on multiple threads and then merge the\n // results!\n const rows = toSorted(this.#getPrimaryIndex().data, comparator);\n const data = BTreeSet.fromSorted(comparator, rows);\n\n const newIndex = {comparator, data, usedBy: new Set([usedBy])};\n this.#indexes.set(key, newIndex);\n return newIndex;\n }\n\n // For unit testing that we correctly clean up indexes.\n getIndexKeys(): string[] {\n return [...this.#indexes.keys()];\n }\n\n *#fetch(req: FetchRequest, conn: Connection): Stream<Node | 'yield'> {\n // multiConstraints is handled by driving sub-fetches off the first\n // entry's values and post-filtering matches against any remaining\n // entries. TableSource implements multi-IN natively via SQL `AND` of\n // `IN` clauses; the in-memory path is correct but not specially\n // optimized — it pays the index-seek cost per primary value, then\n // walks each result against the rest.\n if (\n req.multiConstraints &&\n req.multiConstraints.some(mc => mc.length > 0)\n ) {\n yield* this.#fetchMulti(req, conn);\n return;\n }\n const requestedSort = must(conn.sort);\n const {compareRows} = conn;\n // Avoid allocating a new closure when not reversing (the common case).\n const connectionComparator: Comparator = req.reverse\n ? (r1, r2) => compareRows(r2, r1)\n : compareRows;\n\n const pkConstraint = primaryKeyConstraintFromFilters(\n conn.filters?.condition,\n this.#primaryKey,\n );\n // The primary key constraint will be more limiting than the constraint\n // so swap out to that if it exists.\n const fetchOrPkConstraint = pkConstraint ?? req.constraint;\n\n // If there is a constraint, we need an index sorted by it first.\n const indexSort: OrderPart[] = [];\n if (fetchOrPkConstraint) {\n for (const key of Object.keys(fetchOrPkConstraint)) {\n indexSort.push([key, 'asc']);\n }\n }\n\n // For the special case of constraining by PK, we don't need to worry about\n // any requested sort since there can only be one result. Otherwise we also\n // need the index sorted by the requested sort.\n if (\n this.#primaryKey.length > 1 ||\n !fetchOrPkConstraint ||\n !constraintMatchesPrimaryKey(fetchOrPkConstraint, this.#primaryKey)\n ) {\n indexSort.push(...requestedSort);\n }\n\n const index = this.#getOrCreateIndex(indexSort, conn);\n const {data, comparator: compare} = index;\n // Avoid allocating a new closure when not reversing (the common case).\n const indexComparator: Comparator = req.reverse\n ? (r1, r2) => compare(r2, r1)\n : compare;\n\n const startAt = req.start?.row;\n\n // If there is a constraint, we want to start our scan at the first row that\n // matches the constraint. But because the next OrderPart can be `desc`,\n // it's not true that {[constraintKey]: constraintValue} is the first\n // matching row. Because in that case, the other fields will all be\n // `undefined`, and in Zero `undefined` is always less than any other value.\n // So if the second OrderPart is descending then `undefined` values will\n // actually be the *last* row. We need a way to stay \"start at the first row\n // with this constraint value\". RowBound with the corresponding compareBound\n // comparator accomplishes this. The right thing is probably to teach the\n // btree library to support this concept.\n let scanStart: RowBound | undefined;\n\n if (fetchOrPkConstraint) {\n scanStart = {};\n for (const [key, dir] of indexSort) {\n if (hasOwn(fetchOrPkConstraint, key)) {\n scanStart[key] = fetchOrPkConstraint[key];\n } else {\n if (req.reverse) {\n scanStart[key] = dir === 'asc' ? maxValue : minValue;\n } else {\n scanStart[key] = dir === 'asc' ? minValue : maxValue;\n }\n }\n }\n } else {\n scanStart = startAt;\n }\n\n const rowsIterable = generateRows(data, scanStart, req.reverse);\n const withOverlay = generateWithOverlay(\n startAt,\n pkConstraint ? once(rowsIterable) : rowsIterable,\n // use `req.constraint` here and not `fetchOrPkConstraint` since `fetchOrPkConstraint` could be the\n // primary key constraint. The primary key constraint comes from filters and is acting as a filter\n // rather than as the fetch constraint.\n req.constraint,\n this.#overlay,\n conn.lastPushedEpoch,\n // Use indexComparator, generateWithOverlayInner has a subtle dependency\n // on this. Since generateWithConstraint is done after\n // generateWithOverlay, the generator consumed by generateWithOverlayInner\n // does not end when the constraint stops matching and so the final\n // check to yield an add overlay if not yet yielded is not reached.\n // However, using the indexComparator the add overlay will be less than\n // the first row that does not match the constraint, and so any\n // not yet yielded add overlay will be yielded when the first row\n // not matching the constraint is reached.\n indexComparator,\n conn.filters?.predicate,\n );\n\n const withConstraint = generateWithConstraint(\n skipYields(\n generateWithStart(withOverlay, req.start, connectionComparator),\n ),\n // we use `req.constraint` and not `fetchOrPkConstraint` here because we need to\n // AND the constraint with what could have been the primary key constraint\n req.constraint,\n );\n\n yield* conn.filters\n ? generateWithFilter(withConstraint, conn.filters.predicate)\n : withConstraint;\n }\n\n *#fetchMulti(req: FetchRequest, conn: Connection): Stream<Node | 'yield'> {\n // Caller (`#fetch`) guards entry on `req.multiConstraints.some(mc =>\n // mc.length > 0)`, so `multis` is guaranteed non-empty after the\n // empty-entry filter. Per the MultiConstraint contract (operator.ts),\n // entries are non-empty, share key shape, are unique, and are\n // key-compatible with `req.constraint`.\n const multis = must(req.multiConstraints).filter(mc => mc.length > 0);\n const primary = multis[0];\n const rest = multis.slice(1);\n const baseConstraint = req.constraint;\n\n // Drive sub-fetches off `primary`. Within each sub-fetch the source\n // can use its index for `primary`; we then post-filter rows by\n // checking they also match every entry in `rest`. Per the\n // MultiConstraint contract (see operator.ts), entries are unique and\n // key-compatible with `baseConstraint`, so we don't dedupe or check\n // compatibility here.\n const subStreams: Stream<Node | 'yield'>[] = primary.map(c => {\n const merged: Constraint = baseConstraint ? {...baseConstraint, ...c} : c;\n return this.#fetch(\n {...req, constraint: merged, multiConstraints: undefined},\n conn,\n );\n });\n const merged = mergeSortedStreams(\n subStreams,\n req.reverse\n ? (a, b) => conn.compareRows(b.row, a.row)\n : (a, b) => conn.compareRows(a.row, b.row),\n );\n\n if (rest.length === 0) {\n yield* merged;\n return;\n }\n\n for (const node of merged) {\n if (node === 'yield') {\n yield 'yield';\n continue;\n }\n let matchesAll = true;\n for (const mc of rest) {\n let any = false;\n for (const c of mc) {\n if (constraintMatchesRow(c, node.row)) {\n any = true;\n break;\n }\n }\n if (!any) {\n matchesAll = false;\n break;\n }\n }\n if (matchesAll) yield node;\n }\n }\n\n *push(change: SourceChange): Stream<'yield'> {\n for (const result of this.genPush(change)) {\n if (result === 'yield') {\n yield result;\n }\n }\n }\n\n *genPush(change: SourceChange) {\n const primaryIndex = this.#getPrimaryIndex();\n const {data} = primaryIndex;\n const exists = (row: Row) => data.has(row);\n const setOverlay = (o: Overlay | undefined) => (this.#overlay = o);\n const writeChange = (c: SourceChange) => this.#writeChange(c);\n yield* genPushAndWriteWithSplitEdit(\n this.#connections,\n change,\n exists,\n setOverlay,\n writeChange,\n () => ++this.#pushEpoch,\n );\n }\n\n #writeChange(change: SourceChange) {\n for (const {data} of this.#indexes.values()) {\n switch (change[SourceChangeIndex.TYPE]) {\n case ChangeType.ADD: {\n const added = data.add(change[SourceChangeIndex.ROW]);\n // must succeed since we checked has() above.\n assert(\n added,\n 'MemorySource: add must succeed since row existence was already checked',\n );\n break;\n }\n case ChangeType.REMOVE: {\n const removed = data.delete(change[SourceChangeIndex.ROW]);\n // must succeed since we checked has() above.\n assert(\n removed,\n 'MemorySource: remove must succeed since row existence was already checked',\n );\n break;\n }\n case ChangeType.EDIT: {\n // TODO: We could see if the PK (form the index tree's perspective)\n // changed and if not we could use set.\n // We cannot just do `set` with the new value since the `oldRow` might\n // not map to the same entry as the new `row` in the index btree.\n const removed = data.delete(change[SourceChangeIndex.OLD_ROW]);\n // must succeed since we checked has() above.\n assert(\n removed,\n 'MemorySource: edit remove must succeed since row existence was already checked',\n );\n data.add(change[SourceChangeIndex.ROW]);\n break;\n }\n default:\n unreachable(change);\n }\n }\n }\n}\n\nfunction* generateWithConstraint(\n it: Stream<Node>,\n constraint: Constraint | undefined,\n) {\n for (const node of it) {\n if (constraint && !constraintMatchesRow(constraint, node.row)) {\n break;\n }\n yield node;\n }\n}\n\nfunction* generateWithFilter(it: Stream<Node>, filter: (row: Row) => boolean) {\n for (const node of it) {\n if (filter(node.row)) {\n yield node;\n }\n }\n}\n\nexport function* genPushAndWriteWithSplitEdit(\n connections: readonly Connection[],\n change: SourceChange,\n exists: (row: Row) => boolean,\n setOverlay: (o: Overlay | undefined) => Overlay | undefined,\n writeChange: (c: SourceChange) => void,\n getNextEpoch: () => number,\n) {\n let shouldSplitEdit = false;\n if (change[SourceChangeIndex.TYPE] === ChangeType.EDIT) {\n for (const {splitEditKeys} of connections) {\n if (splitEditKeys) {\n for (const key of splitEditKeys) {\n if (\n !valuesEqual(\n change[SourceChangeIndex.ROW][key],\n change[SourceChangeIndex.OLD_ROW][key],\n )\n ) {\n shouldSplitEdit = true;\n break;\n }\n }\n }\n }\n }\n\n if (change[SourceChangeIndex.TYPE] === ChangeType.EDIT && shouldSplitEdit) {\n yield* genPushAndWrite(\n connections,\n makeSourceChangeRemove(change[SourceChangeIndex.OLD_ROW]),\n exists,\n setOverlay,\n writeChange,\n getNextEpoch(),\n );\n yield* genPushAndWrite(\n connections,\n makeSourceChangeAdd(change[SourceChangeIndex.ROW]),\n exists,\n setOverlay,\n writeChange,\n getNextEpoch(),\n );\n } else {\n yield* genPushAndWrite(\n connections,\n change,\n exists,\n setOverlay,\n writeChange,\n getNextEpoch(),\n );\n }\n}\n\nfunction* genPushAndWrite(\n connections: readonly Connection[],\n change: SourceChangeAdd | SourceChangeRemove | SourceChangeEdit,\n exists: (row: Row) => boolean,\n setOverlay: (o: Overlay | undefined) => Overlay | undefined,\n writeChange: (c: SourceChange) => void,\n pushEpoch: number,\n) {\n for (const x of genPush(connections, change, exists, setOverlay, pushEpoch)) {\n yield x;\n }\n writeChange(change);\n}\n\nfunction* genPush(\n connections: readonly Connection[],\n change: SourceChange,\n exists: (row: Row) => boolean,\n setOverlay: (o: Overlay | undefined) => void,\n pushEpoch: number,\n) {\n switch (change[SourceChangeIndex.TYPE]) {\n case ChangeType.ADD:\n assert(\n !exists(change[SourceChangeIndex.ROW]),\n () => `Row already exists ${stringify(change)}`,\n );\n break;\n case ChangeType.REMOVE:\n assert(\n exists(change[SourceChangeIndex.ROW]),\n () => `Row not found ${stringify(change)}`,\n );\n break;\n case ChangeType.EDIT:\n assert(\n exists(change[SourceChangeIndex.OLD_ROW]),\n () => `Row not found ${stringify(change)}`,\n );\n break;\n default:\n unreachable(change);\n }\n\n for (const conn of connections) {\n const {output, filters, input} = conn;\n if (output) {\n conn.lastPushedEpoch = pushEpoch;\n setOverlay({epoch: pushEpoch, change});\n const outputChange: Change =\n change[SourceChangeIndex.TYPE] === ChangeType.EDIT\n ? makeEditChange(\n {row: change[SourceChangeIndex.ROW], relationships: {}},\n {row: change[SourceChangeIndex.OLD_ROW], relationships: {}},\n )\n : change[SourceChangeIndex.TYPE] === ChangeType.ADD\n ? makeAddChange({\n row: change[SourceChangeIndex.ROW],\n relationships: {},\n })\n : makeRemoveChange({\n row: change[SourceChangeIndex.ROW],\n relationships: {},\n });\n yield* filterPush(outputChange, output, input, filters?.predicate);\n yield undefined;\n }\n }\n\n setOverlay(undefined);\n}\n\nexport function* generateWithStart(\n nodes: Iterable<Node | 'yield'>,\n start: Start | undefined,\n compare: (r1: Row, r2: Row) => number,\n): Stream<Node | 'yield'> {\n if (!start) {\n yield* nodes;\n return;\n }\n let started = false;\n for (const node of nodes) {\n if (node === 'yield') {\n yield node;\n continue;\n }\n if (!started) {\n if (start.basis === 'at') {\n if (compare(node.row, start.row) >= 0) {\n started = true;\n }\n } else if (start.basis === 'after') {\n if (compare(node.row, start.row) > 0) {\n started = true;\n }\n }\n }\n if (started) {\n yield node;\n }\n }\n}\n\n/**\n * Takes an iterator and overlay.\n * Splices the overlay into the iterator at the correct position.\n *\n * @param startAt - if there is a lower bound to the stream. If the lower bound of the stream\n * is above the overlay, the overlay will be skipped.\n * @param rows - the stream into which the overlay should be spliced\n * @param constraint - constraint that was applied to the rowIterator and should\n * also be applied to the overlay.\n * @param overlay - the overlay values to splice in\n * @param compare - the comparator to use to find the position for the overlay\n */\nexport function* generateWithOverlay(\n startAt: Row | undefined,\n rows: Iterable<Row>,\n constraint: Constraint | undefined,\n overlay: Overlay | undefined,\n lastPushedEpoch: number,\n compare: Comparator,\n filterPredicate?: (row: Row) => boolean | undefined,\n multiConstraints?: readonly MultiConstraint[] | undefined,\n) {\n let overlayToApply: Overlay | undefined = undefined;\n if (overlay && lastPushedEpoch >= overlay.epoch) {\n overlayToApply = overlay;\n }\n const overlays = computeOverlays(\n startAt,\n constraint,\n overlayToApply,\n compare,\n filterPredicate,\n multiConstraints,\n );\n yield* generateWithOverlayInner(rows, overlays, compare);\n}\n\nfunction computeOverlays(\n startAt: Row | undefined,\n constraint: Constraint | undefined,\n overlay: Overlay | undefined,\n compare: Comparator,\n filterPredicate?: (row: Row) => boolean | undefined,\n multiConstraints?: readonly MultiConstraint[] | undefined,\n): Overlays {\n let overlays: Overlays = {\n add: undefined,\n remove: undefined,\n };\n switch (overlay?.change[SourceChangeIndex.TYPE]) {\n case ChangeType.ADD:\n overlays = {\n add: overlay.change[SourceChangeIndex.ROW],\n remove: undefined,\n };\n break;\n case ChangeType.REMOVE:\n overlays = {\n add: undefined,\n remove: overlay.change[SourceChangeIndex.ROW],\n };\n break;\n case ChangeType.EDIT:\n overlays = {\n add: overlay.change[SourceChangeIndex.ROW],\n remove: overlay.change[SourceChangeIndex.OLD_ROW],\n };\n break;\n }\n\n if (startAt) {\n overlays = overlaysForStartAt(overlays, startAt, compare);\n }\n\n if (constraint) {\n overlays = overlaysForConstraint(overlays, constraint);\n }\n\n overlays = applyMultiConstraintsToOverlays(overlays, multiConstraints);\n\n if (filterPredicate) {\n overlays = overlaysForFilterPredicate(overlays, filterPredicate);\n }\n\n return overlays;\n}\n\nfunction applyMultiConstraintsToOverlays(\n overlays: Overlays,\n multiConstraints: readonly MultiConstraint[] | undefined,\n): Overlays {\n if (!multiConstraints) return overlays;\n for (const mc of multiConstraints) {\n if (mc.length > 0) {\n overlays = overlaysForMultiConstraint(overlays, mc);\n }\n }\n return overlays;\n}\n\nexport {overlaysForMultiConstraint as overlaysForMultiConstraintForTest};\n\nfunction overlaysForMultiConstraint(\n {add, remove}: Overlays,\n multiConstraint: MultiConstraint,\n): Overlays {\n const matchesAny = (row: Row | undefined) => {\n if (row === undefined) return false;\n for (const c of multiConstraint) {\n if (constraintMatchesRow(c, row)) return true;\n }\n return false;\n };\n return {\n add: matchesAny(add) ? add : undefined,\n remove: matchesAny(remove) ? remove : undefined,\n };\n}\n\nexport {overlaysForStartAt as overlaysForStartAtForTest};\n\nfunction overlaysForStartAt(\n {add, remove}: Overlays,\n startAt: Row,\n compare: Comparator,\n): Overlays {\n const undefinedIfBeforeStartAt = (row: Row | undefined) =>\n row === undefined || compare(row, startAt) < 0 ? undefined : row;\n return {\n add: undefinedIfBeforeStartAt(add),\n remove: undefinedIfBeforeStartAt(remove),\n };\n}\n\nexport {overlaysForConstraint as overlaysForConstraintForTest};\n\nfunction overlaysForConstraint(\n {add, remove}: Overlays,\n constraint: Constraint,\n): Overlays {\n const undefinedIfDoesntMatchConstraint = (row: Row | undefined) =>\n row === undefined || !constraintMatchesRow(constraint, row)\n ? undefined\n : row;\n\n return {\n add: undefinedIfDoesntMatchConstraint(add),\n remove: undefinedIfDoesntMatchConstraint(remove),\n };\n}\n\nfunction overlaysForFilterPredicate(\n {add, remove}: Overlays,\n filterPredicate: (row: Row) => boolean | undefined,\n): Overlays {\n const undefinedIfDoesntMatchFilter = (row: Row | undefined) =>\n row === undefined || !filterPredicate(row) ? undefined : row;\n\n return {\n add: undefinedIfDoesntMatchFilter(add),\n remove: undefinedIfDoesntMatchFilter(remove),\n };\n}\n\nexport function* generateWithOverlayInner(\n rowIterator: Iterable<Row>,\n overlays: Overlays,\n compare: (r1: Row, r2: Row) => number,\n) {\n let addOverlayYielded = false;\n let removeOverlaySkipped = false;\n for (const row of rowIterator) {\n if (!addOverlayYielded && overlays.add) {\n const cmp = compare(overlays.add, row);\n if (cmp < 0) {\n addOverlayYielded = true;\n yield {row: overlays.add, relationships: {}};\n }\n }\n\n if (!removeOverlaySkipped && overlays.remove) {\n const cmp = compare(overlays.remove, row);\n if (cmp === 0) {\n removeOverlaySkipped = true;\n continue;\n }\n }\n yield {row, relationships: {}};\n }\n\n if (!addOverlayYielded && overlays.add) {\n yield {row: overlays.add, relationships: {}};\n }\n}\n\n/**\n * Like {@link generateWithOverlay} but for unordered streams.\n * No `startAt` or comparator needed. Injects remove/old-edit rows eagerly\n * at the start, and suppresses add/new-edit rows inline by PK match.\n */\nexport function* generateWithOverlayUnordered(\n rows: Iterable<Row>,\n constraint: Constraint | undefined,\n overlay: Overlay | undefined,\n lastPushedEpoch: number,\n primaryKey: PrimaryKey,\n filterPredicate?: (row: Row) => boolean,\n multiConstraints?: readonly MultiConstraint[] | undefined,\n) {\n let overlayToApply: Overlay | undefined = undefined;\n if (overlay && lastPushedEpoch >= overlay.epoch) {\n overlayToApply = overlay;\n }\n let overlays: Overlays = {add: undefined, remove: undefined};\n switch (overlayToApply?.change[SourceChangeIndex.TYPE]) {\n case ChangeType.ADD:\n overlays = {\n add: overlayToApply.change[SourceChangeIndex.ROW],\n remove: undefined,\n };\n break;\n case ChangeType.REMOVE:\n overlays = {\n add: undefined,\n remove: overlayToApply.change[SourceChangeIndex.ROW],\n };\n break;\n case ChangeType.EDIT:\n overlays = {\n add: overlayToApply.change[SourceChangeIndex.ROW],\n remove: overlayToApply.change[SourceChangeIndex.OLD_ROW],\n };\n break;\n }\n if (constraint) {\n overlays = overlaysForConstraint(overlays, constraint);\n }\n overlays = applyMultiConstraintsToOverlays(overlays, multiConstraints);\n if (filterPredicate) {\n overlays = overlaysForFilterPredicate(overlays, filterPredicate);\n }\n yield* generateWithOverlayInnerUnordered(rows, overlays, primaryKey);\n}\n\nexport function* generateWithOverlayInnerUnordered(\n rowIterator: Iterable<Row>,\n overlays: Overlays,\n primaryKey: PrimaryKey,\n) {\n // Eager inject: yield the add overlay at the start (row not yet in storage)\n if (overlays.add) {\n yield {row: overlays.add, relationships: {}};\n }\n // Stream with inline suppress: skip the remove overlay (row still in storage)\n let removeSkipped = false;\n for (const row of rowIterator) {\n if (\n !removeSkipped &&\n overlays.remove &&\n rowMatchesPK(overlays.remove, row, primaryKey)\n ) {\n removeSkipped = true;\n continue;\n }\n yield {row, relationships: {}};\n }\n}\n\nfunction rowMatchesPK(a: Row, b: Row, primaryKey: PrimaryKey): boolean {\n for (const key of primaryKey) {\n if (!valuesEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * A location to begin scanning an index from. Can either be a specific value\n * or the min or max possible value for the type. This is used to start a scan\n * at the beginning of the rows matching a constraint.\n */\ntype Bound = Value | MinValue | MaxValue;\ntype RowBound = Record<string, Bound>;\nconst minValue = Symbol('min-value');\ntype MinValue = typeof minValue;\nconst maxValue = Symbol('max-value');\ntype MaxValue = typeof maxValue;\n\nfunction makeBoundComparator(sort: Ordering): Comparator {\n // Pre-extract the first two keys/directions to avoid per-call array access.\n // All paths share one function literal (single SFI) so the BTree comparator call site\n // stays monomorphic across indexes with different sort orderings, preventing V8 IC deopt.\n // Even a 2-SFI split (e.g. separate len=1 path) creates a polymorphic IC that\n // measurably regresses performance, so we keep a single return body.\n const len = sort.length;\n const k0 = sort[0][0];\n const a0 = sort[0][1] === 'asc';\n const k1 = len > 1 ? sort[1][0] : '';\n const a1 = len > 1 ? sort[1][1] === 'asc' : true;\n\n return (a: RowBound, b: RowBound) => {\n const c0 = a0 ? compareBounds(a[k0], b[k0]) : compareBounds(b[k0], a[k0]);\n if (len === 1 || c0 !== 0) return c0;\n const c1 = a1 ? compareBounds(a[k1], b[k1]) : compareBounds(b[k1], a[k1]);\n if (len === 2 || c1 !== 0) return c1;\n // Hot! Do not use destructuring\n for (let i = 2; i < len; i++) {\n const cmp = compareBounds(a[sort[i][0]], b[sort[i][0]]);\n if (cmp !== 0) return sort[i][1] === 'asc' ? cmp : -cmp;\n }\n return 0;\n };\n}\n\nfunction compareBounds(a: Bound, b: Bound): number {\n if (a === b) {\n return 0;\n }\n // Use typeof to guard the Symbol sentinel checks first. This gives V8 a\n // clear type discriminant so the common non-symbol path compiles as a\n // specialised numeric/string fast-path without a Smi deopt when the\n // minValue/maxValue sentinel symbols appear.\n if (typeof a === 'symbol') {\n return a === minValue ? -1 : 1;\n }\n if (typeof b === 'symbol') {\n return b === minValue ? 1 : -1;\n }\n return compareValues(a, b);\n}\n\nfunction* generateRows(\n data: BTreeSet<Row>,\n scanStart: RowBound | undefined,\n reverse: boolean | undefined,\n) {\n yield* data[reverse ? 'valuesFromReversed' : 'valuesFrom'](\n scanStart as Row | undefined,\n );\n}\n\nexport function stringify(change: SourceChange) {\n return JSON.stringify(change, (_, v) =>\n typeof v === 'bigint' ? v.toString() : v,\n );\n}\n\n/**\n * N-way merge of pre-sorted Node streams. Each input stream must yield\n * Nodes in `compare` order (and may interleave 'yield' values, which are\n * forwarded as-is). The merged stream yields Nodes in `compare` order.\n *\n * Implemented as a binary min-heap keyed by `compare(entry.row, ...)`, so\n * each emit costs O(log K) (K = number of streams) rather than the O(K)\n * a linear-scan-of-heads merge would. Matters when FlippedJoin chunks a\n * large `multiConstraints` IN-list into hundreds of sub-fetches.\n *\n * If the merged stream is closed early (e.g. downstream `Take` `break`s\n * after hitting its limit, prompting JS to call `.return()` on this\n * generator), the `finally` block propagates `.return()` to each\n * non-exhausted sub-iterator so the underlying sources (SQLite cursors,\n * etc.) can run their cleanup. Without this, mid-merge early-termination\n * leaves cursors open, causing later writes on the same connection to\n * fail with \"database connection is busy executing a query\".\n */\nexport function* mergeSortedStreams(\n streams: readonly Stream<Node | 'yield'>[],\n compare: (a: Node, b: Node) => number,\n): Stream<Node | 'yield'> {\n const iterators: Iterator<Node | 'yield'>[] = streams.map(s =>\n s[Symbol.iterator](),\n );\n // True while iterators[i] hasn't yet returned `done`. The finally\n // block uses this to skip already-exhausted streams when propagating\n // `.return()`.\n const active: boolean[] = new Array(iterators.length).fill(true);\n\n // Min-heap of entries; `idx` tells us which stream to refill from\n // after the entry's row is emitted.\n type Entry = {row: Node; idx: number};\n const heap: Entry[] = [];\n\n const siftUp = (start: number) => {\n let i = start;\n while (i > 0) {\n const p = (i - 1) >> 1;\n if (compare(heap[i].row, heap[p].row) >= 0) return;\n const t = heap[i];\n heap[i] = heap[p];\n heap[p] = t;\n i = p;\n }\n };\n\n const siftDown = (start: number) => {\n let i = start;\n const n = heap.length;\n while (true) {\n const l = (i << 1) + 1;\n const r = l + 1;\n let smallest = i;\n if (l < n && compare(heap[l].row, heap[smallest].row) < 0) smallest = l;\n if (r < n && compare(heap[r].row, heap[smallest].row) < 0) smallest = r;\n if (smallest === i) return;\n const t = heap[i];\n heap[i] = heap[smallest];\n heap[smallest] = t;\n i = smallest;\n }\n };\n\n // Pull the next Node from iterator `idx`, forwarding any 'yield's.\n // Returns the Node, or `undefined` once the stream is exhausted.\n const pullNext = function* (\n idx: number,\n ): Generator<'yield', Node | undefined, undefined> {\n while (true) {\n const r = iterators[idx].next();\n if (r.done) {\n active[idx] = false;\n return undefined;\n }\n if (r.value === 'yield') {\n yield 'yield';\n continue;\n }\n return r.value;\n }\n };\n\n try {\n // Prime: push the first row of each non-empty stream onto the heap.\n for (let i = 0; i < iterators.length; i++) {\n const row = yield* pullNext(i);\n if (row !== undefined) {\n heap.push({row, idx: i});\n siftUp(heap.length - 1);\n }\n }\n\n while (heap.length > 0) {\n // Root is the global min across all active streams.\n const top = heap[0];\n yield top.row;\n const next = yield* pullNext(top.idx);\n if (next !== undefined) {\n // Refill root in place (top === heap[0]) and sift down. The\n // already-yielded `top.row` value is captured by the yield, so\n // mutating it here doesn't affect what was emitted.\n top.row = next;\n siftDown(0);\n } else {\n // Stream exhausted. Move tail to root and shrink. Pop returns\n // the last entry; if the heap had only one entry it was the\n // root we just yielded, so we just leave the heap empty.\n const last = must(heap.pop());\n if (heap.length > 0) {\n heap[0] = last;\n siftDown(0);\n }\n }\n }\n } finally {\n // Close any iterators that aren't already exhausted so their\n // `finally` blocks (which release cursors / cached statements) run.\n for (let i = 0; i < iterators.length; i++) {\n if (active[i]) {\n iterators[i].return?.();\n }\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-storage.js","names":["#data"],"sources":["../../../../../../zql/src/ivm/memory-storage.ts"],"sourcesContent":["import {compareUTF8} from 'compare-utf8';\nimport {BTreeSet} from '../../../shared/src/btree-set.ts';\nimport type {JSONValue} from '../../../shared/src/json.ts';\nimport type {Storage} from './operator.ts';\nimport type {Stream} from './stream.ts';\n\ntype Entry = [key: string, value: JSONValue];\n\nfunction comparator(a: Entry, b: Entry): number {\n return compareUTF8(a[0], b[0]);\n}\n\n/**\n * MemoryStorage is a simple in-memory implementation of `Storage` for use\n * on the client and in tests.\n */\nexport class MemoryStorage implements Storage {\n #data: BTreeSet<Entry> = new BTreeSet(comparator);\n\n set(key: string, value: JSONValue) {\n this.#data.add([key, value]);\n }\n\n get(key: string, def?: JSONValue): JSONValue | undefined {\n const r = this.#data.get([key, null]);\n if (r !== undefined) {\n return r[1];\n }\n return def;\n }\n\n del(key: string) {\n this.#data.delete([key, null]);\n }\n\n *scan(options?: {prefix: string}): Stream<[string, JSONValue]> {\n for (const entry of this.#data.valuesFrom(\n options && [options.prefix, null],\n )) {\n if (options && !entry[0].startsWith(options.prefix)) {\n return;\n }\n yield entry;\n }\n }\n\n cloneData(): Record<string, JSONValue> {\n return structuredClone(Object.fromEntries(this.#data.values()));\n }\n}\n"],"mappings":";;;AAQA,SAAS,WAAW,GAAU,GAAkB;CAC9C,OAAO,YAAY,EAAE,IAAI,EAAE,EAAE;AAC/B;;;;;AAMA,IAAa,gBAAb,MAA8C;CAC5C,QAAyB,IAAI,SAAS,UAAU;CAEhD,IAAI,KAAa,OAAkB;EACjC,KAAKA,MAAM,IAAI,CAAC,KAAK,KAAK,CAAC;CAC7B;CAEA,IAAI,KAAa,KAAwC;EACvD,MAAM,IAAI,KAAKA,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC;EACpC,IAAI,MAAM,KAAA,GACR,OAAO,EAAE;EAEX,OAAO;CACT;CAEA,IAAI,KAAa;EACf,KAAKA,MAAM,OAAO,CAAC,KAAK,IAAI,CAAC;CAC/B;CAEA,CAAC,KAAK,SAAyD;EAC7D,KAAK,MAAM,SAAS,KAAKA,MAAM,WAC7B,WAAW,CAAC,QAAQ,QAAQ,IAAI,CAClC,GAAG;GACD,IAAI,WAAW,CAAC,MAAM,GAAG,WAAW,QAAQ,MAAM,GAChD;GAEF,MAAM;EACR;CACF;CAEA,YAAuC;EACrC,OAAO,gBAAgB,OAAO,YAAY,KAAKA,MAAM,OAAO,CAAC,CAAC;CAChE;AACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operator.js","names":[],"sources":["../../../../../../zql/src/ivm/operator.ts"],"sourcesContent":["import type {JSONValue} from '../../../shared/src/json.ts';\nimport type {Row} from '../../../zero-protocol/src/data.ts';\nimport type {Change} from './change.ts';\nimport type {Constraint} from './constraint.ts';\nimport type {Node} from './data.ts';\nimport type {SourceSchema} from './schema.ts';\nimport type {Stream} from './stream.ts';\n\nexport {skipYields} from './skip-yields.ts';\n\n/**\n * Input to an operator.\n */\nexport interface InputBase {\n /** The schema of the data this input returns. */\n getSchema(): SourceSchema;\n\n /**\n * Completely destroy the input. Destroying an input\n * causes it to call destroy on its upstreams, fully\n * cleaning up a pipeline.\n */\n destroy(): void;\n}\n\nexport interface Input extends InputBase {\n /** Tell the input where to send its output. */\n setOutput(output: Output): void;\n\n /**\n * Fetch data. May modify the data in place.\n * Returns nodes sorted in order of `SourceSchema.compareRows`.\n *\n * The stream may contain 'yield' to yield control to the caller for purposes\n * of responsiveness.\n *\n * Contract:\n * - During fetch: If an input yields 'yield', 'yield' must be yielded to the\n * caller of fetch immediately.\n * - During push: If a fetch to an input consumed by the push logic yields\n * 'yield', it must be yielded to the caller of push immediately.\n */\n fetch(req: FetchRequest): Stream<Node | 'yield'>;\n}\n\n/**\n * A single multi-row IN clause: a non-empty list of Constraints all\n * sharing the same column shape. Sources treat it as\n * `(col_a, col_b, …) IN VALUES (…)`.\n *\n * Caller invariants (sources rely on these — they are not re-checked):\n * - **Unique entries.** TableSource gets set semantics for free from SQL\n * `IN`; MemorySource fans sub-fetches out per entry, so duplicates\n * would yield the same row N times. FlippedJoin groups by canonical\n * parent-key (`flipped-join.ts:#fetchBatched`) before emitting.\n * - **Key-compatible with `req.constraint`.** Entries that contradict\n * `constraint` should be dropped upstream. FlippedJoin filters\n * incompatible children via `constraintsAreCompatible` before adding\n * them to a batch.\n */\nexport type MultiConstraint = readonly Constraint[];\n\nexport type FetchRequest = {\n readonly constraint?: Constraint | undefined;\n\n /**\n * List of multi-row IN clauses, all ANDed together (and ANDed with\n * `constraint` if both are provided). Each entry is a `MultiConstraint`\n * over its own set of columns.\n *\n * Used by FlippedJoin to push child→parent fetches into a single\n * batched statement, and to AND together constraints contributed by\n * chained FlippedJoins (e.g. `assigneeID IN (…) AND creatorID IN (…)`).\n */\n readonly multiConstraints?: readonly MultiConstraint[] | undefined;\n\n /** If supplied, `start.row` must have previously been output by fetch or push. */\n readonly start?: Start | undefined;\n\n /** Whether to fetch in reverse order of the SourceSchema's sort. */\n readonly reverse?: boolean | undefined;\n};\n\nexport type Start = {\n readonly row: Row;\n readonly basis: 'at' | 'after';\n};\n\n/**\n * An output for an operator. Typically another Operator but can also be\n * the code running the pipeline.\n */\nexport interface Output {\n /**\n * Push incremental changes to data previously received with fetch().\n * Consumers must apply all pushed changes or incremental result will\n * be incorrect.\n * Callers must maintain some invariants for correct operation:\n * - Only add rows which do not already exist (by deep equality).\n * - Only remove rows which do exist (by deep equality).\n * Implmentation can yield 'yield' to yield control to the caller for purposes\n * of responsiveness.\n * Yield contract:\n * - During a push: If a push call to an output yields 'yield', it must be\n * yielded to the caller of push immediately.\n */\n push(change: Change, pusher: InputBase): Stream<'yield'>;\n}\n\n/**\n * An implementation of Output that throws if pushed to. It is used as the\n * initial value for for an operator's output before it is set.\n */\nexport const throwOutput: Output = {\n push(_change: Change): Stream<'yield'> {\n throw new Error('Output not set');\n },\n};\n\n/**\n * Operators are arranged into pipelines.\n * They are stateful.\n * Each operator is an input to the next operator in the chain and an output\n * to the previous.\n */\nexport interface Operator extends Input, Output {}\n\n/**\n * Operators get access to storage that they can store their internal\n * state in.\n */\nexport interface Storage {\n set(key: string, value: JSONValue): void;\n get(key: string, def?: JSONValue): JSONValue | undefined;\n /**\n * If options is not specified, defaults to scanning all entries.\n */\n scan(options?: {prefix: string}): Stream<[string, JSONValue]>;\n del(key: string): void;\n}\n"],"mappings":";;;;;;AAiHA,IAAa,cAAsB,EACjC,KAAK,SAAkC;CACrC,MAAM,IAAI,MAAM,gBAAgB;AAClC,EACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-accumulated.js","names":[],"sources":["../../../../../../zql/src/ivm/push-accumulated.ts"],"sourcesContent":["import {assert, unreachable} from '../../../shared/src/asserts.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport {emptyArray} from '../../../shared/src/sentinels.ts';\nimport {ChangeIndex} from './change-index.ts';\nimport {ChangeType} from './change-type.ts';\nimport {\n makeAddChange,\n makeChildChange,\n makeEditChange,\n makeRemoveChange,\n type Change,\n} from './change.ts';\nimport type {Node} from './data.ts';\nimport type {InputBase, Output} from './operator.ts';\nimport type {SourceSchema} from './schema.ts';\nimport type {Stream} from './stream.ts';\n\n/**\n * # pushAccumulatedChanges\n *\n * Pushes the changes that were accumulated by\n * [fan-out, fan-in] or [ufo, ufi] sub-graphs.\n *\n * This function is called at the end of the sub-graph.\n *\n * The sub-graphs represents `OR`s.\n *\n * Changes that can enter the subgraphs:\n * 1. child (due to exist joins being above the sub-graph)\n * 2. add\n * 3. remove\n * 4. edit\n *\n * # Changes that can exit into `pushAccumulatedChanges`:\n *\n * ## Child\n * If a `child` change enters a sub-graph, it will flow to all branches.\n * Each branch will either:\n * - preserve the `child` change\n * - stop the `child` change (e.g., filter)\n * - convert it to an `add` or `remove` (e.g., exists filter)\n *\n * ## Add\n * If an `add` change enters a sub-graph, it will flow to all branches.\n * Each branch will either:\n * - preserve the `add` change\n * - hide the change (e.g., filter)\n *\n * ## Remove\n * If a `remove` change enters a sub-graph, it will flow to all branches.\n * Each branch will either:\n * - preserve the `remove` change\n * - hide the change (e.g., filter)\n *\n * ## Edit\n * If an `edit` change enters a sub-graph, it will flow to all branches.\n * Each branch will either:\n * - preserve the `edit` change\n * - convert it to an `add` (e.g., filter where old didn't match but new does)\n * - convert it to a `remove` (e.g., filter where old matched but new doesn't)\n *\n * This results in some invariants:\n * - an add coming in will only create adds coming out\n * - a remove coming in will only create removes coming out\n * - an edit coming in can create adds, removes, and edits coming out\n * - a child coming in can create adds, removes, and children coming out\n *\n * # Return of `pushAccumulatedChanges`\n *\n * This function will only push a single change.\n * Given the above invariants, how is this possible?\n *\n * An add that becomes many `adds` results in a single add\n * as the `add` is the same row across all adds. Branches do not change the row.\n *\n * A remove that becomes many `removes` results in a single remove\n * for the same reason.\n *\n * If a child enters and exits, it takes precedence over all other changes.\n * If a child enters and is converted only to add and remove it exits as an edit.\n * If a child enters and is converted to only add or only remove, it exits as that change.\n *\n * If an edit enters and is converted to add and remove it exits as an edit.\n * If an edit enters and is converted to only add or only remove, it exits as that change.\n * If an edit enters and exits as edits only, it exits as a single edit.\n */\nexport function* pushAccumulatedChanges(\n accumulatedPushes: Change[],\n output: Output,\n pusher: InputBase,\n fanOutChangeType: ChangeType,\n mergeRelationships: (existing: Change, incoming: Change) => Change,\n addEmptyRelationships: (change: Change) => Change,\n): Stream<'yield'> {\n if (accumulatedPushes.length === 0) {\n // It is possible for no forks to pass along the push.\n // E.g., if no filters match in any fork.\n return;\n }\n\n // collapse down to a single change per type\n const candidatesToPush = new Map<ChangeType, Change>();\n for (const change of accumulatedPushes) {\n if (\n fanOutChangeType === ChangeType.CHILD &&\n change[ChangeIndex.TYPE] !== ChangeType.CHILD\n ) {\n assert(\n candidatesToPush.has(change[ChangeIndex.TYPE]) === false,\n () =>\n `Fan-in:child expected at most one ${change[ChangeIndex.TYPE]} when fan-out is of type child`,\n );\n }\n\n const existing = candidatesToPush.get(change[ChangeIndex.TYPE]);\n let mergedChange = change;\n if (existing) {\n // merge in relationships\n mergedChange = mergeRelationships(existing, change);\n }\n candidatesToPush.set(change[ChangeIndex.TYPE], mergedChange);\n }\n\n accumulatedPushes.length = 0;\n\n const types = [...candidatesToPush.keys()];\n /**\n * Based on the received `fanOutChangeType` only certain output types are valid.\n *\n * - remove must result in all removes\n * - add must result in all adds\n * - edit must result in add or removes or edits\n * - child must result in a single add or single remove or many child changes\n * - Single add or remove because the relationship will be unique to one exist check within the fan-out,fan-in sub-graph\n * - Many child changes because other operators may preserve the child change\n */\n switch (fanOutChangeType) {\n case ChangeType.REMOVE:\n assert(\n types.length === 1 && types[0] === ChangeType.REMOVE,\n 'Fan-in:remove expected all removes',\n );\n yield* output.push(\n addEmptyRelationships(must(candidatesToPush.get(ChangeType.REMOVE))),\n pusher,\n );\n return;\n case ChangeType.ADD:\n assert(\n types.length === 1 && types[0] === ChangeType.ADD,\n 'Fan-in:add expected all adds',\n );\n yield* output.push(\n addEmptyRelationships(must(candidatesToPush.get(ChangeType.ADD))),\n pusher,\n );\n return;\n case ChangeType.EDIT: {\n assert(\n types.every(\n type =>\n type === ChangeType.ADD ||\n type === ChangeType.REMOVE ||\n type === ChangeType.EDIT,\n ),\n 'Fan-in:edit expected all adds, removes, or edits',\n );\n const addChange = candidatesToPush.get(ChangeType.ADD);\n const removeChange = candidatesToPush.get(ChangeType.REMOVE);\n let editChange = candidatesToPush.get(ChangeType.EDIT);\n\n // If an `edit` is present, it supersedes `add` and `remove`\n // as it semantically represents both.\n if (editChange) {\n if (addChange) {\n editChange = mergeRelationships(editChange, addChange);\n }\n if (removeChange) {\n editChange = mergeRelationships(editChange, removeChange);\n }\n yield* output.push(addEmptyRelationships(editChange), pusher);\n return;\n }\n\n // If `edit` didn't make it through but both `add` and `remove` did,\n // convert back to an edit.\n //\n // When can this happen?\n //\n // EDIT old: a=1, new: a=2\n // |\n // FanOut\n // / \\\n // a=1 a=2\n // | |\n // remove add\n // \\ /\n // FanIn\n //\n // The left filter converts the edit into a remove.\n // The right filter converts the edit into an add.\n if (addChange && removeChange) {\n yield* output.push(\n addEmptyRelationships(\n makeEditChange(\n addChange[ChangeIndex.NODE],\n removeChange[ChangeIndex.NODE],\n ),\n ),\n pusher,\n );\n return;\n }\n\n yield* output.push(\n addEmptyRelationships(must(addChange ?? removeChange)),\n pusher,\n );\n return;\n }\n case ChangeType.CHILD: {\n assert(\n types.every(\n type =>\n type === ChangeType.ADD || // exists can change child to add or remove\n type === ChangeType.REMOVE || // exists can change child to add or remove\n type === ChangeType.CHILD, // other operators may preserve the child change\n ),\n 'Fan-in:child expected all adds, removes, or children',\n );\n assert(\n types.length <= 2,\n 'Fan-in:child expected at most 2 types on a child change from fan-out',\n );\n\n // If any branch preserved the original child change, that takes precedence over all other changes.\n const childChange = candidatesToPush.get(ChangeType.CHILD);\n if (childChange) {\n yield* output.push(childChange, pusher);\n return;\n }\n\n const addChange = candidatesToPush.get(ChangeType.ADD);\n const removeChange = candidatesToPush.get(ChangeType.REMOVE);\n\n assert(\n addChange === undefined || removeChange === undefined,\n 'Fan-in:child expected either add or remove, not both',\n );\n\n yield* output.push(\n addEmptyRelationships(must(addChange ?? removeChange)),\n pusher,\n );\n return;\n }\n default:\n fanOutChangeType satisfies never;\n }\n}\n\n/**\n * Puts relationships from `right` into `left` if they don't already exist in `left`.\n */\nexport function mergeRelationships(left: Change, right: Change): Change {\n // change types will always match\n // unless we have an edit on the left\n // then the right could be edit, add, or remove\n if (left[ChangeIndex.TYPE] === right[ChangeIndex.TYPE]) {\n switch (left[ChangeIndex.TYPE]) {\n case ChangeType.ADD: {\n return makeAddChange({\n row: left[ChangeIndex.NODE].row,\n relationships: {\n ...right[ChangeIndex.NODE].relationships,\n ...left[ChangeIndex.NODE].relationships,\n },\n });\n }\n case ChangeType.REMOVE: {\n return makeRemoveChange({\n row: left[ChangeIndex.NODE].row,\n relationships: {\n ...right[ChangeIndex.NODE].relationships,\n ...left[ChangeIndex.NODE].relationships,\n },\n });\n }\n case ChangeType.EDIT: {\n assert(\n right[ChangeIndex.TYPE] === ChangeType.EDIT,\n () =>\n `mergeRelationships: when left.type is edit and types match, right.type must be edit, got ${right[ChangeIndex.TYPE]}`,\n );\n // merge edits into a single edit\n return makeEditChange(\n {\n row: left[ChangeIndex.NODE].row,\n relationships: {\n ...right[ChangeIndex.NODE].relationships,\n ...left[ChangeIndex.NODE].relationships,\n },\n },\n {\n row: left[ChangeIndex.OLD_NODE].row,\n relationships: {\n ...right[ChangeIndex.OLD_NODE].relationships,\n ...left[ChangeIndex.OLD_NODE].relationships,\n },\n },\n );\n }\n case ChangeType.CHILD: {\n // Multiple branches may preserve the same child change, each adding\n // different relationships. Merge the relationships, keeping the child\n // (which should be identical across branches).\n assert(\n right[ChangeIndex.TYPE] === ChangeType.CHILD,\n () =>\n `mergeRelationships: when left.type is child and types match, right.type must be child, got ${right[ChangeIndex.TYPE]}`,\n );\n return makeChildChange(\n {\n row: left[ChangeIndex.NODE].row,\n relationships: {\n ...right[ChangeIndex.NODE].relationships,\n ...left[ChangeIndex.NODE].relationships,\n },\n },\n left[ChangeIndex.CHILD_DATA],\n );\n }\n }\n }\n\n // left is always an edit here\n assert(\n left[ChangeIndex.TYPE] === ChangeType.EDIT,\n () =>\n `mergeRelationships: when types differ, left.type must be edit, got left.type=${left[ChangeIndex.TYPE]}, right.type=${right[ChangeIndex.TYPE]}`,\n );\n switch (right[ChangeIndex.TYPE]) {\n case ChangeType.ADD: {\n return makeEditChange(\n {\n ...left[ChangeIndex.NODE],\n relationships: {\n ...right[ChangeIndex.NODE].relationships,\n ...left[ChangeIndex.NODE].relationships,\n },\n },\n left[ChangeIndex.OLD_NODE],\n );\n }\n case ChangeType.REMOVE: {\n return makeEditChange(left[ChangeIndex.NODE], {\n ...left[ChangeIndex.OLD_NODE],\n relationships: {\n ...right[ChangeIndex.NODE].relationships,\n ...left[ChangeIndex.OLD_NODE].relationships,\n },\n });\n }\n }\n\n unreachable();\n}\n\nexport function makeAddEmptyRelationships(\n schema: SourceSchema,\n): (change: Change) => Change {\n return (change: Change): Change => {\n if (Object.keys(schema.relationships).length === 0) {\n return change;\n }\n\n switch (change[ChangeIndex.TYPE]) {\n case ChangeType.ADD: {\n const relationships = {...change[ChangeIndex.NODE].relationships};\n mergeEmpty(relationships, Object.keys(schema.relationships));\n return makeAddChange({\n row: change[ChangeIndex.NODE].row,\n relationships,\n });\n }\n case ChangeType.REMOVE: {\n const relationships = {...change[ChangeIndex.NODE].relationships};\n mergeEmpty(relationships, Object.keys(schema.relationships));\n return makeRemoveChange({\n row: change[ChangeIndex.NODE].row,\n relationships,\n });\n }\n case ChangeType.EDIT: {\n const nodeRelationships = {...change[ChangeIndex.NODE].relationships};\n const oldNodeRelationships = {\n ...change[ChangeIndex.OLD_NODE].relationships,\n };\n mergeEmpty(nodeRelationships, Object.keys(schema.relationships));\n mergeEmpty(oldNodeRelationships, Object.keys(schema.relationships));\n return makeEditChange(\n {row: change[ChangeIndex.NODE].row, relationships: nodeRelationships},\n {\n row: change[ChangeIndex.OLD_NODE].row,\n relationships: oldNodeRelationships,\n },\n );\n }\n case ChangeType.CHILD:\n return change; // children only have relationships along the path to the change\n }\n };\n}\n\n/**\n * For each relationship in `schema` that does not exist\n * in `relationships`, add it with an empty stream.\n *\n * This modifies the `relationships` object in place.\n */\nexport function mergeEmpty(\n relationships: Record<string, () => Stream<Node | 'yield'>>,\n relationshipNames: string[],\n) {\n for (const relName of relationshipNames) {\n if (relationships[relName] === undefined) {\n relationships[relName] = () => emptyArray;\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skip-yields.js","names":["#stream","#it"],"sources":["../../../../../../zql/src/ivm/skip-yields.ts"],"sourcesContent":["import type {Node} from './data.ts';\nimport type {Stream} from './stream.ts';\n\n// Implemented as a custom IterableIterator rather than a generator function to\n// reduce allocations. A generator creates a new state-machine object each time\n// it is called. By returning `this` from [Symbol.iterator](), the same object\n// acts as both the Iterable and the Iterator, so iterating the stream incurs\n// only one allocation (the SkipYieldsStream instance itself) instead of two.\n// Additionally, the IteratorResult objects ({value, done}) from the inner\n// iterator are returned directly rather than being recreated, avoiding further\n// per-item allocations.\nclass SkipYieldsStream implements IterableIterator<Node> {\n readonly #stream: Stream<Node | 'yield'>;\n #it: Iterator<Node | 'yield'> | undefined = undefined;\n\n constructor(stream: Stream<Node | 'yield'>) {\n this.#stream = stream;\n }\n\n [Symbol.iterator](): IterableIterator<Node> {\n this.#it = this.#stream[Symbol.iterator]();\n return this;\n }\n\n next(): IteratorResult<Node> {\n // #it is always set before next() is called, as [Symbol.iterator]() must\n // be called first (e.g. by a for-of loop).\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const it = this.#it!;\n for (;;) {\n const r = it.next();\n if (r.done || r.value !== 'yield') {\n return r as IteratorResult<Node>;\n }\n }\n }\n\n return(value?: undefined): IteratorResult<Node> {\n this.#it?.return?.(value);\n return {done: true, value: undefined};\n }\n}\n\nexport function skipYields(stream: Stream<Node | 'yield'>): Stream<Node> {\n return new SkipYieldsStream(stream);\n}\n"],"mappings":";AAWA,IAAM,mBAAN,MAAyD;CACvD;CACA,MAA4C,KAAA;CAE5C,YAAY,QAAgC;EAC1C,KAAKA,UAAU;CACjB;CAEA,CAAC,OAAO,YAAoC;EAC1C,KAAKC,MAAM,KAAKD,QAAQ,OAAO,UAAU;EACzC,OAAO;CACT;CAEA,OAA6B;EAI3B,MAAM,KAAK,KAAKC;EAChB,SAAS;GACP,MAAM,IAAI,GAAG,KAAK;GAClB,IAAI,EAAE,QAAQ,EAAE,UAAU,SACxB,OAAO;EAEX;CACF;CAEA,OAAO,OAAyC;EAC9C,KAAKA,KAAK,SAAS,KAAK;EACxB,OAAO;GAAC,MAAM;GAAM,OAAO,KAAA;EAAS;CACtC;AACF;AAEA,SAAgB,WAAW,QAA8C;CACvE,OAAO,IAAI,iBAAiB,MAAM;AACpC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skip.js","names":["#input","#bound","#comparator","#getStart","#shouldBePresent","#output"],"sources":["../../../../../../zql/src/ivm/skip.ts"],"sourcesContent":["import {assert} from '../../../shared/src/asserts.ts';\nimport type {Row} from '../../../zero-protocol/src/data.ts';\nimport {ChangeIndex} from './change-index.ts';\nimport {ChangeType} from './change-type.ts';\nimport {\n type AddChange,\n type Change,\n type ChildChange,\n type RemoveChange,\n} from './change.ts';\nimport type {Comparator, Node} from './data.ts';\nimport {maybeSplitAndPushEditChange} from './maybe-split-and-push-edit-change.ts';\nimport {\n throwOutput,\n type FetchRequest,\n type Input,\n type Operator,\n type Output,\n type Start,\n} from './operator.ts';\nimport type {SourceSchema} from './schema.ts';\nimport type {Stream} from './stream.ts';\n\nexport type Bound = {\n row: Row;\n exclusive: boolean;\n};\n\n/**\n * Skip sets the start position for the pipeline. No rows before the bound will\n * be output.\n */\nexport class Skip implements Operator {\n readonly #input: Input;\n readonly #bound: Bound;\n readonly #comparator: Comparator;\n\n #output: Output = throwOutput;\n\n constructor(input: Input, bound: Bound) {\n const {sort} = input.getSchema();\n assert(sort !== undefined, 'Skip requires sorted input');\n this.#input = input;\n this.#bound = bound;\n this.#comparator = input.getSchema().compareRows;\n input.setOutput(this);\n }\n\n getSchema(): SourceSchema {\n return this.#input.getSchema();\n }\n\n *fetch(req: FetchRequest): Stream<Node | 'yield'> {\n const start = this.#getStart(req);\n if (start === 'empty') {\n return;\n }\n const nodes = this.#input.fetch({...req, start});\n if (!req.reverse) {\n yield* nodes;\n return;\n }\n for (const node of nodes) {\n if (node === 'yield') {\n yield node;\n continue;\n }\n if (!this.#shouldBePresent(node.row)) {\n return;\n }\n yield node;\n }\n }\n\n setOutput(output: Output): void {\n this.#output = output;\n }\n\n destroy(): void {\n this.#input.destroy();\n }\n\n #shouldBePresent(row: Row): boolean {\n const cmp = this.#comparator(this.#bound.row, row);\n return cmp < 0 || (cmp === 0 && !this.#bound.exclusive);\n }\n\n *push(change: Change): Stream<'yield'> {\n const shouldBePresent = (row: Row) => this.#shouldBePresent(row);\n if (change[ChangeIndex.TYPE] === ChangeType.EDIT) {\n yield* maybeSplitAndPushEditChange(\n change,\n shouldBePresent,\n this.#output,\n this,\n );\n return;\n }\n\n change satisfies AddChange | RemoveChange | ChildChange;\n\n if (shouldBePresent(change[ChangeIndex.NODE].row)) {\n yield* this.#output.push(change, this);\n }\n }\n\n #getStart(req: FetchRequest): Start | undefined | 'empty' {\n const boundStart = {\n row: this.#bound.row,\n basis: this.#bound.exclusive ? 'after' : 'at',\n } as const;\n\n if (!req.start) {\n if (req.reverse) {\n return undefined;\n }\n return boundStart;\n }\n\n const cmp = this.#comparator(this.#bound.row, req.start.row);\n\n if (!req.reverse) {\n // The skip bound is after the requested bound. The requested bound cannot\n // be relevant because even if it was basis: 'after', the skip bound is\n // itself after the requested bound. Return the skip bound.\n if (cmp > 0) {\n return boundStart;\n }\n\n // The skip bound and requested bound are equal. If either is exclusive,\n // return that bound with exclusive. Otherwise, return the skip bound.\n if (cmp === 0) {\n if (this.#bound.exclusive || req.start.basis === 'after') {\n return {\n row: this.#bound.row,\n basis: 'after',\n };\n }\n return boundStart;\n }\n\n return req.start;\n }\n\n req.reverse satisfies true;\n\n // bound is after the start, but request is for reverse so results\n // must be empty\n if (cmp > 0) {\n return 'empty';\n }\n\n if (cmp === 0) {\n // if both are inclusive, the result can be the single row at bound\n // return it as start\n if (!this.#bound.exclusive && req.start.basis === 'at') {\n return boundStart;\n }\n // otherwise the results must be empty, one or both are exclusive\n // in opposite directions\n return 'empty';\n }\n\n // bound is before the start, return start\n return req.start;\n }\n}\n"],"mappings":";;;;;;;;AAgCA,IAAa,OAAb,MAAsC;CACpC;CACA;CACA;CAEA,UAAkB;CAElB,YAAY,OAAc,OAAc;EACtC,MAAM,EAAC,SAAQ,MAAM,UAAU;EAC/B,OAAO,SAAS,KAAA,GAAW,4BAA4B;EACvD,KAAKA,SAAS;EACd,KAAKC,SAAS;EACd,KAAKC,cAAc,MAAM,UAAU,EAAE;EACrC,MAAM,UAAU,IAAI;CACtB;CAEA,YAA0B;EACxB,OAAO,KAAKF,OAAO,UAAU;CAC/B;CAEA,CAAC,MAAM,KAA2C;EAChD,MAAM,QAAQ,KAAKG,UAAU,GAAG;EAChC,IAAI,UAAU,SACZ;EAEF,MAAM,QAAQ,KAAKH,OAAO,MAAM;GAAC,GAAG;GAAK;EAAK,CAAC;EAC/C,IAAI,CAAC,IAAI,SAAS;GAChB,OAAO;GACP;EACF;EACA,KAAK,MAAM,QAAQ,OAAO;GACxB,IAAI,SAAS,SAAS;IACpB,MAAM;IACN;GACF;GACA,IAAI,CAAC,KAAKI,iBAAiB,KAAK,GAAG,GACjC;GAEF,MAAM;EACR;CACF;CAEA,UAAU,QAAsB;EAC9B,KAAKC,UAAU;CACjB;CAEA,UAAgB;EACd,KAAKL,OAAO,QAAQ;CACtB;CAEA,iBAAiB,KAAmB;EAClC,MAAM,MAAM,KAAKE,YAAY,KAAKD,OAAO,KAAK,GAAG;EACjD,OAAO,MAAM,KAAM,QAAQ,KAAK,CAAC,KAAKA,OAAO;CAC/C;CAEA,CAAC,KAAK,QAAiC;EACrC,MAAM,mBAAmB,QAAa,KAAKG,iBAAiB,GAAG;EAC/D,IAAI,OAAO,OAAsB,GAAiB;GAChD,OAAO,4BACL,QACA,iBACA,KAAKC,SACL,IACF;GACA;EACF;EAIA,IAAI,gBAAgB,OAAO,GAAkB,GAAG,GAC9C,OAAO,KAAKA,QAAQ,KAAK,QAAQ,IAAI;CAEzC;CAEA,UAAU,KAAgD;EACxD,MAAM,aAAa;GACjB,KAAK,KAAKJ,OAAO;GACjB,OAAO,KAAKA,OAAO,YAAY,UAAU;EAC3C;EAEA,IAAI,CAAC,IAAI,OAAO;GACd,IAAI,IAAI,SACN;GAEF,OAAO;EACT;EAEA,MAAM,MAAM,KAAKC,YAAY,KAAKD,OAAO,KAAK,IAAI,MAAM,GAAG;EAE3D,IAAI,CAAC,IAAI,SAAS;GAIhB,IAAI,MAAM,GACR,OAAO;GAKT,IAAI,QAAQ,GAAG;IACb,IAAI,KAAKA,OAAO,aAAa,IAAI,MAAM,UAAU,SAC/C,OAAO;KACL,KAAK,KAAKA,OAAO;KACjB,OAAO;IACT;IAEF,OAAO;GACT;GAEA,OAAO,IAAI;EACb;EAEA,IAAI;EAIJ,IAAI,MAAM,GACR,OAAO;EAGT,IAAI,QAAQ,GAAG;GAGb,IAAI,CAAC,KAAKA,OAAO,aAAa,IAAI,MAAM,UAAU,MAChD,OAAO;GAIT,OAAO;EACT;EAGA,OAAO,IAAI;CACb;AACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.js","names":[],"sources":["../../../../../../zql/src/ivm/source.ts"],"sourcesContent":["import type {Condition, Ordering} from '../../../zero-protocol/src/ast.ts';\nimport type {Row} from '../../../zero-protocol/src/data.ts';\nimport type {TableSchema} from '../../../zero-types/src/schema.ts';\nimport type {DebugDelegate} from '../builder/debug-delegate.ts';\nimport {ChangeType} from './change-type.ts';\nimport type {Input} from './operator.ts';\nimport type {Stream} from './stream.ts';\n\nexport type SourceChangeAdd = [type: ChangeType.ADD, row: Row, extra: null];\nexport type SourceChangeRemove = [\n type: ChangeType.REMOVE,\n row: Row,\n extra: null,\n];\nexport type SourceChangeEdit = [type: ChangeType.EDIT, row: Row, oldRow: Row];\n\nexport type SourceChange =\n | SourceChangeAdd\n | SourceChangeRemove\n | SourceChangeEdit;\n\nexport function makeSourceChangeAdd(row: Row): SourceChangeAdd {\n return [ChangeType.ADD, row, null];\n}\n\nexport function makeSourceChangeRemove(row: Row): SourceChangeRemove {\n return [ChangeType.REMOVE, row, null];\n}\n\nexport function makeSourceChangeEdit(row: Row, oldRow: Row): SourceChangeEdit {\n return [ChangeType.EDIT, row, oldRow];\n}\n\n/**\n * A source is an input that serves as the root data source of the pipeline.\n * Sources have multiple outputs. To add an output, call `connect()`, then\n * hook yourself up to the returned Connector, like:\n *\n * ```ts\n * class MyOperator implements Output {\n * constructor(input: Input) {\n * input.setOutput(this);\n * }\n *\n * push(change: Change): void {\n * // Handle change\n * }\n * }\n *\n * const connection = source.connect(ordering);\n * const myOperator = new MyOperator(connection);\n * ```\n */\nexport interface Source {\n get tableSchema(): TableSchema;\n /**\n * Creates an input that an operator can connect to. To free resources used\n * by connection, downstream operators call `destroy()` on the returned\n * input.\n *\n * @param sort The ordering of the rows. Source must return rows in this\n * order. Must include all primary keys of the table.\n * @param filters Filters to apply to the source.\n * @param splitEditKeys If an edit change modifies the values of any of the\n * keys in splitEditKeys, the source should split the edit change into\n * a remove of the old row followed by an add of the new row.\n */\n connect(\n sort: Ordering | undefined,\n filters?: Condition,\n splitEditKeys?: Set<string>,\n debug?: DebugDelegate,\n ): SourceInput;\n\n /**\n * Pushes a change into the source and into all connected outputs.\n *\n * The returned stream can yield 'yield' to yield control to the caller\n * for purposes of responsiveness.\n *\n * Once the stream is exhausted, the change will have been pushed into all\n * connected inputs and committed to the source.\n */\n push(change: SourceChange): Stream<'yield'>;\n\n /**\n * Pushes a change into the source.\n *\n * Iterating the returned stream will push the change into one connected input\n * at a time, yielding `undefined` between each, and yielding `'yield'` to\n * yield control to the caller for purposes of responsiveness.\n *\n * Once the stream is exhausted, the change will have been pushed\n * into all connected inputs and committed to the source.\n */\n genPush(change: SourceChange): Stream<'yield' | undefined>;\n}\n\nexport interface SourceInput extends Input {\n readonly fullyAppliedFilters: boolean;\n}\n"],"mappings":";AAqBA,SAAgB,oBAAoB,KAA2B;CAC7D,OAAO;EAAC;EAAgB;EAAK;CAAI;AACnC;AAEA,SAAgB,uBAAuB,KAA8B;CACnE,OAAO;EAAC;EAAmB;EAAK;CAAI;AACtC;AAEA,SAAgB,qBAAqB,KAAU,QAA+B;CAC5E,OAAO;EAAC;EAAiB;EAAK;CAAM;AACtC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","names":[],"sources":["../../../../../../zql/src/ivm/stream.ts"],"sourcesContent":["/**\n * streams are lazy forward-only iterables.\n * Once a stream reaches the end it can't be restarted.\n * They are iterable, not iterator, so that they can be used in for-each,\n * and so that we know when consumer has stopped iterating the stream. This allows us\n * to clean up resources like sql statements.\n */\nexport type Stream<T> = Iterable<T>;\n\nexport function* take<T>(stream: Stream<T>, limit: number): Stream<T> {\n if (limit < 1) {\n return;\n }\n let count = 0;\n for (const v of stream) {\n yield v;\n if (++count === limit) {\n break;\n }\n }\n}\n\nexport function first<T>(stream: Stream<T>): T | undefined {\n const it = stream[Symbol.iterator]();\n const {value} = it.next();\n it.return?.();\n return value;\n}\n\nexport function consume<T>(stream: Stream<T>): void {\n // Required to prevent some minifiers (e.g. Terser) from removing this empty loop\n for (const _ of stream);\n}\n\nexport function drainGenerator<Yield, Return>(\n gen: Generator<Yield, Return, unknown>,\n): Return {\n let result = gen.next();\n while (!result.done) {\n result = gen.next();\n }\n return result.value;\n}\n"],"mappings":";AAsBA,SAAgB,MAAS,QAAkC;CACzD,MAAM,KAAK,OAAO,OAAO,UAAU;CACnC,MAAM,EAAC,UAAS,GAAG,KAAK;CACxB,GAAG,SAAS;CACZ,OAAO;AACT;AAEA,SAAgB,QAAW,QAAyB;CAElD,KAAK,MAAM,KAAK;AAClB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"take.js","names":["#input","#storage","#limit","#partitionKey","#partitionKeyComparator","#output","#initialFetch","#rowHiddenFromFetch","#setTakeState","#pushEditChange","#getStateAndConstraint","#pushWithRowHiddenFromFetch"],"sources":["../../../../../../zql/src/ivm/take.ts"],"sourcesContent":["import {assert, unreachable} from '../../../shared/src/asserts.ts';\nimport {hasOwn} from '../../../shared/src/has-own.ts';\nimport type {Row, Value} from '../../../zero-protocol/src/data.ts';\nimport type {PrimaryKey} from '../../../zero-protocol/src/primary-key.ts';\nimport {assertOrderingIncludesPK} from '../query/complete-ordering.ts';\nimport {ChangeIndex} from './change-index.ts';\nimport {ChangeType} from './change-type.ts';\nimport {\n makeAddChange,\n makeRemoveChange,\n type Change,\n type EditChange,\n} from './change.ts';\nimport type {Constraint} from './constraint.ts';\nimport {compareValues, type Comparator, type Node} from './data.ts';\nimport {\n throwOutput,\n type FetchRequest,\n type Input,\n type Operator,\n type Output,\n type Storage,\n} from './operator.ts';\nimport type {SourceSchema} from './schema.ts';\nimport {type Stream} from './stream.ts';\n\nconst MAX_BOUND_KEY = 'maxBound';\n\ntype TakeState = {\n size: number;\n bound: Row | undefined;\n};\n\ninterface TakeStorage {\n get(key: typeof MAX_BOUND_KEY): Row | undefined;\n get(key: string): TakeState | undefined;\n set(key: typeof MAX_BOUND_KEY, value: Row): void;\n set(key: string, value: TakeState): void;\n del(key: string): void;\n}\n\nexport type PartitionKey = PrimaryKey;\n\n/**\n * The Take operator is for implementing limit queries. It takes the first n\n * nodes of its input as determined by the input’s comparator. It then keeps\n * a *bound* of the last item it has accepted so that it can evaluate whether\n * new incoming pushes should be accepted or rejected.\n *\n * Take can count rows globally or by unique value of some field.\n *\n * Maintains the invariant that its output size is always <= limit, even\n * mid processing of a push.\n */\nexport class Take implements Operator {\n readonly #input: Input;\n readonly #storage: TakeStorage;\n readonly #limit: number;\n readonly #partitionKey: PartitionKey | undefined;\n readonly #partitionKeyComparator: Comparator | undefined;\n // Fetch overlay needed for some split push cases.\n #rowHiddenFromFetch: Row | undefined;\n\n #output: Output = throwOutput;\n\n constructor(\n input: Input,\n storage: Storage,\n limit: number,\n partitionKey?: PartitionKey,\n ) {\n assert(limit >= 0, 'Limit must be non-negative');\n const {sort} = input.getSchema();\n assert(sort !== undefined, 'Take requires sorted input');\n assertOrderingIncludesPK(sort, input.getSchema().primaryKey);\n input.setOutput(this);\n this.#input = input;\n this.#storage = storage as TakeStorage;\n this.#limit = limit;\n this.#partitionKey = partitionKey;\n this.#partitionKeyComparator =\n partitionKey && makePartitionKeyComparator(partitionKey);\n }\n\n setOutput(output: Output): void {\n this.#output = output;\n }\n\n getSchema(): SourceSchema {\n return this.#input.getSchema();\n }\n\n *fetch(req: FetchRequest): Stream<Node | 'yield'> {\n if (\n !this.#partitionKey ||\n (req.constraint &&\n constraintMatchesPartitionKey(req.constraint, this.#partitionKey))\n ) {\n const takeStateKey = getTakeStateKey(this.#partitionKey, req.constraint);\n const takeState = this.#storage.get(takeStateKey);\n if (!takeState) {\n yield* this.#initialFetch(req);\n return;\n }\n if (takeState.bound === undefined) {\n return;\n }\n for (const inputNode of this.#input.fetch(req)) {\n if (inputNode === 'yield') {\n yield inputNode;\n continue;\n }\n if (this.getSchema().compareRows(takeState.bound, inputNode.row) < 0) {\n return;\n }\n if (\n this.#rowHiddenFromFetch &&\n this.getSchema().compareRows(\n this.#rowHiddenFromFetch,\n inputNode.row,\n ) === 0\n ) {\n continue;\n }\n yield inputNode;\n }\n return;\n }\n // There is a partition key, but the fetch is not constrained or constrained\n // on a different key. Thus we don't have a single take state to bound by.\n // This currently only happens with nested sub-queries\n // e.g. issues include issuelabels include label. We could remove this\n // case if we added a translation layer (powered by some state) in join.\n // Specifically we need joinKeyValue => parent constraint key\n const maxBound = this.#storage.get(MAX_BOUND_KEY);\n if (maxBound === undefined) {\n return;\n }\n for (const inputNode of this.#input.fetch(req)) {\n if (inputNode === 'yield') {\n yield inputNode;\n continue;\n }\n if (this.getSchema().compareRows(inputNode.row, maxBound) > 0) {\n return;\n }\n const takeStateKey = getTakeStateKey(this.#partitionKey, inputNode.row);\n const takeState = this.#storage.get(takeStateKey);\n if (\n takeState?.bound !== undefined &&\n this.getSchema().compareRows(takeState.bound, inputNode.row) >= 0\n ) {\n yield inputNode;\n }\n }\n }\n\n *#initialFetch(req: FetchRequest): Stream<Node | 'yield'> {\n assert(req.start === undefined, 'Start should be undefined');\n assert(!req.reverse, 'Reverse should be false');\n\n if (this.#limit === 0) {\n return;\n }\n\n assert(\n constraintMatchesPartitionKey(req.constraint, this.#partitionKey),\n 'Constraint should match partition key',\n );\n\n const takeStateKey = getTakeStateKey(this.#partitionKey, req.constraint);\n assert(\n this.#storage.get(takeStateKey) === undefined,\n 'Take state should be undefined',\n );\n\n let size = 0;\n let bound: Row | undefined;\n let downstreamEarlyReturn = true;\n let exceptionThrown = false;\n try {\n for (const inputNode of this.#input.fetch(req)) {\n if (inputNode === 'yield') {\n yield 'yield';\n continue;\n }\n yield inputNode;\n bound = inputNode.row;\n size++;\n if (size === this.#limit) {\n break;\n }\n }\n downstreamEarlyReturn = false;\n } catch (e) {\n exceptionThrown = true;\n throw e;\n } finally {\n if (!exceptionThrown) {\n this.#setTakeState(\n takeStateKey,\n size,\n bound,\n this.#storage.get(MAX_BOUND_KEY),\n );\n // If it becomes necessary to support downstream early return, this\n // assert should be removed, and replaced with code that consumes\n // the input stream until limit is reached or the input stream is\n // exhausted so that takeState is properly hydrated.\n assert(\n !downstreamEarlyReturn,\n 'Unexpected early return prevented full hydration',\n );\n }\n }\n }\n\n #getStateAndConstraint(row: Row) {\n const takeStateKey = getTakeStateKey(this.#partitionKey, row);\n const takeState = this.#storage.get(takeStateKey);\n let maxBound: Row | undefined;\n let constraint: Constraint | undefined;\n if (takeState) {\n maxBound = this.#storage.get(MAX_BOUND_KEY);\n constraint =\n this.#partitionKey &&\n Object.fromEntries(\n this.#partitionKey.map(key => [key, row[key]] as const),\n );\n }\n\n return {takeState, takeStateKey, maxBound, constraint} as\n | {\n takeState: undefined;\n takeStateKey: string;\n maxBound: undefined;\n constraint: undefined;\n }\n | {\n takeState: TakeState;\n takeStateKey: string;\n maxBound: Row | undefined;\n constraint: Constraint | undefined;\n };\n }\n\n *push(change: Change): Stream<'yield'> {\n if (change[ChangeIndex.TYPE] === ChangeType.EDIT) {\n yield* this.#pushEditChange(change);\n return;\n }\n\n const {takeState, takeStateKey, maxBound, constraint} =\n this.#getStateAndConstraint(change[ChangeIndex.NODE].row);\n if (!takeState) {\n return;\n }\n\n const {compareRows} = this.getSchema();\n\n if (change[ChangeIndex.TYPE] === ChangeType.ADD) {\n if (takeState.size < this.#limit) {\n this.#setTakeState(\n takeStateKey,\n takeState.size + 1,\n takeState.bound === undefined ||\n compareRows(takeState.bound, change[ChangeIndex.NODE].row) < 0\n ? change[ChangeIndex.NODE].row\n : takeState.bound,\n maxBound,\n );\n yield* this.#output.push(change, this);\n return;\n }\n // size === limit\n if (\n takeState.bound === undefined ||\n compareRows(change[ChangeIndex.NODE].row, takeState.bound) >= 0\n ) {\n return;\n }\n // added row < bound\n let beforeBoundNode: Node | undefined;\n let boundNode: Node | undefined;\n if (this.#limit === 1) {\n for (const node of this.#input.fetch({\n start: {\n row: takeState.bound,\n basis: 'at',\n },\n constraint,\n })) {\n if (node === 'yield') {\n yield node;\n continue;\n }\n boundNode = node;\n break;\n }\n } else {\n for (const node of this.#input.fetch({\n start: {\n row: takeState.bound,\n basis: 'at',\n },\n constraint,\n reverse: true,\n })) {\n if (node === 'yield') {\n yield node;\n continue;\n } else if (boundNode === undefined) {\n boundNode = node;\n } else {\n beforeBoundNode = node;\n break;\n }\n }\n }\n assert(\n boundNode !== undefined,\n 'Take: boundNode must be found during fetch',\n );\n const removeChange = makeRemoveChange(boundNode);\n // Remove before add to maintain invariant that\n // output size <= limit.\n this.#setTakeState(\n takeStateKey,\n takeState.size,\n beforeBoundNode === undefined ||\n compareRows(change[ChangeIndex.NODE].row, beforeBoundNode.row) > 0\n ? change[ChangeIndex.NODE].row\n : beforeBoundNode.row,\n maxBound,\n );\n yield* this.#pushWithRowHiddenFromFetch(\n change[ChangeIndex.NODE].row,\n removeChange,\n );\n yield* this.#output.push(change, this);\n } else if (change[ChangeIndex.TYPE] === ChangeType.REMOVE) {\n if (takeState.bound === undefined) {\n // change is after bound\n return;\n }\n const compToBound = compareRows(\n change[ChangeIndex.NODE].row,\n takeState.bound,\n );\n if (compToBound > 0) {\n // change is after bound\n return;\n }\n let beforeBoundNode: Node | undefined;\n for (const node of this.#input.fetch({\n start: {\n row: takeState.bound,\n basis: 'after',\n },\n constraint,\n reverse: true,\n })) {\n if (node === 'yield') {\n yield node;\n continue;\n }\n beforeBoundNode = node;\n break;\n }\n\n let newBound: {node: Node; push: boolean} | undefined;\n if (beforeBoundNode) {\n const push = compareRows(beforeBoundNode.row, takeState.bound) > 0;\n newBound = {\n node: beforeBoundNode,\n push,\n };\n }\n if (!newBound?.push) {\n for (const node of this.#input.fetch({\n start: {\n row: takeState.bound,\n basis: 'at',\n },\n constraint,\n })) {\n if (node === 'yield') {\n yield node;\n continue;\n }\n const push = compareRows(node.row, takeState.bound) > 0;\n newBound = {\n node,\n push,\n };\n if (push) {\n break;\n }\n }\n }\n\n if (newBound?.push) {\n yield* this.#output.push(change, this);\n this.#setTakeState(\n takeStateKey,\n takeState.size,\n newBound.node.row,\n maxBound,\n );\n yield* this.#output.push(makeAddChange(newBound.node), this);\n return;\n }\n this.#setTakeState(\n takeStateKey,\n takeState.size - 1,\n newBound?.node.row,\n maxBound,\n );\n yield* this.#output.push(change, this);\n } else if (change[ChangeIndex.TYPE] === ChangeType.CHILD) {\n // A 'child' change should be pushed to output if its row\n // is <= bound.\n if (\n takeState.bound &&\n compareRows(change[ChangeIndex.NODE].row, takeState.bound) <= 0\n ) {\n yield* this.#output.push(change, this);\n }\n }\n }\n\n *#pushEditChange(change: EditChange): Stream<'yield'> {\n assert(\n !this.#partitionKeyComparator ||\n this.#partitionKeyComparator(\n change[ChangeIndex.OLD_NODE].row,\n change[ChangeIndex.NODE].row,\n ) === 0,\n 'Unexpected change of partition key',\n );\n\n const {takeState, takeStateKey, maxBound, constraint} =\n this.#getStateAndConstraint(change[ChangeIndex.OLD_NODE].row);\n if (!takeState) {\n return;\n }\n\n assert(takeState.bound, 'Bound should be set');\n const {compareRows} = this.getSchema();\n const oldCmp = compareRows(\n change[ChangeIndex.OLD_NODE].row,\n takeState.bound,\n );\n const newCmp = compareRows(change[ChangeIndex.NODE].row, takeState.bound);\n\n const that = this;\n const replaceBoundAndForwardChange = function* () {\n that.#setTakeState(\n takeStateKey,\n takeState.size,\n change[ChangeIndex.NODE].row,\n maxBound,\n );\n yield* that.#output.push(change, that);\n };\n\n // The bounds row was changed.\n if (oldCmp === 0) {\n // The new row is the new bound.\n if (newCmp === 0) {\n // no need to update the state since we are keeping the bounds\n yield* this.#output.push(change, this);\n return;\n }\n\n if (newCmp < 0) {\n if (this.#limit === 1) {\n yield* replaceBoundAndForwardChange();\n return;\n }\n\n // New row will be in the result but it might not be the bounds any\n // more. We need to find the row before the bounds to determine the new\n // bounds.\n\n let beforeBoundNode: Node | undefined;\n for (const node of this.#input.fetch({\n start: {\n row: takeState.bound,\n basis: 'after',\n },\n constraint,\n reverse: true,\n })) {\n if (node === 'yield') {\n yield node;\n continue;\n }\n beforeBoundNode = node;\n break;\n }\n assert(\n beforeBoundNode !== undefined,\n 'Take: beforeBoundNode must be found during fetch',\n );\n\n this.#setTakeState(\n takeStateKey,\n takeState.size,\n beforeBoundNode.row,\n maxBound,\n );\n yield* this.#output.push(change, this);\n return;\n }\n\n assert(newCmp > 0, 'New comparison must be greater than 0');\n // Find the first item at the old bounds. This will be the new bounds.\n let newBoundNode: Node | undefined;\n for (const node of this.#input.fetch({\n start: {\n row: takeState.bound,\n basis: 'at',\n },\n constraint,\n })) {\n if (node === 'yield') {\n yield node;\n continue;\n }\n newBoundNode = node;\n break;\n }\n assert(\n newBoundNode !== undefined,\n 'Take: newBoundNode must be found during fetch',\n );\n\n // The next row is the new row. We can replace the bounds and keep the\n // edit change.\n if (compareRows(newBoundNode.row, change[ChangeIndex.NODE].row) === 0) {\n yield* replaceBoundAndForwardChange();\n return;\n }\n\n // The new row is now outside the bounds, so we need to remove the old\n // row and add the new bounds row.\n this.#setTakeState(\n takeStateKey,\n takeState.size,\n newBoundNode.row,\n maxBound,\n );\n yield* this.#pushWithRowHiddenFromFetch(\n newBoundNode.row,\n makeRemoveChange(change[ChangeIndex.OLD_NODE]),\n );\n yield* this.#output.push(makeAddChange(newBoundNode), this);\n return;\n }\n\n if (oldCmp > 0) {\n assert(newCmp !== 0, 'Invalid state. Row has duplicate primary key');\n\n // Both old and new outside of bounds\n if (newCmp > 0) {\n return;\n }\n\n // old was outside, new is inside. Pushing out the old bounds\n assert(newCmp < 0, 'New comparison must be less than 0');\n\n let oldBoundNode: Node | undefined;\n let newBoundNode: Node | undefined;\n for (const node of this.#input.fetch({\n start: {\n row: takeState.bound,\n basis: 'at',\n },\n constraint,\n reverse: true,\n })) {\n if (node === 'yield') {\n yield node;\n continue;\n } else if (oldBoundNode === undefined) {\n oldBoundNode = node;\n } else {\n newBoundNode = node;\n break;\n }\n }\n assert(\n oldBoundNode !== undefined,\n 'Take: oldBoundNode must be found during fetch',\n );\n assert(\n newBoundNode !== undefined,\n 'Take: newBoundNode must be found during fetch',\n );\n\n // Remove before add to maintain invariant that\n // output size <= limit.\n this.#setTakeState(\n takeStateKey,\n takeState.size,\n newBoundNode.row,\n maxBound,\n );\n yield* this.#pushWithRowHiddenFromFetch(\n change[ChangeIndex.NODE].row,\n makeRemoveChange(oldBoundNode),\n );\n yield* this.#output.push(makeAddChange(change[ChangeIndex.NODE]), this);\n\n return;\n }\n\n if (oldCmp < 0) {\n assert(newCmp !== 0, 'Invalid state. Row has duplicate primary key');\n\n // Both old and new inside of bounds\n if (newCmp < 0) {\n yield* this.#output.push(change, this);\n return;\n }\n\n // old was inside, new is larger than old bound\n\n assert(newCmp > 0, 'New comparison must be greater than 0');\n\n // at this point we need to find the row after the bound and use that or\n // the newRow as the new bound.\n let afterBoundNode: Node | undefined;\n for (const node of this.#input.fetch({\n start: {\n row: takeState.bound,\n basis: 'after',\n },\n constraint,\n })) {\n if (node === 'yield') {\n yield node;\n continue;\n }\n afterBoundNode = node;\n break;\n }\n assert(\n afterBoundNode !== undefined,\n 'Take: afterBoundNode must be found during fetch',\n );\n\n // The new row is the new bound. Use an edit change.\n if (compareRows(afterBoundNode.row, change[ChangeIndex.NODE].row) === 0) {\n yield* replaceBoundAndForwardChange();\n return;\n }\n\n yield* this.#output.push(\n makeRemoveChange(change[ChangeIndex.OLD_NODE]),\n this,\n );\n this.#setTakeState(\n takeStateKey,\n takeState.size,\n afterBoundNode.row,\n maxBound,\n );\n yield* this.#output.push(makeAddChange(afterBoundNode), this);\n return;\n }\n\n unreachable();\n }\n\n *#pushWithRowHiddenFromFetch(row: Row, change: Change) {\n this.#rowHiddenFromFetch = row;\n try {\n yield* this.#output.push(change, this);\n } finally {\n this.#rowHiddenFromFetch = undefined;\n }\n }\n\n #setTakeState(\n takeStateKey: string,\n size: number,\n bound: Row | undefined,\n maxBound: Row | undefined,\n ) {\n this.#storage.set(takeStateKey, {\n size,\n bound,\n });\n if (\n bound !== undefined &&\n (maxBound === undefined ||\n this.getSchema().compareRows(bound, maxBound) > 0)\n ) {\n this.#storage.set(MAX_BOUND_KEY, bound);\n }\n }\n\n destroy(): void {\n this.#input.destroy();\n }\n}\n\nfunction getTakeStateKey(\n partitionKey: PartitionKey | undefined,\n rowOrConstraint: Row | Constraint | undefined,\n): string {\n // The order must be consistent. We always use the order as defined by the\n // partition key.\n const partitionValues: Value[] = [];\n\n if (partitionKey && rowOrConstraint) {\n for (const key of partitionKey) {\n partitionValues.push(rowOrConstraint[key]);\n }\n }\n\n return JSON.stringify(['take', ...partitionValues]);\n}\n\nexport function constraintMatchesPartitionKey(\n constraint: Constraint | undefined,\n partitionKey: PartitionKey | undefined,\n): boolean {\n if (constraint === undefined || partitionKey === undefined) {\n return constraint === partitionKey;\n }\n if (partitionKey.length !== Object.keys(constraint).length) {\n return false;\n }\n for (const key of partitionKey) {\n if (!hasOwn(constraint, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport function makePartitionKeyComparator(\n partitionKey: PartitionKey,\n): Comparator {\n return (a, b) => {\n for (const key of partitionKey) {\n const cmp = compareValues(a[key], b[key]);\n if (cmp !== 0) {\n return cmp;\n }\n }\n return 0;\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ import { assert } from "../../../shared/src/asserts.js";
2
+ import { throwOutput } from "./operator.js";
3
+ import { first } from "./stream.js";
4
+ import { makeAddEmptyRelationships, mergeRelationships, pushAccumulatedChanges } from "./push-accumulated.js";
5
+ //#region ../zql/src/ivm/union-fan-in.ts
6
+ var UnionFanIn = class {
7
+ #inputs;
8
+ #schema;
9
+ #fanOutPushStarted = false;
10
+ #output = throwOutput;
11
+ #accumulatedPushes = [];
12
+ constructor(fanOut, inputs) {
13
+ this.#inputs = inputs;
14
+ const fanOutSchema = fanOut.getSchema();
15
+ fanOut.setFanIn(this);
16
+ assert(fanOutSchema.sort !== void 0, "UnionFanIn requires sorted input");
17
+ const schema = {
18
+ tableName: fanOutSchema.tableName,
19
+ columns: fanOutSchema.columns,
20
+ primaryKey: fanOutSchema.primaryKey,
21
+ relationships: { ...fanOutSchema.relationships },
22
+ isHidden: fanOutSchema.isHidden,
23
+ system: fanOutSchema.system,
24
+ compareRows: fanOutSchema.compareRows,
25
+ sort: fanOutSchema.sort
26
+ };
27
+ const relationshipsFromBranches = /* @__PURE__ */ new Set();
28
+ for (const input of inputs) {
29
+ const inputSchema = input.getSchema();
30
+ assert(schema.tableName === inputSchema.tableName, `Table name mismatch in union fan-in: ${schema.tableName} !== ${inputSchema.tableName}`);
31
+ assert(schema.primaryKey === inputSchema.primaryKey, `Primary key mismatch in union fan-in`);
32
+ assert(schema.system === inputSchema.system, `System mismatch in union fan-in: ${schema.system} !== ${inputSchema.system}`);
33
+ assert(schema.compareRows === inputSchema.compareRows, `compareRows mismatch in union fan-in`);
34
+ assert(schema.sort === inputSchema.sort, `Sort mismatch in union fan-in`);
35
+ for (const [relName, relSchema] of Object.entries(inputSchema.relationships)) {
36
+ if (relName in fanOutSchema.relationships) continue;
37
+ assert(!relationshipsFromBranches.has(relName), `Relationship ${relName} exists in multiple upstream inputs to union fan-in`);
38
+ schema.relationships[relName] = relSchema;
39
+ relationshipsFromBranches.add(relName);
40
+ }
41
+ input.setOutput(this);
42
+ }
43
+ this.#schema = schema;
44
+ this.#inputs = inputs;
45
+ }
46
+ destroy() {
47
+ for (const input of this.#inputs) input.destroy();
48
+ }
49
+ fetch(req) {
50
+ const iterables = this.#inputs.map((input) => input.fetch(req));
51
+ const compareRows = this.#schema.compareRows;
52
+ return mergeFetches(iterables, req.reverse ? (l, r) => compareRows(r.row, l.row) : (l, r) => compareRows(l.row, r.row));
53
+ }
54
+ getSchema() {
55
+ return this.#schema;
56
+ }
57
+ *push(change, pusher) {
58
+ if (!this.#fanOutPushStarted) yield* this.#pushInternalChange(change, pusher);
59
+ else this.#accumulatedPushes.push(change);
60
+ }
61
+ /**
62
+ * An internal change means that a change was received inside the fan-out/fan-in sub-graph.
63
+ *
64
+ * These changes always come from children of a flip-join as no other push generating operators
65
+ * currently exist between union-fan-in and union-fan-out. All other pushes
66
+ * enter into union-fan-out before reaching union-fan-in.
67
+ *
68
+ * - normal joins for `exists` come before `union-fan-out`
69
+ * - joins for `related` come after `union-fan-out`
70
+ * - take comes after `union-fan-out`
71
+ *
72
+ * The algorithm for deciding whether or not to forward a push that came from inside the ufo/ufi sub-graph:
73
+ * 1. If the change is a `child` change we can forward it. This is because all child branches in the ufo/ufi sub-graph are unique.
74
+ * 2. If the change is `add` we can forward it iff no `fetches` for the row return any results.
75
+ * If another branch has it, the add was already emitted in the past.
76
+ * 3. If the change is `remove` we can forward it iff no `fetches` for the row return any results.
77
+ * If no other branches have the change, the remove can be sent as the value is no longer present.
78
+ * If other branches have it, the last branch the processes the remove will send the remove.
79
+ * 4. Edits will always come through as child changes as flip join will flip them into children.
80
+ * An edit that would result in a remove or add will have been split into an add/remove pair rather than being an edit.
81
+ */
82
+ *#pushInternalChange(change, pusher) {
83
+ if (change[0] === 3) {
84
+ yield* this.#output.push(change, this);
85
+ return;
86
+ }
87
+ assert(change[0] === 0 || change[0] === 1, () => `UnionFanIn: expected add or remove change type, got ${change[0]}`);
88
+ let hadMatch = false;
89
+ for (const input of this.#inputs) {
90
+ if (input === pusher) {
91
+ hadMatch = true;
92
+ continue;
93
+ }
94
+ const constraint = {};
95
+ for (const key of this.#schema.primaryKey) constraint[key] = change[1].row[key];
96
+ if (first(input.fetch({ constraint })) !== void 0) return;
97
+ }
98
+ assert(hadMatch, "Pusher was not one of the inputs to union-fan-in!");
99
+ yield* this.#output.push(change, this);
100
+ }
101
+ fanOutStartedPushing() {
102
+ assert(this.#fanOutPushStarted === false, "UnionFanIn: fanOutStartedPushing called while already pushing");
103
+ this.#fanOutPushStarted = true;
104
+ }
105
+ *fanOutDonePushing(fanOutChangeType) {
106
+ assert(this.#fanOutPushStarted, "UnionFanIn: fanOutDonePushing called without fanOutStartedPushing");
107
+ this.#fanOutPushStarted = false;
108
+ if (this.#inputs.length === 0) return;
109
+ if (this.#accumulatedPushes.length === 0) return;
110
+ yield* pushAccumulatedChanges(this.#accumulatedPushes, this.#output, this, fanOutChangeType, mergeRelationships, makeAddEmptyRelationships(this.#schema));
111
+ }
112
+ setOutput(output) {
113
+ this.#output = output;
114
+ }
115
+ };
116
+ function* mergeFetches(fetches, comparator) {
117
+ const iterators = fetches.map((i) => i[Symbol.iterator]());
118
+ let threw = false;
119
+ try {
120
+ const current = [];
121
+ let lastNodeYielded;
122
+ for (let i = 0; i < iterators.length; i++) {
123
+ const iter = iterators[i];
124
+ let result = iter.next();
125
+ while (!result.done && result.value === "yield") {
126
+ yield result.value;
127
+ result = iter.next();
128
+ }
129
+ current[i] = result.done ? null : result.value;
130
+ }
131
+ while (current.some((c) => c !== null)) {
132
+ const min = current.reduce((acc, c, i) => {
133
+ if (c === null) return acc;
134
+ if (acc === void 0 || comparator(c, acc[0]) < 0) return [c, i];
135
+ return acc;
136
+ }, void 0);
137
+ assert(min !== void 0, "min is undefined");
138
+ const [minNode, minIndex] = min;
139
+ const iter = iterators[minIndex];
140
+ let result = iter.next();
141
+ while (!result.done && result.value === "yield") {
142
+ yield result.value;
143
+ result = iter.next();
144
+ }
145
+ current[minIndex] = result.done ? null : result.value;
146
+ if (lastNodeYielded !== void 0 && comparator(lastNodeYielded, minNode) === 0) continue;
147
+ lastNodeYielded = minNode;
148
+ yield minNode;
149
+ }
150
+ } catch (e) {
151
+ threw = true;
152
+ for (const iter of iterators) try {
153
+ iter.throw?.(e);
154
+ } catch (_cleanupError) {}
155
+ throw e;
156
+ } finally {
157
+ if (!threw) for (const iter of iterators) try {
158
+ iter.return?.();
159
+ } catch (_cleanupError) {}
160
+ }
161
+ }
162
+ //#endregion
163
+ export { UnionFanIn };
164
+
165
+ //# sourceMappingURL=union-fan-in.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union-fan-in.js","names":["#inputs","#schema","#fanOutPushStarted","#pushInternalChange","#accumulatedPushes","#output"],"sources":["../../../../../../zql/src/ivm/union-fan-in.ts"],"sourcesContent":["import {assert} from '../../../shared/src/asserts.ts';\nimport type {Writable} from '../../../shared/src/writable.ts';\nimport {ChangeIndex} from './change-index.ts';\nimport {ChangeType} from './change-type.ts';\nimport type {Change} from './change.ts';\nimport type {Constraint} from './constraint.ts';\nimport type {Node} from './data.ts';\nimport {\n throwOutput,\n type FetchRequest,\n type Input,\n type InputBase,\n type Operator,\n type Output,\n} from './operator.ts';\nimport {\n makeAddEmptyRelationships,\n mergeRelationships,\n pushAccumulatedChanges,\n} from './push-accumulated.ts';\nimport type {SourceSchema} from './schema.ts';\nimport {first, type Stream} from './stream.ts';\nimport type {UnionFanOut} from './union-fan-out.ts';\n\nexport class UnionFanIn implements Operator {\n readonly #inputs: readonly Input[];\n readonly #schema: SourceSchema;\n #fanOutPushStarted: boolean = false;\n #output: Output = throwOutput;\n #accumulatedPushes: Change[] = [];\n\n constructor(fanOut: UnionFanOut, inputs: Input[]) {\n this.#inputs = inputs;\n const fanOutSchema = fanOut.getSchema();\n fanOut.setFanIn(this);\n assert(fanOutSchema.sort !== undefined, 'UnionFanIn requires sorted input');\n\n const schema: Writable<SourceSchema> = {\n tableName: fanOutSchema.tableName,\n columns: fanOutSchema.columns,\n primaryKey: fanOutSchema.primaryKey,\n relationships: {\n ...fanOutSchema.relationships,\n },\n isHidden: fanOutSchema.isHidden,\n system: fanOutSchema.system,\n compareRows: fanOutSchema.compareRows,\n sort: fanOutSchema.sort,\n };\n\n // now go through inputs and merge relationships\n const relationshipsFromBranches: Set<string> = new Set();\n for (const input of inputs) {\n const inputSchema = input.getSchema();\n assert(\n schema.tableName === inputSchema.tableName,\n `Table name mismatch in union fan-in: ${schema.tableName} !== ${inputSchema.tableName}`,\n );\n assert(\n schema.primaryKey === inputSchema.primaryKey,\n `Primary key mismatch in union fan-in`,\n );\n assert(\n schema.system === inputSchema.system,\n `System mismatch in union fan-in: ${schema.system} !== ${inputSchema.system}`,\n );\n assert(\n schema.compareRows === inputSchema.compareRows,\n `compareRows mismatch in union fan-in`,\n );\n assert(schema.sort === inputSchema.sort, `Sort mismatch in union fan-in`);\n\n for (const [relName, relSchema] of Object.entries(\n inputSchema.relationships,\n )) {\n if (relName in fanOutSchema.relationships) {\n continue;\n }\n\n // All branches will have unique relationship names except for relationships\n // that come in from `fanOut`.\n assert(\n !relationshipsFromBranches.has(relName),\n `Relationship ${relName} exists in multiple upstream inputs to union fan-in`,\n );\n schema.relationships[relName] = relSchema;\n relationshipsFromBranches.add(relName);\n }\n\n input.setOutput(this);\n }\n\n this.#schema = schema;\n this.#inputs = inputs;\n }\n\n destroy(): void {\n for (const input of this.#inputs) {\n input.destroy();\n }\n }\n\n fetch(req: FetchRequest): Stream<Node | 'yield'> {\n const iterables = this.#inputs.map(input => input.fetch(req));\n const compareRows = this.#schema.compareRows;\n const compare = req.reverse\n ? (l: Node, r: Node) => compareRows(r.row, l.row)\n : (l: Node, r: Node) => compareRows(l.row, r.row);\n return mergeFetches(iterables, compare);\n }\n\n getSchema(): SourceSchema {\n return this.#schema;\n }\n\n *push(change: Change, pusher: InputBase): Stream<'yield'> {\n if (!this.#fanOutPushStarted) {\n yield* this.#pushInternalChange(change, pusher);\n } else {\n this.#accumulatedPushes.push(change);\n }\n }\n\n /**\n * An internal change means that a change was received inside the fan-out/fan-in sub-graph.\n *\n * These changes always come from children of a flip-join as no other push generating operators\n * currently exist between union-fan-in and union-fan-out. All other pushes\n * enter into union-fan-out before reaching union-fan-in.\n *\n * - normal joins for `exists` come before `union-fan-out`\n * - joins for `related` come after `union-fan-out`\n * - take comes after `union-fan-out`\n *\n * The algorithm for deciding whether or not to forward a push that came from inside the ufo/ufi sub-graph:\n * 1. If the change is a `child` change we can forward it. This is because all child branches in the ufo/ufi sub-graph are unique.\n * 2. If the change is `add` we can forward it iff no `fetches` for the row return any results.\n * If another branch has it, the add was already emitted in the past.\n * 3. If the change is `remove` we can forward it iff no `fetches` for the row return any results.\n * If no other branches have the change, the remove can be sent as the value is no longer present.\n * If other branches have it, the last branch the processes the remove will send the remove.\n * 4. Edits will always come through as child changes as flip join will flip them into children.\n * An edit that would result in a remove or add will have been split into an add/remove pair rather than being an edit.\n */\n *#pushInternalChange(change: Change, pusher: InputBase): Stream<'yield'> {\n if (change[ChangeIndex.TYPE] === ChangeType.CHILD) {\n yield* this.#output.push(change, this);\n return;\n }\n\n assert(\n change[ChangeIndex.TYPE] === ChangeType.ADD ||\n change[ChangeIndex.TYPE] === ChangeType.REMOVE,\n () =>\n `UnionFanIn: expected add or remove change type, got ${change[ChangeIndex.TYPE]}`,\n );\n\n let hadMatch = false;\n for (const input of this.#inputs) {\n if (input === pusher) {\n hadMatch = true;\n continue;\n }\n\n const constraint: Writable<Constraint> = {};\n for (const key of this.#schema.primaryKey) {\n constraint[key] = change[ChangeIndex.NODE].row[key];\n }\n const fetchResult = input.fetch({\n constraint,\n });\n\n if (first(fetchResult) !== undefined) {\n // Another branch has the row, so the add/remove is not needed.\n return;\n }\n }\n\n assert(hadMatch, 'Pusher was not one of the inputs to union-fan-in!');\n\n // No other branches have the row, so we can push the change.\n yield* this.#output.push(change, this);\n }\n\n fanOutStartedPushing() {\n assert(\n this.#fanOutPushStarted === false,\n 'UnionFanIn: fanOutStartedPushing called while already pushing',\n );\n this.#fanOutPushStarted = true;\n }\n\n *fanOutDonePushing(fanOutChangeType: ChangeType): Stream<'yield'> {\n assert(\n this.#fanOutPushStarted,\n 'UnionFanIn: fanOutDonePushing called without fanOutStartedPushing',\n );\n this.#fanOutPushStarted = false;\n if (this.#inputs.length === 0) {\n return;\n }\n\n if (this.#accumulatedPushes.length === 0) {\n // It is possible for no forks to pass along the push.\n // E.g., if no filters match in any fork.\n return;\n }\n\n yield* pushAccumulatedChanges(\n this.#accumulatedPushes,\n this.#output,\n this,\n fanOutChangeType,\n mergeRelationships,\n makeAddEmptyRelationships(this.#schema),\n );\n }\n\n setOutput(output: Output): void {\n this.#output = output;\n }\n}\n\nexport function* mergeFetches(\n fetches: Iterable<Node | 'yield'>[],\n comparator: (l: Node, r: Node) => number,\n): IterableIterator<Node | 'yield'> {\n const iterators = fetches.map(i => i[Symbol.iterator]());\n let threw = false;\n try {\n const current: (Node | null)[] = [];\n let lastNodeYielded: Node | undefined;\n for (let i = 0; i < iterators.length; i++) {\n const iter = iterators[i];\n let result = iter.next();\n // yield yields when initializing\n while (!result.done && result.value === 'yield') {\n yield result.value;\n result = iter.next();\n }\n current[i] = result.done ? null : (result.value as Node);\n }\n while (current.some(c => c !== null)) {\n const min = current.reduce(\n (acc: [Node, number] | undefined, c, i): [Node, number] | undefined => {\n if (c === null) {\n return acc;\n }\n if (acc === undefined || comparator(c, acc[0]) < 0) {\n return [c, i];\n }\n return acc;\n },\n undefined,\n );\n\n assert(min !== undefined, 'min is undefined');\n const [minNode, minIndex] = min;\n const iter = iterators[minIndex];\n let result = iter.next();\n while (!result.done && result.value === 'yield') {\n yield result.value;\n result = iter.next();\n }\n current[minIndex] = result.done ? null : (result.value as Node);\n if (\n lastNodeYielded !== undefined &&\n comparator(lastNodeYielded, minNode) === 0\n ) {\n continue;\n }\n lastNodeYielded = minNode;\n yield minNode;\n }\n } catch (e) {\n threw = true;\n for (const iter of iterators) {\n try {\n iter.throw?.(e);\n } catch (_cleanupError) {\n // error in the iter.throw cleanup,\n // catch so other iterators are cleaned up\n }\n }\n throw e;\n } finally {\n if (!threw) {\n for (const iter of iterators) {\n try {\n iter.return?.();\n } catch (_cleanupError) {\n // error in the iter.return cleanup,\n // catch so other iterators are cleaned up\n }\n }\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union-fan-out.js","names":["#input","#outputs","#unionFanIn","#destroyCount"],"sources":["../../../../../../zql/src/ivm/union-fan-out.ts"],"sourcesContent":["import {assert} from '../../../shared/src/asserts.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport {ChangeIndex} from './change-index.ts';\nimport type {Change} from './change.ts';\nimport type {Node} from './data.ts';\nimport type {FetchRequest, Input, Operator, Output} from './operator.ts';\nimport type {SourceSchema} from './schema.ts';\nimport type {Stream} from './stream.ts';\nimport type {UnionFanIn} from './union-fan-in.ts';\n\nexport class UnionFanOut implements Operator {\n #destroyCount: number = 0;\n #unionFanIn?: UnionFanIn;\n readonly #input: Input;\n readonly #outputs: Output[] = [];\n\n constructor(input: Input) {\n this.#input = input;\n input.setOutput(this);\n }\n\n setFanIn(fanIn: UnionFanIn) {\n assert(!this.#unionFanIn, 'FanIn already set for this FanOut');\n this.#unionFanIn = fanIn;\n }\n\n *push(change: Change): Stream<'yield'> {\n must(this.#unionFanIn).fanOutStartedPushing();\n for (const output of this.#outputs) {\n yield* output.push(change, this);\n }\n yield* must(this.#unionFanIn).fanOutDonePushing(change[ChangeIndex.TYPE]);\n }\n\n setOutput(output: Output): void {\n this.#outputs.push(output);\n }\n\n getSchema(): SourceSchema {\n return this.#input.getSchema();\n }\n\n fetch(req: FetchRequest): Stream<Node | 'yield'> {\n return this.#input.fetch(req);\n }\n\n destroy(): void {\n if (this.#destroyCount < this.#outputs.length) {\n ++this.#destroyCount;\n if (this.#destroyCount === this.#outputs.length) {\n this.#input.destroy();\n }\n } else {\n throw new Error('FanOut already destroyed once for each output');\n }\n }\n}\n"],"mappings":";;;AAUA,IAAa,cAAb,MAA6C;CAC3C,gBAAwB;CACxB;CACA;CACA,WAA8B,CAAC;CAE/B,YAAY,OAAc;EACxB,KAAKA,SAAS;EACd,MAAM,UAAU,IAAI;CACtB;CAEA,SAAS,OAAmB;EAC1B,OAAO,CAAC,KAAKE,aAAa,mCAAmC;EAC7D,KAAKA,cAAc;CACrB;CAEA,CAAC,KAAK,QAAiC;EACrC,KAAK,KAAKA,WAAW,EAAE,qBAAqB;EAC5C,KAAK,MAAM,UAAU,KAAKD,UACxB,OAAO,OAAO,KAAK,QAAQ,IAAI;EAEjC,OAAO,KAAK,KAAKC,WAAW,EAAE,kBAAkB,OAAO,EAAiB;CAC1E;CAEA,UAAU,QAAsB;EAC9B,KAAKD,SAAS,KAAK,MAAM;CAC3B;CAEA,YAA0B;EACxB,OAAO,KAAKD,OAAO,UAAU;CAC/B;CAEA,MAAM,KAA2C;EAC/C,OAAO,KAAKA,OAAO,MAAM,GAAG;CAC9B;CAEA,UAAgB;EACd,IAAI,KAAKG,gBAAgB,KAAKF,SAAS,QAAQ;GAC7C,EAAE,KAAKE;GACP,IAAI,KAAKA,kBAAkB,KAAKF,SAAS,QACvC,KAAKD,OAAO,QAAQ;EAExB,OACE,MAAM,IAAI,MAAM,+CAA+C;CAEnE;AACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-apply-change.js","names":[],"sources":["../../../../../../zql/src/ivm/view-apply-change.ts"],"sourcesContent":["import {\n assert,\n assertArray,\n assertNumber,\n unreachable,\n} from '../../../shared/src/asserts.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport type {Writable} from '../../../shared/src/writable.ts';\nimport type {Row} from '../../../zero-protocol/src/data.ts';\nimport {type Comparator, type Node} from './data.ts';\nimport {skipYields} from './operator.ts';\nimport type {SourceSchema} from './schema.ts';\nimport type {Entry, Format} from './view.ts';\n\nexport const refCountSymbol = Symbol('rc');\nexport const idSymbol = Symbol('id');\n\ntype MetaEntry = Writable<Entry> & {\n [refCountSymbol]: number;\n [idSymbol]?: string | undefined;\n};\ntype MetaEntryList = MetaEntry[];\n\n/**\n * `applyChange` does not consume the `relationships` of `ChildChange#node`,\n * `EditChange#node` and `EditChange#oldNode`. The `ViewChange` type\n * documents and enforces this via the type system.\n */\nexport type ViewChange =\n | AddViewChange\n | RemoveViewChange\n | ChildViewChange\n | EditViewChange;\n\nexport type RowOnlyNode = {row: Row};\n\nexport type AddViewChange = {\n type: 'add';\n node: Node;\n};\n\nexport type RemoveViewChange = {\n type: 'remove';\n node: Node;\n};\n\ntype ChildViewChange = {\n type: 'child';\n node: RowOnlyNode;\n child: {\n relationshipName: string;\n change: ViewChange;\n };\n};\n\ntype EditViewChange = {\n type: 'edit';\n node: RowOnlyNode;\n oldNode: RowOnlyNode;\n};\n\n/**\n * This is a subset of WeakMap but restricted to what we need.\n * @deprecated Not used anymore. This will be removed in the future.\n */\nexport interface RefCountMap {\n get(entry: Entry): number | undefined;\n set(entry: Entry, refCount: number): void;\n delete(entry: Entry): boolean;\n}\n\nexport function applyChange(\n parentEntry: Entry,\n change: ViewChange,\n schema: SourceSchema,\n relationship: string,\n format: Format,\n withIDs = false,\n): void {\n if (schema.isHidden) {\n switch (change.type) {\n case 'add':\n case 'remove':\n for (const [relationship, children] of Object.entries(\n change.node.relationships,\n )) {\n const childSchema = must(schema.relationships[relationship]);\n for (const node of skipYields(children())) {\n applyChange(\n parentEntry,\n {type: change.type, node},\n childSchema,\n relationship,\n format,\n withIDs,\n );\n }\n }\n return;\n case 'edit':\n // If hidden at this level it means that the hidden row was changed. If\n // the row was changed in such a way that it would change the\n // relationships then the edit would have been split into remove and\n // add.\n return;\n case 'child': {\n const childSchema = must(\n schema.relationships[change.child.relationshipName],\n );\n applyChange(\n parentEntry,\n change.child.change,\n childSchema,\n relationship,\n format,\n withIDs,\n );\n return;\n }\n default:\n unreachable(change);\n }\n }\n\n const {singular, relationships: childFormats} = format;\n switch (change.type) {\n case 'add': {\n let newEntry: MetaEntry | undefined;\n\n if (singular) {\n const oldEntry = parentEntry[relationship] as MetaEntry | undefined;\n if (oldEntry !== undefined) {\n assert(\n schema.compareRows(oldEntry, change.node.row) === 0,\n `Singular relationship '${relationship}' should not have multiple rows. You may need to declare this relationship with the \\`many\\` helper instead of the \\`one\\` helper in your schema.`,\n );\n // adding same again.\n oldEntry[refCountSymbol]++;\n } else {\n newEntry = makeNewMetaEntry(change.node.row, schema, withIDs, 1);\n\n (parentEntry as Writable<Entry>)[relationship] = newEntry;\n }\n } else {\n newEntry = addToView(\n change.node.row,\n getChildEntryList(parentEntry, relationship),\n schema,\n withIDs,\n );\n }\n\n if (newEntry) {\n for (const [relationship, children] of Object.entries(\n change.node.relationships,\n )) {\n // TODO: Is there a flag to make TypeScript complain that dictionary access might be undefined?\n const childSchema = must(schema.relationships[relationship]);\n const childFormat = childFormats[relationship];\n if (childFormat === undefined) {\n continue;\n }\n\n const newView = childFormat.singular\n ? undefined\n : ([] as MetaEntryList);\n newEntry[relationship] = newView;\n\n for (const node of skipYields(children())) {\n applyChange(\n newEntry,\n {type: 'add', node},\n childSchema,\n relationship,\n childFormat,\n withIDs,\n );\n }\n }\n }\n break;\n }\n case 'remove': {\n if (singular) {\n const oldEntry = parentEntry[relationship] as MetaEntry | undefined;\n assert(oldEntry !== undefined, 'node does not exist');\n const rc = oldEntry[refCountSymbol];\n if (rc === 1) {\n (parentEntry as Writable<Entry>)[relationship] = undefined;\n }\n oldEntry[refCountSymbol]--;\n } else {\n removeAndUpdateRefCount(\n getChildEntryList(parentEntry, relationship),\n change.node.row,\n schema.compareRows,\n );\n }\n break;\n }\n case 'child': {\n let existing: MetaEntry;\n if (singular) {\n existing = getSingularEntry(parentEntry, relationship);\n } else {\n const view = getChildEntryList(parentEntry, relationship);\n const bsResult = binarySearch(\n view,\n change.node.row,\n schema.compareRows,\n );\n assert(bsResult >= 0, 'node does not exist');\n existing = view[bsResult];\n }\n\n const childSchema = must(\n schema.relationships[change.child.relationshipName],\n );\n const childFormat = format.relationships[change.child.relationshipName];\n if (childFormat !== undefined) {\n applyChange(\n existing,\n change.child.change,\n childSchema,\n change.child.relationshipName,\n childFormat,\n withIDs,\n );\n }\n break;\n }\n case 'edit': {\n if (singular) {\n const existing = parentEntry[relationship];\n assertMetaEntry(existing);\n applyEdit(existing, change, schema, withIDs);\n } else {\n const view = getChildEntryList(parentEntry, relationship);\n // The position of the row in the list may have changed due to the edit.\n if (schema.compareRows(change.oldNode.row, change.node.row) !== 0) {\n const oldBsResult = binarySearch(\n view,\n change.oldNode.row,\n schema.compareRows,\n );\n assert(oldBsResult >= 0, 'old node does not exist');\n const oldPos = oldBsResult;\n const oldEntry = view[oldPos];\n const newBsResult = binarySearch(\n view,\n change.node.row,\n schema.compareRows,\n );\n const found = newBsResult >= 0;\n const pos = found ? newBsResult : ~newBsResult;\n // A special case:\n // when refCount is 1 (so the row is being moved\n // without leaving a placeholder behind), and the new pos is\n // the same as the old, or directly after the old (so after the remove\n // of the old it would be in the same pos):\n // the row does not need to be moved, it can just be edited in place.\n if (\n oldEntry[refCountSymbol] === 1 &&\n (pos === oldPos || pos - 1 === oldPos)\n ) {\n applyEdit(oldEntry, change, schema, withIDs);\n } else {\n // Move the row. If the row has > 1 ref count, an edit should\n // be received for each ref count. On the first edit, the original\n // row is moved, the edit is applied to it and its ref count is set\n // to 1. A shallow copy of the row is left at the old pos for\n // processing of the remaining edit, and the copy's ref count\n // is decremented. As each edit is received the ref count of the\n // copy is decrement, and the ref count of the row at the new\n // position is incremented. When the copy's ref count goes to 0,\n // it is removed.\n oldEntry[refCountSymbol]--;\n let adjustedPos = pos;\n if (oldEntry[refCountSymbol] === 0) {\n view.splice(oldPos, 1);\n adjustedPos = oldPos < pos ? pos - 1 : pos;\n }\n\n let entryToEdit;\n if (found) {\n entryToEdit = view[adjustedPos];\n } else {\n view.splice(adjustedPos, 0, oldEntry);\n entryToEdit = oldEntry;\n if (oldEntry[refCountSymbol] > 0) {\n const oldEntryCopy = {...oldEntry};\n view[oldPos] = oldEntryCopy;\n }\n }\n entryToEdit[refCountSymbol]++;\n applyEdit(entryToEdit, change, schema, withIDs);\n }\n } else {\n // Position could not have changed, so simply edit in place.\n const bsResult = binarySearch(\n view,\n change.oldNode.row,\n schema.compareRows,\n );\n assert(bsResult >= 0, 'node does not exist');\n applyEdit(view[bsResult], change, schema, withIDs);\n }\n }\n\n break;\n }\n default:\n unreachable(change);\n }\n}\n\nfunction applyEdit(\n existing: MetaEntry,\n change: EditViewChange,\n schema: SourceSchema,\n withIDs: boolean,\n) {\n Object.assign(existing, change.node.row);\n if (withIDs) {\n existing[idSymbol] = makeID(change.node.row, schema);\n }\n}\n\nfunction addToView(\n row: Row,\n view: MetaEntryList,\n schema: SourceSchema,\n withIDs: boolean,\n): MetaEntry | undefined {\n const bsResult = binarySearch(view, row, schema.compareRows);\n\n if (bsResult >= 0) {\n view[bsResult][refCountSymbol]++;\n return undefined;\n }\n const pos = ~bsResult;\n const newEntry = makeNewMetaEntry(row, schema, withIDs, 1);\n view.splice(pos, 0, newEntry);\n return newEntry;\n}\n\nfunction removeAndUpdateRefCount(\n view: MetaEntryList,\n row: Row,\n compareRows: Comparator,\n): MetaEntry {\n const bsResult = binarySearch(view, row, compareRows);\n assert(bsResult >= 0, 'node does not exist');\n const oldEntry = view[bsResult];\n const rc = oldEntry[refCountSymbol];\n if (rc === 1) {\n view.splice(bsResult, 1);\n }\n oldEntry[refCountSymbol]--;\n\n return oldEntry;\n}\n\n/**\n * Binary search a sorted view.\n *\n * Returns the index of `target` if found (a non-negative integer), or\n * `~insertionIndex` if not found (always negative, following Java's\n * `Arrays.binarySearch` convention). To get the insertion index when\n * not found use the bitwise NOT: `~result`.\n *\n * This avoids allocating a `{pos, found}` result object on every call.\n */\nfunction binarySearch(\n view: MetaEntryList,\n target: Row,\n comparator: Comparator,\n): number {\n let low = 0;\n let high = view.length - 1;\n while (low <= high) {\n const mid = (low + high) >>> 1;\n const comparison = comparator(view[mid] as Row, target as Row);\n if (comparison < 0) {\n low = mid + 1;\n } else if (comparison > 0) {\n high = mid - 1;\n } else {\n return mid; // found\n }\n }\n return ~low; // not found; use ~result to get insertion index\n}\n\nfunction getChildEntryList(\n parentEntry: Entry,\n relationship: string,\n): MetaEntryList {\n const view = parentEntry[relationship];\n assertArray(view);\n return view as MetaEntryList;\n}\n\nfunction assertMetaEntry(v: unknown): asserts v is MetaEntry {\n assertNumber((v as Partial<MetaEntry>)[refCountSymbol]);\n}\n\nfunction getSingularEntry(parentEntry: Entry, relationship: string): MetaEntry {\n const e = parentEntry[relationship];\n assertNumber((e as Partial<MetaEntry>)[refCountSymbol]);\n return e as MetaEntry;\n}\n\nfunction makeNewMetaEntry(\n row: Row,\n schema: SourceSchema,\n withIDs: boolean,\n rc: number,\n): MetaEntry {\n if (withIDs) {\n return {...row, [refCountSymbol]: rc, [idSymbol]: makeID(row, schema)};\n }\n return {...row, [refCountSymbol]: rc};\n}\nfunction makeID(row: Row, schema: SourceSchema) {\n // optimization for case of non-compound primary key\n if (schema.primaryKey.length === 1) {\n return JSON.stringify(row[schema.primaryKey[0]]);\n }\n return JSON.stringify(schema.primaryKey.map(k => row[k]));\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud.js","names":[],"sources":["../../../../../../zql/src/mutate/crud.ts"],"sourcesContent":["import type {Expand} from '../../../shared/src/expand.ts';\nimport {recordProxy} from '../../../shared/src/record-proxy.ts';\nimport type {SchemaValueToTSType} from '../../../zero-types/src/schema-value.ts';\nimport type {Schema, TableSchema} from '../../../zero-types/src/schema.ts';\nimport type {MutateCRUD} from './custom.ts';\n\nexport type SchemaCRUD<S extends Schema> = {\n [Table in keyof S['tables']]: TableCRUD<S['tables'][Table]>;\n};\n\nexport type TransactionMutate<S extends Schema> = SchemaCRUD<S>;\n\nexport type TableCRUD<S extends TableSchema> = {\n /**\n * Writes a row if a row with the same primary key doesn't already exist.\n * Non-primary-key fields that are 'optional' can be omitted or set to\n * `undefined`. Such fields will be assigned the value `null` optimistically\n * and then the default value as defined by the server.\n */\n insert: (value: InsertValue<S>) => Promise<void>;\n\n /**\n * Writes a row unconditionally, overwriting any existing row with the same\n * primary key. Non-primary-key fields that are 'optional' can be omitted or\n * set to `undefined`. Such fields will be assigned the value `null`\n * optimistically and then the default value as defined by the server.\n */\n upsert: (value: UpsertValue<S>) => Promise<void>;\n\n /**\n * Updates a row with the same primary key. If no such row exists, this\n * function does nothing. All non-primary-key fields can be omitted or set to\n * `undefined`. Such fields will be left unchanged from previous value.\n */\n update: (value: UpdateValue<S>) => Promise<void>;\n\n /**\n * Deletes the row with the specified primary key. If no such row exists, this\n * function does nothing.\n */\n delete: (id: DeleteID<S>) => Promise<void>;\n};\n\nexport type CRUDKind = keyof TableCRUD<TableSchema>;\n\nexport const CRUD_KINDS = ['insert', 'upsert', 'update', 'delete'] as const;\n\nexport type DeleteID<S extends TableSchema> = Expand<PrimaryKeyFields<S>>;\n\ntype PrimaryKeyFields<S extends TableSchema> = {\n [K in Extract<\n S['primaryKey'][number],\n keyof S['columns']\n >]: SchemaValueToTSType<S['columns'][K]>;\n};\n\nexport type InsertValue<S extends TableSchema> = Expand<\n PrimaryKeyFields<S> & {\n [K in keyof S['columns'] as S['columns'][K] extends {optional: true}\n ? K\n : never]?: SchemaValueToTSType<S['columns'][K]> | undefined;\n } & {\n [K in keyof S['columns'] as S['columns'][K] extends {optional: true}\n ? never\n : K]: SchemaValueToTSType<S['columns'][K]>;\n }\n>;\n\nexport type UpsertValue<S extends TableSchema> = InsertValue<S>;\n\nexport type UpdateValue<S extends TableSchema> = Expand<\n PrimaryKeyFields<S> & {\n [K in keyof S['columns']]?:\n | SchemaValueToTSType<S['columns'][K]>\n | undefined;\n }\n>;\n\n/**\n * This is the type of the generated mutate.<name>.<verb> function.\n */\nexport type TableMutator<TS extends TableSchema> = {\n /**\n * Writes a row if a row with the same primary key doesn't already exist.\n * Non-primary-key fields that are 'optional' can be omitted or set to\n * `undefined`. Such fields will be assigned the value `null` optimistically\n * and then the default value as defined by the server.\n */\n insert: (value: InsertValue<TS>) => Promise<void>;\n\n /**\n * Writes a row unconditionally, overwriting any existing row with the same\n * primary key. Non-primary-key fields that are 'optional' can be omitted or\n * set to `undefined`. Such fields will be assigned the value `null`\n * optimistically and then the default value as defined by the server.\n */\n upsert: (value: UpsertValue<TS>) => Promise<void>;\n\n /**\n * Updates a row with the same primary key. If no such row exists, this\n * function does nothing. All non-primary-key fields can be omitted or set to\n * `undefined`. Such fields will be left unchanged from previous value.\n */\n update: (value: UpdateValue<TS>) => Promise<void>;\n\n /**\n * Deletes the row with the specified primary key. If no such row exists, this\n * function does nothing.\n */\n delete: (id: DeleteID<TS>) => Promise<void>;\n};\n\n/**\n * A function that executes a CRUD operation.\n * Client and server provide different implementations.\n */\nexport type CRUDExecutor = (\n table: string,\n kind: CRUDKind,\n args: unknown,\n) => Promise<void>;\n\n/**\n * Creates a MutateCRUD function from a schema and executor.\n * This is the shared implementation used by both client and server.\n *\n * @param schema - The Zero schema\n * @param executor - A function that executes CRUD operations\n * @returns A MutateCRUD function that can be called with CRUDMutateRequest objects\n */\nexport function makeCRUDMutate<\n TSchema extends Schema,\n TAddSchemaCRUD extends boolean,\n>(\n schema: TSchema,\n addSchemaCRUD: TAddSchemaCRUD,\n executor: CRUDExecutor,\n): MutateCRUD<TSchema, TAddSchemaCRUD> {\n // Create a callable function that accepts CRUDMutateRequest\n const mutate = (request: AnyCRUDMutateRequest) => {\n const {table, kind, args} = request;\n return executor(table, kind, args);\n };\n\n // Only add table properties when enableLegacyMutators is true\n if (addSchemaCRUD) {\n // Add table names as keys so the proxy can discover them\n for (const tableName of Object.keys(schema.tables)) {\n (mutate as unknown as Record<string, undefined>)[tableName] = undefined;\n }\n\n // Wrap in proxy that lazily creates and caches table CRUD objects\n return recordProxy(\n mutate as unknown as Record<string, undefined>,\n (_value, tableName) => makeTableCRUD(tableName, executor),\n ) as unknown as MutateCRUD<TSchema, TAddSchemaCRUD>;\n }\n\n return mutate as MutateCRUD<TSchema, TAddSchemaCRUD>;\n}\n\nexport function makeTransactionMutate<TSchema extends Schema>(\n schema: TSchema,\n executor: CRUDExecutor,\n): TransactionMutate<TSchema> {\n const target: Record<string, undefined> = {};\n for (const tableName of Object.keys(schema.tables)) {\n target[tableName] = undefined;\n }\n\n return recordProxy(target, (_value, tableName) =>\n makeTableCRUD(tableName, executor),\n ) as SchemaCRUD<TSchema>;\n}\n\n/**\n * Creates a TableCRUD object that delegates to the executor.\n */\nfunction makeTableCRUD(\n tableName: string,\n executor: CRUDExecutor,\n): TableCRUD<TableSchema> {\n return Object.fromEntries(\n CRUD_KINDS.map(kind => [\n kind,\n (value: unknown) => executor(tableName, kind, value),\n ]),\n ) as TableCRUD<TableSchema>;\n}\n\nexport type CRUDMutator<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TKind extends keyof TableMutator<TSchema['tables'][TTable]>,\n TArgs extends Parameters<TableMutator<TSchema['tables'][TTable]>[TKind]>[0],\n> = {\n (args: TArgs): CRUDMutateRequest<TSchema, TTable, TKind, TArgs>;\n\n /**\n * Type-only phantom property to surface mutator types in a covariant position.\n */\n ['~']: Expand<CRUDMutatorTypes<TSchema, TTable, TKind, TArgs>>;\n};\n\nexport type CRUDMutatorTypes<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TKind extends keyof TableMutator<TSchema['tables'][TTable]>,\n TArgs extends Parameters<TableMutator<TSchema['tables'][TTable]>[TKind]>[0],\n> = 'CRUDMutator' & CRUDMutateRequest<TSchema, TTable, TKind, TArgs>;\n\nexport type CRUDMutateRequest<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'],\n TKind extends keyof TableMutator<TSchema['tables'][TTable]>,\n TArgs extends Parameters<TableMutator<TSchema['tables'][TTable]>[TKind]>[0],\n> = {\n readonly schema: TSchema;\n readonly table: TTable;\n readonly kind: TKind;\n readonly args: TArgs;\n};\n\n// oxlint-disable-next-line no-explicit-any\nexport type AnyCRUDMutateRequest = CRUDMutateRequest<any, any, CRUDKind, any>;\n"],"mappings":";;AA6CA,IAAa,aAAa;CAAC;CAAU;CAAU;CAAU;AAAQ;;;;;;;;;AAqFjE,SAAgB,eAId,QACA,eACA,UACqC;CAErC,MAAM,UAAU,YAAkC;EAChD,MAAM,EAAC,OAAO,MAAM,SAAQ;EAC5B,OAAO,SAAS,OAAO,MAAM,IAAI;CACnC;CAGA,IAAI,eAAe;EAEjB,KAAK,MAAM,aAAa,OAAO,KAAK,OAAO,MAAM,GAC/C,OAAiD,aAAa,KAAA;EAIhE,OAAO,YACL,SACC,QAAQ,cAAc,cAAc,WAAW,QAAQ,CAC1D;CACF;CAEA,OAAO;AACT;AAEA,SAAgB,sBACd,QACA,UAC4B;CAC5B,MAAM,SAAoC,CAAC;CAC3C,KAAK,MAAM,aAAa,OAAO,KAAK,OAAO,MAAM,GAC/C,OAAO,aAAa,KAAA;CAGtB,OAAO,YAAY,SAAS,QAAQ,cAClC,cAAc,WAAW,QAAQ,CACnC;AACF;;;;AAKA,SAAS,cACP,WACA,UACwB;CACxB,OAAO,OAAO,YACZ,WAAW,KAAI,SAAQ,CACrB,OACC,UAAmB,SAAS,WAAW,MAAM,KAAK,CACrD,CAAC,CACH;AACF"}