camusdb 0.5.0 → 0.7.0
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/README.md +207 -5
- package/dist/client.d.ts +42 -37
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +117 -166
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +22 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +19 -0
- package/dist/config.js.map +1 -1
- package/dist/endpoint-pool.d.ts +8 -0
- package/dist/endpoint-pool.d.ts.map +1 -1
- package/dist/endpoint-pool.js +25 -0
- package/dist/endpoint-pool.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/json.d.ts +4 -3
- package/dist/json.d.ts.map +1 -1
- package/dist/json.js +10 -4
- package/dist/json.js.map +1 -1
- package/dist/node-stats.d.ts +113 -0
- package/dist/node-stats.d.ts.map +1 -0
- package/dist/node-stats.js +90 -0
- package/dist/node-stats.js.map +1 -0
- package/dist/options.d.ts +10 -0
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +1 -0
- package/dist/options.js.map +1 -1
- package/dist/pipeline.d.ts +126 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +363 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/prepared/auto-prepare.d.ts +51 -0
- package/dist/prepared/auto-prepare.d.ts.map +1 -0
- package/dist/prepared/auto-prepare.js +150 -0
- package/dist/prepared/auto-prepare.js.map +1 -0
- package/dist/prepared/policy.d.ts +7 -0
- package/dist/prepared/policy.d.ts.map +1 -1
- package/dist/prepared/policy.js +16 -0
- package/dist/prepared/policy.js.map +1 -1
- package/dist/query-stream.d.ts +4 -1
- package/dist/query-stream.d.ts.map +1 -1
- package/dist/query-stream.js +13 -2
- package/dist/query-stream.js.map +1 -1
- package/dist/retry.d.ts +8 -0
- package/dist/retry.d.ts.map +1 -1
- package/dist/retry.js +12 -1
- package/dist/retry.js.map +1 -1
- package/dist/statements.d.ts.map +1 -1
- package/dist/statements.js +37 -4
- package/dist/statements.js.map +1 -1
- package/dist/telemetry.d.ts +199 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +422 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/transaction.d.ts +60 -5
- package/dist/transaction.d.ts.map +1 -1
- package/dist/transaction.js +124 -24
- package/dist/transaction.js.map +1 -1
- package/dist/transport/authenticating-transport.d.ts +9 -1
- package/dist/transport/authenticating-transport.d.ts.map +1 -1
- package/dist/transport/authenticating-transport.js +13 -0
- package/dist/transport/authenticating-transport.js.map +1 -1
- package/dist/transport/grpc/batch-frames.d.ts +23 -5
- package/dist/transport/grpc/batch-frames.d.ts.map +1 -1
- package/dist/transport/grpc/batch-frames.js +29 -8
- package/dist/transport/grpc/batch-frames.js.map +1 -1
- package/dist/transport/grpc/batcher.d.ts +69 -5
- package/dist/transport/grpc/batcher.d.ts.map +1 -1
- package/dist/transport/grpc/batcher.js +217 -10
- package/dist/transport/grpc/batcher.js.map +1 -1
- package/dist/transport/grpc/grpc-transport.d.ts +35 -1
- package/dist/transport/grpc/grpc-transport.d.ts.map +1 -1
- package/dist/transport/grpc/grpc-transport.js +193 -7
- package/dist/transport/grpc/grpc-transport.js.map +1 -1
- package/dist/transport/grpc/messages.d.ts +15 -0
- package/dist/transport/grpc/messages.d.ts.map +1 -1
- package/dist/transport/grpc/messages.js +9 -0
- package/dist/transport/grpc/messages.js.map +1 -1
- package/dist/transport/ndjson-row-source.d.ts +2 -0
- package/dist/transport/ndjson-row-source.d.ts.map +1 -1
- package/dist/transport/ndjson-row-source.js +7 -4
- package/dist/transport/ndjson-row-source.js.map +1 -1
- package/dist/transport/rest-decode.d.ts +14 -4
- package/dist/transport/rest-decode.d.ts.map +1 -1
- package/dist/transport/rest-decode.js +56 -17
- package/dist/transport/rest-decode.js.map +1 -1
- package/dist/transport/rest-transport.d.ts +9 -1
- package/dist/transport/rest-transport.d.ts.map +1 -1
- package/dist/transport/rest-transport.js +24 -0
- package/dist/transport/rest-transport.js.map +1 -1
- package/dist/transport/sequential-pipeline.d.ts +21 -0
- package/dist/transport/sequential-pipeline.d.ts.map +1 -0
- package/dist/transport/sequential-pipeline.js +119 -0
- package/dist/transport/sequential-pipeline.js.map +1 -0
- package/dist/transport/transport.d.ts +94 -0
- package/dist/transport/transport.d.ts.map +1 -1
- package/dist/transport/transport.js +10 -0
- package/dist/transport/transport.js.map +1 -1
- package/dist/values/encode.js +13 -5
- package/dist/values/encode.js.map +1 -1
- package/package.json +10 -4
- package/proto/camus_sql.proto +114 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of CamusDB
|
|
3
|
+
*
|
|
4
|
+
* For the full copyright and license information, please view the LICENSE.txt
|
|
5
|
+
* file that was distributed with this source code.
|
|
6
|
+
*/
|
|
7
|
+
import { CamusError } from '../errors.js';
|
|
8
|
+
import { CamusErrorCode } from '../error-codes.js';
|
|
9
|
+
import { isRetryable } from '../retry.js';
|
|
10
|
+
import { isPreparableStatement } from '../statements.js';
|
|
11
|
+
import { PreparedResult, recordPreparedEviction, recordPreparedLookup, recordPreparedRegistration, } from '../telemetry.js';
|
|
12
|
+
import { PrepareDecision } from './policy.js';
|
|
13
|
+
/**
|
|
14
|
+
* Whether this execution should name a prepared statement instead of carrying its SQL,
|
|
15
|
+
* registering it first when this is the execution that tips it over the threshold.
|
|
16
|
+
*
|
|
17
|
+
* The registration is awaited rather than started in the background, because the whole point is
|
|
18
|
+
* that this execution and the ones after it are cheap. Firing it off and running inline anyway
|
|
19
|
+
* would leave a busy statement racing its own warm-up. It costs one extra round trip, once per
|
|
20
|
+
* statement per endpoint.
|
|
21
|
+
*
|
|
22
|
+
* The caller passes the endpoint it already resolved. A REST handle is node-local and the pool
|
|
23
|
+
* rotates, so registering against a freshly drawn endpoint would routinely prepare on one node
|
|
24
|
+
* and execute on another — correct, because the transport re-registers where it lands, but a
|
|
25
|
+
* wasted round trip every single time.
|
|
26
|
+
*/
|
|
27
|
+
export async function shouldPrepare(runtime, sql, endpoint, options) {
|
|
28
|
+
const policy = runtime.preparedStatements;
|
|
29
|
+
if (policy.isDisabled || !isPreparableStatement(sql))
|
|
30
|
+
return false;
|
|
31
|
+
const { decision, evicted } = policy.decide(runtime.database, sql);
|
|
32
|
+
releaseEvicted(runtime, endpoint, evicted);
|
|
33
|
+
switch (decision) {
|
|
34
|
+
case PrepareDecision.Yes:
|
|
35
|
+
recordPreparedLookup(runtime.database, PreparedResult.Hit);
|
|
36
|
+
return true;
|
|
37
|
+
case PrepareDecision.Register: {
|
|
38
|
+
const registered = await registerStatement(runtime, endpoint, runtime.database, sql, options);
|
|
39
|
+
recordPreparedLookup(runtime.database, registered ? PreparedResult.Registered : PreparedResult.Miss);
|
|
40
|
+
return registered;
|
|
41
|
+
}
|
|
42
|
+
default:
|
|
43
|
+
recordPreparedLookup(runtime.database, PreparedResult.Miss);
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Registers a statement and records what happened, reporting whether it may now run prepared.
|
|
49
|
+
*
|
|
50
|
+
* A registration failure never reaches the caller: preparing is an optimization, and the
|
|
51
|
+
* statement runs inline exactly as it would have if the driver had not tried. What the failure
|
|
52
|
+
* does decide is whether to ask again. A refusal specific to this statement stops asking for that
|
|
53
|
+
* statement; anything that says the node has no prepared-statement support at all stops asking
|
|
54
|
+
* for every statement, because one round trip per distinct SQL to relearn that is worse than not
|
|
55
|
+
* trying. A failure that never reached a verdict — a timeout, an unreachable node — drops the
|
|
56
|
+
* entry instead, so one network blip does not cost this statement its registration for the life
|
|
57
|
+
* of the process.
|
|
58
|
+
*/
|
|
59
|
+
export async function registerStatement(runtime, endpoint, database, sql, options) {
|
|
60
|
+
const policy = runtime.preparedStatements;
|
|
61
|
+
try {
|
|
62
|
+
await runtime.transport.prepare(endpoint, database, sql, options.timeoutSeconds ?? runtime.timeoutSeconds, options.signal);
|
|
63
|
+
policy.markPrepared(database, sql);
|
|
64
|
+
recordPreparedRegistration(database, PreparedResult.Success);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
// The caller's own cancellation is not a verdict on the statement, but the entry must not be
|
|
69
|
+
// left mid-registration, or it would never be reconsidered.
|
|
70
|
+
if (options.signal?.aborted === true) {
|
|
71
|
+
policy.forget(database, sql);
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
// The statement is about to run inline and will report any real problem itself. The only
|
|
75
|
+
// decision left here is whether asking again is worth a round trip.
|
|
76
|
+
if (CamusError.is(error) && isUnsupported(error)) {
|
|
77
|
+
policy.markRefused(database, sql);
|
|
78
|
+
policy.disable();
|
|
79
|
+
recordPreparedRegistration(database, PreparedResult.Unsupported, error);
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
if (declinesStatement(error)) {
|
|
83
|
+
policy.markRefused(database, sql);
|
|
84
|
+
recordPreparedRegistration(database, PreparedResult.Refused, error);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
policy.forget(database, sql);
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Releases a statement the policy evicted, so the server stops holding a handle this client has
|
|
94
|
+
* stopped using.
|
|
95
|
+
*
|
|
96
|
+
* It is best effort and off the caller's path: it is bookkeeping, not part of the statement being
|
|
97
|
+
* run. It takes the endpoint the caller already resolved rather than drawing a new one, which
|
|
98
|
+
* would rotate the pool as a side effect of housekeeping.
|
|
99
|
+
*/
|
|
100
|
+
export function releaseEvicted(runtime, endpoint, evicted) {
|
|
101
|
+
if (evicted === undefined)
|
|
102
|
+
return;
|
|
103
|
+
recordPreparedEviction(evicted.database);
|
|
104
|
+
void runtime.transport.closePrepared(endpoint, evicted.database, evicted.sql).catch(() => undefined);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* The codes that say nothing about the statement itself.
|
|
108
|
+
*
|
|
109
|
+
* `Generic` covers a call that was sent and then lost, and every failure the driver could not
|
|
110
|
+
* classify. The rest name the connection or the principal. A statement that meets one of these is
|
|
111
|
+
* left reconsiderable: the next call site asks again.
|
|
112
|
+
*/
|
|
113
|
+
const UNINFORMATIVE_CODES = new Set([
|
|
114
|
+
CamusErrorCode.Generic,
|
|
115
|
+
CamusErrorCode.EndpointUnreachable,
|
|
116
|
+
CamusErrorCode.AuthenticationFailed,
|
|
117
|
+
CamusErrorCode.InsufficientPrivilege,
|
|
118
|
+
CamusErrorCode.TooManyAuthAttempts,
|
|
119
|
+
CamusErrorCode.InsecureTransport,
|
|
120
|
+
]);
|
|
121
|
+
/**
|
|
122
|
+
* True when the server gave a verdict on this statement, rather than the round trip failing.
|
|
123
|
+
*
|
|
124
|
+
* Only a verdict is terminal. A retryable condition, a transport failure, and an error the driver
|
|
125
|
+
* did not raise itself all leave the question open.
|
|
126
|
+
*/
|
|
127
|
+
function declinesStatement(error) {
|
|
128
|
+
if (!CamusError.is(error))
|
|
129
|
+
return false;
|
|
130
|
+
if (isRetryable(error))
|
|
131
|
+
return false;
|
|
132
|
+
return !UNINFORMATIVE_CODES.has(error.code);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* True when a failure says the node does not implement prepared statements at all, rather than
|
|
136
|
+
* declining this particular statement.
|
|
137
|
+
*
|
|
138
|
+
* Both spellings surface under the generic code, because a server old enough not to have the
|
|
139
|
+
* feature is also too old to have a specific code for refusing it. A server that does have it
|
|
140
|
+
* declines an individual statement with a `CADB05xx` code instead.
|
|
141
|
+
*
|
|
142
|
+
* It is a heuristic, and it is only ever used to answer "is asking again worth a round trip?".
|
|
143
|
+
* Reading it wrong costs at most one wasted registration attempt per statement, never a failed
|
|
144
|
+
* statement.
|
|
145
|
+
*/
|
|
146
|
+
function isUnsupported(error) {
|
|
147
|
+
return (error.code === CamusErrorCode.Generic &&
|
|
148
|
+
(error.message.includes('404') || error.message.toLowerCase().includes('unimplemented')));
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=auto-prepare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-prepare.js","sourceRoot":"","sources":["../../src/prepared/auto-prepare.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,13 @@ export declare class CamusPreparedStatementPolicy {
|
|
|
42
42
|
static forKey(key: string, factory: () => CamusPreparedStatementPolicy): CamusPreparedStatementPolicy;
|
|
43
43
|
/** @internal Test hook: drops every shared policy. */
|
|
44
44
|
static resetShared(): void;
|
|
45
|
+
/**
|
|
46
|
+
* For each database, the statements that the shared policies keep prepared now. It feeds the
|
|
47
|
+
* `camusdb.client.prepared_statement.count` measurement.
|
|
48
|
+
*
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
static collectPreparedCounts(): Map<string, number>;
|
|
45
52
|
readonly maxAutoPrepare: number;
|
|
46
53
|
readonly minUsages: number;
|
|
47
54
|
private readonly entries;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/prepared/policy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,kEAAkE;AAClE,eAAO,MAAM,eAAe;IAC1B,yEAAyE;;IAEzE,yDAAyD;;IAEzD,6DAA6D;;CAErD,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAkBrF,2FAA2F;AAC3F,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,4BAA4B;IACvC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,OAAO;IAE/C,MAAM,CAAC,QAAQ,CAAC,kBAAkB,KAAK;IAEvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAsD;IAEpF,iEAAiE;IACjE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,4BAA4B,GAAG,4BAA4B;IAIrG,sDAAsD;IACtD,MAAM,CAAC,WAAW,IAAI,IAAI;IAI1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IAEpD,OAAO,CAAC,QAAQ,CAAU;gBAEd,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAMrD,mGAAmG;IACnG,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,uDAAuD;IACvD,IAAI,aAAa,IAAI,MAAM,CAQ1B;IAED,wDAAwD;IACxD,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAIlD,2FAA2F;IAC3F,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,eAAe,CAAC;QAAC,OAAO,CAAC,EAAE,gBAAgB,CAAA;KAAE;IA2BhG;;;;;OAKG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,eAAe,CAAC;QAAC,OAAO,CAAC,EAAE,gBAAgB,CAAA;KAAE;IAa7F,sDAAsD;IACtD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKjD,gFAAgF;IAChF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKhD,+FAA+F;IAC/F,OAAO,IAAI,IAAI;IAIf,mFAAmF;IACnF,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAI3C,OAAO,CAAC,KAAK;CAiCd"}
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/prepared/policy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,kEAAkE;AAClE,eAAO,MAAM,eAAe;IAC1B,yEAAyE;;IAEzE,yDAAyD;;IAEzD,6DAA6D;;CAErD,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAkBrF,2FAA2F;AAC3F,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,4BAA4B;IACvC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,OAAO;IAE/C,MAAM,CAAC,QAAQ,CAAC,kBAAkB,KAAK;IAEvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAsD;IAEpF,iEAAiE;IACjE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,4BAA4B,GAAG,4BAA4B;IAIrG,sDAAsD;IACtD,MAAM,CAAC,WAAW,IAAI,IAAI;IAI1B;;;;;OAKG;IACH,MAAM,CAAC,qBAAqB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAanD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IAEpD,OAAO,CAAC,QAAQ,CAAU;gBAEd,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAMrD,mGAAmG;IACnG,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,uDAAuD;IACvD,IAAI,aAAa,IAAI,MAAM,CAQ1B;IAED,wDAAwD;IACxD,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAIlD,2FAA2F;IAC3F,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,eAAe,CAAC;QAAC,OAAO,CAAC,EAAE,gBAAgB,CAAA;KAAE;IA2BhG;;;;;OAKG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,eAAe,CAAC;QAAC,OAAO,CAAC,EAAE,gBAAgB,CAAA;KAAE;IAa7F,sDAAsD;IACtD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKjD,gFAAgF;IAChF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKhD,+FAA+F;IAC/F,OAAO,IAAI,IAAI;IAIf,mFAAmF;IACnF,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAI3C,OAAO,CAAC,KAAK;CAiCd"}
|
package/dist/prepared/policy.js
CHANGED
|
@@ -47,6 +47,22 @@ export class CamusPreparedStatementPolicy {
|
|
|
47
47
|
static resetShared() {
|
|
48
48
|
CamusPreparedStatementPolicy.shared.clear();
|
|
49
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* For each database, the statements that the shared policies keep prepared now. It feeds the
|
|
52
|
+
* `camusdb.client.prepared_statement.count` measurement.
|
|
53
|
+
*
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
static collectPreparedCounts() {
|
|
57
|
+
const counts = new Map();
|
|
58
|
+
for (const policy of CamusPreparedStatementPolicy.shared.values()) {
|
|
59
|
+
for (const entry of policy.entries.values()) {
|
|
60
|
+
if (entry.state === EntryState.Prepared)
|
|
61
|
+
counts.set(entry.database, (counts.get(entry.database) ?? 0) + 1);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return counts;
|
|
65
|
+
}
|
|
50
66
|
maxAutoPrepare;
|
|
51
67
|
minUsages;
|
|
52
68
|
entries = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/prepared/policy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/prepared/policy.ts"],"names":[],"mappings":"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"}
|
package/dist/query-stream.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { CamusColumn } from './result-set.js';
|
|
8
8
|
import type { CamusRowSource } from './row-source.js';
|
|
9
|
+
import type { CamusOperation } from './telemetry.js';
|
|
9
10
|
import type { DecodeOptions } from './values/decode.js';
|
|
10
11
|
/**
|
|
11
12
|
* Rows delivered one at a time, as an async iterable.
|
|
@@ -34,8 +35,10 @@ export declare class CamusQueryStream<T = Record<string, unknown>> implements As
|
|
|
34
35
|
private readonly mapper;
|
|
35
36
|
private consumed;
|
|
36
37
|
private closed;
|
|
38
|
+
/** The span of the statement. It ends at the last row, at a failed read, or at `close`. */
|
|
39
|
+
private readonly operation;
|
|
37
40
|
/** @internal Built by `CamusClient.queryStream`. */
|
|
38
|
-
constructor(source: CamusRowSource, options: DecodeOptions);
|
|
41
|
+
constructor(source: CamusRowSource, options: DecodeOptions, operation?: CamusOperation);
|
|
39
42
|
/** The output columns, known before the first row. */
|
|
40
43
|
get columns(): CamusColumn[];
|
|
41
44
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-stream.d.ts","sourceRoot":"","sources":["../src/query-stream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC,EAAE,eAAe;IACrG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IAExC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,MAAM,CAAS;IAEvB,oDAAoD;gBACxC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"query-stream.d.ts","sourceRoot":"","sources":["../src/query-stream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC,EAAE,eAAe;IACrG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IAExC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,MAAM,CAAS;IAEvB,2FAA2F;IAC3F,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IAEvD,oDAAoD;gBACxC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,cAAc;IAMtF,sDAAsD;IACtD,IAAI,OAAO,IAAI,WAAW,EAAE,CAM3B;IAED;;;;;OAKG;IACH,IAAI,UAAU,IAAI,SAAS,MAAM,EAAE,CAElC;IAEM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;IA4BjD,gGAAgG;IAC1F,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAQ7B,qEAAqE;IAC/D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7C"}
|
package/dist/query-stream.js
CHANGED
|
@@ -33,10 +33,13 @@ export class CamusQueryStream {
|
|
|
33
33
|
mapper;
|
|
34
34
|
consumed = false;
|
|
35
35
|
closed = false;
|
|
36
|
+
/** The span of the statement. It ends at the last row, at a failed read, or at `close`. */
|
|
37
|
+
operation;
|
|
36
38
|
/** @internal Built by `CamusClient.queryStream`. */
|
|
37
|
-
constructor(source, options) {
|
|
39
|
+
constructor(source, options, operation) {
|
|
38
40
|
this.source = source;
|
|
39
41
|
this.mapper = new RowMapper(source.columnNames, options);
|
|
42
|
+
this.operation = operation;
|
|
40
43
|
}
|
|
41
44
|
/** The output columns, known before the first row. */
|
|
42
45
|
get columns() {
|
|
@@ -62,7 +65,14 @@ export class CamusQueryStream {
|
|
|
62
65
|
this.consumed = true;
|
|
63
66
|
try {
|
|
64
67
|
for (;;) {
|
|
65
|
-
|
|
68
|
+
let cells;
|
|
69
|
+
try {
|
|
70
|
+
cells = await this.source.next();
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
this.operation?.fail(error);
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
66
76
|
if (cells === undefined)
|
|
67
77
|
return;
|
|
68
78
|
yield this.mapper.map(cells);
|
|
@@ -85,6 +95,7 @@ export class CamusQueryStream {
|
|
|
85
95
|
if (this.closed)
|
|
86
96
|
return;
|
|
87
97
|
this.closed = true;
|
|
98
|
+
this.operation?.complete();
|
|
88
99
|
await this.source.close();
|
|
89
100
|
}
|
|
90
101
|
async [Symbol.asyncDispose]() {
|
package/dist/query-stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-stream.js","sourceRoot":"","sources":["../src/query-stream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"query-stream.js","sourceRoot":"","sources":["../src/query-stream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,gBAAgB;IACV,MAAM,CAAiB;IAEvB,MAAM,CAAY;IAE3B,QAAQ,GAAG,KAAK,CAAC;IAEjB,MAAM,GAAG,KAAK,CAAC;IAEvB,2FAA2F;IAC1E,SAAS,CAA6B;IAEvD,oDAAoD;IACpD,YAAY,MAAsB,EAAE,OAAsB,EAAE,SAA0B;QACpF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,sDAAsD;IACtD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACnD,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAE;YACrC,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAE,CAAC;SAC1D,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC;YACH,SAAS,CAAC;gBACR,IAAI,KAAkD,CAAC;gBAEvD,IAAI,CAAC;oBACH,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACnC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC5B,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,IAAI,KAAK,KAAK,SAAS;oBAAE,OAAO;gBAEhC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,2FAA2F;YAC3F,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,gGAAgG;IAChG,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,GAAQ,EAAE,CAAC;QAErB,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QAExB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QACzB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|
package/dist/retry.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* For the full copyright and license information, please view the LICENSE.txt
|
|
5
5
|
* file that was distributed with this source code.
|
|
6
6
|
*/
|
|
7
|
+
import { CamusRetryKind } from './telemetry.js';
|
|
7
8
|
/**
|
|
8
9
|
* True when running the same work again may succeed.
|
|
9
10
|
*
|
|
@@ -31,6 +32,13 @@ export interface RetryOptions {
|
|
|
31
32
|
* clients that conflicted do not retry in step.
|
|
32
33
|
*/
|
|
33
34
|
export declare function withRetry<T>(operation: (attempt: number) => Promise<T>, options?: RetryOptions): Promise<T>;
|
|
35
|
+
/**
|
|
36
|
+
* The loop of `withRetry`. `kind` is what each retry counts as on the
|
|
37
|
+
* `camusdb.client.operation.retries` counter.
|
|
38
|
+
*
|
|
39
|
+
* @internal
|
|
40
|
+
*/
|
|
41
|
+
export declare function retryLoop<T>(operation: (attempt: number) => Promise<T>, options: RetryOptions, kind: CamusRetryKind): Promise<T>;
|
|
34
42
|
/**
|
|
35
43
|
* The back-off after attempt number `attempt`, in milliseconds. Exported so a caller can mirror the
|
|
36
44
|
* schedule. The first retry waits the documented 20 ms base, the second 40 ms, and so on.
|
package/dist/retry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAwB7D;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAwBnD;AAED,gCAAgC;AAChC,MAAM,WAAW,YAAY;IAC3B,oFAAoF;IACpF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B,sCAAsC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,CAAC,EACzB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1C,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1C,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,CAAC,CAAC,CAcZ;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,2FAA2F;AAC3F,wBAAgB,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB/E"}
|
package/dist/retry.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { CamusError } from './errors.js';
|
|
8
8
|
import { CamusErrorCode } from './error-codes.js';
|
|
9
|
+
import { CamusRetryKind, recordRetry } from './telemetry.js';
|
|
9
10
|
/**
|
|
10
11
|
* Which failures a caller may retry, and a loop that does it.
|
|
11
12
|
*
|
|
@@ -64,7 +65,16 @@ export function isRetryable(error) {
|
|
|
64
65
|
* The delay grows exponentially from 20 ms, caps at 400 ms, and carries 25% jitter, so a set of
|
|
65
66
|
* clients that conflicted do not retry in step.
|
|
66
67
|
*/
|
|
67
|
-
export
|
|
68
|
+
export function withRetry(operation, options = {}) {
|
|
69
|
+
return retryLoop(operation, options, CamusRetryKind.Autocommit);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The loop of `withRetry`. `kind` is what each retry counts as on the
|
|
73
|
+
* `camusdb.client.operation.retries` counter.
|
|
74
|
+
*
|
|
75
|
+
* @internal
|
|
76
|
+
*/
|
|
77
|
+
export async function retryLoop(operation, options, kind) {
|
|
68
78
|
const maxAttempts = Math.max(1, options.maxAttempts ?? 5);
|
|
69
79
|
for (let attempt = 1;; attempt++) {
|
|
70
80
|
try {
|
|
@@ -73,6 +83,7 @@ export async function withRetry(operation, options = {}) {
|
|
|
73
83
|
catch (error) {
|
|
74
84
|
if (attempt >= maxAttempts || !isRetryable(error))
|
|
75
85
|
throw error;
|
|
86
|
+
recordRetry(kind, error);
|
|
76
87
|
await delay(computeDelayMs(attempt), options.signal);
|
|
77
88
|
}
|
|
78
89
|
}
|
package/dist/retry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"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"}
|
package/dist/statements.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statements.d.ts","sourceRoot":"","sources":["../src/statements.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"statements.d.ts","sourceRoot":"","sources":["../src/statements.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0EH,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzD"}
|
package/dist/statements.js
CHANGED
|
@@ -45,10 +45,13 @@ const DDL_PREFIXES = [
|
|
|
45
45
|
'DROP MATERIALIZED VIEW',
|
|
46
46
|
'ALTER MATERIALIZED VIEW',
|
|
47
47
|
// Sequences. ALTER SEQUENCE covers both the option form and RENAME TO. COMMENT ON SEQUENCE is
|
|
48
|
-
//
|
|
48
|
+
// here although COMMENT ON for every other object is not: the data route handles those itself,
|
|
49
|
+
// but released servers refuse a sequence comment there as an unknown statement, and only the
|
|
50
|
+
// DDL route runs it.
|
|
49
51
|
'CREATE SEQUENCE',
|
|
50
52
|
'DROP SEQUENCE',
|
|
51
53
|
'ALTER SEQUENCE',
|
|
54
|
+
'COMMENT ON SEQUENCE',
|
|
52
55
|
];
|
|
53
56
|
const DML_PREFIXES = ['INSERT', 'UPDATE', 'DELETE'];
|
|
54
57
|
/**
|
|
@@ -91,14 +94,44 @@ export function isPreparableStatement(sql) {
|
|
|
91
94
|
export function runsInOwnTransaction(sql) {
|
|
92
95
|
return startsWithAny(sql, OWN_TRANSACTION_PREFIXES);
|
|
93
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* True when the statement begins with one of the prefixes, ignoring case.
|
|
99
|
+
*
|
|
100
|
+
* The keywords of a prefix may be separated by any run of whitespace, including a line break, as
|
|
101
|
+
* they may be in SQL: `COMMENT ON\nSEQUENCE` is the same statement as `COMMENT ON SEQUENCE`, and
|
|
102
|
+
* a strict match would send it to a route that refuses it.
|
|
103
|
+
*/
|
|
94
104
|
function startsWithAny(sql, prefixes) {
|
|
95
105
|
const trimmed = sql.trimStart();
|
|
96
106
|
for (const prefix of prefixes) {
|
|
97
|
-
if (trimmed
|
|
98
|
-
continue;
|
|
99
|
-
if (trimmed.slice(0, prefix.length).toUpperCase() === prefix)
|
|
107
|
+
if (startsWithKeywords(trimmed, prefix))
|
|
100
108
|
return true;
|
|
101
109
|
}
|
|
102
110
|
return false;
|
|
103
111
|
}
|
|
112
|
+
function startsWithKeywords(text, prefix) {
|
|
113
|
+
let position = 0;
|
|
114
|
+
let wordStart = 0;
|
|
115
|
+
while (wordStart < prefix.length) {
|
|
116
|
+
if (wordStart > 0) {
|
|
117
|
+
// At least one whitespace character must separate two keywords.
|
|
118
|
+
const separatorStart = position;
|
|
119
|
+
while (position < text.length && /\s/.test(text[position]))
|
|
120
|
+
position++;
|
|
121
|
+
if (position === separatorStart)
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
const space = prefix.indexOf(' ', wordStart);
|
|
125
|
+
const wordEnd = space === -1 ? prefix.length : space;
|
|
126
|
+
const length = wordEnd - wordStart;
|
|
127
|
+
if (text.length - position < length)
|
|
128
|
+
return false;
|
|
129
|
+
if (text.slice(position, position + length).toUpperCase() !== prefix.slice(wordStart, wordEnd)) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
position += length;
|
|
133
|
+
wordStart = wordEnd + 1;
|
|
134
|
+
}
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
104
137
|
//# sourceMappingURL=statements.js.map
|
package/dist/statements.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statements.js","sourceRoot":"","sources":["../src/statements.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;;;GAOG;AAEH;;;;;;;;;GASG;AACH,MAAM,YAAY,GAAG;IACnB,cAAc;IACd,YAAY;IACZ,aAAa;IACb,gGAAgG;IAChG,iGAAiG;IACjG,+CAA+C;IAC/C,UAAU;IACV,qBAAqB;IACrB,cAAc;IACd,YAAY;IACZ,6FAA6F;IAC7F,+FAA+F;IAC/F,6EAA6E;IAC7E,aAAa;IACb,wBAAwB;IACxB,WAAW;IACX,YAAY;IACZ,0BAA0B;IAC1B,wBAAwB;IACxB,yBAAyB;IACzB,8FAA8F;IAC9F,
|
|
1
|
+
{"version":3,"file":"statements.js","sourceRoot":"","sources":["../src/statements.ts"],"names":[],"mappings":"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"}
|