@rocicorp/zero 0.24.2025091100 → 0.24.2025092400

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 (232) hide show
  1. package/out/analyze-query/src/bin-analyze.js +7 -8
  2. package/out/analyze-query/src/bin-analyze.js.map +1 -1
  3. package/out/analyze-query/src/explain-queries.d.ts +1 -1
  4. package/out/analyze-query/src/explain-queries.d.ts.map +1 -1
  5. package/out/analyze-query/src/run-ast.d.ts +13 -23
  6. package/out/analyze-query/src/run-ast.d.ts.map +1 -1
  7. package/out/analyze-query/src/run-ast.js +25 -20
  8. package/out/analyze-query/src/run-ast.js.map +1 -1
  9. package/out/{chunk-V2KPKXLX.js → chunk-5JTC5G4I.js} +254 -156
  10. package/out/chunk-5JTC5G4I.js.map +7 -0
  11. package/out/chunk-ASRS2LFV.js +35 -0
  12. package/out/chunk-ASRS2LFV.js.map +7 -0
  13. package/out/{chunk-FH5Q72JS.js → chunk-OQGMEB3H.js} +3 -3
  14. package/out/{chunk-MLYQCVBG.js → chunk-QZPMFA73.js} +1465 -945
  15. package/out/chunk-QZPMFA73.js.map +7 -0
  16. package/out/{inspector-NC6TPMRA.js → lazy-inspector-TOTYUTBC.js} +298 -231
  17. package/out/lazy-inspector-TOTYUTBC.js.map +7 -0
  18. package/out/react-native.js +276 -278
  19. package/out/react-native.js.map +4 -4
  20. package/out/react.js +13 -25
  21. package/out/react.js.map +2 -2
  22. package/out/replicache/src/connection-loop.d.ts.map +1 -1
  23. package/out/replicache/src/deleted-clients.d.ts +17 -10
  24. package/out/replicache/src/deleted-clients.d.ts.map +1 -1
  25. package/out/replicache/src/kv/expo-sqlite/store.d.ts +11 -0
  26. package/out/replicache/src/kv/expo-sqlite/store.d.ts.map +1 -0
  27. package/out/replicache/src/kv/idb-store.d.ts.map +1 -1
  28. package/out/replicache/src/kv/mem-store.d.ts.map +1 -1
  29. package/out/replicache/src/kv/op-sqlite/store.d.ts +14 -0
  30. package/out/replicache/src/kv/op-sqlite/store.d.ts.map +1 -0
  31. package/out/replicache/src/kv/op-sqlite/types.d.ts +13 -0
  32. package/out/replicache/src/kv/op-sqlite/types.d.ts.map +1 -0
  33. package/out/replicache/src/kv/read-impl.d.ts.map +1 -1
  34. package/out/replicache/src/kv/sqlite-store.d.ts +37 -63
  35. package/out/replicache/src/kv/sqlite-store.d.ts.map +1 -1
  36. package/out/replicache/src/kv/throw-if-closed.d.ts +12 -0
  37. package/out/replicache/src/kv/throw-if-closed.d.ts.map +1 -0
  38. package/out/replicache/src/kv/write-impl-base.d.ts.map +1 -1
  39. package/out/replicache/src/kv/write-impl.d.ts.map +1 -1
  40. package/out/replicache/src/persist/client-gc.d.ts.map +1 -1
  41. package/out/replicache/src/persist/client-group-gc.d.ts +2 -3
  42. package/out/replicache/src/persist/client-group-gc.d.ts.map +1 -1
  43. package/out/replicache/src/persist/clients.d.ts +2 -1
  44. package/out/replicache/src/persist/clients.d.ts.map +1 -1
  45. package/out/replicache/src/persist/collect-idb-databases.d.ts.map +1 -1
  46. package/out/replicache/src/process-scheduler.d.ts.map +1 -1
  47. package/out/replicache/src/replicache-impl.d.ts.map +1 -1
  48. package/out/shared/src/sentinels.d.ts +2 -0
  49. package/out/shared/src/sentinels.d.ts.map +1 -1
  50. package/out/shared/src/sentinels.js +7 -0
  51. package/out/shared/src/sentinels.js.map +1 -0
  52. package/out/shared/src/valita.js +1 -1
  53. package/out/shared/src/valita.js.map +1 -1
  54. package/out/solid.js +4 -4
  55. package/out/zero/package.json +4 -4
  56. package/out/zero/src/zero-cache-dev.js +4 -0
  57. package/out/zero/src/zero-cache-dev.js.map +1 -1
  58. package/out/zero-cache/src/config/network.d.ts.map +1 -1
  59. package/out/zero-cache/src/config/network.js +1 -2
  60. package/out/zero-cache/src/config/network.js.map +1 -1
  61. package/out/zero-cache/src/config/normalize.d.ts +1 -0
  62. package/out/zero-cache/src/config/normalize.d.ts.map +1 -1
  63. package/out/zero-cache/src/config/normalize.js +6 -0
  64. package/out/zero-cache/src/config/normalize.js.map +1 -1
  65. package/out/zero-cache/src/config/zero-config.d.ts +3 -0
  66. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  67. package/out/zero-cache/src/config/zero-config.js +35 -1
  68. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  69. package/out/zero-cache/src/server/anonymous-otel-start.d.ts +1 -0
  70. package/out/zero-cache/src/server/anonymous-otel-start.d.ts.map +1 -1
  71. package/out/zero-cache/src/server/anonymous-otel-start.js +18 -0
  72. package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
  73. package/out/zero-cache/src/server/inspector-delegate.d.ts +9 -0
  74. package/out/zero-cache/src/server/inspector-delegate.d.ts.map +1 -1
  75. package/out/zero-cache/src/server/inspector-delegate.js +19 -0
  76. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  77. package/out/zero-cache/src/server/reaper.d.ts.map +1 -1
  78. package/out/zero-cache/src/server/reaper.js +8 -0
  79. package/out/zero-cache/src/server/reaper.js.map +1 -1
  80. package/out/zero-cache/src/server/syncer.js +2 -2
  81. package/out/zero-cache/src/server/syncer.js.map +1 -1
  82. package/out/zero-cache/src/services/analyze.d.ts +9 -1
  83. package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
  84. package/out/zero-cache/src/services/analyze.js +109 -39
  85. package/out/zero-cache/src/services/analyze.js.map +1 -1
  86. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +3 -1
  87. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  88. package/out/zero-cache/src/services/change-streamer/schema/init.d.ts.map +1 -1
  89. package/out/zero-cache/src/services/change-streamer/schema/init.js +1 -0
  90. package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
  91. package/out/zero-cache/src/services/heapz.d.ts +1 -1
  92. package/out/zero-cache/src/services/heapz.d.ts.map +1 -1
  93. package/out/zero-cache/src/services/heapz.js +2 -2
  94. package/out/zero-cache/src/services/heapz.js.map +1 -1
  95. package/out/zero-cache/src/services/mutagen/pusher.d.ts +36 -0
  96. package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
  97. package/out/zero-cache/src/services/replicator/change-processor.js +1 -1
  98. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  99. package/out/zero-cache/src/services/replicator/incremental-sync.js +2 -2
  100. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  101. package/out/zero-cache/src/services/statz.d.ts +1 -1
  102. package/out/zero-cache/src/services/statz.d.ts.map +1 -1
  103. package/out/zero-cache/src/services/statz.js +3 -3
  104. package/out/zero-cache/src/services/statz.js.map +1 -1
  105. package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts +16 -0
  106. package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts.map +1 -0
  107. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +50 -0
  108. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -0
  109. package/out/zero-cache/src/services/view-syncer/client-schema.js +1 -1
  110. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
  111. package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts.map +1 -1
  112. package/out/zero-cache/src/services/view-syncer/cvr-purger.js +21 -5
  113. package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
  114. package/out/zero-cache/src/services/view-syncer/row-record-cache.js +1 -1
  115. package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
  116. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +2 -3
  117. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  118. package/out/zero-cache/src/services/view-syncer/view-syncer.js +41 -1
  119. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  120. package/out/zero-client/src/client/active-clients-manager.d.ts +2 -1
  121. package/out/zero-client/src/client/active-clients-manager.d.ts.map +1 -1
  122. package/out/zero-client/src/client/delete-clients-manager.d.ts +3 -3
  123. package/out/zero-client/src/client/delete-clients-manager.d.ts.map +1 -1
  124. package/out/zero-client/src/client/inspector/client-group.d.ts +12 -0
  125. package/out/zero-client/src/client/inspector/client-group.d.ts.map +1 -0
  126. package/out/zero-client/src/client/inspector/client.d.ts +15 -0
  127. package/out/zero-client/src/client/inspector/client.d.ts.map +1 -0
  128. package/out/zero-client/src/client/inspector/html-dialog-prompt.d.ts +5 -0
  129. package/out/zero-client/src/client/inspector/html-dialog-prompt.d.ts.map +1 -0
  130. package/out/zero-client/src/client/inspector/inspector.d.ts +14 -18
  131. package/out/zero-client/src/client/inspector/inspector.d.ts.map +1 -1
  132. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts +49 -0
  133. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts.map +1 -0
  134. package/out/zero-client/src/client/inspector/query.d.ts +31 -0
  135. package/out/zero-client/src/client/inspector/query.d.ts.map +1 -0
  136. package/out/zero-client/src/client/options.d.ts +8 -4
  137. package/out/zero-client/src/client/options.d.ts.map +1 -1
  138. package/out/zero-client/src/client/zero.d.ts +6 -6
  139. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  140. package/out/zero-client/src/mod.d.ts +4 -1
  141. package/out/zero-client/src/mod.d.ts.map +1 -1
  142. package/out/zero-protocol/src/analyze-query-result.d.ts +22 -0
  143. package/out/zero-protocol/src/analyze-query-result.d.ts.map +1 -0
  144. package/out/zero-protocol/src/analyze-query-result.js +18 -0
  145. package/out/zero-protocol/src/analyze-query-result.js.map +1 -0
  146. package/out/zero-protocol/src/ast.d.ts +2 -0
  147. package/out/zero-protocol/src/ast.d.ts.map +1 -1
  148. package/out/zero-protocol/src/ast.js +2 -0
  149. package/out/zero-protocol/src/ast.js.map +1 -1
  150. package/out/zero-protocol/src/down.d.ts +20 -0
  151. package/out/zero-protocol/src/down.d.ts.map +1 -1
  152. package/out/zero-protocol/src/inspect-down.d.ts +64 -0
  153. package/out/zero-protocol/src/inspect-down.d.ts.map +1 -1
  154. package/out/zero-protocol/src/inspect-down.js +10 -1
  155. package/out/zero-protocol/src/inspect-down.js.map +1 -1
  156. package/out/zero-protocol/src/inspect-up.d.ts +73 -10
  157. package/out/zero-protocol/src/inspect-up.d.ts.map +1 -1
  158. package/out/zero-protocol/src/inspect-up.js +20 -3
  159. package/out/zero-protocol/src/inspect-up.js.map +1 -1
  160. package/out/zero-protocol/src/protocol-version.d.ts +1 -1
  161. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  162. package/out/zero-protocol/src/protocol-version.js +4 -1
  163. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  164. package/out/zero-protocol/src/up.d.ts +19 -1
  165. package/out/zero-protocol/src/up.d.ts.map +1 -1
  166. package/out/zero-react/src/use-query.d.ts.map +1 -1
  167. package/out/zero-react-native/src/mod.d.ts +2 -2
  168. package/out/zero-react-native/src/mod.d.ts.map +1 -1
  169. package/out/zero.js +4 -4
  170. package/out/zql/src/builder/builder.d.ts.map +1 -1
  171. package/out/zql/src/builder/builder.js +23 -11
  172. package/out/zql/src/builder/builder.js.map +1 -1
  173. package/out/zql/src/builder/debug-delegate.d.ts +2 -5
  174. package/out/zql/src/builder/debug-delegate.d.ts.map +1 -1
  175. package/out/zql/src/builder/debug-delegate.js +1 -0
  176. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  177. package/out/zql/src/ivm/constraint.js +1 -1
  178. package/out/zql/src/ivm/constraint.js.map +1 -1
  179. package/out/zql/src/ivm/fan-in.d.ts.map +1 -1
  180. package/out/zql/src/ivm/fan-in.js +3 -92
  181. package/out/zql/src/ivm/fan-in.js.map +1 -1
  182. package/out/zql/src/ivm/fan-out.js +2 -2
  183. package/out/zql/src/ivm/fan-out.js.map +1 -1
  184. package/out/zql/src/ivm/flipped-join.d.ts +33 -0
  185. package/out/zql/src/ivm/flipped-join.d.ts.map +1 -0
  186. package/out/zql/src/ivm/flipped-join.js +341 -0
  187. package/out/zql/src/ivm/flipped-join.js.map +1 -0
  188. package/out/zql/src/ivm/join-utils.d.ts +14 -0
  189. package/out/zql/src/ivm/join-utils.d.ts.map +1 -0
  190. package/out/zql/src/ivm/join-utils.js +94 -0
  191. package/out/zql/src/ivm/join-utils.js.map +1 -0
  192. package/out/zql/src/ivm/join.d.ts +1 -1
  193. package/out/zql/src/ivm/join.d.ts.map +1 -1
  194. package/out/zql/src/ivm/join.js +3 -101
  195. package/out/zql/src/ivm/join.js.map +1 -1
  196. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  197. package/out/zql/src/ivm/memory-source.js +15 -4
  198. package/out/zql/src/ivm/memory-source.js.map +1 -1
  199. package/out/zql/src/ivm/push-accumulated.d.ts +88 -0
  200. package/out/zql/src/ivm/push-accumulated.d.ts.map +1 -0
  201. package/out/zql/src/ivm/push-accumulated.js +326 -0
  202. package/out/zql/src/ivm/push-accumulated.js.map +1 -0
  203. package/out/zql/src/query/expression.d.ts +3 -3
  204. package/out/zql/src/query/expression.d.ts.map +1 -1
  205. package/out/zql/src/query/expression.js +1 -1
  206. package/out/zql/src/query/expression.js.map +1 -1
  207. package/out/zql/src/query/query-impl.d.ts +3 -4
  208. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  209. package/out/zql/src/query/query-impl.js +12 -5
  210. package/out/zql/src/query/query-impl.js.map +1 -1
  211. package/out/zql/src/query/query.d.ts +6 -3
  212. package/out/zql/src/query/query.d.ts.map +1 -1
  213. package/out/zql/src/query/query.js.map +1 -1
  214. package/out/zqlite/src/db.d.ts +1 -1
  215. package/out/zqlite/src/db.d.ts.map +1 -1
  216. package/out/zqlite/src/db.js +3 -3
  217. package/out/zqlite/src/db.js.map +1 -1
  218. package/out/zqlite/src/table-source.d.ts +0 -1
  219. package/out/zqlite/src/table-source.d.ts.map +1 -1
  220. package/out/zqlite/src/table-source.js +4 -5
  221. package/out/zqlite/src/table-source.js.map +1 -1
  222. package/package.json +4 -4
  223. package/out/chunk-MKB4RXL3.js +0 -15
  224. package/out/chunk-MKB4RXL3.js.map +0 -7
  225. package/out/chunk-MLYQCVBG.js.map +0 -7
  226. package/out/chunk-V2KPKXLX.js.map +0 -7
  227. package/out/inspector-NC6TPMRA.js.map +0 -7
  228. package/out/replicache/src/expo/store.d.ts +0 -4
  229. package/out/replicache/src/expo/store.d.ts.map +0 -1
  230. package/out/zero-client/src/client/inspector/types.d.ts +0 -50
  231. package/out/zero-client/src/client/inspector/types.d.ts.map +0 -1
  232. /package/out/{chunk-FH5Q72JS.js.map → chunk-OQGMEB3H.js.map} +0 -0
