@rocicorp/zero 1.12.0-canary.4 → 1.12.0-canary.6

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 (164) hide show
  1. package/out/analyze-query/src/analyze-cli.d.ts.map +1 -1
  2. package/out/analyze-query/src/analyze-cli.js +2 -1
  3. package/out/analyze-query/src/analyze-cli.js.map +1 -1
  4. package/out/analyze-query/src/bin-transform.js +1 -1
  5. package/out/analyze-query/src/zql-chain.d.ts +23 -0
  6. package/out/analyze-query/src/zql-chain.d.ts.map +1 -0
  7. package/out/analyze-query/src/zql-chain.js +162 -0
  8. package/out/analyze-query/src/zql-chain.js.map +1 -0
  9. package/out/ast-to-zql/src/bin.js +1 -1
  10. package/out/replicache/src/btree/node.js +1 -1
  11. package/out/replicache/src/deleted-clients.d.ts.map +1 -1
  12. package/out/replicache/src/deleted-clients.js +2 -1
  13. package/out/replicache/src/deleted-clients.js.map +1 -1
  14. package/out/replicache/src/kv/sqlite-store.d.ts.map +1 -1
  15. package/out/replicache/src/kv/sqlite-store.js +7 -3
  16. package/out/replicache/src/kv/sqlite-store.js.map +1 -1
  17. package/out/replicache/src/replicache-impl.d.ts.map +1 -1
  18. package/out/replicache/src/replicache-impl.js +17 -14
  19. package/out/replicache/src/replicache-impl.js.map +1 -1
  20. package/out/z2s/src/compiler.js +3 -3
  21. package/out/z2s/src/compiler.js.map +1 -1
  22. package/out/zero/package.js +22 -23
  23. package/out/zero/package.js.map +1 -1
  24. package/out/zero-cache/src/auth/load-permissions.js +1 -1
  25. package/out/zero-cache/src/auth/write-authorizer.js +1 -1
  26. package/out/zero-cache/src/config/zero-config.js +2 -2
  27. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  28. package/out/zero-cache/src/scripts/decommission.js +1 -1
  29. package/out/zero-cache/src/scripts/deploy-permissions.js +1 -1
  30. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  31. package/out/zero-cache/src/server/change-streamer.js +33 -10
  32. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  33. package/out/zero-cache/src/server/replicator.js +1 -1
  34. package/out/zero-cache/src/server/syncer.js +3 -3
  35. package/out/zero-cache/src/services/analyze.js +2 -2
  36. package/out/zero-cache/src/services/change-source/change-source.d.ts +7 -0
  37. package/out/zero-cache/src/services/change-source/change-source.d.ts.map +1 -1
  38. package/out/zero-cache/src/services/change-source/common/backfill-manager.js +1 -1
  39. package/out/zero-cache/src/services/change-source/common/replica-restore.d.ts +25 -0
  40. package/out/zero-cache/src/services/change-source/common/replica-restore.d.ts.map +1 -1
  41. package/out/zero-cache/src/services/change-source/common/replica-restore.js.map +1 -1
  42. package/out/zero-cache/src/services/change-source/common/replica-schema.js +1 -1
  43. package/out/zero-cache/src/services/change-source/custom/change-source.js +1 -1
  44. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +1 -1
  45. package/out/zero-cache/src/services/change-source/pg/change-source-init.d.ts +8 -1
  46. package/out/zero-cache/src/services/change-source/pg/change-source-init.d.ts.map +1 -1
  47. package/out/zero-cache/src/services/change-source/pg/change-source-init.js +35 -18
  48. package/out/zero-cache/src/services/change-source/pg/change-source-init.js.map +1 -1
  49. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +12 -0
  50. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
  51. package/out/zero-cache/src/services/change-source/pg/change-source.js +66 -9
  52. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  53. package/out/zero-cache/src/services/change-source/pg/fork-request.d.ts +57 -0
  54. package/out/zero-cache/src/services/change-source/pg/fork-request.d.ts.map +1 -0
  55. package/out/zero-cache/src/services/change-source/pg/fork-request.js +54 -0
  56. package/out/zero-cache/src/services/change-source/pg/fork-request.js.map +1 -0
  57. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +4 -4
  58. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +2 -2
  59. package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts.map +1 -1
  60. package/out/zero-cache/src/services/change-source/pg/replication-slots.js +6 -0
  61. package/out/zero-cache/src/services/change-source/pg/replication-slots.js.map +1 -1
  62. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +1 -1
  63. package/out/zero-cache/src/services/change-source/pg/schema/init.js +1 -1
  64. package/out/zero-cache/src/services/change-source/pg/schema/published.js +1 -1
  65. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +1 -1
  66. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts +1 -0
  67. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts.map +1 -1
  68. package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts +3 -0
  69. package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts.map +1 -1
  70. package/out/zero-cache/src/services/change-source/protocol/current/status.js +2 -1
  71. package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
  72. package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts +1 -0
  73. package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts.map +1 -1
  74. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts +1 -3
  75. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts.map +1 -1
  76. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js +6 -6
  77. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js.map +1 -1
  78. package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts +41 -2
  79. package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts.map +1 -1
  80. package/out/zero-cache/src/services/change-streamer/backup-monitor.js +55 -20
  81. package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
  82. package/out/zero-cache/src/services/change-streamer/change-log-initializer.js +1 -1
  83. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +9 -0
  84. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
  85. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +27 -8
  86. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  87. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +1 -12
  88. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
  89. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
  90. package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.d.ts +29 -2
  91. package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.d.ts.map +1 -1
  92. package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.js +80 -11
  93. package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.js.map +1 -1
  94. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.d.ts +2 -2
  95. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.d.ts.map +1 -1
  96. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js.map +1 -1
  97. package/out/zero-cache/src/services/change-streamer/replica-poller.d.ts +2 -2
  98. package/out/zero-cache/src/services/change-streamer/replica-poller.d.ts.map +1 -1
  99. package/out/zero-cache/src/services/change-streamer/replica-poller.js +1 -1
  100. package/out/zero-cache/src/services/change-streamer/replica-poller.js.map +1 -1
  101. package/out/zero-cache/src/services/change-streamer/server-start-metrics.d.ts +33 -0
  102. package/out/zero-cache/src/services/change-streamer/server-start-metrics.d.ts.map +1 -0
  103. package/out/zero-cache/src/services/change-streamer/server-start-metrics.js +42 -0
  104. package/out/zero-cache/src/services/change-streamer/server-start-metrics.js.map +1 -0
  105. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.js +2 -2
  106. package/out/zero-cache/src/services/change-streamer/storer.js +1 -1
  107. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +17 -6
  108. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
  109. package/out/zero-cache/src/services/change-streamer/subscriber.js +5 -4
  110. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
  111. package/out/zero-cache/src/services/life-cycle.js +1 -1
  112. package/out/zero-cache/src/services/litestream/commands.js +2 -2
  113. package/out/zero-cache/src/services/plannerz.js +2 -2
  114. package/out/zero-cache/src/services/replicator/change-log-db.js +1 -1
  115. package/out/zero-cache/src/services/replicator/incremental-sync.js +3 -3
  116. package/out/zero-cache/src/services/replicator/schema/backfilling.js +1 -1
  117. package/out/zero-cache/src/services/replicator/write-worker.js +3 -3
  118. package/out/zero-cache/src/services/run-ast.js +1 -1
  119. package/out/zero-cache/src/services/statz.js +2 -2
  120. package/out/zero-cache/src/services/view-syncer/cvr-store.js +1 -1
  121. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +1 -1
  122. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +5 -5
  123. package/out/zero-cache/src/services/view-syncer/row-record-cache.js +1 -1
  124. package/out/zero-cache/src/services/view-syncer/snapshotter.js +1 -1
  125. package/out/zero-cache/src/services/view-syncer/view-syncer.js +6 -6
  126. package/out/zero-cache/src/types/profiler.js +1 -1
  127. package/out/zero-client/src/client/version.js +1 -1
  128. package/out/zero-protocol/src/ast.d.ts.map +1 -1
  129. package/out/zero-protocol/src/ast.js +2 -1
  130. package/out/zero-protocol/src/ast.js.map +1 -1
  131. package/out/zero-protocol/src/down.d.ts +27 -27
  132. package/out/zql/src/ivm/cap.d.ts +1 -1
  133. package/out/zql/src/ivm/cap.d.ts.map +1 -1
  134. package/out/zql/src/ivm/cap.js +10 -0
  135. package/out/zql/src/ivm/cap.js.map +1 -1
  136. package/out/zql/src/ivm/data.d.ts +15 -1
  137. package/out/zql/src/ivm/data.d.ts.map +1 -1
  138. package/out/zql/src/ivm/data.js +15 -1
  139. package/out/zql/src/ivm/data.js.map +1 -1
  140. package/out/zql/src/ivm/exists.d.ts.map +1 -1
  141. package/out/zql/src/ivm/exists.js +12 -4
  142. package/out/zql/src/ivm/exists.js.map +1 -1
  143. package/out/zql/src/ivm/filter-operators.d.ts +5 -0
  144. package/out/zql/src/ivm/filter-operators.d.ts.map +1 -1
  145. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  146. package/out/zql/src/ivm/join.d.ts.map +1 -1
  147. package/out/zql/src/ivm/join.js +6 -3
  148. package/out/zql/src/ivm/join.js.map +1 -1
  149. package/out/zql/src/ivm/memory-source.js +1 -1
  150. package/out/zql/src/ivm/operator.d.ts +6 -0
  151. package/out/zql/src/ivm/operator.d.ts.map +1 -1
  152. package/out/zql/src/ivm/operator.js.map +1 -1
  153. package/out/zql/src/ivm/take.d.ts.map +1 -1
  154. package/out/zql/src/ivm/take.js +4 -3
  155. package/out/zql/src/ivm/take.js.map +1 -1
  156. package/out/zqlite/src/table-source.js +1 -1
  157. package/package.json +22 -23
  158. package/out/analyze-query/src/bin-analyze.d.ts +0 -2
  159. package/out/analyze-query/src/bin-analyze.d.ts.map +0 -1
  160. package/out/analyze-query/src/bin-analyze.js +0 -285
  161. package/out/analyze-query/src/bin-analyze.js.map +0 -1
  162. package/out/zero/src/analyze-query.d.ts +0 -3
  163. package/out/zero/src/analyze-query.d.ts.map +0 -1
  164. package/out/zero/src/analyze-query.js +0 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rocicorp/zero",
