@rocicorp/zero 0.23.2025081200 → 0.23.2025081400
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.
- package/out/{chunk-ZJ4VVIKN.js → chunk-JHJ3MBXW.js} +5 -5
- package/out/{chunk-6TQKR5IL.js → chunk-O536GEIT.js} +89 -17
- package/out/chunk-O536GEIT.js.map +7 -0
- package/out/{chunk-YTS56A64.js → chunk-ZKRMVMWK.js} +20 -29
- package/out/chunk-ZKRMVMWK.js.map +7 -0
- package/out/{inspector-RB55U26N.js → inspector-J5P4DOGH.js} +52 -16
- package/out/inspector-J5P4DOGH.js.map +7 -0
- package/out/react.js +2 -2
- package/out/shared/src/binary-search.js +31 -0
- package/out/shared/src/binary-search.js.map +1 -0
- package/out/shared/src/centroid.js +28 -0
- package/out/shared/src/centroid.js.map +1 -0
- package/out/shared/src/dotenv.js +0 -5
- package/out/shared/src/dotenv.js.map +1 -1
- package/out/shared/src/logging-test-utils.d.ts +12 -0
- package/out/shared/src/logging-test-utils.d.ts.map +1 -0
- package/out/shared/src/logging-test-utils.js +21 -0
- package/out/shared/src/logging-test-utils.js.map +1 -0
- package/out/shared/src/objects.d.ts +3 -1
- package/out/shared/src/objects.d.ts.map +1 -1
- package/out/shared/src/objects.js.map +1 -1
- package/out/shared/src/tdigest-schema.d.ts +8 -0
- package/out/shared/src/tdigest-schema.d.ts.map +1 -0
- package/out/shared/src/tdigest-schema.js +7 -0
- package/out/shared/src/tdigest-schema.js.map +1 -0
- package/out/shared/src/tdigest.d.ts +11 -0
- package/out/shared/src/tdigest.d.ts.map +1 -1
- package/out/shared/src/tdigest.js +304 -0
- package/out/shared/src/tdigest.js.map +1 -0
- package/out/solid.js +3 -3
- package/out/zero/package.json +3 -1
- package/out/zero-cache/src/config/zero-config.d.ts +18 -287
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +43 -0
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/observability/events.d.ts +15 -0
- package/out/zero-cache/src/observability/events.d.ts.map +1 -0
- package/out/zero-cache/src/observability/events.js +93 -0
- package/out/zero-cache/src/observability/events.js.map +1 -0
- package/out/zero-cache/src/server/anonymous-otel-start.d.ts +1 -1
- package/out/zero-cache/src/server/anonymous-otel-start.d.ts.map +1 -1
- package/out/zero-cache/src/server/anonymous-otel-start.js +40 -18
- package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +4 -4
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/main.js +4 -4
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/server/replicator.js +7 -6
- package/out/zero-cache/src/server/replicator.js.map +1 -1
- package/out/zero-cache/src/server/runner/run-worker.d.ts.map +1 -1
- package/out/zero-cache/src/server/runner/run-worker.js +3 -2
- package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
- package/out/zero-cache/src/server/syncer.js +5 -5
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.js +46 -35
- package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js +7 -2
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.d.ts +28 -2
- package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.js +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-processor.d.ts +5 -1
- package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/change-processor.js +10 -8
- package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.js +17 -3
- package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
- package/out/zero-cache/src/services/replicator/replication-status.d.ts +12 -0
- package/out/zero-cache/src/services/replicator/replication-status.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/replication-status.js +92 -0
- package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -0
- package/out/zero-cache/src/services/replicator/replicator.d.ts +1 -1
- package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/replicator.js +2 -2
- package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
- package/out/zero-cache/src/services/statz.d.ts.map +1 -1
- package/out/zero-cache/src/services/statz.js +0 -23
- package/out/zero-cache/src/services/statz.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +10 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +77 -8
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-client/src/client/inspector/inspector.d.ts +7 -7
- package/out/zero-client/src/client/inspector/inspector.d.ts.map +1 -1
- package/out/zero-client/src/client/inspector/types.d.ts +3 -1
- package/out/zero-client/src/client/inspector/types.d.ts.map +1 -1
- package/out/zero-client/src/client/query-manager.d.ts +8 -8
- package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-events/src/index.d.ts +29 -0
- package/out/zero-events/src/index.d.ts.map +1 -0
- package/out/zero-events/src/index.js +28 -0
- package/out/zero-events/src/index.js.map +1 -0
- package/out/zero-events/src/status.d.ts +113 -0
- package/out/zero-events/src/status.d.ts.map +1 -0
- package/out/zero-events/src/status.js +72 -0
- package/out/zero-events/src/status.js.map +1 -0
- package/out/zero-protocol/src/connect.d.ts.map +1 -1
- package/out/zero-protocol/src/connect.js +4 -1
- package/out/zero-protocol/src/connect.js.map +1 -1
- package/out/zero-protocol/src/down.d.ts +18 -2
- package/out/zero-protocol/src/down.d.ts.map +1 -1
- package/out/zero-protocol/src/inspect-down.d.ts +64 -6
- package/out/zero-protocol/src/inspect-down.d.ts.map +1 -1
- package/out/zero-protocol/src/inspect-down.js +18 -3
- package/out/zero-protocol/src/inspect-down.js.map +1 -1
- package/out/zero-protocol/src/inspect-up.d.ts +25 -6
- package/out/zero-protocol/src/inspect-up.d.ts.map +1 -1
- package/out/zero-protocol/src/inspect-up.js +8 -3
- package/out/zero-protocol/src/inspect-up.js.map +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
- package/out/zero-protocol/src/protocol-version.js +3 -1
- package/out/zero-protocol/src/protocol-version.js.map +1 -1
- package/out/zero-protocol/src/up.d.ts +7 -2
- package/out/zero-protocol/src/up.d.ts.map +1 -1
- package/out/zero.js +3 -3
- package/out/zql/src/query/metrics-delegate.d.ts +5 -1
- package/out/zql/src/query/metrics-delegate.d.ts.map +1 -1
- package/package.json +3 -1
- package/out/chunk-6TQKR5IL.js.map +0 -7
- package/out/chunk-YTS56A64.js.map +0 -7
- package/out/inspector-RB55U26N.js.map +0 -7
- /package/out/{chunk-ZJ4VVIKN.js.map → chunk-JHJ3MBXW.js.map} +0 -0
|
@@ -2,10 +2,14 @@ import {
|
|
|
2
2
|
ENTITIES_KEY_PREFIX,
|
|
3
3
|
Latest,
|
|
4
4
|
SUBQ_PREFIX,
|
|
5
|
+
TDigest,
|
|
5
6
|
getClient,
|
|
6
7
|
getClientGroup,
|
|
7
8
|
getClients,
|
|
9
|
+
inspectMetricsDownSchema,
|
|
8
10
|
inspectQueriesDownSchema,
|
|
11
|
+
inspectVersionDownSchema,
|
|
12
|
+
mapValues,
|
|
9
13
|
must,
|
|
10
14
|
nanoid,
|
|
11
15
|
normalizeTTL,
|
|
@@ -13,7 +17,7 @@ import {
|
|
|
13
17
|
test,
|
|
14
18
|
valita_exports,
|
|
15
19
|
withRead
|
|
16
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-O536GEIT.js";
|
|
17
21
|
import {
|
|
18
22
|
assert,
|
|
19
23
|
unreachable
|
|
@@ -191,11 +195,11 @@ function transformParameter(param) {
|
|
|
191
195
|
}
|
|
192
196
|
|
|
193
197
|
// ../zero-client/src/client/inspector/inspector.ts
|
|
194
|
-
async function newInspector(rep,
|
|
198
|
+
async function newInspector(rep, clientMetricsDelegate, schema, socket) {
|
|
195
199
|
const clientGroupID = await rep.clientGroupID;
|
|
196
200
|
return new Inspector(
|
|
197
201
|
rep,
|
|
198
|
-
|
|
202
|
+
clientMetricsDelegate,
|
|
199
203
|
schema,
|
|
200
204
|
rep.clientID,
|
|
201
205
|
clientGroupID,
|
|
@@ -209,12 +213,12 @@ var Inspector = class {
|
|
|
209
213
|
#schema;
|
|
210
214
|
socket;
|
|
211
215
|
#metricsDelegate;
|
|
212
|
-
constructor(rep,
|
|
216
|
+
constructor(rep, clientMetricsDelegate, schema, clientID, clientGroupID, socket) {
|
|
213
217
|
this.#rep = rep;
|
|
214
218
|
this.#schema = schema;
|
|
215
219
|
this.client = new Client(
|
|
216
220
|
rep,
|
|
217
|
-
|
|
221
|
+
clientMetricsDelegate,
|
|
218
222
|
schema,
|
|
219
223
|
socket,
|
|
220
224
|
clientID,
|
|
@@ -222,10 +226,16 @@ var Inspector = class {
|
|
|
222
226
|
);
|
|
223
227
|
this.clientGroup = this.client.clientGroup;
|
|
224
228
|
this.socket = socket;
|
|
225
|
-
this.#metricsDelegate =
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
+
this.#metricsDelegate = clientMetricsDelegate;
|
|
230
|
+
}
|
|
231
|
+
async metrics() {
|
|
232
|
+
const clientMetrics = this.#metricsDelegate.metrics;
|
|
233
|
+
const serverMetricsJSON = await rpc(
|
|
234
|
+
await this.socket(),
|
|
235
|
+
{ op: "metrics" },
|
|
236
|
+
inspectMetricsDownSchema
|
|
237
|
+
);
|
|
238
|
+
return mergeMetrics(clientMetrics, serverMetricsJSON);
|
|
229
239
|
}
|
|
230
240
|
clients() {
|
|
231
241
|
return withDagRead(
|
|
@@ -251,6 +261,9 @@ var Inspector = class {
|
|
|
251
261
|
)
|
|
252
262
|
);
|
|
253
263
|
}
|
|
264
|
+
async serverVersion() {
|
|
265
|
+
return rpc(await this.socket(), { op: "version" }, inspectVersionDownSchema);
|
|
266
|
+
}
|
|
254
267
|
};
|
|
255
268
|
function rpc(socket, arg, downSchema) {
|
|
256
269
|
return new Promise((resolve, reject) => {
|
|
@@ -282,19 +295,19 @@ var Client = class {
|
|
|
282
295
|
id;
|
|
283
296
|
clientGroup;
|
|
284
297
|
#socket;
|
|
285
|
-
#
|
|
286
|
-
constructor(rep,
|
|
298
|
+
#clientMetricsDelegate;
|
|
299
|
+
constructor(rep, clientMetricsDelegate, schema, socket, id, clientGroupID) {
|
|
287
300
|
this.#rep = rep;
|
|
288
301
|
this.#socket = socket;
|
|
289
302
|
this.id = id;
|
|
290
303
|
this.clientGroup = new ClientGroup(
|
|
291
304
|
rep,
|
|
292
|
-
|
|
305
|
+
clientMetricsDelegate,
|
|
293
306
|
socket,
|
|
294
307
|
schema,
|
|
295
308
|
clientGroupID
|
|
296
309
|
);
|
|
297
|
-
this.#
|
|
310
|
+
this.#clientMetricsDelegate = clientMetricsDelegate;
|
|
298
311
|
}
|
|
299
312
|
async queries() {
|
|
300
313
|
const rows = await rpc(
|
|
@@ -302,7 +315,7 @@ var Client = class {
|
|
|
302
315
|
{ op: "queries", clientID: this.id },
|
|
303
316
|
inspectQueriesDownSchema
|
|
304
317
|
);
|
|
305
|
-
return rows.map((row) => new Query(row, this.#
|
|
318
|
+
return rows.map((row) => new Query(row, this.#clientMetricsDelegate));
|
|
306
319
|
}
|
|
307
320
|
map() {
|
|
308
321
|
return withDagRead(this.#rep, async (dagRead) => {
|
|
@@ -454,10 +467,33 @@ var Query = class {
|
|
|
454
467
|
this.rowCount = row.rowCount;
|
|
455
468
|
this.deleted = row.deleted;
|
|
456
469
|
this.zql = ast ? ast.table + astToZQL(ast) : null;
|
|
457
|
-
|
|
470
|
+
const clientMetrics = metricsDelegate.getQueryMetrics(queryID);
|
|
471
|
+
const serverMetrics = row.metrics;
|
|
472
|
+
this.metrics = mergeMetrics(clientMetrics, serverMetrics);
|
|
458
473
|
}
|
|
459
474
|
};
|
|
475
|
+
function mergeMetrics(clientMetrics, serverMetrics) {
|
|
476
|
+
return {
|
|
477
|
+
...clientMetrics ?? newClientMetrics(),
|
|
478
|
+
...serverMetrics ? convertServerMetrics(serverMetrics) : newServerMetrics()
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
function newClientMetrics() {
|
|
482
|
+
return {
|
|
483
|
+
"query-materialization-client": new TDigest(),
|
|
484
|
+
"query-materialization-end-to-end": new TDigest(),
|
|
485
|
+
"query-update-client": new TDigest()
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
function newServerMetrics() {
|
|
489
|
+
return {
|
|
490
|
+
"query-materialization-server": new TDigest()
|
|
491
|
+
};
|
|
492
|
+
}
|
|
493
|
+
function convertServerMetrics(metrics) {
|
|
494
|
+
return mapValues(metrics, (v) => TDigest.fromJSON(v));
|
|
495
|
+
}
|
|
460
496
|
export {
|
|
461
497
|
newInspector
|
|
462
498
|
};
|
|
463
|
-
//# sourceMappingURL=inspector-
|
|
499
|
+
//# sourceMappingURL=inspector-J5P4DOGH.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../ast-to-zql/src/ast-to-zql.ts", "../../zero-client/src/client/inspector/inspector.ts"],
|
|
4
|
+
"sourcesContent": ["import {unreachable} from '../../shared/src/asserts.ts';\nimport {must} from '../../shared/src/must.ts';\nimport type {\n AST,\n Condition,\n Conjunction,\n CorrelatedSubquery,\n CorrelatedSubqueryCondition,\n Disjunction,\n LiteralReference,\n Ordering,\n Parameter,\n SimpleCondition,\n ValuePosition,\n} from '../../zero-protocol/src/ast.ts';\nimport {SUBQ_PREFIX} from '../../zql/src/query/query-impl.ts';\n\n/**\n * Converts an AST to the equivalent query builder code.\n * This is useful for debugging and understanding queries.\n *\n * @example\n * ```\n * const ast = query.issue.where('id', '=', 123)[astSymbol];\n * console.log(astToZQL(ast)); // outputs: .where('id', '=', 123)\n * ```\n */\nexport function astToZQL(ast: AST): string {\n let code = '';\n\n // Handle where conditions\n if (ast.where) {\n code += transformCondition(ast.where, '.where', new Set());\n }\n\n // Handle related subqueries\n if (ast.related && ast.related.length > 0) {\n for (const related of ast.related) {\n if (related.hidden) {\n const nestedRelated = related.subquery.related?.[0];\n if (nestedRelated) {\n code += transformRelated(nestedRelated);\n }\n } else {\n code += transformRelated(related);\n }\n }\n }\n\n // Handle orderBy\n if (ast.orderBy && ast.orderBy.length > 0) {\n code += transformOrder(ast.orderBy);\n }\n\n // Handle limit\n if (ast.limit !== undefined) {\n code += `.limit(${ast.limit})`;\n }\n\n // Handle start\n if (ast.start) {\n const {row, exclusive} = ast.start;\n code += `.start(${JSON.stringify(row)}${\n exclusive ? '' : ', { inclusive: true }'\n })`;\n }\n\n return code;\n}\n\ntype Args = Set<string>;\n\ntype Prefix = '.where' | 'cmp';\n\nfunction transformCondition(\n condition: Condition,\n prefix: Prefix,\n args: Args,\n): string {\n switch (condition.type) {\n case 'simple':\n return transformSimpleCondition(condition, prefix);\n case 'and':\n case 'or':\n return transformLogicalCondition(condition, prefix, args);\n case 'correlatedSubquery':\n return transformExistsCondition(condition, prefix, args);\n default:\n unreachable(condition);\n }\n}\n\nfunction transformSimpleCondition(\n condition: SimpleCondition,\n prefix: Prefix,\n): string {\n const {left, op, right} = condition;\n\n const leftCode = transformValuePosition(left);\n const rightCode = transformValuePosition(right);\n\n // Handle the shorthand form for equals\n if (op === '=') {\n return `${prefix}(${leftCode}, ${rightCode})`;\n }\n\n return `${prefix}(${leftCode}, '${op}', ${rightCode})`;\n}\n\nfunction transformLogicalCondition(\n condition: Conjunction | Disjunction,\n prefix: Prefix,\n args: Args,\n): string {\n const {type, conditions} = condition;\n\n // For single condition, no need for logical operator\n if (conditions.length === 1) {\n return transformCondition(conditions[0], prefix, args);\n }\n\n // Generate multiple where calls for top-level AND conditions\n if (type === 'and') {\n const parts = conditions.map(c => transformCondition(c, prefix, args));\n // Simply concatenate the where conditions\n if (prefix === '.where') {\n return parts.join('');\n }\n args.add('and');\n return 'and(' + parts.join(', ') + ')';\n }\n\n args = new Set<string>();\n\n // Handle nested conditions with a callback for OR conditions and nested ANDs/ORs\n const conditionsCode = conditions\n .map(c => transformCondition(c, 'cmp', args))\n .join(', ');\n\n args.add('cmp');\n args.add(type);\n const argsCode = [...args].sort().join(', ');\n\n return `.where(({${argsCode}}) => ${type}(${conditionsCode}))`;\n}\n\nfunction transformExistsCondition(\n condition: CorrelatedSubqueryCondition,\n prefix: '.where' | 'cmp',\n args: Set<string>,\n): string {\n const {related, op} = condition;\n const relationship = extractRelationshipName(related);\n\n const nextSubquery = getNextExistsSubquery(related);\n\n // Check if subquery has additional properties\n const hasSubQueryProps =\n nextSubquery.where ||\n (nextSubquery.related && nextSubquery.related.length > 0) ||\n nextSubquery.orderBy ||\n nextSubquery.limit;\n\n if (op === 'EXISTS') {\n if (!hasSubQueryProps) {\n if (prefix === '.where') {\n return `.whereExists('${relationship}')`;\n }\n args.add('exists');\n return `exists('${relationship}')`;\n }\n\n if (prefix === '.where') {\n return `.whereExists('${relationship}', q => q${astToZQL(nextSubquery)})`;\n }\n prefix satisfies 'cmp';\n args.add('exists');\n return `exists('${relationship}', q => q${astToZQL(nextSubquery)})`;\n }\n\n op satisfies 'NOT EXISTS';\n\n if (hasSubQueryProps) {\n if (prefix === '.where') {\n return `.where(({exists, not}) => not(exists('${relationship}', q => q${astToZQL(\n nextSubquery,\n )})))`;\n }\n prefix satisfies 'cmp';\n args.add('not');\n args.add('exists');\n return `not(exists('${relationship}', q => q${astToZQL(nextSubquery)}))`;\n }\n\n if (prefix === '.where') {\n return `.where(({exists, not}) => not(exists('${relationship}')))`;\n }\n args.add('not');\n args.add('exists');\n\n return `not(exists('${relationship}')))`;\n}\n\n// If the `exists` is applied against a junction edge, both hops will have the same alias and both hops will be exists conditions.\nfunction getNextExistsSubquery(related: CorrelatedSubquery): AST {\n if (\n related.subquery.where?.type === 'correlatedSubquery' &&\n related.subquery.where.related.subquery.alias?.includes(\n SUBQ_PREFIX + 'zhidden_',\n )\n ) {\n return getNextExistsSubquery(related.subquery.where.related);\n }\n\n return related.subquery;\n}\n\nfunction extractRelationshipName(related: CorrelatedSubquery): string {\n const alias = must(related.subquery.alias);\n return alias.startsWith(SUBQ_PREFIX)\n ? alias.substring(SUBQ_PREFIX.length)\n : alias;\n}\n\nfunction transformRelated(related: CorrelatedSubquery): string {\n const {alias} = related.subquery;\n if (!alias) return '';\n\n const relationship = alias;\n let code = `.related('${relationship}'`;\n\n // If the subquery has additional filters or configurations\n if (\n related.subquery.where ||\n (related.subquery.related && related.subquery.related.length > 0) ||\n related.subquery.orderBy ||\n related.subquery.limit\n ) {\n code += ', q => q' + astToZQL(related.subquery);\n }\n\n code += ')';\n return code;\n}\n\nfunction transformOrder(orderBy: Ordering): string {\n let code = '';\n for (const [field, direction] of orderBy) {\n code += `.orderBy('${field}', '${direction}')`;\n }\n return code;\n}\n\nfunction transformValuePosition(value: ValuePosition): string {\n switch (value.type) {\n case 'literal':\n return transformLiteral(value);\n case 'column':\n return `'${value.name}'`;\n case 'static':\n return transformParameter(value);\n default:\n unreachable(value);\n }\n}\n\nfunction transformLiteral(literal: LiteralReference): string {\n if (literal.value === null) {\n return 'null';\n }\n if (Array.isArray(literal.value)) {\n return JSON.stringify(literal.value);\n }\n if (typeof literal.value === 'string') {\n return `'${literal.value.replace(/'/g, \"\\\\'\")}'`;\n }\n return String(literal.value);\n}\n\nfunction transformParameter(param: Parameter): string {\n const fieldStr = Array.isArray(param.field)\n ? `[${param.field.map(f => `'${f}'`).join(', ')}]`\n : `'${param.field}'`;\n\n return `authParam(${fieldStr})`;\n}\n", "import {astToZQL} from '../../../../ast-to-zql/src/ast-to-zql.ts';\nimport type {BTreeRead} from '../../../../replicache/src/btree/read.ts';\nimport {type Read} from '../../../../replicache/src/dag/store.ts';\nimport {readFromHash} from '../../../../replicache/src/db/read.ts';\nimport * as FormatVersion from '../../../../replicache/src/format-version-enum.ts';\nimport {getClientGroup} from '../../../../replicache/src/persist/client-groups.ts';\nimport {\n getClient,\n getClients,\n type ClientMap,\n} from '../../../../replicache/src/persist/clients.ts';\nimport type {ReplicacheImpl} from '../../../../replicache/src/replicache-impl.ts';\nimport {withRead} from '../../../../replicache/src/with-transactions.ts';\nimport {assert} from '../../../../shared/src/asserts.ts';\nimport type {ReadonlyJSONValue} from '../../../../shared/src/json.ts';\nimport {mapValues} from '../../../../shared/src/objects.ts';\nimport {TDigest, type ReadonlyTDigest} from '../../../../shared/src/tdigest.ts';\nimport * as valita from '../../../../shared/src/valita.ts';\nimport type {AST} from '../../../../zero-protocol/src/ast.ts';\nimport type {Row} from '../../../../zero-protocol/src/data.ts';\nimport {\n inspectMetricsDownSchema,\n inspectQueriesDownSchema,\n inspectVersionDownSchema,\n type InspectDownBody,\n type InspectQueryRow,\n type ServerMetrics as ServerMetricsJSON,\n} from '../../../../zero-protocol/src/inspect-down.ts';\nimport type {\n InspectQueriesUpBody,\n InspectUpBody,\n InspectUpMessage,\n} from '../../../../zero-protocol/src/inspect-up.ts';\nimport type {Schema} from '../../../../zero-schema/src/builder/schema-builder.ts';\nimport type {\n ClientMetricMap,\n MetricMap,\n ServerMetricMap,\n} from '../../../../zql/src/query/metrics-delegate.ts';\nimport {normalizeTTL, type TTL} from '../../../../zql/src/query/ttl.ts';\nimport {nanoid} from '../../util/nanoid.ts';\nimport {ENTITIES_KEY_PREFIX} from '../keys.ts';\nimport type {MutatorDefs} from '../replicache-types.ts';\nimport type {\n ClientGroup as ClientGroupInterface,\n Client as ClientInterface,\n Inspector as InspectorInterface,\n Query as QueryInterface,\n} from './types.ts';\n\ntype Rep = ReplicacheImpl<MutatorDefs>;\n\ntype GetWebSocket = () => Promise<WebSocket>;\n\ntype Metrics = {\n readonly [K in keyof MetricMap]: ReadonlyTDigest;\n};\n\ntype ClientMetrics = {\n readonly [K in keyof ClientMetricMap]: ReadonlyTDigest;\n};\n\ntype ServerMetrics = {\n readonly [K in keyof ServerMetricMap]: ReadonlyTDigest;\n};\n\nexport interface InspectorClientMetricsDelegate {\n getQueryMetrics(hash: string): ClientMetrics | undefined;\n readonly metrics: ClientMetrics;\n}\n\nexport async function newInspector(\n rep: Rep,\n clientMetricsDelegate: InspectorClientMetricsDelegate,\n schema: Schema,\n socket: GetWebSocket,\n): Promise<InspectorInterface> {\n const clientGroupID = await rep.clientGroupID;\n return new Inspector(\n rep,\n clientMetricsDelegate,\n schema,\n rep.clientID,\n clientGroupID,\n socket,\n );\n}\n\nclass Inspector implements InspectorInterface {\n readonly #rep: Rep;\n readonly client: Client;\n readonly clientGroup: ClientGroup;\n readonly #schema: Schema;\n readonly socket: GetWebSocket;\n readonly #metricsDelegate: InspectorClientMetricsDelegate;\n\n constructor(\n rep: ReplicacheImpl,\n clientMetricsDelegate: InspectorClientMetricsDelegate,\n schema: Schema,\n clientID: string,\n clientGroupID: string,\n socket: GetWebSocket,\n ) {\n this.#rep = rep;\n this.#schema = schema;\n this.client = new Client(\n rep,\n clientMetricsDelegate,\n schema,\n socket,\n clientID,\n clientGroupID,\n );\n this.clientGroup = this.client.clientGroup;\n this.socket = socket;\n this.#metricsDelegate = clientMetricsDelegate;\n }\n\n async metrics(): Promise<Metrics> {\n const clientMetrics = this.#metricsDelegate.metrics;\n const serverMetricsJSON = await rpc(\n await this.socket(),\n {op: 'metrics'},\n inspectMetricsDownSchema,\n );\n return mergeMetrics(clientMetrics, serverMetricsJSON);\n }\n\n clients(): Promise<ClientInterface[]> {\n return withDagRead(this.#rep, dagRead =>\n clients(\n this.#rep,\n this.#metricsDelegate,\n this.socket,\n this.#schema,\n dagRead,\n ),\n );\n }\n\n clientsWithQueries(): Promise<ClientInterface[]> {\n return withDagRead(this.#rep, dagRead =>\n clientsWithQueries(\n this.#rep,\n this.#metricsDelegate,\n this.socket,\n this.#schema,\n dagRead,\n ),\n );\n }\n\n async serverVersion(): Promise<string> {\n return rpc(await this.socket(), {op: 'version'}, inspectVersionDownSchema);\n }\n}\n\nfunction rpc<T extends InspectDownBody>(\n socket: WebSocket,\n arg: Omit<InspectUpBody, 'id'>,\n downSchema: valita.Type<T>,\n): Promise<T['value']> {\n return new Promise((resolve, reject) => {\n const id = nanoid();\n const f = (ev: MessageEvent) => {\n const msg = JSON.parse(ev.data);\n if (msg[0] === 'inspect') {\n const body = msg[1];\n if (body.id !== id) {\n return;\n }\n const res = valita.test(body, downSchema);\n if (res.ok) {\n resolve(res.value.value);\n } else {\n reject(res.error);\n }\n socket.removeEventListener('message', f);\n }\n };\n socket.addEventListener('message', f);\n socket.send(\n JSON.stringify(['inspect', {...arg, id}] satisfies InspectUpMessage),\n );\n });\n}\n\nclass Client implements ClientInterface {\n readonly #rep: Rep;\n readonly id: string;\n readonly clientGroup: ClientGroup;\n readonly #socket: GetWebSocket;\n readonly #clientMetricsDelegate: InspectorClientMetricsDelegate;\n\n constructor(\n rep: Rep,\n clientMetricsDelegate: InspectorClientMetricsDelegate,\n schema: Schema,\n socket: GetWebSocket,\n id: string,\n clientGroupID: string,\n ) {\n this.#rep = rep;\n this.#socket = socket;\n this.id = id;\n this.clientGroup = new ClientGroup(\n rep,\n clientMetricsDelegate,\n socket,\n schema,\n clientGroupID,\n );\n this.#clientMetricsDelegate = clientMetricsDelegate;\n }\n\n async queries(): Promise<QueryInterface[]> {\n const rows: InspectQueryRow[] = await rpc(\n await this.#socket(),\n {op: 'queries', clientID: this.id} as InspectQueriesUpBody,\n inspectQueriesDownSchema,\n );\n return rows.map(row => new Query(row, this.#clientMetricsDelegate));\n }\n\n map(): Promise<Map<string, ReadonlyJSONValue>> {\n return withDagRead(this.#rep, async dagRead => {\n const tree = await getBTree(dagRead, this.id);\n const map = new Map<string, ReadonlyJSONValue>();\n for await (const [key, value] of tree.scan('')) {\n map.set(key, value);\n }\n return map;\n });\n }\n\n rows(tableName: string): Promise<Row[]> {\n return withDagRead(this.#rep, async dagRead => {\n const prefix = ENTITIES_KEY_PREFIX + tableName;\n const tree = await getBTree(dagRead, this.id);\n const rows: Row[] = [];\n for await (const [key, value] of tree.scan(prefix)) {\n if (!key.startsWith(prefix)) {\n break;\n }\n rows.push(value as Row);\n }\n return rows;\n });\n }\n}\n\nclass ClientGroup implements ClientGroupInterface {\n readonly #rep: Rep;\n readonly id: string;\n readonly #schema: Schema;\n readonly #socket: GetWebSocket;\n readonly #metricsDelegate: InspectorClientMetricsDelegate;\n\n constructor(\n rep: Rep,\n metricsDelegate: InspectorClientMetricsDelegate,\n socket: GetWebSocket,\n schema: Schema,\n id: string,\n ) {\n this.#rep = rep;\n this.#metricsDelegate = metricsDelegate;\n this.#socket = socket;\n this.#schema = schema;\n this.id = id;\n }\n\n clients(): Promise<ClientInterface[]> {\n return withDagRead(this.#rep, dagRead =>\n clients(\n this.#rep,\n this.#metricsDelegate,\n this.#socket,\n this.#schema,\n dagRead,\n ([_, v]) => v.clientGroupID === this.id,\n ),\n );\n }\n\n clientsWithQueries(): Promise<ClientInterface[]> {\n return withDagRead(this.#rep, dagRead =>\n clientsWithQueries(\n this.#rep,\n this.#metricsDelegate,\n this.#socket,\n this.#schema,\n dagRead,\n ([_, v]) => v.clientGroupID === this.id,\n ),\n );\n }\n\n async queries(): Promise<QueryInterface[]> {\n const rows: InspectQueryRow[] = await rpc(\n await this.#socket(),\n {op: 'queries'},\n inspectQueriesDownSchema,\n );\n return rows.map(row => new Query(row, this.#metricsDelegate));\n }\n}\n\nasync function withDagRead<T>(\n rep: Rep,\n f: (dagRead: Read) => Promise<T>,\n): Promise<T> {\n await rep.refresh();\n await rep.persist();\n return withRead(rep.perdag, f);\n}\n\nasync function getBTree(dagRead: Read, clientID: string): Promise<BTreeRead> {\n const client = await getClient(clientID, dagRead);\n assert(client, `Client not found: ${clientID}`);\n const {clientGroupID} = client;\n const clientGroup = await getClientGroup(clientGroupID, dagRead);\n assert(clientGroup, `Client group not found: ${clientGroupID}`);\n const dbRead = await readFromHash(\n clientGroup.headHash,\n dagRead,\n FormatVersion.Latest,\n );\n return dbRead.map;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype MapEntry<T extends ReadonlyMap<any, any>> =\n T extends ReadonlyMap<infer K, infer V> ? readonly [K, V] : never;\n\nasync function clients(\n rep: Rep,\n metricsDelegate: InspectorClientMetricsDelegate,\n socket: GetWebSocket,\n schema: Schema,\n dagRead: Read,\n predicate: (entry: MapEntry<ClientMap>) => boolean = () => true,\n): Promise<ClientInterface[]> {\n const clients = await getClients(dagRead);\n return [...clients.entries()]\n .filter(predicate)\n .map(\n ([clientID, {clientGroupID}]) =>\n new Client(\n rep,\n metricsDelegate,\n schema,\n socket,\n clientID,\n clientGroupID,\n ),\n );\n}\n\nasync function clientsWithQueries(\n rep: Rep,\n metricsDelegate: InspectorClientMetricsDelegate,\n socket: GetWebSocket,\n schema: Schema,\n dagRead: Read,\n predicate: (entry: MapEntry<ClientMap>) => boolean = () => true,\n): Promise<ClientInterface[]> {\n const allClients = await clients(\n rep,\n metricsDelegate,\n socket,\n schema,\n dagRead,\n predicate,\n );\n const clientsWithQueries: ClientInterface[] = [];\n await Promise.all(\n allClients.map(async client => {\n const queries = await client.queries();\n if (queries.length > 0) {\n clientsWithQueries.push(client);\n }\n }),\n );\n return clientsWithQueries;\n}\n\nclass Query implements QueryInterface {\n readonly ast: AST | null;\n readonly name: string | null;\n readonly args: ReadonlyArray<ReadonlyJSONValue> | null;\n readonly got: boolean;\n readonly ttl: TTL;\n readonly inactivatedAt: Date | null;\n readonly rowCount: number;\n readonly deleted: boolean;\n readonly id: string;\n readonly zql: string | null;\n readonly clientID: string;\n readonly metrics: Metrics | null;\n\n constructor(\n row: InspectQueryRow,\n metricsDelegate: InspectorClientMetricsDelegate,\n ) {\n const {ast, queryID, inactivatedAt} = row;\n // Use own properties to make this more useful in dev tools. For example, in\n // Chrome dev tools, if you do console.table(queries) you'll see the\n // properties in the table, if these were getters you would not see them in the table.\n this.clientID = row.clientID;\n this.id = queryID;\n this.inactivatedAt =\n inactivatedAt === null ? null : new Date(inactivatedAt);\n this.ttl = normalizeTTL(row.ttl);\n this.ast = ast;\n this.name = row.name;\n this.args = row.args;\n this.got = row.got;\n this.rowCount = row.rowCount;\n this.deleted = row.deleted;\n this.zql = ast ? ast.table + astToZQL(ast) : null;\n\n // Merge client and server metrics\n const clientMetrics = metricsDelegate.getQueryMetrics(queryID);\n const serverMetrics = row.metrics;\n\n this.metrics = mergeMetrics(clientMetrics, serverMetrics);\n }\n}\n\nfunction mergeMetrics(\n clientMetrics: ClientMetrics | undefined,\n serverMetrics: ServerMetricsJSON | null | undefined,\n): Metrics {\n return {\n ...(clientMetrics ?? newClientMetrics()),\n ...(serverMetrics\n ? convertServerMetrics(serverMetrics)\n : newServerMetrics()),\n };\n}\n\nfunction newClientMetrics(): ClientMetrics {\n return {\n 'query-materialization-client': new TDigest(),\n 'query-materialization-end-to-end': new TDigest(),\n 'query-update-client': new TDigest(),\n };\n}\n\nfunction newServerMetrics(): ServerMetrics {\n return {\n 'query-materialization-server': new TDigest(),\n };\n}\n\nfunction convertServerMetrics(metrics: ServerMetricsJSON): ServerMetrics {\n return mapValues(metrics, v => TDigest.fromJSON(v));\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["clients", "clientsWithQueries"]
|
|
7
|
+
}
|
package/out/react.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Zero
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ZKRMVMWK.js";
|
|
4
4
|
import "./chunk-MKB4RXL3.js";
|
|
5
5
|
import {
|
|
6
6
|
DEFAULT_TTL_MS
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-O536GEIT.js";
|
|
8
8
|
import {
|
|
9
9
|
hasOwn
|
|
10
10
|
} from "./chunk-SGW2EIVJ.js";
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This is a binary search that returns the index of the first element in the
|
|
3
|
+
* array that is greater than or equal to the given value.
|
|
4
|
+
*
|
|
5
|
+
* Typical usage:
|
|
6
|
+
*
|
|
7
|
+
* ```
|
|
8
|
+
* const haystack = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
9
|
+
* const needle = 3;
|
|
10
|
+
* const index = binarySearch(haystack.length, i => needle - haystack[i]);
|
|
11
|
+
* const found = index < haystack.length && haystack[index] === needle;
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export function binarySearch(high, compare) {
|
|
15
|
+
let low = 0;
|
|
16
|
+
while (low < high) {
|
|
17
|
+
const mid = low + ((high - low) >> 1);
|
|
18
|
+
const i = compare(mid);
|
|
19
|
+
if (i === 0) {
|
|
20
|
+
return mid;
|
|
21
|
+
}
|
|
22
|
+
if (i > 0) {
|
|
23
|
+
low = mid + 1;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
high = mid;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return low;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=binary-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-search.js","sourceRoot":"","sources":["../../../../shared/src/binary-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAA8B;IACvE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Apache License 2.0
|
|
2
|
+
// https://github.com/influxdata/tdigest
|
|
3
|
+
// Centroid average position of all points in a shape
|
|
4
|
+
export class Centroid {
|
|
5
|
+
mean;
|
|
6
|
+
weight;
|
|
7
|
+
constructor(mean, weight) {
|
|
8
|
+
this.mean = mean;
|
|
9
|
+
this.weight = weight;
|
|
10
|
+
}
|
|
11
|
+
add(r) {
|
|
12
|
+
if (r.weight < 0) {
|
|
13
|
+
throw new Error('centroid weight cannot be less than zero');
|
|
14
|
+
}
|
|
15
|
+
if (this.weight !== 0) {
|
|
16
|
+
this.weight += r.weight;
|
|
17
|
+
this.mean += (r.weight * (r.mean - this.mean)) / this.weight;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
this.weight = r.weight;
|
|
21
|
+
this.mean = r.mean;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function sortCentroidList(centroids) {
|
|
26
|
+
centroids.sort((a, b) => a.mean - b.mean);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=centroid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"centroid.js","sourceRoot":"","sources":["../../../../shared/src/centroid.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,wCAAwC;AAExC,qDAAqD;AACrD,MAAM,OAAO,QAAQ;IACnB,IAAI,CAAS;IACb,MAAM,CAAS;IAEf,YAAY,IAAY,EAAE,MAAc;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,GAAG,CAAC,CAAW;QACb,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC;YACxB,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAKD,MAAM,UAAU,gBAAgB,CAAC,SAAuB;IACtD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC"}
|
package/out/shared/src/dotenv.js
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import { config as dotenvxConfig } from '@dotenvx/dotenvx';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
const filename = fileURLToPath(import.meta.url);
|
|
5
|
-
const dirname = path.dirname(filename);
|
|
6
2
|
// Import env vars from .env file if present but don't whine if not present.
|
|
7
3
|
// Also no free marketing for dotenvx.
|
|
8
4
|
dotenvxConfig({
|
|
9
|
-
path: path.resolve(dirname, '../../../apps/zbugs/.env'),
|
|
10
5
|
ignore: ['MISSING_ENV_FILE'],
|
|
11
6
|
quiet: true,
|
|
12
7
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dotenv.js","sourceRoot":"","sources":["../../../../shared/src/dotenv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,IAAI,aAAa,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"dotenv.js","sourceRoot":"","sources":["../../../../shared/src/dotenv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,IAAI,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAEzD,4EAA4E;AAC5E,sCAAsC;AACtC,aAAa,CAAC;IACZ,MAAM,EAAE,CAAC,kBAAkB,CAAC;IAC5B,KAAK,EAAE,IAAI;CACZ,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Context, LogContext, type LogLevel, type LogSink } from '@rocicorp/logger';
|
|
2
|
+
export declare class TestLogSink implements LogSink {
|
|
3
|
+
messages: [LogLevel, Context | undefined, unknown[]][];
|
|
4
|
+
flushCallCount: number;
|
|
5
|
+
log(level: LogLevel, context: Context | undefined, ...args: unknown[]): void;
|
|
6
|
+
flush(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare class SilentLogSink implements LogSink {
|
|
9
|
+
log(_l: LogLevel, _c: Context | undefined, ..._args: unknown[]): void;
|
|
10
|
+
}
|
|
11
|
+
export declare function createSilentLogContext(): LogContext<unknown[], unknown[], unknown[], unknown[]>;
|
|
12
|
+
//# sourceMappingURL=logging-test-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging-test-utils.d.ts","sourceRoot":"","sources":["../../../../shared/src/logging-test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,OAAO,EACb,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,WAAY,YAAW,OAAO;IACzC,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,CAAM;IAC5D,cAAc,SAAK;IAEnB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI5E,KAAK;CAIN;AAED,qBAAa,aAAc,YAAW,OAAO;IAC3C,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI;CAGtE;AAED,wBAAgB,sBAAsB,2DAErC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { LogContext, } from '@rocicorp/logger';
|
|
2
|
+
export class TestLogSink {
|
|
3
|
+
messages = [];
|
|
4
|
+
flushCallCount = 0;
|
|
5
|
+
log(level, context, ...args) {
|
|
6
|
+
this.messages.push([level, context, args]);
|
|
7
|
+
}
|
|
8
|
+
flush() {
|
|
9
|
+
this.flushCallCount++;
|
|
10
|
+
return Promise.resolve();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class SilentLogSink {
|
|
14
|
+
log(_l, _c, ..._args) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function createSilentLogContext() {
|
|
19
|
+
return new LogContext('error', undefined, new SilentLogSink());
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=logging-test-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging-test-utils.js","sourceRoot":"","sources":["../../../../shared/src/logging-test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,GAGX,MAAM,kBAAkB,CAAC;AAE1B,MAAM,OAAO,WAAW;IACtB,QAAQ,GAAiD,EAAE,CAAC;IAC5D,cAAc,GAAG,CAAC,CAAC;IAEnB,GAAG,CAAC,KAAe,EAAE,OAA4B,EAAE,GAAG,IAAe;QACnE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK;QACH,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,aAAa;IACxB,GAAG,CAAC,EAAY,EAAE,EAAuB,EAAE,GAAG,KAAgB;QAC5D,OAAO;IACT,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,aAAa,EAAE,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export declare function mapValues<T, U>(input:
|
|
1
|
+
export declare function mapValues<T extends Record<string, unknown>, U>(input: T, mapper: (value: T[keyof T]) => U): {
|
|
2
|
+
[K in keyof T]: U;
|
|
3
|
+
};
|
|
2
4
|
export declare function mapEntries<T, U>(input: Record<string, T>, mapper: (key: string, val: T) => [key: string, val: U]): Record<string, U>;
|
|
3
5
|
export declare function mapAllEntries<T, U>(input: Record<string, T>, mapper: (entries: [key: string, val: T][]) => [key: string, val: U][]): Record<string, U>;
|
|
4
6
|
//# sourceMappingURL=objects.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../../../shared/src/objects.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../../../shared/src/objects.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAC5D,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAC/B;KAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;CAAC,CAIrB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EACxB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GACrD,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAYnB;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EACxB,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GACpE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAQnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objects.js","sourceRoot":"","sources":["../../../../shared/src/objects.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CACvB,
|
|
1
|
+
{"version":3,"file":"objects.js","sourceRoot":"","sources":["../../../../shared/src/objects.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CACvB,KAAQ,EACR,MAAgC;IAEhC,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAe,CAAC,CAAC,CAE9D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,KAAwB,EACxB,MAAsD;IAEtD,wDAAwD;IACxD,qEAAqE;IACrE,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,4EAA4E;IAC5E,+DAA+D;IAC/D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,KAAwB,EACxB,MAAqE;IAErE,wDAAwD;IACxD,qEAAqE;IACrE,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as v from './valita.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Valita schema for TDigest JSON representation.
|
|
4
|
+
* Matches the structure returned by TDigest.toJSON().
|
|
5
|
+
*/
|
|
6
|
+
export declare const tdigestSchema: v.VariadicTupleType<[v.Type<number>], v.Type<number>, []>;
|
|
7
|
+
export type TDigestJSON = v.Infer<typeof tdigestSchema>;
|
|
8
|
+
//# sourceMappingURL=tdigest-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tdigest-schema.d.ts","sourceRoot":"","sources":["../../../../shared/src/tdigest-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AAEjC;;;GAGG;AACH,eAAO,MAAM,aAAa,2DAAoD,CAAC;AAE/E,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as v from "./valita.js";
|
|
2
|
+
/**
|
|
3
|
+
* Valita schema for TDigest JSON representation.
|
|
4
|
+
* Matches the structure returned by TDigest.toJSON().
|
|
5
|
+
*/
|
|
6
|
+
export const tdigestSchema = v.tuple([v.number()]).concat(v.array(v.number()));
|
|
7
|
+
//# sourceMappingURL=tdigest-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tdigest-schema.js","sourceRoot":"","sources":["../../../../shared/src/tdigest-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AAEjC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Centroid, type CentroidList } from './centroid.ts';
|
|
2
|
+
import type { TDigestJSON } from './tdigest-schema.ts';
|
|
2
3
|
export interface ReadonlyTDigest {
|
|
3
4
|
readonly count: () => number;
|
|
4
5
|
readonly quantile: (q: number) => number;
|
|
@@ -8,6 +9,11 @@ export declare class TDigest {
|
|
|
8
9
|
#private;
|
|
9
10
|
readonly compression: number;
|
|
10
11
|
constructor(compression?: number);
|
|
12
|
+
/**
|
|
13
|
+
* fromJSON creates a TDigest from a JSON-serializable representation.
|
|
14
|
+
* The data should be an object with compression and centroids array.
|
|
15
|
+
*/
|
|
16
|
+
static fromJSON(data: Readonly<TDigestJSON>): TDigest;
|
|
11
17
|
reset(): void;
|
|
12
18
|
add(mean: number, weight?: number): void;
|
|
13
19
|
/** AddCentroidList can quickly add multiple centroids. */
|
|
@@ -32,6 +38,11 @@ export declare class TDigest {
|
|
|
32
38
|
*/
|
|
33
39
|
centroids(cl?: CentroidList): CentroidList;
|
|
34
40
|
count(): number;
|
|
41
|
+
/**
|
|
42
|
+
* toJSON returns a JSON-serializable representation of the digest.
|
|
43
|
+
* This processes the digest and returns an object with compression and centroid data.
|
|
44
|
+
*/
|
|
45
|
+
toJSON(): TDigestJSON;
|
|
35
46
|
quantile(q: number): number;
|
|
36
47
|
/**
|
|
37
48
|
* CDF returns the cumulative distribution function for a given value x.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tdigest.d.ts","sourceRoot":"","sources":["../../../../shared/src/tdigest.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,QAAQ,EAAoB,KAAK,YAAY,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"tdigest.d.ts","sourceRoot":"","sources":["../../../../shared/src/tdigest.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,QAAQ,EAAoB,KAAK,YAAY,EAAC,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CACrC;AAID,qBAAa,OAAO;;IAClB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAYjB,WAAW,GAAE,MAAa;IAOtC;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO;IAWrD,KAAK,IAAI,IAAI;IAUb,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU;IAIpC,0DAA0D;IAC1D,eAAe,CAAC,YAAY,EAAE,YAAY;IAM1C;;;OAGG;IACH,WAAW,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI;IAqB9B;;;;QAII;IACJ,KAAK,CAAC,EAAE,EAAE,OAAO;IA4CjB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,GAAE,YAAiB,GAAG,YAAY;IAK9C,KAAK,IAAI,MAAM;IAQf;;;OAGG;IACH,MAAM,IAAI,WAAW;IAqCrB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IA6C3B;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAyFvB;AAID,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoB3D"}
|