@@ -1,4 +1,5 @@
1
1
  import {
2
+ Client,
2
3
  ENTITIES_KEY_PREFIX,
3
4
  Latest,
4
5
  SUBQ_PREFIX,
@@ -6,6 +7,8 @@ import {
6
7
  getClient,
7
8
  getClientGroup,
8
9
  getClients,
10
+ inspectAnalyzeQueryDownSchema,
11
+ inspectAuthenticatedDownSchema,
9
12
  inspectMetricsDownSchema,
10
13
  inspectQueriesDownSchema,
11
14
  inspectVersionDownSchema,
@@ -17,13 +20,88 @@ import {
17
20
  test,
18
21
  valita_exports,
19
22
  withRead
20
- } from "./chunk-MLYQCVBG.js";
23
+ } from "./chunk-QZPMFA73.js";
21
24
  import {
22
25
  assert,
23
26
  unreachable
24
27
  } from "./chunk-SGW2EIVJ.js";
25
28
  import "./chunk-424PT5DM.js";
26
29
 
30
+ // ../zero-client/src/client/inspector/html-dialog-prompt.ts
31
+ function canUseHTMLDialog() {
32
+ try {
33
+ if (typeof globalThis !== "undefined" && "__vitest_worker__" in globalThis) {
34
+ return false;
35
+ }
36
+ return typeof document !== "undefined" && typeof document.createElement === "function" && typeof HTMLDialogElement !== "undefined" && document.body !== null && // Make sure we can actually create a dialog element
37
+ document.createElement("dialog") instanceof HTMLDialogElement;
38
+ } catch {
39
+ return false;
40
+ }
41
+ }
42
+ function createHTMLPasswordPrompt(message) {
43
+ if (!canUseHTMLDialog()) {
44
+ return Promise.resolve(prompt(message));
45
+ }
46
+ return new Promise((resolve) => {
47
+ const reset = "all:revert;";
48
+ const w = "rgba(255,255,255,";
49
+ const white = w + "1)";
50
+ const whiteTransp = w + "0.4)";
51
+ const r1 = "0.25rem";
52
+ const font = `font-family:system-ui,sans-serif;color:${white};`;
53
+ const btnBase = `${reset}${font}cursor:pointer;font-size:1rem;font-weight:500;border:none;padding:0.4rem 0.75rem;border-radius:${r1};background:`;
54
+ const dialog = document.createElement("dialog");
55
+ dialog.style.cssText = `${reset}${font}background:rgba(0,0,0,0.95);padding:2rem;border:1px solid ${whiteTransp};border-radius:0.5rem;`;
56
+ dialog.addEventListener("keydown", (e) => {
57
+ e.stopPropagation();
58
+ });
59
+ dialog.oncancel = () => {
60
+ dialog.remove();
61
+ resolve(null);
62
+ };
63
+ const form = document.createElement("form");
64
+ form.method = "dialog";
65
+ form.style.cssText = `${reset}margin:0;`;
66
+ const messagePara = document.createElement("p");
67
+ messagePara.style.cssText = `${reset}${font}font-size:1.5rem;margin:0 0 1rem 0;`;
68
+ messagePara.append(message);
69
+ const passwordInput = document.createElement("input");
70
+ passwordInput.type = "password";
71
+ passwordInput.placeholder = "Admin password";
72
+ passwordInput.autocomplete = "current-password";
73
+ passwordInput.autofocus = true;
74
+ passwordInput.style.cssText = `${reset}${font}font-size:1rem;display:block;margin:0 0 1rem 0;padding:0.5rem;background:rgba(0,0,0,0.5);border:1px solid ${whiteTransp};border-radius:${r1};`;
75
+ const buttonDiv = document.createElement("div");
76
+ buttonDiv.style.cssText = reset;
77
+ const cancelBtn = document.createElement("button");
78
+ cancelBtn.type = "reset";
79
+ cancelBtn.append("Cancel");
80
+ cancelBtn.style.cssText = btnBase + w + "0.25);";
81
+ const okBtn = document.createElement("button");
82
+ okBtn.type = "submit";
83
+ okBtn.value = "ok";
84
+ okBtn.append("OK");
85
+ okBtn.style.cssText = btnBase + "rgba(19,106,235,1);margin-right:0.5rem;";
86
+ buttonDiv.append(okBtn, cancelBtn);
87
+ form.append(messagePara, passwordInput, buttonDiv);
88
+ dialog.append(form);
89
+ form.onreset = () => {
90
+ dialog.close();
91
+ };
92
+ dialog.onclose = () => {
93
+ if (dialog.returnValue === "ok") {
94
+ resolve(passwordInput.value || null);
95
+ } else {
96
+ resolve(null);
97
+ }
98
+ dialog.remove();
99
+ };
100
+ document.body.append(dialog);
101
+ dialog.showModal();
102
+ });
103
+ }
104
+
27
105
  // ../ast-to-zql/src/ast-to-zql.ts
28
106
  function astToZQL(ast) {
29
107
  let code = "";
@@ -194,72 +272,101 @@ function transformParameter(param) {
194
272
  return `authParam(${fieldStr})`;
195
273
  }
196
274
 
197
- // ../zero-client/src/client/inspector/inspector.ts
198
- async function newInspector(rep, delegate, schema, socket) {
199
- const clientGroupID = await rep.clientGroupID;
200
- return new Inspector(
201
- rep,
202
- delegate,
203
- schema,
204
- rep.clientID,
205
- clientGroupID,
206
- socket
207
- );
208
- }
209
- var Inspector = class {
210
- #rep;
211
- client;
212
- clientGroup;
213
- #schema;
214
- socket;
215
- #delegate;
216
- constructor(rep, delegate, schema, clientID, clientGroupID, socket) {
217
- this.#rep = rep;
218
- this.#schema = schema;
219
- this.client = new Client(
220
- rep,
221
- delegate,
222
- schema,
223
- socket,
224
- clientID,
225
- clientGroupID
226
- );
227
- this.clientGroup = this.client.clientGroup;
228
- this.socket = socket;
229
- this.#delegate = delegate;
230
- }
231
- async metrics() {
232
- const clientMetrics = this.#delegate.metrics;
233
- const serverMetricsJSON = await rpc(
234
- await this.socket(),
235
- { op: "metrics" },
236
- inspectMetricsDownSchema
237
- );
238
- return mergeMetrics(clientMetrics, serverMetricsJSON);
239
- }
240
- clients() {
241
- return withDagRead(
242
- this.#rep,
243
- (dagRead) => clients(this.#rep, this.#delegate, this.socket, this.#schema, dagRead)
244
- );
245
- }
246
- clientsWithQueries() {
247
- return withDagRead(
248
- this.#rep,
249
- (dagRead) => clientsWithQueries(
250
- this.#rep,
251
- this.#delegate,
252
- this.socket,
253
- this.#schema,
254
- dagRead
255
- )
275
+ // ../zero-client/src/client/inspector/query.ts
276
+ var Query = class {
277
+ #socket;
278
+ name;
279
+ args;
280
+ got;
281
+ ttl;
282
+ inactivatedAt;
283
+ rowCount;
284
+ deleted;
285
+ id;
286
+ clientID;
287
+ metrics;
288
+ clientZQL;
289
+ serverZQL;
290
+ #serverAST;
291
+ hydrateClient;
292
+ hydrateServer;
293
+ hydrateTotal;
294
+ updateClientP50;
295
+ updateClientP95;
296
+ updateServerP50;
297
+ updateServerP95;
298
+ constructor(row, delegate, socket) {
299
+ this.#socket = socket;
300
+ const { ast, queryID, inactivatedAt } = row;
301
+ this.clientID = row.clientID;
302
+ this.id = queryID;
303
+ this.inactivatedAt = inactivatedAt === null ? null : new Date(inactivatedAt);
304
+ this.ttl = normalizeTTL(row.ttl);
305
+ this.name = row.name;
306
+ this.args = row.args;
307
+ this.got = row.got;
308
+ this.rowCount = row.rowCount;
309
+ this.deleted = row.deleted;
310
+ this.#serverAST = ast;
311
+ this.serverZQL = ast ? ast.table + astToZQL(ast) : null;
312
+ const clientAST = delegate.getAST(queryID);
313
+ this.clientZQL = clientAST ? clientAST.table + astToZQL(clientAST) : null;
314
+ const clientMetrics = delegate.getQueryMetrics(queryID);
315
+ const serverMetrics = row.metrics;
316
+ const merged = mergeMetrics(clientMetrics, serverMetrics);
317
+ this.metrics = merged;
318
+ const percentile = (name, percentile2) => {
319
+ if (!merged?.[name]) {
320
+ return null;
321
+ }
322
+ const n = merged[name].quantile(percentile2);
323
+ return Number.isNaN(n) ? null : n;
324
+ };
325
+ this.hydrateClient = percentile("query-materialization-client", 0.5);
326
+ this.hydrateServer = percentile("query-materialization-server", 0.5);
327
+ this.hydrateTotal = percentile("query-materialization-end-to-end", 0.5);
328
+ this.updateClientP50 = percentile("query-update-client", 0.5);
329
+ this.updateClientP95 = percentile("query-update-client", 0.95);
330
+ this.updateServerP50 = percentile("query-update-server", 0.5);
331
+ this.updateServerP95 = percentile("query-update-server", 0.95);
332
+ }
333
+ async analyze(options) {
334
+ assert(this.#serverAST, "No server AST available for this query");
335
+ return rpc(
336
+ await this.#socket(),
337
+ {
338
+ op: "analyze-query",
339
+ value: this.#serverAST,
340
+ options
341
+ },
342
+ inspectAnalyzeQueryDownSchema
256
343
  );
257
344
  }
258
- async serverVersion() {
259
- return rpc(await this.socket(), { op: "version" }, inspectVersionDownSchema);
260
- }
261
345
  };
262
- function rpc(socket, arg, downSchema) {
346
+
347
+ // ../zero-client/src/client/inspector/lazy-inspector.ts
348
+ async function rpc(socket, arg, downSchema) {
349
+ try {
350
+ return await rpcNoAuthTry(socket, arg, downSchema);
351
+ } catch (e) {
352
+ if (e instanceof UnauthenticatedError) {
353
+ const password = await createHTMLPasswordPrompt("Enter password:");
354
+ if (password) {
355
+ const authRes = await rpcNoAuthTry(
356
+ socket,
357
+ { op: "authenticate", value: password },
358
+ inspectAuthenticatedDownSchema
359
+ );
360
+ if (authRes) {
361
+ return rpcNoAuthTry(socket, arg, downSchema);
362
+ }
363
+ }
364
+ throw new Error("Authentication failed");
365
+ }
366
+ throw e;
367
+ }
368
+ }
369
+ function rpcNoAuthTry(socket, arg, downSchema) {
263
370
  return new Promise((resolve, reject) => {
264
371
  const id = nanoid();
265
372
  const f = (ev) => {
@@ -273,118 +380,65 @@ function rpc(socket, arg, downSchema) {
273
380
  if (res.ok) {
274
381
  resolve(res.value.value);
275
382
  } else {
383
+ const authRes = test(body, inspectAuthenticatedDownSchema);
384
+ if (authRes.ok) {
385
+ assert(
386
+ authRes.value.value === false,
387
+ "Expected unauthenticated response"
388
+ );
389
+ reject(new UnauthenticatedError());
390
+ }
276
391
  reject(res.error);
277
392
  }
278
393
  socket.removeEventListener("message", f);
279
394
  }
280
395
  };
281
396
  socket.addEventListener("message", f);
282
- socket.send(
283
- JSON.stringify(["inspect", { ...arg, id }])
284
- );
397
+ socket.send(JSON.stringify(["inspect", { ...arg, id }]));
285
398
  });
286
399
  }
287
- var Client = class {
288
- #rep;
289
- id;
290
- clientGroup;
291
- #socket;
292
- #delegate;
293
- constructor(rep, delegate, schema, socket, id, clientGroupID) {
294
- this.#rep = rep;
295
- this.#socket = socket;
296
- this.id = id;
297
- this.clientGroup = new ClientGroup(
298
- rep,
299
- delegate,
300
- socket,
301
- schema,
302
- clientGroupID
303
- );
304
- this.#delegate = delegate;
305
- }
306
- async queries() {
307
- const rows = await rpc(
308
- await this.#socket(),
309
- { op: "queries", clientID: this.id },
310
- inspectQueriesDownSchema
311
- );
312
- return rows.map((row) => new Query(row, this.#delegate));
313
- }
314
- map() {
315
- return withDagRead(this.#rep, async (dagRead) => {
316
- const tree = await getBTree(dagRead, this.id);
317
- const map = /* @__PURE__ */ new Map();
318
- for await (const [key, value] of tree.scan("")) {
319
- map.set(key, value);
320
- }
321
- return map;
322
- });
323
- }
324
- rows(tableName) {
325
- return withDagRead(this.#rep, async (dagRead) => {
326
- const prefix = ENTITIES_KEY_PREFIX + tableName;
327
- const tree = await getBTree(dagRead, this.id);
328
- const rows = [];
329
- for await (const [key, value] of tree.scan(prefix)) {
330
- if (!key.startsWith(prefix)) {
331
- break;
332
- }
333
- rows.push(value);
334
- }
335
- return rows;
336
- });
337
- }
338
- };
339
- var ClientGroup = class {
340
- #rep;
341
- id;
342
- #schema;
343
- #socket;
344
- #delegate;
345
- constructor(rep, delegate, socket, schema, id) {
346
- this.#rep = rep;
347
- this.#delegate = delegate;
348
- this.#socket = socket;
349
- this.#schema = schema;
350
- this.id = id;
351
- }
352
- clients() {
353
- return withDagRead(
354
- this.#rep,
355
- (dagRead) => clients(
356
- this.#rep,
357
- this.#delegate,
358
- this.#socket,
359
- this.#schema,
360
- dagRead,
361
- ([_, v]) => v.clientGroupID === this.id
362
- )
363
- );
364
- }
365
- clientsWithQueries() {
366
- return withDagRead(
367
- this.#rep,
368
- (dagRead) => clientsWithQueries(
369
- this.#rep,
370
- this.#delegate,
371
- this.#socket,
372
- this.#schema,
373
- dagRead,
374
- ([_, v]) => v.clientGroupID === this.id
375
- )
376
- );
377
- }
378
- async queries() {
379
- const rows = await rpc(
380
- await this.#socket(),
381
- { op: "queries" },
382
- inspectQueriesDownSchema
383
- );
384
- return rows.map((row) => new Query(row, this.#delegate));
385
- }
386
- };
387
- async function withDagRead(rep, f) {
400
+ function mergeMetrics(clientMetrics, serverMetrics) {
401
+ return {
402
+ ...clientMetrics ?? newClientMetrics(),
403
+ ...serverMetrics ? convertServerMetrics(serverMetrics) : newServerMetrics()
404
+ };
405
+ }
406
+ function newClientMetrics() {
407
+ return {
408
+ "query-materialization-client": new TDigest(),
409
+ "query-materialization-end-to-end": new TDigest(),
410
+ "query-update-client": new TDigest()
411
+ };
412
+ }
413
+ function newServerMetrics() {
414
+ return {
415
+ "query-materialization-server": new TDigest(),
416
+ "query-update-server": new TDigest()
417
+ };
418
+ }
419
+ function convertServerMetrics(metrics) {
420
+ return mapValues(metrics, (v) => TDigest.fromJSON(v));
421
+ }
422
+ async function inspectorMetrics(delegate) {
423
+ const clientMetrics = delegate.metrics;
424
+ const serverMetricsJSON = await rpc(
425
+ await delegate.getSocket(),
426
+ { op: "metrics" },
427
+ inspectMetricsDownSchema
428
+ );
429
+ return mergeMetrics(clientMetrics, serverMetricsJSON);
430
+ }
431
+ function inspectorClients(delegate) {
432
+ return withDagRead(delegate, (dagRead) => clients(delegate, dagRead));
433
+ }
434
+ function inspectorClientsWithQueries(delegate) {
435
+ return withDagRead(
436
+ delegate,
437
+ (dagRead) => clientsWithQueries(delegate, dagRead)
438
+ );
439
+ }
440
+ async function withDagRead(delegate, f) {
441
+ const { rep } = delegate;
388
442
  await rep.refresh();
389
443
  await rep.persist();
390
444
  return withRead(rep.perdag, f);
@@ -402,21 +456,14 @@ async function getBTree(dagRead, clientID) {
402
456
  );
403
457
  return dbRead.map;
404
458
  }
405
- async function clients(rep, delegate, socket, schema, dagRead, predicate = () => true) {
459
+ async function clients(delegate, dagRead, predicate = () => true) {
406
460
  const clients2 = await getClients(dagRead);
407
461
  return [...clients2.entries()].filter(predicate).map(
408
- ([clientID, { clientGroupID }]) => new Client(rep, delegate, schema, socket, clientID, clientGroupID)
462
+ ([clientID, { clientGroupID }]) => new Client(delegate, clientID, clientGroupID)
409
463
  );
410
464
  }
411
- async function clientsWithQueries(rep, delegate, socket, schema, dagRead, predicate = () => true) {
412
- const allClients = await clients(
413
- rep,
414
- delegate,
415
- socket,
416
- schema,
417
- dagRead,
418
- predicate
419
- );
465
+ async function clientsWithQueries(delegate, dagRead, predicate = () => true) {
466
+ const allClients = await clients(delegate, dagRead, predicate);
420
467
  const clientsWithQueries2 = [];
421
468
  await Promise.all(
422
469
  allClients.map(async (client) => {
@@ -428,61 +475,81 @@ async function clientsWithQueries(rep, delegate, socket, schema, dagRead, predic
428
475
  );
429
476
  return clientsWithQueries2;
430
477
  }
431
- var Query = class {
432
- name;
433
- args;
434
- got;
435
- ttl;
436
- inactivatedAt;
437
- rowCount;
438
- deleted;
439
- id;
440
- clientID;
441
- metrics;
442
- clientZQL;
443
- serverZQL;
444
- constructor(row, delegate) {
445
- const { ast, queryID, inactivatedAt } = row;
446
- this.clientID = row.clientID;
447
- this.id = queryID;
448
- this.inactivatedAt = inactivatedAt === null ? null : new Date(inactivatedAt);
449
- this.ttl = normalizeTTL(row.ttl);
450
- this.name = row.name;
451
- this.args = row.args;
452
- this.got = row.got;
453
- this.rowCount = row.rowCount;
454
- this.deleted = row.deleted;
455
- this.serverZQL = ast ? ast.table + astToZQL(ast) : null;
456
- const clientAST = delegate.getAST(queryID);
457
- this.clientZQL = clientAST ? clientAST.table + astToZQL(clientAST) : null;
458
- const clientMetrics = delegate.getQueryMetrics(queryID);
459
- const serverMetrics = row.metrics;
460
- this.metrics = mergeMetrics(clientMetrics, serverMetrics);
461
- }
462
- };
463
- function mergeMetrics(clientMetrics, serverMetrics) {
464
- return {
465
- ...clientMetrics ?? newClientMetrics(),
466
- ...serverMetrics ? convertServerMetrics(serverMetrics) : newServerMetrics()
467
- };
478
+ async function clientGroupClients(delegate, clientGroupID) {
479
+ const id = await clientGroupID;
480
+ return withDagRead(
481
+ delegate,
482
+ (dagRead) => clients(delegate, dagRead, ([_, v]) => v.clientGroupID === id)
483
+ );
468
484
  }
469
- function newClientMetrics() {
470
- return {
471
- "query-materialization-client": new TDigest(),
472
- "query-materialization-end-to-end": new TDigest(),
473
- "query-update-client": new TDigest()
474
- };
485
+ async function clientGroupClientsWithQueries(delegate, clientGroupID) {
486
+ const id = await clientGroupID;
487
+ return withDagRead(
488
+ delegate,
489
+ (dagRead) => clientsWithQueries(delegate, dagRead, ([_, v]) => v.clientGroupID === id)
490
+ );
475
491
  }
476
- function newServerMetrics() {
477
- return {
478
- "query-materialization-server": new TDigest(),
479
- "query-update-server": new TDigest()
480
- };
492
+ async function clientGroupQueries(delegate) {
493
+ const rows = await rpc(
494
+ await delegate.getSocket(),
495
+ { op: "queries" },
496
+ inspectQueriesDownSchema
497
+ );
498
+ return rows.map((row) => new Query(row, delegate, delegate.getSocket));
481
499
  }
482
- function convertServerMetrics(metrics) {
483
- return mapValues(metrics, (v) => TDigest.fromJSON(v));
500
+ function clientMap(delegate, clientID) {
501
+ return withDagRead(delegate, async (dagRead) => {
502
+ const tree = await getBTree(dagRead, clientID);
503
+ const map = /* @__PURE__ */ new Map();
504
+ for await (const [key, value] of tree.scan("")) {
505
+ map.set(key, value);
506
+ }
507
+ return map;
508
+ });
509
+ }
510
+ function clientRows(delegate, clientID, tableName) {
511
+ return withDagRead(delegate, async (dagRead) => {
512
+ const prefix = ENTITIES_KEY_PREFIX + tableName + "/";
513
+ const tree = await getBTree(dagRead, clientID);
514
+ const rows = [];
515
+ for await (const [key, value] of tree.scan(prefix)) {
516
+ if (!key.startsWith(prefix)) {
517
+ break;
518
+ }
519
+ rows.push(value);
520
+ }
521
+ return rows;
522
+ });
484
523
  }
524
+ async function serverVersion(delegate) {
525
+ return rpc(
526
+ await delegate.getSocket(),
527
+ { op: "version" },
528
+ inspectVersionDownSchema
529
+ );
530
+ }
531
+ async function clientQueries(delegate, clientID) {
532
+ const rows = await rpc(
533
+ await delegate.getSocket(),
534
+ { op: "queries", clientID },
535
+ inspectQueriesDownSchema
536
+ );
537
+ return rows.map((row) => new Query(row, delegate, delegate.getSocket));
538
+ }
539
+ var UnauthenticatedError = class extends Error {
540
+ };
485
541
  export {
486
- newInspector
542
+ clientGroupClients,
543
+ clientGroupClientsWithQueries,
544
+ clientGroupQueries,
545
+ clientMap,
546
+ clientQueries,
547
+ clientRows,
548
+ inspectorClients,
549
+ inspectorClientsWithQueries,
550
+ inspectorMetrics,
551
+ mergeMetrics,
552
+ rpc,
553
+ serverVersion
487
554
  };
488
- //# sourceMappingURL=inspector-NC6TPMRA.js.map
555
+ //# sourceMappingURL=lazy-inspector-TOTYUTBC.js.map