3
- "version": "1.12.0-canary.4",
3
+ "version": "1.12.0-canary.6",
4
4
  "description": "Zero is a web framework for serverless web development.",
5
5
  "homepage": "https://zero.rocicorp.dev",
6
6
  "bugs": {
@@ -14,7 +14,6 @@
14
14
  "directory": "packages/zero"
15
15
  },
16
16
  "bin": {
17
- "analyze-query": "./out/zero/src/analyze-query.js",
18
17
  "ast-to-zql": "./out/zero/src/ast-to-zql.js",
19
18
  "transform-query": "./out/zero/src/transform-query.js",
20
19
  "zero-build-schema": "./out/zero/src/build-schema.js",
@@ -123,10 +122,10 @@
123
122
  "@badrap/valita": "0.5.5",
124
123
  "@databases/escape-identifier": "^1.0.3",
125
124
  "@databases/sql": "^3.3.0",
126
- "@dotenvx/dotenvx": "^1.39.0",
125
+ "@dotenvx/dotenvx": "^1.66.0",
127
126
  "@drdgvhbh/postgres-error-codes": "^0.0.6",
128
- "@fastify/cors": "^10.0.0",
129
- "@fastify/websocket": "^11.0.0",
127
+ "@fastify/cors": "^10.1.0",
128
+ "@fastify/websocket": "^11.2.0",
130
129
  "@google-cloud/precise-date": "^4.0.0",
131
130
  "@opentelemetry/api": "^1.9.1",
132
131
  "@opentelemetry/api-logs": "^0.223.0",
@@ -142,48 +141,48 @@
142
141
  "@rocicorp/logger": "^6.1.0",
143
142
  "@rocicorp/resolver": "^1.0.2",
144
143
  "@rocicorp/zero-sqlite3": "^1.1.7",
145
- "@standard-schema/spec": "^1.0.0",
144
+ "@standard-schema/spec": "^1.1.0",
146
145
  "@types/basic-auth": "^1.1.8",
147
- "@types/ws": "^8.5.12",
146
+ "@types/ws": "^8.18.1",
148
147
  "basic-auth": "^2.0.1",
149
- "chalk-template": "^1.1.0",
150
- "chokidar": "^4.0.1",
148
+ "chalk-template": "^1.1.2",
149
+ "chokidar": "^4.0.3",
151
150
  "cloudevents": "^10.0.0",
152
- "command-line-args": "^6.0.1",
153
- "command-line-usage": "^7.0.3",
151
+ "command-line-args": "^6.0.2",
152
+ "command-line-usage": "^7.0.4",
154
153
  "compare-utf8": "^0.2.3",
155
- "defu": "^6.1.4",
156
- "eventemitter3": "^5.0.1",
154
+ "defu": "^6.1.7",
155
+ "eventemitter3": "^5.0.4",
157
156
  "fastify": "^5.12.7",
158
157
  "is-in-subnet": "^4.0.1",
159
- "jose": "^5.9.3",
158
+ "jose": "^5.10.0",
160
159
  "json-custom-numbers": "^3.1.1",
161
- "kasi": "^1.1.0",
160
+ "kasi": "^1.1.2",
162
161
  "nanoid": "^5.1.16",
163
- "oxfmt": "^0.65.0",
162
+ "oxc-parser": "^0.129.0",
163
+ "oxfmt": "^0.74.0",
164
164
  "parse-prometheus-text-format": "^1.1.1",
165
165
  "pg-format": "npm:pg-format-fix@^1.0.5",
166
166
  "postgres": "3.4.7",
167
- "semver": "^7.5.4",
167
+ "semver": "^7.8.0",
168
168
  "url-pattern": "^1.0.3",
169
169
  "urlpattern-polyfill": "^10.1.0",
170
170
  "ws": "^8.22.0"
171
171
  },
