@rindle/api-server 0.2.0 → 0.4.2
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/dist/index.d.ts +279 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +912 -31
- package/dist/index.js.map +1 -1
- package/package.json +6 -4
- package/src/index.ts +1125 -33
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import type { Ast, MutationEnvelope, NamedQuery, Query } from "@rindle/client";
|
|
2
|
-
import type { DematerializeInput, DematerializeOutput, MaterializationPolicy, MaterializeInput, MaterializeOutput, MigrateInput, MigrateOutput, MutationRejection, MutationRejectionOutput, QueryOnceInput, QueryOnceOutput, RindleDaemonClient, RowChangeTxn, RowChangeTxnOutput, SqlRead, SqlReadOutput, SqlStatement, SqlTxn, SqlTxnOutput, StreamMode, WireValue } from "@rindle/daemon-client";
|
|
1
|
+
import type { Ast, ColType, KeyedRow, MutationEnvelope, MutationOp, MutatorCtx, NamedQuery, Query, Schema, SharedMutator, SharedMutatorWithArgs, ServerWriteTx } from "@rindle/client";
|
|
2
|
+
import type { ClaimRoomEpochInput, ClaimRoomEpochOutput, DematerializeInput, DematerializeOutput, MaterializationPolicy, MaterializeInput, MaterializeOutput, MigrateInput, MigrateOutput, MutationRejection, MutationRejectionOutput, MutationSessionBegin, MutationSessionBeginOutput, MutationSessionExec, MutationSessionQuery, MutationSessionRef, QueryOnceInput, QueryOnceOutput, RindleDaemonClient, RoomLmidsInput, RoomLmidsOutput, RowChangeTxn, RowChangeTxnOutput, SqlRead, SqlReadOutput, SqlStatement, SqlTxn, SqlTxnOutput, StreamMode, WireValue } from "@rindle/daemon-client";
|
|
3
|
+
export { isoTx, shared } from "@rindle/client";
|
|
4
|
+
export type { ArgSchema, IsoTx, MutationGen, MutatorCtx, SharedMutator, SharedMutatorWithArgs } from "@rindle/client";
|
|
3
5
|
export declare const DEFAULT_RINDLE_API_ROUTES: {
|
|
4
6
|
readonly query: "/api/rindle/query";
|
|
5
7
|
readonly read: "/api/rindle/read";
|
|
6
8
|
readonly mutate: "/api/rindle/mutate";
|
|
9
|
+
readonly applyRowChangeTxn: "/api/rindle/apply-row-change-txn";
|
|
10
|
+
readonly claimRoomEpoch: "/api/rindle/claim-room-epoch";
|
|
11
|
+
readonly roomLmids: "/api/rindle/room-lmids";
|
|
7
12
|
};
|
|
8
13
|
export type MaybePromise<T> = T | PromiseLike<T>;
|
|
9
14
|
export interface ApiContext<User> {
|
|
@@ -39,12 +44,36 @@ export interface MutationContext<User> {
|
|
|
39
44
|
daemon: RindleDaemonClient;
|
|
40
45
|
request?: unknown;
|
|
41
46
|
}
|
|
47
|
+
/** The legacy raw-SQL escape hatch (still the surface for relational/authority statements a keyed op
|
|
48
|
+
* can't express — an owner-gated cascade, a `NOT EXISTS` dedup). `exec` accumulates on the daemon
|
|
49
|
+
* backend and executes live on the Postgres backend; `statements` is the collected raw list. */
|
|
42
50
|
export interface SqlMutationTx {
|
|
43
51
|
exec(sql: string, params?: WireValue[]): void;
|
|
44
52
|
readonly statements: readonly SqlStatement[];
|
|
45
53
|
}
|
|
54
|
+
/** The write handle a server mutator runs against — the ASYNC twin of the client's `MutationTx`. It
|
|
55
|
+
* is both the isomorphic {@link ServerWriteTx} logical surface (insert/update/upsert/insertIgnore/
|
|
56
|
+
* delete/row, rendered to dialect SQL) AND the legacy {@link SqlMutationTx} raw escape hatch. Both
|
|
57
|
+
* backends run reads through the OPEN transaction (read-your-writes): the Postgres backend executes
|
|
58
|
+
* everything live; the daemon backend accumulates writes and lazily upgrades to an interactive
|
|
59
|
+
* mutation session at the first read (DAEMON-INTERACTIVE-TXN-DESIGN.md §5). */
|
|
60
|
+
export interface ServerMutationTx extends ServerWriteTx, SqlMutationTx {
|
|
61
|
+
/** Run a full query (a fluent `Query` or its wire `Ast`) INSIDE the open transaction —
|
|
62
|
+
* read-your-writes, like {@link ServerWriteTx.row} but for arbitrary shapes. Returns the
|
|
63
|
+
* parsed nested result tree: an array for a plural root, an object or `null` for a `.one()`
|
|
64
|
+
* root, with cells in their raw SQLite storage-class representations (the same vocabulary
|
|
65
|
+
* `row` speaks). Daemon backend: compiled by `@rindle/query-compiler`'s sqlite dialect (bind
|
|
66
|
+
* params, NO casts — §5.4) and executed through the mutation session. Postgres backend: lands
|
|
67
|
+
* with the read-compiler catalog integration (POSTGRES-READ-COMPILER-DESIGN.md Phase B). */
|
|
68
|
+
query(q: Ast | Query<any, any, any>): Promise<unknown>;
|
|
69
|
+
}
|
|
46
70
|
export type ApiMutatorResult = void | SqlStatement[] | SqlTxn;
|
|
47
|
-
|
|
71
|
+
/** A server mutator: a plain async function against the live {@link ServerMutationTx}. Two ways to
|
|
72
|
+
* write one (MUTATORS-ISOMORPHIC): drive it directly (the raw escape hatch — an owner-gated cascade,
|
|
73
|
+
* a `NOT EXISTS` dedup — plus a returned `SqlStatement[]`/`SqlTxn`), OR delegate to a SHARED generator
|
|
74
|
+
* (the SAME body the client predicts) via {@link runSharedMutation}, keeping only the server-only
|
|
75
|
+
* authority (arg parse, principal, policy) in the wrapper. */
|
|
76
|
+
export type ApiMutator<User, Args> = (tx: ServerMutationTx, args: Args, ctx: MutationContext<User>) => MaybePromise<ApiMutatorResult>;
|
|
48
77
|
export type ApiMutators<User> = Record<string, ApiMutator<User, any>>;
|
|
49
78
|
export interface QueryLeaseRequest<User> {
|
|
50
79
|
user: User;
|
|
@@ -90,6 +119,52 @@ export interface QueryReadResponse {
|
|
|
90
119
|
* so the booting client opens its ws to the same warm follower. Absent ⇒ single-daemon. */
|
|
91
120
|
wsEndpoint?: string;
|
|
92
121
|
}
|
|
122
|
+
/** The context a {@link MutationBackend} needs to run one mutation inside its transaction. */
|
|
123
|
+
export interface MutationRunInput {
|
|
124
|
+
envelope: MutationEnvelope;
|
|
125
|
+
/** Schema-derived render metadata (from {@link RindleApiServerOptions.schema}). A logical op on a
|
|
126
|
+
* table absent here throws loudly — never a silent dropped write. `{}` when no schema is set. */
|
|
127
|
+
render: RenderIndex;
|
|
128
|
+
/** Invoke the (authorized) mutator against the backend-provided tx. A THROW that is NOT a
|
|
129
|
+
* {@link BackendError} is a BUSINESS rejection (roll the data back, then advance `lmid` alone,
|
|
130
|
+
* §2.4); a {@link BackendError} (a DB-layer failure) is INFRA and rejects the returned promise. */
|
|
131
|
+
run(tx: ServerMutationTx): Promise<void>;
|
|
132
|
+
}
|
|
133
|
+
/** The result of {@link MutationBackend.runMutation}: either the data+lmid committed together, or a
|
|
134
|
+
* business rejection whose data was rolled back but whose `lmid` still advanced (§2.4). */
|
|
135
|
+
export type MutationOutcome = {
|
|
136
|
+
accepted: true;
|
|
137
|
+
output: SqlTxnOutput;
|
|
138
|
+
} | {
|
|
139
|
+
accepted: false;
|
|
140
|
+
reason: string;
|
|
141
|
+
output?: unknown;
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* Where a mutation runs and who stamps `lmid` — the seam that makes the mutator authoring surface
|
|
145
|
+
* backend-agnostic (`BYO-POSTGRES-LMID-CONTRACT-DESIGN.md` §6; MUTATORS-ISOMORPHIC plan). Two impls
|
|
146
|
+
* ship: {@link daemonBackend} (the default — writes accumulate, one batch to the daemon which stamps
|
|
147
|
+
* `lmid` co-transactionally) and {@link postgresBackend} (a REAL interactive PG transaction — writes
|
|
148
|
+
* and reads execute live, `lmid` committed in the same txn, confirmation riding the CDC loop down).
|
|
149
|
+
*
|
|
150
|
+
* The load-bearing invariant is that a mutation ALWAYS advances the client's `last_mutation_id`:
|
|
151
|
+
* - `runMutation` runs the mutator inside the backend's transaction; on success it advances `lmid`
|
|
152
|
+
* to `envelope.mid` in the SAME atomic unit (OPTIMISTIC-WRITES-DESIGN.md §8.2); on a BUSINESS
|
|
153
|
+
* rejection it rolls the data back but STILL advances `lmid` (§2.4 — else the client's pending
|
|
154
|
+
* queue never drains and the optimistic stack wedges).
|
|
155
|
+
* - `reject` is the pre-flight path (unknown mutator, failed authorization): NO data, `lmid` alone.
|
|
156
|
+
* - An infrastructure failure THROWS from `runMutation` — never a user rejection (the client
|
|
157
|
+
* retries; mid dedup absorbs any applied prefix).
|
|
158
|
+
*/
|
|
159
|
+
export interface MutationBackend {
|
|
160
|
+
/** The SQL dialect this backend renders logical ops to (drives placeholder style). */
|
|
161
|
+
readonly dialect: SqlDialect;
|
|
162
|
+
runMutation(input: MutationRunInput): Promise<MutationOutcome>;
|
|
163
|
+
reject(input: {
|
|
164
|
+
envelope: MutationEnvelope;
|
|
165
|
+
reason: string;
|
|
166
|
+
}): Promise<unknown>;
|
|
167
|
+
}
|
|
93
168
|
export interface PushMutationRequest<User> {
|
|
94
169
|
user: User;
|
|
95
170
|
envelope: MutationEnvelope;
|
|
@@ -114,6 +189,17 @@ export interface RindleApiRoutes {
|
|
|
114
189
|
query: string;
|
|
115
190
|
read: string;
|
|
116
191
|
mutate: string;
|
|
192
|
+
applyRowChangeTxn: string;
|
|
193
|
+
claimRoomEpoch: string;
|
|
194
|
+
roomLmids: string;
|
|
195
|
+
}
|
|
196
|
+
/** A room-host reply the transport writes VERBATIM (`status` + JSON `body`): the
|
|
197
|
+
* daemon's fence/conflict/identity semantics ride specific statuses and body shapes
|
|
198
|
+
* the room's `httpAuthority` decodes, so this endpoint trio can't run through the
|
|
199
|
+
* throw-on-error result shapes the viewer endpoints use. */
|
|
200
|
+
export interface RoomHostResponse {
|
|
201
|
+
status: number;
|
|
202
|
+
body: unknown;
|
|
117
203
|
}
|
|
118
204
|
/** A named query to keep permanently materialized (warm with zero subscribers). */
|
|
119
205
|
export interface PinnedQuery {
|
|
@@ -129,11 +215,25 @@ export interface PinFanout {
|
|
|
129
215
|
}
|
|
130
216
|
export interface RindleApiServerOptions<User> {
|
|
131
217
|
daemon: RindleDaemonClient;
|
|
218
|
+
/** Where mutations are applied and `lmid` is stamped ({@link MutationBackend}). Default:
|
|
219
|
+
* `daemonBackend(daemon)` — exactly today's behavior. Pass `postgresBackend(...)` when
|
|
220
|
+
* Postgres is the source of truth (the daemon leg then serves only the read side). */
|
|
221
|
+
backend?: MutationBackend;
|
|
222
|
+
/** The typed schema (`createSchema`/`refineSchema`). Required only when a mutator uses the LOGICAL
|
|
223
|
+
* write vocabulary (`tx.insert`/`update`/`upsert`/`insertIgnore`/`delete`/`row`) — it drives the
|
|
224
|
+
* dialect SQL renderer (column order, pk, quoting). A logical op with no schema configured throws
|
|
225
|
+
* loudly. Pure raw-`tx.exec` mutators do not need it. */
|
|
226
|
+
schema?: Schema;
|
|
132
227
|
queries?: ApiQueries<User>;
|
|
133
228
|
runQuery?: RunQuery<User>;
|
|
134
229
|
mutators?: ApiMutators<User>;
|
|
135
230
|
authorizeQuery?: Authorizer<AuthorizeQueryInput<User>>;
|
|
136
231
|
authorizeMutation?: Authorizer<AuthorizeMutationInput<User>>;
|
|
232
|
+
/** The room write-authority gate (§5.3.1): validates the caller is a placed room —
|
|
233
|
+
* the epoch-bound flush credential rides `context.request`, and what it means is
|
|
234
|
+
* the app's to define. The room endpoints are DISABLED (403) until this is set:
|
|
235
|
+
* hosting a write authority is an explicit opt-in, never a default. */
|
|
236
|
+
authorizeRoom?: Authorizer<ApiContext<User>>;
|
|
137
237
|
routes?: Partial<RindleApiRoutes>;
|
|
138
238
|
mode?: StreamMode;
|
|
139
239
|
materializationPolicy?: MaterializationPolicy | ((input: QueryLeaseRequest<User>) => MaybePromise<MaterializationPolicy>);
|
|
@@ -196,6 +296,15 @@ export interface RindleApiServer<User> {
|
|
|
196
296
|
handleReadJson(body: unknown, context: ApiContext<User>): Promise<QueryReadResponse>;
|
|
197
297
|
/** Accepts `{envelope}` (one) or `{envelopes: [...]}` (an in-order batch → array reply). */
|
|
198
298
|
handleMutateJson(body: unknown, context: ApiContext<User>): Promise<PushMutationResponse | PushMutationResponse[]>;
|
|
299
|
+
/** The room's flush (§5.3.1): gate on `authorizeRoom`, forward the txn to the write
|
|
300
|
+
* authority, and pass the store's verdict through VERBATIM — `200 {applied, cv}`,
|
|
301
|
+
* `409 {error:"fenced"|"conflict", …}`, or the loud identity `500`. Write
|
|
302
|
+
* `status` + `body` as-is; the room's `httpAuthority` decodes them. */
|
|
303
|
+
handleApplyRowChangeTxnJson(body: unknown, context: ApiContext<User>): Promise<RoomHostResponse>;
|
|
304
|
+
/** Claim the next placement epoch for a doc (§2.5), same gate + envelope. */
|
|
305
|
+
handleClaimRoomEpochJson(body: unknown, context: ApiContext<User>): Promise<RoomHostResponse>;
|
|
306
|
+
/** The room's boot probe (§3.3), same gate + envelope. */
|
|
307
|
+
handleRoomLmidsJson(body: unknown, context: ApiContext<User>): Promise<RoomHostResponse>;
|
|
199
308
|
}
|
|
200
309
|
export type RindleApiErrorCode = "bad-request" | "forbidden" | "not-found" | "rejected";
|
|
201
310
|
export declare class RindleApiError extends Error {
|
|
@@ -227,12 +336,113 @@ export declare class SplitDaemonClient implements RindleDaemonClient {
|
|
|
227
336
|
executeSqlTxn(input: SqlTxn): Promise<SqlTxnOutput>;
|
|
228
337
|
executeSqlRead(input: SqlRead): Promise<SqlReadOutput>;
|
|
229
338
|
rejectMutation(input: MutationRejection): Promise<MutationRejectionOutput>;
|
|
339
|
+
beginMutationSession(input: MutationSessionBegin): Promise<MutationSessionBeginOutput>;
|
|
340
|
+
execInMutationSession(input: MutationSessionExec): Promise<unknown>;
|
|
341
|
+
queryInMutationSession(input: MutationSessionQuery): Promise<SqlReadOutput>;
|
|
342
|
+
commitMutationSession(input: MutationSessionRef): Promise<SqlTxnOutput>;
|
|
343
|
+
rollbackMutationSession(input: MutationSessionRef): Promise<unknown>;
|
|
230
344
|
applyRowChangeTxn(input: RowChangeTxn): Promise<RowChangeTxnOutput>;
|
|
345
|
+
claimRoomEpoch(input: ClaimRoomEpochInput): Promise<ClaimRoomEpochOutput>;
|
|
346
|
+
roomLmids(input: RoomLmidsInput): Promise<RoomLmidsOutput>;
|
|
231
347
|
migrate(input: MigrateInput): Promise<MigrateOutput>;
|
|
232
348
|
materialize(input: MaterializeInput): Promise<MaterializeOutput>;
|
|
233
349
|
query(input: QueryOnceInput): Promise<QueryOnceOutput>;
|
|
234
350
|
dematerialize(input: DematerializeInput): Promise<DematerializeOutput>;
|
|
235
351
|
}
|
|
352
|
+
/** A SQL dialect for the logical mutation renderer. */
|
|
353
|
+
export interface SqlDialect {
|
|
354
|
+
readonly name: "sqlite" | "postgres";
|
|
355
|
+
/** Render the i-th (1-based) bind placeholder. sqlite: `?`; postgres: `$i`. */
|
|
356
|
+
placeholder(oneBased: number): string;
|
|
357
|
+
/** Optional value coercion hook (e.g. a future SQLite `0/1` boolean). Default: identity. */
|
|
358
|
+
encodeValue?(v: WireValue, type: ColType): WireValue;
|
|
359
|
+
}
|
|
360
|
+
export declare const sqliteDialect: SqlDialect;
|
|
361
|
+
export declare const postgresDialect: SqlDialect;
|
|
362
|
+
/** Per-table metadata the renderer needs (all reachable from a `TableMeta`). */
|
|
363
|
+
export interface TableRenderMeta {
|
|
364
|
+
/** Columns in schema (wire) order — the stable INSERT column list + completeness check. */
|
|
365
|
+
columns: string[];
|
|
366
|
+
/** Primary-key column NAMES — the WHERE / ON CONFLICT target / SET partition. */
|
|
367
|
+
pkNames: string[];
|
|
368
|
+
/** Column name → declared type (only consulted by {@link SqlDialect.encodeValue}). */
|
|
369
|
+
types: Record<string, ColType>;
|
|
370
|
+
}
|
|
371
|
+
export type RenderIndex = Record<string, TableRenderMeta>;
|
|
372
|
+
/** Build the {@link RenderIndex} from a typed schema (`schema.tables[name]` is a `TableMeta`). */
|
|
373
|
+
export declare function buildRenderIndex(schema: Schema): RenderIndex;
|
|
374
|
+
/** Render one {@link MutationOp} to a `{sql, params}` for the dialect, or `null` for a no-op (an
|
|
375
|
+
* `update` whose row names only pk columns — nothing to SET, matching the client's no-op edit). */
|
|
376
|
+
export declare function renderOp(op: MutationOp, meta: TableRenderMeta, dialect: SqlDialect): SqlStatement | null;
|
|
377
|
+
/** Render a point read (`tx.row`) — `SELECT <cols> FROM "T" WHERE <pk>` — for read-your-writes. */
|
|
378
|
+
export declare function renderPointRead(table: string, pk: KeyedRow, meta: TableRenderMeta, dialect: SqlDialect): SqlStatement;
|
|
379
|
+
/** Thrown (wrapping the driver error) by a server tx's DB calls, so the seam can tell an INFRA
|
|
380
|
+
* failure (retry) from a mutator-body throw (business rejection). */
|
|
381
|
+
export declare class BackendError extends Error {
|
|
382
|
+
readonly driverError: unknown;
|
|
383
|
+
constructor(driverError: unknown);
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* The default {@link MutationBackend}. A pure-write mutator keeps the historical shape: writes
|
|
387
|
+
* ACCUMULATE and ship as ONE batch to `/execute-sql-txn`, which stamps `lmid` co-transactionally
|
|
388
|
+
* (and `/reject-mutation` advances it past a rejected mid) — byte-identical behavior. A
|
|
389
|
+
* READ-bearing mutator lazily upgrades to an interactive mutation session
|
|
390
|
+
* (DAEMON-INTERACTIVE-TXN-DESIGN.md): reads are read-your-writes through the open transaction
|
|
391
|
+
* (PG parity), the commit stamps `lmid` in the same atomic unit, and a begin-absorbed replay
|
|
392
|
+
* short-circuits without re-running the body.
|
|
393
|
+
*/
|
|
394
|
+
export declare function daemonBackend(daemon: RindleDaemonClient): MutationBackend;
|
|
395
|
+
/** The query surface a {@link PostgresPlugger} transaction exposes. `exec` runs one statement;
|
|
396
|
+
* `query` returns rows keyed by column name (read-your-own-writes inside the txn). */
|
|
397
|
+
export interface PgQuery {
|
|
398
|
+
exec(sql: string, params?: unknown[]): Promise<void>;
|
|
399
|
+
query(sql: string, params?: unknown[]): Promise<Array<Record<string, unknown>>>;
|
|
400
|
+
}
|
|
401
|
+
/** The thin driver adapter that keeps `pg` / `postgres.js` out of this package's dependencies
|
|
402
|
+
* (`BYO-POSTGRES-LMID-CONTRACT-DESIGN.md` §6.2): run `fn` inside ONE transaction — commit on
|
|
403
|
+
* resolve, roll back on throw. {@link pgPoolPlugger} adapts a node-postgres `Pool`. */
|
|
404
|
+
export interface PostgresPlugger {
|
|
405
|
+
transaction<T>(fn: (q: PgQuery) => Promise<T>): Promise<T>;
|
|
406
|
+
}
|
|
407
|
+
export interface PostgresBackendOptions {
|
|
408
|
+
/** Rewrite each MUTATOR statement's SQL before it runs (never the lmid upsert). The intended
|
|
409
|
+
* use is dialect bridging for a dual-topology app whose mutators are written SQLite-style:
|
|
410
|
+
* pass {@link questionToDollarParams} to convert `?` placeholders to `$1..$n`. */
|
|
411
|
+
rewriteSql?: (sql: string) => string;
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* The BYO-Postgres {@link MutationBackend} (`BYO-POSTGRES-LMID-CONTRACT-DESIGN.md` §6.3): one PG
|
|
415
|
+
* transaction runs the mutator's statements and ALWAYS upserts `_rindle_client_mutations` —
|
|
416
|
+
* the upsert sits outside any acceptance guard by construction, so the §2.4 footgun (a rejection
|
|
417
|
+
* that forgets to advance `lmid` and wedges the client's pending queue) cannot be written.
|
|
418
|
+
*
|
|
419
|
+
* Confirmation does NOT come from this call's response: the lmid row rides the same PG commit
|
|
420
|
+
* through CDC → relay → follower and reaches the client in the same coherent release as the
|
|
421
|
+
* data (§8.2 relocated upstream). A rejection's `reason` still returns on the HTTP reply, but
|
|
422
|
+
* nothing rejection-shaped travels the replication path — the optimistic prediction snaps back
|
|
423
|
+
* when the advanced `lmid` arrives.
|
|
424
|
+
*/
|
|
425
|
+
export declare function postgresBackend(plugger: PostgresPlugger, opts?: PostgresBackendOptions): MutationBackend;
|
|
426
|
+
/** The slice of a node-postgres `Pool` the plugger needs — structural, so `pg` stays a
|
|
427
|
+
* dependency of the APP, never of this package. */
|
|
428
|
+
export interface PgPoolLike {
|
|
429
|
+
connect(): Promise<{
|
|
430
|
+
query(sql: string, params?: unknown[]): Promise<{
|
|
431
|
+
rows: Array<Record<string, unknown>>;
|
|
432
|
+
}>;
|
|
433
|
+
release(err?: unknown): void;
|
|
434
|
+
}>;
|
|
435
|
+
}
|
|
436
|
+
/** Adapt a node-postgres `Pool` (or anything pool-shaped) to a {@link PostgresPlugger}:
|
|
437
|
+
* one client per transaction, `BEGIN`/`COMMIT` bracketing, `ROLLBACK` + rethrow on failure. */
|
|
438
|
+
export declare function pgPoolPlugger(pool: PgPoolLike): PostgresPlugger;
|
|
439
|
+
/**
|
|
440
|
+
* Rewrite SQLite-style `?` positional placeholders to Postgres `$1..$n`, for mutators written
|
|
441
|
+
* once and run against either backend (pass as {@link PostgresBackendOptions.rewriteSql}).
|
|
442
|
+
* Skips `'…'` string literals (with `''` escapes), `"…"` quoted identifiers, `--` line comments,
|
|
443
|
+
* and non-nested C-style block comments. Do not mix `?` and `$n` styles in one statement.
|
|
444
|
+
*/
|
|
445
|
+
export declare function questionToDollarParams(sql: string): string;
|
|
236
446
|
export declare function defineApiQueries<User, Q extends ApiQueries<User>>(queries: Q): Q;
|
|
237
447
|
/**
|
|
238
448
|
* Register a list of co-located client {@link NamedQuery `defineQuery`} values as the server's query
|
|
@@ -254,6 +464,72 @@ export declare function defineApiQueries<User, Q extends ApiQueries<User>>(queri
|
|
|
254
464
|
*/
|
|
255
465
|
export declare function registerQueries<User>(queries: readonly NamedQuery<any, any, any>[]): ApiQueries<User>;
|
|
256
466
|
export declare function defineApiMutators<User, M extends ApiMutators<User>>(mutators: M): M;
|
|
467
|
+
/**
|
|
468
|
+
* Bulk-register a SHARED (generator) mutator registry as server mutators — the mutator twin of
|
|
469
|
+
* {@link registerQueries} (which does the same for co-located `defineQuery` values). Each shared
|
|
470
|
+
* mutator carries its own arg validator (`shared(schema, gen)`), so this wraps every one with the
|
|
471
|
+
* UNIVERSAL server triad and nothing else: parse the UNTRUSTED wire args (its `.args`), map the server
|
|
472
|
+
* {@link MutationContext} to the shared {@link MutatorCtx} principal, and drive the SAME body the
|
|
473
|
+
* client predicts ({@link runSharedMutation}). The point is that a shared mutator whose server run
|
|
474
|
+
* adds NO authority beyond that triad needs no hand-written wrapper.
|
|
475
|
+
*
|
|
476
|
+
* Server-only AUTHORITY the client cannot predict (a title guard, an owner-gated cascade, a
|
|
477
|
+
* `NOT EXISTS` dedup) stays an explicit {@link ApiMutator} that OVERRIDES the auto-wrapped default —
|
|
478
|
+
* spread this first, then the overrides win by key:
|
|
479
|
+
*
|
|
480
|
+
* ```ts
|
|
481
|
+
* mutators: defineApiMutators({
|
|
482
|
+
* ...sharedApiMutators(sharedMutators, (ctx) => ({ user: requireUser(ctx.user) })),
|
|
483
|
+
* createIssue: withTitleGuard(sharedMutators.createIssue), // + server-only policy
|
|
484
|
+
* deleteIssue: async (tx, raw, ctx) => { ... }, // raw owner-gated cascade
|
|
485
|
+
* }),
|
|
486
|
+
* ```
|
|
487
|
+
*/
|
|
488
|
+
export declare function sharedApiMutators<User>(registry: Record<string, SharedMutatorWithArgs<any>>, principal: (ctx: MutationContext<User>) => MutatorCtx): ApiMutators<User>;
|
|
257
489
|
export declare function queryResultToAst(result: ApiQueryResult): Ast;
|
|
490
|
+
/** One exemplar invocation for {@link dumpQueryShapes} — the `args`/`user` a query is built with.
|
|
491
|
+
* Literal values never matter to the dump (shapes are deduped with literals stripped); what an
|
|
492
|
+
* exemplar buys is BRANCH coverage, so supply one per code path a query function can take
|
|
493
|
+
* (an optional filter present/absent, each enum axis, …). */
|
|
494
|
+
export interface ShapeExemplar<User = unknown> {
|
|
495
|
+
args?: unknown;
|
|
496
|
+
user?: User;
|
|
497
|
+
}
|
|
498
|
+
/** The query-shapes document `rindle indices suggest` consumes: the app's synced tables (name +
|
|
499
|
+
* primary key) and one wire AST per structurally distinct shape a registered query can build. */
|
|
500
|
+
export interface QueryShapesDoc {
|
|
501
|
+
tables: Array<{
|
|
502
|
+
name: string;
|
|
503
|
+
primaryKey: string[];
|
|
504
|
+
}>;
|
|
505
|
+
queries: Array<{
|
|
506
|
+
name: string;
|
|
507
|
+
ast: Ast;
|
|
508
|
+
}>;
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Dump every registered named query's wire AST — feeder 1 ("exemplar enumeration") of
|
|
512
|
+
* `rindle indices suggest` (docs/INDEXING.md applied mechanically to the query set).
|
|
513
|
+
*
|
|
514
|
+
* Because named queries are FUNCTIONS of `(args, ctx)`, one query can build structurally
|
|
515
|
+
* different ASTs on different args; each exemplar invocation contributes its shape, and shapes
|
|
516
|
+
* that differ only in literal values (a limit, a filter string) dedupe to one entry. A query
|
|
517
|
+
* with no configured exemplars is invoked once with no args. The registry is the app's whole
|
|
518
|
+
* server-side query surface, so the resulting document is the complete static shape set —
|
|
519
|
+
* modulo arg-value-dependent branches, which need an exemplar (or runtime shape recording) to
|
|
520
|
+
* surface.
|
|
521
|
+
*/
|
|
522
|
+
export declare function dumpQueryShapes<User>(opts: {
|
|
523
|
+
schema: Schema;
|
|
524
|
+
queries: ApiQueries<User>;
|
|
525
|
+
exemplars?: Partial<Record<string, ReadonlyArray<ShapeExemplar<User>>>>;
|
|
526
|
+
}): Promise<QueryShapesDoc>;
|
|
258
527
|
export declare function createRindleApiServer<User = unknown>(opts: RindleApiServerOptions<User>): RindleApiServer<User>;
|
|
528
|
+
/** Run a SHARED generator mutator (the SAME body the client predicts) against a live server
|
|
529
|
+
* transaction (MUTATORS-ISOMORPHIC): bind the tier-agnostic {@link isoTx} factory and drive it —
|
|
530
|
+
* each yielded logical op renders + runs against `tx` (dialect SQL, per backend), each `tx.row`
|
|
531
|
+
* suspends for read-your-writes, and `tx.all` fans out. A server mutator uses this to delegate its
|
|
532
|
+
* write body after parsing untrusted args and applying its server-only authority (principal, policy).
|
|
533
|
+
* A mutator-body throw remains a business rejection; a DB failure propagates as infra. */
|
|
534
|
+
export declare function runSharedMutation<Args, Ctx extends MutatorCtx>(mutator: SharedMutator<Args, Ctx>, args: Args, ctx: Ctx, tx: ServerMutationTx): Promise<void>;
|
|
259
535
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,UAAU,EACV,SAAS,EACV,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,yBAAyB;;;;CAI5B,CAAC;AAEX,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAEjD,MAAM,WAAW,UAAU,CAAC,IAAI;IAC9B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACxD,MAAM,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK,YAAY,CAAC,cAAc,CAAC,CAAC;AACvG,MAAM,MAAM,UAAU,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAEnE,MAAM,WAAW,aAAa,CAAC,IAAI;IACjC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,cAAc,CAAC,CAAC;AAE1F,MAAM,WAAW,mBAAmB,CAAC,IAAI;IACvC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB,CAAC,IAAI;IAC1C,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAEvE,MAAM,WAAW,eAAe,CAAC,IAAI;IACnC,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,SAAS,YAAY,EAAE,CAAC;CAC9C;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC;AAC9D,MAAM,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,IAAI,CACnC,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,KACvB,YAAY,CAAC,gBAAgB,CAAC,CAAC;AACpC,MAAM,MAAM,WAAW,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAEtE,MAAM,WAAW,iBAAiB,CAAC,IAAI;IACrC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;oDAEgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;6FACyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;mFACmF;AACnF,MAAM,WAAW,gBAAgB,CAAC,IAAI;IACpC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;0EAEsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;mGACmG;AACnG,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;gGAC4F;IAC5F,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB,CAAC,IAAI;IACvC,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB,CAAC,IAAI;IACxC,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACzD;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;sFAGsF;AACtF,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,sBAAsB,CAAC,IAAI;IAC1C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,cAAc,CAAC,EAAE,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,iBAAiB,CAAC,EAAE,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qBAAqB,CAAC,EAClB,qBAAqB,GACrB,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;kEAI8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC1F;;;;;;;;;iBASa;IACb,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC7F;;;;;gBAKY;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;mGAE+F;IAC/F,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;IAC9B;yDACqD;IACrD,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,eAAe,CAAC,IAAI;IACnC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9E;;;kGAG8F;IAC9F,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,YAAY,CAAC,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC9E;;;+FAG2F;IAC3F,aAAa,CAAC,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAClF;;;;yGAIqG;IACrG,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACrE,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvF,0EAA0E;IAC1E,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACrF,4FAA4F;IAC5F,gBAAgB,CACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,GACxB,OAAO,CAAC,oBAAoB,GAAG,oBAAoB,EAAE,CAAC,CAAC;CAC3D;AAED,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;AAExF,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAMtE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;gBAE/B,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB;IAMjE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAKnD,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAKtD,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAG1E,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAGnE,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAKpD,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAGhE,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAGtD,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAGvE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAEhF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CASrG;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,CAAC,SAAS,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAEnF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,GAAG,CAK5D;AAED,wBAAgB,qBAAqB,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAsM/G"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,GAAG,EACH,OAAO,EAEP,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,UAAU,EACV,KAAK,EACL,MAAM,EACN,aAAa,EACb,qBAAqB,EACrB,aAAa,EACd,MAAM,gBAAgB,CAAC;AAIxB,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,UAAU,EACV,SAAS,EACV,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEtH,eAAO,MAAM,yBAAyB;;;;;;;CAS5B,CAAC;AAEX,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAEjD,MAAM,WAAW,UAAU,CAAC,IAAI;IAC9B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACxD,MAAM,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK,YAAY,CAAC,cAAc,CAAC,CAAC;AACvG,MAAM,MAAM,UAAU,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAEnE,MAAM,WAAW,aAAa,CAAC,IAAI;IACjC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,cAAc,CAAC,CAAC;AAE1F,MAAM,WAAW,mBAAmB,CAAC,IAAI;IACvC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB,CAAC,IAAI;IAC1C,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAEvE,MAAM,WAAW,eAAe,CAAC,IAAI;IACnC,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;iGAEiG;AACjG,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,SAAS,YAAY,EAAE,CAAC;CAC9C;AAED;;;;;gFAKgF;AAChF,MAAM,WAAW,gBAAiB,SAAQ,aAAa,EAAE,aAAa;IACpE;;;;;;iGAM6F;IAC7F,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxD;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC;AAC9D;;;;+DAI+D;AAC/D,MAAM,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,IAAI,CACnC,EAAE,EAAE,gBAAgB,EACpB,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,KACvB,YAAY,CAAC,gBAAgB,CAAC,CAAC;AACpC,MAAM,MAAM,WAAW,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAEtE,MAAM,WAAW,iBAAiB,CAAC,IAAI;IACrC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;oDAEgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;6FACyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;mFACmF;AACnF,MAAM,WAAW,gBAAgB,CAAC,IAAI;IACpC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;0EAEsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;mGACmG;AACnG,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;gGAC4F;IAC5F,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,8FAA8F;AAC9F,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B;sGACkG;IAClG,MAAM,EAAE,WAAW,CAAC;IACpB;;wGAEoG;IACpG,GAAG,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED;4FAC4F;AAC5F,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACxC;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,eAAe;IAC9B,sFAAsF;IACtF,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/D,MAAM,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,mBAAmB,CAAC,IAAI;IACvC,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB,CAAC,IAAI;IACxC,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACzD;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;6DAG6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAED,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;sFAGsF;AACtF,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,sBAAsB,CAAC,IAAI;IAC1C,MAAM,EAAE,kBAAkB,CAAC;IAC3B;;2FAEuF;IACvF,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;;8DAG0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,cAAc,CAAC,EAAE,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,iBAAiB,CAAC,EAAE,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D;;;4EAGwE;IACxE,aAAa,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qBAAqB,CAAC,EAClB,qBAAqB,GACrB,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;kEAI8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC1F;;;;;;;;;iBASa;IACb,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC7F;;;;;gBAKY;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;mGAE+F;IAC/F,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;IAC9B;yDACqD;IACrD,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,eAAe,CAAC,IAAI;IACnC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9E;;;kGAG8F;IAC9F,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,YAAY,CAAC,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC9E;;;+FAG2F;IAC3F,aAAa,CAAC,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAClF;;;;yGAIqG;IACrG,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACrE,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvF,0EAA0E;IAC1E,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACrF,4FAA4F;IAC5F,gBAAgB,CACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,GACxB,OAAO,CAAC,oBAAoB,GAAG,oBAAoB,EAAE,CAAC,CAAC;IAC1D;;;4EAGwE;IACxE,2BAA2B,CACzB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7B,6EAA6E;IAC7E,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9F,0DAA0D;IAC1D,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC1F;AAED,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;AAExF,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAMtE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;gBAE/B,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB;IAMjE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAKnD,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAKtD,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAK1E,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAKtF,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnE,sBAAsB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;IAK3E,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAKvE,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAKpE,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAGnE,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAKzE,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAK1D,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAKpD,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAGhE,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAGtD,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAGvE;AASD,uDAAuD;AACvD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IACrC,+EAA+E;IAC/E,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,4FAA4F;IAC5F,WAAW,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;CACtD;AAED,eAAO,MAAM,aAAa,EAAE,UAAuD,CAAC;AACpF,eAAO,MAAM,eAAe,EAAE,UAA8D,CAAC;AAE7F,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,2FAA2F;IAC3F,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iFAAiF;IACjF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAE1D,kGAAkG;AAClG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAW5D;AAiCD;oGACoG;AACpG,wBAAgB,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI,CAuCxG;AAED,mGAAmG;AACnG,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,GAAG,YAAY,CASrH;AAYD;sEACsE;AACtE,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;gBAClB,WAAW,EAAE,OAAO;CAKjC;AA0TD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,eAAe,CAuCzE;AAED;uFACuF;AACvF,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CACjF;AAED;;wFAEwF;AACxF,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,sBAAsB;IACrC;;uFAEmF;IACnF,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACtC;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,GAAE,sBAA2B,GAAG,eAAe,CAuC5G;AAED;oDACoD;AACpD,MAAM,WAAW,UAAU;IACzB,OAAO,IAAI,OAAO,CAAC;QACjB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;YAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;SAAE,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;KAC9B,CAAC,CAAC;CACJ;AAED;gGACgG;AAChG,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,CA2B/D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAuC1D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAEhF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CASrG;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,CAAC,SAAS,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAEnF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,EACpD,SAAS,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,UAAU,GACpD,WAAW,CAAC,IAAI,CAAC,CAMnB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,GAAG,CAK5D;AAED;;;8DAG8D;AAC9D,MAAM,WAAW,aAAa,CAAC,IAAI,GAAG,OAAO;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED;kGACkG;AAClG,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACtD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;CAC5C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;CACzE,GAAG,OAAO,CAAC,cAAc,CAAC,CAkB1B;AA+CD,wBAAgB,qBAAqB,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CA+Q/G;AAED;;;;;2FAK2F;AAC3F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,SAAS,UAAU,EAC5D,OAAO,EAAE,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,EACjC,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,gBAAgB,GACnB,OAAO,CAAC,IAAI,CAAC,CAKf"}
|