172
172
  "devDependencies": {
173
- "@op-engineering/op-sqlite": ">=15",
173
+ "@op-engineering/op-sqlite": "^18.2.5",
174
174
  "analyze-query": "workspace:*",
175
175
  "ast-to-zql": "workspace:*",
176
176
  "expo": "^58.0.14",
177
- "expo-sqlite": ">=15",
178
- "oxc-parser": "^0.129.0",
177
+ "expo-sqlite": "^58.0.13",
179
178
  "react-native": "^0.88.0",
180
179
  "replicache": "workspace:*",
181
180
  "shared": "workspace:*",
182
- "syncpack": "^14.3.0",
183
- "typedoc": "^0.28.17",
181
+ "syncpack": "^14.3.1",
182
+ "typedoc": "^0.28.19",
184
183
  "typescript": "~7.0.2",
185
184
  "vite": "^8.3.4",
186
- "vitest": "^5.0.0",
185
+ "vitest": "^5.0.5",
187
186
  "zero-cache": "workspace:*",
188
187
  "zero-client": "workspace:*",
189
188
  "zero-pg": "workspace:*",
@@ -1,2 +0,0 @@
1
- import '../../shared/src/dotenv.ts';
2
- //# sourceMappingURL=bin-analyze.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bin-analyze.d.ts","sourceRoot":"","sources":["../../../../analyze-query/src/bin-analyze.ts"],"names":[],"mappings":"AAAA,OAAO,4BAA4B,CAAC"}
@@ -1,285 +0,0 @@
1
- import { valita_exports } from "../../shared/src/valita.js";
2
- import { getOrInsertComputed } from "../../shared/src/map.js";
3
- import { must } from "../../shared/src/must.js";
4
- import "../../zero-protocol/src/ast.js";
5
- import { clientToServer } from "../../zero-schema/src/name-mapper.js";
6
- import { asQueryInternals } from "../../zql/src/query/query-internals.js";
7
- import { newQuery } from "../../zql/src/query/query-impl.js";
8
- import { clientSchemaFrom } from "../../zero-schema/src/builder/schema-builder.js";
9
- import "../../zql/src/query/query.js";
10
- import { QueryDelegateBase } from "../../zql/src/query/query-delegate-base.js";
11
- import "../../shared/src/dotenv.js";
12
- import { logLevel, logOptions } from "../../otel/src/log-options.js";
13
- import { colorConsole, createLogContext } from "../../shared/src/logging.js";
14
- import { parseOptions } from "../../shared/src/options.js";
15
- import { Debug, runtimeDebugFlags } from "../../zql/src/builder/debug-delegate.js";
16
- import { getShardID, upstreamSchema } from "../../zero-cache/src/types/shards.js";
17
- import { ZERO_ENV_VAR_PREFIX, appOptions, shardOptions, zeroOptions } from "../../zero-cache/src/config/zero-config.js";
18
- import { Database } from "../../zqlite/src/db.js";
19
- import { TableSource } from "../../zqlite/src/table-source.js";
20
- import { astToZQL } from "../../ast-to-zql/src/ast-to-zql.js";
21
- import { formatOutput } from "../../ast-to-zql/src/format.js";
22
- import { computeZqlSpecs, mustGetTableSpec } from "../../zero-cache/src/db/lite-tables.js";
23
- import { deployPermissionsOptions, loadSchemaAndPermissions } from "../../zero-cache/src/scripts/permissions.js";
24
- import { runAst } from "../../zero-cache/src/services/run-ast.js";
25
- import { pgClient } from "../../zero-cache/src/types/pg.js";
26
- import { explainQueries } from "../../zqlite/src/explain-queries.js";
27
- import { styleText } from "node:util";
28
- import fs from "node:fs";
29
- //#region ../analyze-query/src/bin-analyze.ts
30
- var options = {
31
- schema: deployPermissionsOptions.schema,
32
- replicaFile: {
33
- ...zeroOptions.replica.file,
34
- desc: ["File path to the SQLite replica to test queries against."]
35
- },
36
- ast: {
37
- type: valita_exports.string().optional(),
38
- desc: ["AST for the query to be analyzed. Only one of ast/query/hash should be provided."]
39
- },
40
- query: {
41
- type: valita_exports.string().optional(),
42
- desc: ["Query to be analyzed in the form of: table.where(...).related(...).etc. ", "Only one of ast/query/hash should be provided."]
43
- },
44
- hash: {
45
- type: valita_exports.string().optional(),
46
- desc: [
47
- "Hash of the query to be analyzed. This is used to look up the query in the database. ",
48
- "Only one of ast/query/hash should be provided.",
49
- "You should run this script from the directory containing your .env file to reduce the amount of",
50
- "configuration required. The .env file should contain the connection URL to the CVR database."
51
- ]
52
- },
53
- applyPermissions: {
54
- type: valita_exports.boolean().optional(() => false),
55
- desc: ["Whether to apply permissions (from your schema file) to the provided query."]
56
- },
57
- authData: {
58
- type: valita_exports.string().optional(),
59
- desc: ["JSON encoded payload of the auth data.", "This will be used to fill permission variables if the \"applyPermissions\" option is set"]
60
- },
61
- outputVendedRows: {
62
- type: valita_exports.boolean().optional(() => false),
63
- desc: ["Whether to output the rows which were read from the replica in order to execute the analyzed query. ", "If the same row is read more than once it will be logged once for each time it was read."]
64
- },
65
- outputSyncedRows: {
66
- type: valita_exports.boolean().optional(() => false),
67
- desc: ["Whether to output the rows which would be synced to the client for the analyzed query."]
68
- },
69
- cvr: { db: {
70
- type: valita_exports.string().optional(),
71
- desc: ["Connection URL to the CVR database. If using --hash, either this or --upstream-db", "must be specified."]
72
- } },
73
- upstream: {
74
- db: {
75
- desc: [`Connection URL to the "upstream" authoritative postgres database. If using --hash, `, "either this or --cvr-db must be specified."],
76
- type: valita_exports.string().optional()
77
- },
78
- type: zeroOptions.upstream.type
79
- },
80
- app: appOptions,
81
- shard: shardOptions,
82
- enableCorrelatedPredicatePushdown: zeroOptions.enableCorrelatedPredicatePushdown,
83
- log: {
84
- ...logOptions,
85
- level: logLevel.optional(() => "error")
86
- }
87
- };
88
- var cfg = parseOptions(options, {
89
- argv: process.argv.slice(2).map((s) => s.replaceAll("\n", " ")),
90
- envNamePrefix: ZERO_ENV_VAR_PREFIX,
91
- description: [{
92
- header: "analyze-query",
93
- content: `Analyze a ZQL query and show information about how it runs against a SQLite replica.
94
-
95
- analyze-query uses the same environment variables and flags as zero-cache-dev. If run from your development environment, it will pick up your ZERO_REPLICA_FILE, ZERO_SCHEMA_PATH, and other env vars automatically.
96
-
97
- If run in another environment (e.g., production) you will have to specify these flags. In particular, you must have a copy of the appropriate Zero schema file to give to the --schema-path flag.`
98
- }, {
99
- header: "Examples",
100
- content: `# In development
101
- npx analyze-query --query='issue.related("comments").limit(10)'
102
- npx analyze-query --ast='\\{"table": "artist","limit": 10\\}'
103
- npx analyze-query --hash=1234567890
104
-
105
- # In production
106
- # First copy schema.ts to your production environment, then run:
107
- npx analyze-query \\
108
- --schema-path='./schema.ts' \\
109
- --replica-file='/path/to/replica.db' \\
110
- --query='issue.related("comments").limit(10)'
111
-
112
- npx analyze-query \\
113
- --schema-path='./schema.ts' \\
114
- --replica-file='/path/to/replica.db' \\
115
- --ast='\\{"table": "artist","limit": 10\\}'
116
-
117
- # cvr-db is required when using the hash option.
118
- # It is typically the same as your upstream db.
119
- npx analyze-query \\
120
- --schema-path='./schema.ts' \\
121
- --replica-file='/path/to/replica.db' \\
122
- --cvr-db='postgres://user:pass@host:port/db' \\
123
- --hash=1234567890
124
- `
125
- }]
126
- });
127
- var config = {
128
- ...cfg,
129
- cvr: {
130
- ...cfg.cvr,
131
- db: cfg.cvr.db ?? cfg.upstream.db
132
- }
133
- };
134
- runtimeDebugFlags.trackRowCountsVended = true;
135
- runtimeDebugFlags.trackRowsVended = config.outputVendedRows;
136
- var lc = createLogContext({ log: config.log });
137
- colorConsole.warn("DEPRECATED: `analyze-query` is deprecated. Please migrate to a project-specific analyze command built with `runAnalyzeCLI` from `@rocicorp/zero/analyze`.");
138
- if (!fs.existsSync(config.replicaFile)) {
139
- colorConsole.error(`Replica file ${config.replicaFile} does not exist`);
140
- process.exit(1);
141
- }
142
- var db = new Database(lc, config.replicaFile);
143
- var { schema, permissions } = await loadSchemaAndPermissions(config.schema.path);
144
- var clientSchema = clientSchemaFrom(schema).clientSchema;
145
- var sources = /* @__PURE__ */ new Map();
146
- var clientToServerMapper = clientToServer(schema.tables);
147
- var debug = new Debug(config.outputVendedRows);
148
- var tableSpecs = computeZqlSpecs(lc, db, { includeBackfillingColumns: false });
149
- var AnalyzeQueryDelegate = class extends QueryDelegateBase {
150
- debug = debug;
151
- defaultQueryComplete = true;
152
- disableCorrelatedPredicatePushdown = !config.enableCorrelatedPredicatePushdown;
153
- getSource(serverTableName) {
154
- return getOrInsertComputed(sources, serverTableName, (serverTableName) => {
155
- const tableSpec = mustGetTableSpec(tableSpecs, serverTableName);
156
- const { primaryKey } = tableSpec.tableSpec;
157
- return new TableSource(lc, config.log, db, serverTableName, tableSpec.zqlSpec, primaryKey);
158
- });
159
- }
160
- };
161
- var host = new AnalyzeQueryDelegate();
162
- var result;
163
- if (config.ast) result = await runAst(lc, clientSchema, JSON.parse(config.ast), true, {
164
- applyPermissions: config.applyPermissions,
165
- auth: config.authData ? {
166
- type: "jwt",
167
- raw: "",
168
- decoded: JSON.parse(config.authData)
169
- } : void 0,
170
- clientToServerMapper,
171
- permissions,
172
- syncedRows: config.outputSyncedRows,
173
- db,
174
- tableSpecs,
175
- host
176
- }, async () => {});
177
- else if (config.query) result = await runQuery(config.query);
178
- else if (config.hash) result = await runHash(config.hash);
179
- else {
180
- colorConsole.error("No query or AST or hash provided");
181
- process.exit(1);
182
- }
183
- function runQuery(queryString) {
184
- const z = { query: Object.fromEntries(Object.entries(schema.tables).map(([name]) => [name, newQuery(schema, name)])) };
185
- const q = new Function("z", `return z.query.${queryString};`)(z);
186
- const ast = asQueryInternals(q).ast;
187
- return runAst(lc, clientSchema, ast, false, {
188
- applyPermissions: config.applyPermissions,
189
- auth: config.authData ? {
190
- type: "jwt",
191
- raw: "",
192
- decoded: JSON.parse(config.authData)
193
- } : void 0,
194
- clientToServerMapper,
195
- permissions,
196
- syncedRows: config.outputSyncedRows,
197
- db,
198
- tableSpecs,
199
- host
200
- }, async () => {});
201
- }
202
- async function runHash(hash) {
203
- const cvrDB = pgClient(lc, must(config.cvr.db, "CVR DB must be provided when using the hash option"), "analyze-query-hash-cvr");
204
- const rows = await cvrDB`select "clientAST", "internal" from ${cvrDB(upstreamSchema(getShardID(config)) + "/cvr")}."queries" where "queryHash" = ${must(hash)} limit 1;`;
205
- await cvrDB.end();
206
- colorConsole.log("ZQL from Hash:");
207
- const ast = rows[0].clientAST;
208
- colorConsole.log(await formatOutput(ast.table + astToZQL(ast)));
209
- return runAst(lc, clientSchema, ast, true, {
210
- applyPermissions: config.applyPermissions,
211
- auth: config.authData ? {
212
- type: "jwt",
213
- raw: "",
214
- decoded: JSON.parse(config.authData)
215
- } : void 0,
216
- clientToServerMapper,
217
- permissions,
218
- syncedRows: config.outputSyncedRows,
219
- db,
220
- tableSpecs,
221
- host
222
- }, async () => {});
223
- }
224
- if (config.outputSyncedRows) {
225
- colorConsole.log(styleText(["blue", "bold"], "=== Synced Rows: ===\n"));
226
- for (const [table, rows] of Object.entries(result.syncedRows ?? {})) colorConsole.log(styleText("bold", table + ":"), rows);
227
- }
228
- colorConsole.log(styleText(["blue", "bold"], "=== Query Stats: ===\n"));
229
- colorConsole.log(styleText("bold", "total synced rows:"), result.syncedRowCount);
230
- showStats();
231
- if (config.outputVendedRows) {
232
- colorConsole.log(styleText(["blue", "bold"], "=== JS Row Scan Values: ===\n"));
233
- for (const source of sources.values()) colorConsole.log(styleText("bold", `${source.tableSchema.name}:`), debug.getVendedRows()?.[source.tableSchema.name] ?? {});
234
- }
235
- colorConsole.log(styleText(["blue", "bold"], "\n=== Rows Scanned (by SQLite): ===\n"));
236
- var nvisitCounts = debug.getNVisitCounts();
237
- var totalNVisit = 0;
238
- for (const [table, queries] of Object.entries(nvisitCounts)) {
239
- colorConsole.log(styleText("bold", `${table}:`), queries);
240
- for (const count of Object.values(queries)) totalNVisit += count;
241
- }
242
- colorConsole.log(styleText("bold", "total rows scanned:"), colorRowsConsidered(totalNVisit));
243
- colorConsole.log(styleText(["blue", "bold"], "\n\n=== Query Plans: ===\n"));
244
- var fallbackPlans = explainQueries(debug.getVendedRowCounts() ?? {}, db);
245
- var capturedPlans = debug.getSQLitePlans();
246
- var plans = {
247
- ...fallbackPlans,
248
- ...capturedPlans
249
- };
250
- for (const [query, plan] of Object.entries(plans)) {
251
- colorConsole.log(styleText("bold", "query"), query);
252
- colorConsole.log(plan.map((row, i) => colorPlanRow(row, i)).join("\n"));
253
- colorConsole.log("\n");
254
- }
255
- function showStats() {
256
- let totalRowsConsidered = 0;
257
- for (const source of sources.values()) {
258
- const values = Object.values(debug.getVendedRowCounts()?.[source.tableSchema.name] ?? {});
259
- for (const v of values) totalRowsConsidered += v;
260
- colorConsole.log(styleText("bold", source.tableSchema.name + " vended:"), debug.getVendedRowCounts()?.[source.tableSchema.name] ?? {});
261
- }
262
- colorConsole.log(styleText("bold", "Rows Read (into JS):"), colorRowsConsidered(totalRowsConsidered));
263
- colorConsole.log(styleText("bold", "time:"), colorTime(result.end - result.start), "ms");
264
- }
265
- function colorTime(duration) {
266
- if (duration < 100) return styleText("green", duration.toFixed(2) + "ms");
267
- else if (duration < 1e3) return styleText("yellow", duration.toFixed(2) + "ms");
268
- return styleText("red", duration.toFixed(2) + "ms");
269
- }
270
- function colorRowsConsidered(n) {
271
- if (n < 1e3) return styleText("green", n.toString());
272
- else if (n < 1e4) return styleText("yellow", n.toString());
273
- return styleText("red", n.toString());
274
- }
275
- function colorPlanRow(row, i) {
276
- if (row.includes("SCAN")) {
277
- if (i === 0) return styleText("yellow", row);
278
- return styleText("red", row);
279
- }
280
- return styleText("green", row);
281
- }
282
- //#endregion
283
- export {};
284
-
285
- //# sourceMappingURL=bin-analyze.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bin-analyze.js","names":["v"],"sources":["../../../../analyze-query/src/bin-analyze.ts"],"sourcesContent":["import '../../shared/src/dotenv.ts';\n\nimport fs from 'node:fs';\nimport {styleText} from 'node:util';\nimport {astToZQL} from '../../ast-to-zql/src/ast-to-zql.ts';\nimport {formatOutput} from '../../ast-to-zql/src/format.ts';\nimport {logLevel, logOptions} from '../../otel/src/log-options.ts';\nimport {colorConsole, createLogContext} from '../../shared/src/logging.ts';\nimport {getOrInsertComputed} from '../../shared/src/map.ts';\nimport {must} from '../../shared/src/must.ts';\nimport {parseOptions} from '../../shared/src/options.ts';\nimport * as v from '../../shared/src/valita.ts';\nimport {\n appOptions,\n shardOptions,\n ZERO_ENV_VAR_PREFIX,\n zeroOptions,\n} from '../../zero-cache/src/config/zero-config.ts';\nimport {\n computeZqlSpecs,\n mustGetTableSpec,\n} from '../../zero-cache/src/db/lite-tables.ts';\nimport {\n deployPermissionsOptions,\n loadSchemaAndPermissions,\n} from '../../zero-cache/src/scripts/permissions.ts';\nimport {runAst} from '../../zero-cache/src/services/run-ast.ts';\nimport {pgClient} from '../../zero-cache/src/types/pg.ts';\nimport {getShardID, upstreamSchema} from '../../zero-cache/src/types/shards.ts';\nimport type {AnalyzeQueryResult} from '../../zero-protocol/src/analyze-query-result.ts';\nimport {type AST} from '../../zero-protocol/src/ast.ts';\nimport {clientSchemaFrom} from '../../zero-schema/src/builder/schema-builder.ts';\nimport {clientToServer} from '../../zero-schema/src/name-mapper.ts';\nimport type {Schema} from '../../zero-types/src/schema.ts';\nimport {\n Debug,\n runtimeDebugFlags,\n} from '../../zql/src/builder/debug-delegate.ts';\nimport type {Source} from '../../zql/src/ivm/source.ts';\nimport {QueryDelegateBase} from '../../zql/src/query/query-delegate-base.ts';\nimport {newQuery} from '../../zql/src/query/query-impl.ts';\nimport {asQueryInternals} from '../../zql/src/query/query-internals.ts';\nimport {type PullRow, type Query} from '../../zql/src/query/query.ts';\nimport {Database} from '../../zqlite/src/db.ts';\nimport {explainQueries} from '../../zqlite/src/explain-queries.ts';\nimport {TableSource} from '../../zqlite/src/table-source.ts';\n\nconst options = {\n schema: deployPermissionsOptions.schema,\n replicaFile: {\n ...zeroOptions.replica.file,\n desc: ['File path to the SQLite replica to test queries against.'],\n },\n ast: {\n type: v.string().optional(),\n desc: [\n 'AST for the query to be analyzed. Only one of ast/query/hash should be provided.',\n ],\n },\n query: {\n type: v.string().optional(),\n desc: [\n 'Query to be analyzed in the form of: table.where(...).related(...).etc. ',\n 'Only one of ast/query/hash should be provided.',\n ],\n },\n hash: {\n type: v.string().optional(),\n desc: [\n 'Hash of the query to be analyzed. This is used to look up the query in the database. ',\n 'Only one of ast/query/hash should be provided.',\n 'You should run this script from the directory containing your .env file to reduce the amount of',\n 'configuration required. The .env file should contain the connection URL to the CVR database.',\n ],\n },\n applyPermissions: {\n type: v.boolean().optional(() => false),\n desc: [\n 'Whether to apply permissions (from your schema file) to the provided query.',\n ],\n },\n authData: {\n type: v.string().optional(),\n desc: [\n 'JSON encoded payload of the auth data.',\n 'This will be used to fill permission variables if the \"applyPermissions\" option is set',\n ],\n },\n outputVendedRows: {\n type: v.boolean().optional(() => false),\n desc: [\n 'Whether to output the rows which were read from the replica in order to execute the analyzed query. ',\n 'If the same row is read more than once it will be logged once for each time it was read.',\n ],\n },\n outputSyncedRows: {\n type: v.boolean().optional(() => false),\n desc: [\n 'Whether to output the rows which would be synced to the client for the analyzed query.',\n ],\n },\n cvr: {\n db: {\n type: v.string().optional(),\n desc: [\n 'Connection URL to the CVR database. If using --hash, either this or --upstream-db',\n 'must be specified.',\n ],\n },\n },\n upstream: {\n db: {\n desc: [\n `Connection URL to the \"upstream\" authoritative postgres database. If using --hash, `,\n 'either this or --cvr-db must be specified.',\n ],\n type: v.string().optional(),\n },\n type: zeroOptions.upstream.type,\n },\n app: appOptions,\n shard: shardOptions,\n // Read from the same env var as zero-cache, so the analysis matches what\n // the server runs.\n enableCorrelatedPredicatePushdown:\n zeroOptions.enableCorrelatedPredicatePushdown,\n log: {\n ...logOptions,\n level: logLevel.optional(() => 'error'),\n },\n};\n\nconst cfg = parseOptions(options, {\n argv: process.argv.slice(2).map(s => s.replaceAll('\\n', ' ')),\n envNamePrefix: ZERO_ENV_VAR_PREFIX,\n description: [\n {\n header: 'analyze-query',\n content: `Analyze a ZQL query and show information about how it runs against a SQLite replica.\n\n analyze-query uses the same environment variables and flags as zero-cache-dev. If run from your development environment, it will pick up your ZERO_REPLICA_FILE, ZERO_SCHEMA_PATH, and other env vars automatically.\n\n If run in another environment (e.g., production) you will have to specify these flags. In particular, you must have a copy of the appropriate Zero schema file to give to the --schema-path flag.`,\n },\n {\n header: 'Examples',\n content: `# In development\n npx analyze-query --query='issue.related(\"comments\").limit(10)'\n npx analyze-query --ast='\\\\{\"table\": \"artist\",\"limit\": 10\\\\}'\n npx analyze-query --hash=1234567890\n\n # In production\n # First copy schema.ts to your production environment, then run:\n npx analyze-query \\\\\n --schema-path='./schema.ts' \\\\\n --replica-file='/path/to/replica.db' \\\\\n --query='issue.related(\"comments\").limit(10)'\n\n npx analyze-query \\\\\n --schema-path='./schema.ts' \\\\\n --replica-file='/path/to/replica.db' \\\\\n --ast='\\\\{\"table\": \"artist\",\"limit\": 10\\\\}'\n\n # cvr-db is required when using the hash option.\n # It is typically the same as your upstream db.\n npx analyze-query \\\\\n --schema-path='./schema.ts' \\\\\n --replica-file='/path/to/replica.db' \\\\\n --cvr-db='postgres://user:pass@host:port/db' \\\\\n --hash=1234567890\n `,\n },\n ],\n});\nconst config = {\n ...cfg,\n cvr: {\n ...cfg.cvr,\n db: cfg.cvr.db ?? cfg.upstream.db,\n },\n};\n\nruntimeDebugFlags.trackRowCountsVended = true;\nruntimeDebugFlags.trackRowsVended = config.outputVendedRows;\n\nconst lc = createLogContext({\n log: config.log,\n});\n\ncolorConsole.warn(\n 'DEPRECATED: `analyze-query` is deprecated. Please migrate to a project-specific analyze command built with `runAnalyzeCLI` from `@rocicorp/zero/analyze`.',\n);\n\nif (!fs.existsSync(config.replicaFile)) {\n colorConsole.error(`Replica file ${config.replicaFile} does not exist`);\n process.exit(1);\n}\nconst db = new Database(lc, config.replicaFile);\n\nconst {schema, permissions} = await loadSchemaAndPermissions(\n config.schema.path,\n);\nconst clientSchema = clientSchemaFrom(schema).clientSchema;\n\nconst sources = new Map<string, TableSource>();\nconst clientToServerMapper = clientToServer(schema.tables);\nconst debug = new Debug(config.outputVendedRows);\nconst tableSpecs = computeZqlSpecs(lc, db, {includeBackfillingColumns: false});\n\nclass AnalyzeQueryDelegate extends QueryDelegateBase {\n readonly debug = debug;\n readonly defaultQueryComplete = true;\n readonly disableCorrelatedPredicatePushdown =\n !config.enableCorrelatedPredicatePushdown;\n\n getSource(serverTableName: string): Source | undefined {\n return getOrInsertComputed(sources, serverTableName, serverTableName => {\n const tableSpec = mustGetTableSpec(tableSpecs, serverTableName);\n const {primaryKey} = tableSpec.tableSpec;\n return new TableSource(\n lc,\n config.log,\n db,\n serverTableName,\n tableSpec.zqlSpec,\n primaryKey,\n );\n });\n }\n}\n\nconst host = new AnalyzeQueryDelegate();\n\nlet result: AnalyzeQueryResult;\n\nif (config.ast) {\n result = await runAst(\n lc,\n clientSchema,\n JSON.parse(config.ast),\n true,\n {\n applyPermissions: config.applyPermissions,\n auth: config.authData\n ? {type: 'jwt' as const, raw: '', decoded: JSON.parse(config.authData)}\n : undefined,\n clientToServerMapper,\n permissions,\n syncedRows: config.outputSyncedRows,\n db,\n tableSpecs,\n host,\n },\n async () => {},\n );\n} else if (config.query) {\n result = await runQuery(config.query);\n} else if (config.hash) {\n result = await runHash(config.hash);\n} else {\n colorConsole.error('No query or AST or hash provided');\n process.exit(1);\n}\n\nfunction runQuery(queryString: string): Promise<AnalyzeQueryResult> {\n const z = {\n query: Object.fromEntries(\n Object.entries(schema.tables).map(([name]) => [\n name,\n newQuery(schema, name),\n ]),\n ),\n };\n\n const f = new Function('z', `return z.query.${queryString};`);\n const q: Query<string, Schema, PullRow<string, Schema>> = f(z);\n\n const ast = asQueryInternals(q).ast;\n return runAst(\n lc,\n clientSchema,\n ast,\n false,\n {\n applyPermissions: config.applyPermissions,\n auth: config.authData\n ? {type: 'jwt' as const, raw: '', decoded: JSON.parse(config.authData)}\n : undefined,\n clientToServerMapper,\n permissions,\n syncedRows: config.outputSyncedRows,\n db,\n tableSpecs,\n host,\n },\n async () => {},\n );\n}\n\nasync function runHash(hash: string) {\n const cvrDB = pgClient(\n lc,\n must(config.cvr.db, 'CVR DB must be provided when using the hash option'),\n 'analyze-query-hash-cvr',\n );\n\n const rows = await cvrDB`select \"clientAST\", \"internal\" from ${cvrDB(\n upstreamSchema(getShardID(config)) + '/cvr',\n )}.\"queries\" where \"queryHash\" = ${must(hash)} limit 1;`;\n await cvrDB.end();\n\n colorConsole.log('ZQL from Hash:');\n const ast = rows[0].clientAST as AST;\n colorConsole.log(await formatOutput(ast.table + astToZQL(ast)));\n\n return runAst(\n lc,\n clientSchema,\n ast,\n true,\n {\n applyPermissions: config.applyPermissions,\n auth: config.authData\n ? {type: 'jwt' as const, raw: '', decoded: JSON.parse(config.authData)}\n : undefined,\n clientToServerMapper,\n permissions,\n syncedRows: config.outputSyncedRows,\n db,\n tableSpecs,\n host,\n },\n async () => {},\n );\n}\n\nif (config.outputSyncedRows) {\n colorConsole.log(styleText(['blue', 'bold'], '=== Synced Rows: ===\\n'));\n for (const [table, rows] of Object.entries(result.syncedRows ?? {})) {\n colorConsole.log(styleText('bold', table + ':'), rows);\n }\n}\n\ncolorConsole.log(styleText(['blue', 'bold'], '=== Query Stats: ===\\n'));\ncolorConsole.log(\n styleText('bold', 'total synced rows:'),\n result.syncedRowCount,\n);\nshowStats();\nif (config.outputVendedRows) {\n colorConsole.log(\n styleText(['blue', 'bold'], '=== JS Row Scan Values: ===\\n'),\n );\n for (const source of sources.values()) {\n colorConsole.log(\n styleText('bold', `${source.tableSchema.name}:`),\n debug.getVendedRows()?.[source.tableSchema.name] ?? {},\n );\n }\n}\n\ncolorConsole.log(\n styleText(['blue', 'bold'], '\\n=== Rows Scanned (by SQLite): ===\\n'),\n);\nconst nvisitCounts = debug.getNVisitCounts();\nlet totalNVisit = 0;\nfor (const [table, queries] of Object.entries(nvisitCounts)) {\n colorConsole.log(styleText('bold', `${table}:`), queries);\n for (const count of Object.values(queries)) {\n totalNVisit += count;\n }\n}\ncolorConsole.log(\n styleText('bold', 'total rows scanned:'),\n colorRowsConsidered(totalNVisit),\n);\n\ncolorConsole.log(styleText(['blue', 'bold'], '\\n\\n=== Query Plans: ===\\n'));\nconst fallbackPlans = explainQueries(debug.getVendedRowCounts() ?? {}, db);\nconst capturedPlans = debug.getSQLitePlans();\nconst plans: Record<string, string[]> = {...fallbackPlans, ...capturedPlans};\nfor (const [query, plan] of Object.entries(plans)) {\n colorConsole.log(styleText('bold', 'query'), query);\n colorConsole.log(plan.map((row, i) => colorPlanRow(row, i)).join('\\n'));\n colorConsole.log('\\n');\n}\n\nfunction showStats() {\n let totalRowsConsidered = 0;\n for (const source of sources.values()) {\n const values = Object.values(\n debug.getVendedRowCounts()?.[source.tableSchema.name] ?? {},\n );\n for (const v of values) {\n totalRowsConsidered += v;\n }\n colorConsole.log(\n styleText('bold', source.tableSchema.name + ' vended:'),\n debug.getVendedRowCounts()?.[source.tableSchema.name] ?? {},\n );\n }\n\n colorConsole.log(\n styleText('bold', 'Rows Read (into JS):'),\n colorRowsConsidered(totalRowsConsidered),\n );\n colorConsole.log(\n styleText('bold', 'time:'),\n colorTime(result.end - result.start),\n 'ms',\n );\n}\n\nfunction colorTime(duration: number) {\n if (duration < 100) {\n return styleText('green', duration.toFixed(2) + 'ms');\n } else if (duration < 1000) {\n return styleText('yellow', duration.toFixed(2) + 'ms');\n }\n return styleText('red', duration.toFixed(2) + 'ms');\n}\n\nfunction colorRowsConsidered(n: number) {\n if (n < 1000) {\n return styleText('green', n.toString());\n } else if (n < 10000) {\n return styleText('yellow', n.toString());\n }\n return styleText('red', n.toString());\n}\n\nfunction colorPlanRow(row: string, i: number) {\n if (row.includes('SCAN')) {\n if (i === 0) {\n return styleText('yellow', row);\n }\n return styleText('red', row);\n }\n return styleText('green', row);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA,IAAM,UAAU;CACd,QAAQ,yBAAyB;CACjC,aAAa;EACX,GAAG,YAAY,QAAQ;EACvB,MAAM,CAAC,0DAA0D;CACnE;CACA,KAAK;EACH,MAAMA,eAAE,OAAO,CAAC,CAAC,SAAS;EAC1B,MAAM,CACJ,mFACF;CACF;CACA,OAAO;EACL,MAAMA,eAAE,OAAO,CAAC,CAAC,SAAS;EAC1B,MAAM,CACJ,4EACA,gDACF;CACF;CACA,MAAM;EACJ,MAAMA,eAAE,OAAO,CAAC,CAAC,SAAS;EAC1B,MAAM;GACJ;GACA;GACA;GACA;EACF;CACF;CACA,kBAAkB;EAChB,MAAMA,eAAE,QAAQ,CAAC,CAAC,eAAe,KAAK;EACtC,MAAM,CACJ,6EACF;CACF;CACA,UAAU;EACR,MAAMA,eAAE,OAAO,CAAC,CAAC,SAAS;EAC1B,MAAM,CACJ,0CACA,0FACF;CACF;CACA,kBAAkB;EAChB,MAAMA,eAAE,QAAQ,CAAC,CAAC,eAAe,KAAK;EACtC,MAAM,CACJ,wGACA,0FACF;CACF;CACA,kBAAkB;EAChB,MAAMA,eAAE,QAAQ,CAAC,CAAC,eAAe,KAAK;EACtC,MAAM,CACJ,wFACF;CACF;CACA,KAAK,EACH,IAAI;EACF,MAAMA,eAAE,OAAO,CAAC,CAAC,SAAS;EAC1B,MAAM,CACJ,qFACA,oBACF;CACF,EACF;CACA,UAAU;EACR,IAAI;GACF,MAAM,CACJ,uFACA,4CACF;GACA,MAAMA,eAAE,OAAO,CAAC,CAAC,SAAS;EAC5B;EACA,MAAM,YAAY,SAAS;CAC7B;CACA,KAAK;CACL,OAAO;CAGP,mCACE,YAAY;CACd,KAAK;EACH,GAAG;EACH,OAAO,SAAS,eAAe,OAAO;CACxC;AACF;AAEA,IAAM,MAAM,aAAa,SAAS;CAChC,MAAM,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,KAAI,MAAK,EAAE,WAAW,MAAM,GAAG,CAAC;CAC5D,eAAe;CACf,aAAa,CACX;EACE,QAAQ;EACR,SAAS;;;;;CAKX,GACA;EACE,QAAQ;EACR,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;CAyBX,CACF;AACF,CAAC;AACD,IAAM,SAAS;CACb,GAAG;CACH,KAAK;EACH,GAAG,IAAI;EACP,IAAI,IAAI,IAAI,MAAM,IAAI,SAAS;CACjC;AACF;AAEA,kBAAkB,uBAAuB;AACzC,kBAAkB,kBAAkB,OAAO;AAE3C,IAAM,KAAK,iBAAiB,EAC1B,KAAK,OAAO,IACd,CAAC;AAED,aAAa,KACX,2JACF;AAEA,IAAI,CAAC,GAAG,WAAW,OAAO,WAAW,GAAG;CACtC,aAAa,MAAM,gBAAgB,OAAO,YAAY,gBAAgB;CACtE,QAAQ,KAAK,CAAC;AAChB;AACA,IAAM,KAAK,IAAI,SAAS,IAAI,OAAO,WAAW;AAE9C,IAAM,EAAC,QAAQ,gBAAe,MAAM,yBAClC,OAAO,OAAO,IAChB;AACA,IAAM,eAAe,iBAAiB,MAAM,CAAC,CAAC;AAE9C,IAAM,0BAAU,IAAI,IAAyB;AAC7C,IAAM,uBAAuB,eAAe,OAAO,MAAM;AACzD,IAAM,QAAQ,IAAI,MAAM,OAAO,gBAAgB;AAC/C,IAAM,aAAa,gBAAgB,IAAI,IAAI,EAAC,2BAA2B,MAAK,CAAC;AAE7E,IAAM,uBAAN,cAAmC,kBAAkB;CACnD,QAAiB;CACjB,uBAAgC;CAChC,qCACE,CAAC,OAAO;CAEV,UAAU,iBAA6C;EACrD,OAAO,oBAAoB,SAAS,kBAAiB,oBAAmB;GACtE,MAAM,YAAY,iBAAiB,YAAY,eAAe;GAC9D,MAAM,EAAC,eAAc,UAAU;GAC/B,OAAO,IAAI,YACT,IACA,OAAO,KACP,IACA,iBACA,UAAU,SACV,UACF;EACF,CAAC;CACH;AACF;AAEA,IAAM,OAAO,IAAI,qBAAqB;AAEtC,IAAI;AAEJ,IAAI,OAAO,KACT,SAAS,MAAM,OACb,IACA,cACA,KAAK,MAAM,OAAO,GAAG,GACrB,MACA;CACE,kBAAkB,OAAO;CACzB,MAAM,OAAO,WACT;EAAC,MAAM;EAAgB,KAAK;EAAI,SAAS,KAAK,MAAM,OAAO,QAAQ;CAAC,IACpE,KAAA;CACJ;CACA;CACA,YAAY,OAAO;CACnB;CACA;CACA;AACF,GACA,YAAY,CAAC,CACf;KACK,IAAI,OAAO,OAChB,SAAS,MAAM,SAAS,OAAO,KAAK;KAC/B,IAAI,OAAO,MAChB,SAAS,MAAM,QAAQ,OAAO,IAAI;KAC7B;CACL,aAAa,MAAM,kCAAkC;CACrD,QAAQ,KAAK,CAAC;AAChB;AAEA,SAAS,SAAS,aAAkD;CAClE,MAAM,IAAI,EACR,OAAO,OAAO,YACZ,OAAO,QAAQ,OAAO,MAAM,CAAC,CAAC,KAAK,CAAC,UAAU,CAC5C,MACA,SAAS,QAAQ,IAAI,CACvB,CAAC,CACH,EACF;CAGA,MAAM,IAAoD,IAD5C,SAAS,KAAK,kBAAkB,YAAY,EACA,CAAA,CAAE,CAAC;CAE7D,MAAM,MAAM,iBAAiB,CAAC,CAAC,CAAC;CAChC,OAAO,OACL,IACA,cACA,KACA,OACA;EACE,kBAAkB,OAAO;EACzB,MAAM,OAAO,WACT;GAAC,MAAM;GAAgB,KAAK;GAAI,SAAS,KAAK,MAAM,OAAO,QAAQ;EAAC,IACpE,KAAA;EACJ;EACA;EACA,YAAY,OAAO;EACnB;EACA;EACA;CACF,GACA,YAAY,CAAC,CACf;AACF;AAEA,eAAe,QAAQ,MAAc;CACnC,MAAM,QAAQ,SACZ,IACA,KAAK,OAAO,IAAI,IAAI,oDAAoD,GACxE,wBACF;CAEA,MAAM,OAAO,MAAM,KAAK,uCAAuC,MAC7D,eAAe,WAAW,MAAM,CAAC,IAAI,MACvC,EAAE,iCAAiC,KAAK,IAAI,EAAE;CAC9C,MAAM,MAAM,IAAI;CAEhB,aAAa,IAAI,gBAAgB;CACjC,MAAM,MAAM,KAAK,EAAE,CAAC;CACpB,aAAa,IAAI,MAAM,aAAa,IAAI,QAAQ,SAAS,GAAG,CAAC,CAAC;CAE9D,OAAO,OACL,IACA,cACA,KACA,MACA;EACE,kBAAkB,OAAO;EACzB,MAAM,OAAO,WACT;GAAC,MAAM;GAAgB,KAAK;GAAI,SAAS,KAAK,MAAM,OAAO,QAAQ;EAAC,IACpE,KAAA;EACJ;EACA;EACA,YAAY,OAAO;EACnB;EACA;EACA;CACF,GACA,YAAY,CAAC,CACf;AACF;AAEA,IAAI,OAAO,kBAAkB;CAC3B,aAAa,IAAI,UAAU,CAAC,QAAQ,MAAM,GAAG,wBAAwB,CAAC;CACtE,KAAK,MAAM,CAAC,OAAO,SAAS,OAAO,QAAQ,OAAO,cAAc,CAAC,CAAC,GAChE,aAAa,IAAI,UAAU,QAAQ,QAAQ,GAAG,GAAG,IAAI;AAEzD;AAEA,aAAa,IAAI,UAAU,CAAC,QAAQ,MAAM,GAAG,wBAAwB,CAAC;AACtE,aAAa,IACX,UAAU,QAAQ,oBAAoB,GACtC,OAAO,cACT;AACA,UAAU;AACV,IAAI,OAAO,kBAAkB;CAC3B,aAAa,IACX,UAAU,CAAC,QAAQ,MAAM,GAAG,+BAA+B,CAC7D;CACA,KAAK,MAAM,UAAU,QAAQ,OAAO,GAClC,aAAa,IACX,UAAU,QAAQ,GAAG,OAAO,YAAY,KAAK,EAAE,GAC/C,MAAM,cAAc,CAAC,GAAG,OAAO,YAAY,SAAS,CAAC,CACvD;AAEJ;AAEA,aAAa,IACX,UAAU,CAAC,QAAQ,MAAM,GAAG,uCAAuC,CACrE;AACA,IAAM,eAAe,MAAM,gBAAgB;AAC3C,IAAI,cAAc;AAClB,KAAK,MAAM,CAAC,OAAO,YAAY,OAAO,QAAQ,YAAY,GAAG;CAC3D,aAAa,IAAI,UAAU,QAAQ,GAAG,MAAM,EAAE,GAAG,OAAO;CACxD,KAAK,MAAM,SAAS,OAAO,OAAO,OAAO,GACvC,eAAe;AAEnB;AACA,aAAa,IACX,UAAU,QAAQ,qBAAqB,GACvC,oBAAoB,WAAW,CACjC;AAEA,aAAa,IAAI,UAAU,CAAC,QAAQ,MAAM,GAAG,4BAA4B,CAAC;AAC1E,IAAM,gBAAgB,eAAe,MAAM,mBAAmB,KAAK,CAAC,GAAG,EAAE;AACzE,IAAM,gBAAgB,MAAM,eAAe;AAC3C,IAAM,QAAkC;CAAC,GAAG;CAAe,GAAG;AAAa;AAC3E,KAAK,MAAM,CAAC,OAAO,SAAS,OAAO,QAAQ,KAAK,GAAG;CACjD,aAAa,IAAI,UAAU,QAAQ,OAAO,GAAG,KAAK;CAClD,aAAa,IAAI,KAAK,KAAK,KAAK,MAAM,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACtE,aAAa,IAAI,IAAI;AACvB;AAEA,SAAS,YAAY;CACnB,IAAI,sBAAsB;CAC1B,KAAK,MAAM,UAAU,QAAQ,OAAO,GAAG;EACrC,MAAM,SAAS,OAAO,OACpB,MAAM,mBAAmB,CAAC,GAAG,OAAO,YAAY,SAAS,CAAC,CAC5D;EACA,KAAK,MAAM,KAAK,QACd,uBAAuB;EAEzB,aAAa,IACX,UAAU,QAAQ,OAAO,YAAY,OAAO,UAAU,GACtD,MAAM,mBAAmB,CAAC,GAAG,OAAO,YAAY,SAAS,CAAC,CAC5D;CACF;CAEA,aAAa,IACX,UAAU,QAAQ,sBAAsB,GACxC,oBAAoB,mBAAmB,CACzC;CACA,aAAa,IACX,UAAU,QAAQ,OAAO,GACzB,UAAU,OAAO,MAAM,OAAO,KAAK,GACnC,IACF;AACF;AAEA,SAAS,UAAU,UAAkB;CACnC,IAAI,WAAW,KACb,OAAO,UAAU,SAAS,SAAS,QAAQ,CAAC,IAAI,IAAI;MAC/C,IAAI,WAAW,KACpB,OAAO,UAAU,UAAU,SAAS,QAAQ,CAAC,IAAI,IAAI;CAEvD,OAAO,UAAU,OAAO,SAAS,QAAQ,CAAC,IAAI,IAAI;AACpD;AAEA,SAAS,oBAAoB,GAAW;CACtC,IAAI,IAAI,KACN,OAAO,UAAU,SAAS,EAAE,SAAS,CAAC;MACjC,IAAI,IAAI,KACb,OAAO,UAAU,UAAU,EAAE,SAAS,CAAC;CAEzC,OAAO,UAAU,OAAO,EAAE,SAAS,CAAC;AACtC;AAEA,SAAS,aAAa,KAAa,GAAW;CAC5C,IAAI,IAAI,SAAS,MAAM,GAAG;EACxB,IAAI,MAAM,GACR,OAAO,UAAU,UAAU,GAAG;EAEhC,OAAO,UAAU,OAAO,GAAG;CAC7B;CACA,OAAO,UAAU,SAAS,GAAG;AAC/B"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import '../../analyze-query/src/bin-analyze.ts';
3
- //# sourceMappingURL=analyze-query.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyze-query.d.ts","sourceRoot":"","sources":["../../../src/analyze-query.ts"],"names":[],"mappings":";AACA,OAAO,wCAAwC,CAAC"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import "../../analyze-query/src/bin-analyze.js";
3
- export {};