pyric 0.1.0-alpha.26 → 0.1.0-alpha.27
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 +1 -1
- package/dist/database/connection-lifecycle.d.ts.map +1 -1
- package/dist/database/connection-lifecycle.js +10 -6
- package/dist/database/connection-lifecycle.js.map +1 -1
- package/dist/database/replay.d.ts +53 -1
- package/dist/database/replay.d.ts.map +1 -1
- package/dist/database/replay.js +236 -66
- package/dist/database/replay.js.map +1 -1
- package/dist/database/sandbox/backend.d.ts +5 -0
- package/dist/database/sandbox/backend.d.ts.map +1 -1
- package/dist/database/sandbox/backend.js +15 -0
- package/dist/database/sandbox/backend.js.map +1 -1
- package/dist/database/sandbox/child-listeners.d.ts.map +1 -1
- package/dist/database/sandbox/child-listeners.js +2 -0
- package/dist/database/sandbox/child-listeners.js.map +1 -1
- package/dist/database/sandbox/priority-writes.d.ts +4 -0
- package/dist/database/sandbox/priority-writes.d.ts.map +1 -1
- package/dist/database/sandbox/priority-writes.js +16 -3
- package/dist/database/sandbox/priority-writes.js.map +1 -1
- package/dist/database/sandbox/write-plane.d.ts +32 -0
- package/dist/database/sandbox/write-plane.d.ts.map +1 -1
- package/dist/database/sandbox/write-plane.js +91 -18
- package/dist/database/sandbox/write-plane.js.map +1 -1
- package/dist/rules/internal/rtdb.d.ts +3 -2
- package/dist/rules/internal/rtdb.d.ts.map +1 -1
- package/dist/rules/internal/rtdb.js +2 -1
- package/dist/rules/internal/rtdb.js.map +1 -1
- package/dist/rules/rtdb/simulation/handler.d.ts +9 -0
- package/dist/rules/rtdb/simulation/handler.d.ts.map +1 -1
- package/dist/rules/rtdb/simulation/handler.js +1 -1
- package/dist/rules/rtdb/simulation/handler.js.map +1 -1
- package/package.json +1 -1
- package/src/database/connection-lifecycle.ts +9 -11
- package/src/database/replay.ts +278 -72
- package/src/database/sandbox/backend.ts +13 -0
- package/src/database/sandbox/child-listeners.ts +2 -0
- package/src/database/sandbox/priority-writes.ts +18 -3
- package/src/database/sandbox/write-plane.ts +97 -19
- package/src/rules/internal/rtdb.ts +3 -1
- package/src/rules/rtdb/simulation/handler.ts +1 -1
package/README.md
CHANGED
|
@@ -149,7 +149,7 @@ Development sessions capture Firestore and Realtime Database operations in `.pyr
|
|
|
149
149
|
npx pyric verify
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
-
The default engine runs locally.
|
|
152
|
+
The default engine runs locally. For production-authority verification, the optional Firestore Rules Test API engine sends derived rule cases to Google's hosted evaluator, and the optional `--engine staging` replays a Realtime Database session against a real instance you provide. They verify rules without deploying to a live app. See [verify against a captured session](packages/site-docs/src/content/ship/ship-to-production.md).
|
|
153
153
|
|
|
154
154
|
## Ship the same application code
|
|
155
155
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-lifecycle.d.ts","sourceRoot":"","sources":["../../src/database/connection-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAErG,qBAAa,uBAAuB;IAQhC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IATxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkC;IAC7D,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwC;IAC5E,OAAO,CAAC,eAAe,CAAS;gBAGb,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,SAAS,EACrB,KAAK,EAAE,OAAO;IAKjC,OAAO,CAAC,gBAAgB;IAQxB,QAAQ,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"connection-lifecycle.d.ts","sourceRoot":"","sources":["../../src/database/connection-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAErG,qBAAa,uBAAuB;IAQhC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IATxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkC;IAC7D,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwC;IAC5E,OAAO,CAAC,eAAe,CAAS;gBAGb,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,SAAS,EACrB,KAAK,EAAE,OAAO;IAKjC,OAAO,CAAC,gBAAgB;IAQxB,QAAQ,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBvD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnC,KAAK,IAAI,IAAI;IAKb,SAAS,IAAI,IAAI;IAQjB,QAAQ,IAAI,IAAI;IAKhB,iBAAiB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAO9D,OAAO,CAAC,SAAS;IAOjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAoEvB"}
|
|
@@ -27,14 +27,18 @@ export class RtdbConnectionLifecycle {
|
|
|
27
27
|
try {
|
|
28
28
|
const requiresRules = !this.admin;
|
|
29
29
|
if (requiresRules) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
// Decided when registered, as production decides it, and recorded as
|
|
31
|
+
// an `onDisconnect.*` operation so a captured session carries it.
|
|
32
|
+
if (operation.kind === 'update') {
|
|
33
|
+
this.backend.registerDisconnect(this.auth(), { kind: 'update', path: operation.path, values: operation.values });
|
|
34
|
+
}
|
|
35
|
+
else if (operation.kind === 'remove') {
|
|
36
|
+
this.backend.registerDisconnect(this.auth(), { kind: 'remove', path: operation.path });
|
|
33
37
|
}
|
|
34
38
|
else {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
this.backend.registerDisconnect(this.auth(), {
|
|
40
|
+
kind: 'set', path: operation.path, value: operation.value, priority: operation.priority ?? null,
|
|
41
|
+
});
|
|
38
42
|
}
|
|
39
43
|
}
|
|
40
44
|
this.operations.set(operation);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-lifecycle.js","sourceRoot":"","sources":["../../src/database/connection-lifecycle.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAA4B,MAAM,iCAAiC,CAAC;AAErG,MAAM,OAAO,uBAAuB;IAQf;IACA;IACA;IATF,UAAU,GAAG,IAAI,wBAAwB,EAAE,CAAC;IACrD,QAAQ,GAAyB,IAAI,CAAC;IACtC,MAAM,GAAG,IAAI,CAAC;IACL,mBAAmB,GAAG,IAAI,GAAG,EAA6B,CAAC;IACpE,eAAe,CAAS;IAEhC,YACmB,OAAoB,EACpB,IAAqB,EACrB,KAAc;QAFd,YAAO,GAAP,OAAO,CAAa;QACpB,SAAI,GAAJ,IAAI,CAAiB;QACrB,UAAK,GAAL,KAAK,CAAS;QAE/B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAC3D,CAAC;IAEO,gBAAgB;QACtB,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;QAC5F,IAAI,mBAAmB;YAAE,OAAO;QAChC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;IAChE,CAAC;IAED,QAAQ,CAAC,SAA8B;QACrC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAClC,IAAI,aAAa,EAAE,CAAC;gBAClB,
|
|
1
|
+
{"version":3,"file":"connection-lifecycle.js","sourceRoot":"","sources":["../../src/database/connection-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Sandbox, type SandboxEvent } from '../sandbox/index.js';
|
|
1
|
+
import { type Sandbox, type SandboxCommitEvent, type SandboxEvent, type SandboxOperationEvent } from '../sandbox/index.js';
|
|
2
2
|
export interface RtdbReplayOptions {
|
|
3
3
|
rules: {
|
|
4
4
|
rules: Record<string, unknown>;
|
|
@@ -27,11 +27,22 @@ export interface RtdbReplayResult {
|
|
|
27
27
|
replayedState: unknown;
|
|
28
28
|
divergences: RtdbReplayDivergence[];
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* A divergence replay found. `step` is the index, in `rtdbReplaySteps`, of the
|
|
32
|
+
* captured step it came from; a `state-drift` has none.
|
|
33
|
+
*/
|
|
30
34
|
export type RtdbReplayDivergence = {
|
|
35
|
+
step?: number;
|
|
36
|
+
} & ({
|
|
31
37
|
kind: 'now-denied';
|
|
32
38
|
path?: string;
|
|
33
39
|
method?: string;
|
|
34
40
|
reason?: string;
|
|
41
|
+
} | {
|
|
42
|
+
kind: 'now-allowed';
|
|
43
|
+
path?: string;
|
|
44
|
+
method?: string;
|
|
45
|
+
reason?: string;
|
|
35
46
|
} | {
|
|
36
47
|
kind: 'state-drift';
|
|
37
48
|
path?: string;
|
|
@@ -42,6 +53,47 @@ export type RtdbReplayDivergence = {
|
|
|
42
53
|
path?: string;
|
|
43
54
|
method?: string;
|
|
44
55
|
reason: string;
|
|
56
|
+
});
|
|
57
|
+
/**
|
|
58
|
+
* One captured event of an instance, as replay judges it. Every engine that
|
|
59
|
+
* checks a capture walks these in order, so they agree on which events carry
|
|
60
|
+
* a claim the candidate rules must keep:
|
|
61
|
+
*
|
|
62
|
+
* - `app-commit`: a write an application user made and the rules allowed.
|
|
63
|
+
* - `admin-commit`: an admin write; context, not checked.
|
|
64
|
+
* - `allowed-read`: a `get` or listener attach the rules allowed.
|
|
65
|
+
* - `denial`: an operation by an application user the rules denied.
|
|
66
|
+
* - `allowed-registration`: an `onDisconnect` registration the rules allowed.
|
|
67
|
+
*/
|
|
68
|
+
export type RtdbReplayStep = {
|
|
69
|
+
kind: 'app-commit';
|
|
70
|
+
event: SandboxCommitEvent;
|
|
71
|
+
} | {
|
|
72
|
+
kind: 'admin-commit';
|
|
73
|
+
event: SandboxCommitEvent;
|
|
74
|
+
} | {
|
|
75
|
+
kind: 'allowed-read';
|
|
76
|
+
event: SandboxOperationEvent;
|
|
77
|
+
} | {
|
|
78
|
+
kind: 'denial';
|
|
79
|
+
event: SandboxOperationEvent;
|
|
80
|
+
} | {
|
|
81
|
+
kind: 'allowed-registration';
|
|
82
|
+
event: SandboxOperationEvent;
|
|
45
83
|
};
|
|
84
|
+
/** The captured events of `instance` (name or URL; absent is the default instance), in order, as replay judges them. */
|
|
85
|
+
export declare function rtdbReplaySteps(events: readonly SandboxEvent[], instance?: string): RtdbReplayStep[];
|
|
86
|
+
/**
|
|
87
|
+
* The tree `instance` held when the session began: `capturedState`, the tree
|
|
88
|
+
* the session left it with, with the session's commits rewound. Priorities the
|
|
89
|
+
* rewind restores (a session write that replaced a prioritized node records
|
|
90
|
+
* its prior priority) appear as `.priority` keys, the export format the
|
|
91
|
+
* Realtime Database REST API reads; a prioritized leaf becomes
|
|
92
|
+
* `{ ".value": v, ".priority": p }`. A priority the capture never saw is not
|
|
93
|
+
* carried.
|
|
94
|
+
*/
|
|
95
|
+
export declare function rewoundRtdbTree(events: readonly SandboxEvent[], capturedState: unknown, instance?: string): Promise<unknown>;
|
|
96
|
+
/** The paths where `actual` differs from `expected`, as `state-drift` divergences. */
|
|
97
|
+
export declare function rtdbStateDrift(expected: unknown, actual: unknown): RtdbReplayDivergence[];
|
|
46
98
|
export declare function replay(events: readonly SandboxEvent[], opts: RtdbReplayOptions): Promise<RtdbReplayResult>;
|
|
47
99
|
//# sourceMappingURL=replay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/database/replay.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/database/replay.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAoB7B,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC1C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,CACnD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEP;;;;;;;;;;GAUG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,CAAC;AAEnE,wHAAwH;AACxH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,CAapG;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,aAAa,EAAE,OAAO,EACtB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAYlB;AA2BD,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,oBAAoB,EAAE,CAIzF;AAED,wBAAsB,MAAM,CAC1B,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAuC3B"}
|
package/dist/database/replay.js
CHANGED
|
@@ -1,9 +1,81 @@
|
|
|
1
1
|
import { assertCompleteHistory } from '../sandbox/internal/history-integrity.js';
|
|
2
2
|
import { getClock, initializeSandbox, } from '../sandbox/index.js';
|
|
3
|
-
import {
|
|
4
|
-
import { buildConstraint } from './query-shape.js';
|
|
3
|
+
import { getAdminDatabase, getDatabase, ref, remove, runTransaction, set, setPriority, setWithPriority, update, sandbox as rtdbSandbox, } from './index.js';
|
|
5
4
|
import { isJsonObject, jsonValuesEqual } from './sandbox/data-tree.js';
|
|
6
5
|
import { resolveDatabaseInstance } from '../sandbox/internal/instances.js';
|
|
6
|
+
import { getOrCreateBackend } from './sandbox/backend-for.js';
|
|
7
|
+
/** The captured events of `instance` (name or URL; absent is the default instance), in order, as replay judges them. */
|
|
8
|
+
export function rtdbReplaySteps(events, instance) {
|
|
9
|
+
const name = resolveDatabaseInstance(instance)?.name;
|
|
10
|
+
const steps = [];
|
|
11
|
+
for (const event of events) {
|
|
12
|
+
if (instanceOf(event) !== name)
|
|
13
|
+
continue;
|
|
14
|
+
if (isAllowedRead(event))
|
|
15
|
+
steps.push({ kind: 'allowed-read', event });
|
|
16
|
+
else if (isAppDenial(event))
|
|
17
|
+
steps.push({ kind: 'denial', event });
|
|
18
|
+
else if (isAllowedRegistration(event))
|
|
19
|
+
steps.push({ kind: 'allowed-registration', event });
|
|
20
|
+
else if (isRtdbCommit(event)) {
|
|
21
|
+
steps.push(event.detail?.admin === true ? { kind: 'admin-commit', event } : { kind: 'app-commit', event });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return steps;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The tree `instance` held when the session began: `capturedState`, the tree
|
|
28
|
+
* the session left it with, with the session's commits rewound. Priorities the
|
|
29
|
+
* rewind restores (a session write that replaced a prioritized node records
|
|
30
|
+
* its prior priority) appear as `.priority` keys, the export format the
|
|
31
|
+
* Realtime Database REST API reads; a prioritized leaf becomes
|
|
32
|
+
* `{ ".value": v, ".priority": p }`. A priority the capture never saw is not
|
|
33
|
+
* carried.
|
|
34
|
+
*/
|
|
35
|
+
export async function rewoundRtdbTree(events, capturedState, instance) {
|
|
36
|
+
const sandbox = initializeSandbox();
|
|
37
|
+
const name = resolveDatabaseInstance(instance)?.name;
|
|
38
|
+
const adminDb = getAdminDatabase(sandbox, name);
|
|
39
|
+
rtdbSandbox.setData(adminDb, { '/': capturedState ?? null });
|
|
40
|
+
const commits = events.filter((event) => instanceOf(event) === name && isRtdbCommit(event));
|
|
41
|
+
await rewindRtdbCommits(adminDb, commits);
|
|
42
|
+
const exported = getOrCreateBackend(sandbox, resolveDatabaseInstance(name)).exportPersistenceState();
|
|
43
|
+
return withExportedPriorities(exported.data ?? null, exported.priorities ?? {});
|
|
44
|
+
}
|
|
45
|
+
/** `tree` with each priority in `priorities` (by absolute path) set as a `.priority` key. */
|
|
46
|
+
function withExportedPriorities(tree, priorities) {
|
|
47
|
+
let out = structuredClone(tree);
|
|
48
|
+
for (const [path, priority] of Object.entries(priorities)) {
|
|
49
|
+
if (priority === null)
|
|
50
|
+
continue;
|
|
51
|
+
const segments = path.split('/').filter(Boolean);
|
|
52
|
+
const attach = (node) => {
|
|
53
|
+
if (node === null || node === undefined)
|
|
54
|
+
return node;
|
|
55
|
+
if (isJsonObject(node))
|
|
56
|
+
return { ...node, '.priority': priority };
|
|
57
|
+
return { '.value': node, '.priority': priority };
|
|
58
|
+
};
|
|
59
|
+
if (segments.length === 0) {
|
|
60
|
+
out = attach(out);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
let parent = out;
|
|
64
|
+
for (const segment of segments.slice(0, -1)) {
|
|
65
|
+
parent = isJsonObject(parent) ? parent[segment] : undefined;
|
|
66
|
+
}
|
|
67
|
+
const last = segments.at(-1);
|
|
68
|
+
if (isJsonObject(parent) && last in parent)
|
|
69
|
+
parent[last] = attach(parent[last]);
|
|
70
|
+
}
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
/** The paths where `actual` differs from `expected`, as `state-drift` divergences. */
|
|
74
|
+
export function rtdbStateDrift(expected, actual) {
|
|
75
|
+
const out = [];
|
|
76
|
+
collectStateDrift(expected, actual, '/', out);
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
7
79
|
export async function replay(events, opts) {
|
|
8
80
|
assertCompleteHistory(events);
|
|
9
81
|
const sandbox = initializeSandbox();
|
|
@@ -11,43 +83,22 @@ export async function replay(events, opts) {
|
|
|
11
83
|
const db = getDatabase(sandbox, target.instance);
|
|
12
84
|
const adminDb = getAdminDatabase(sandbox, target.instance);
|
|
13
85
|
rtdbSandbox.setRules(db, opts.rules);
|
|
14
|
-
const
|
|
15
|
-
const commits = instanceEvents.filter(isRtdbCommit);
|
|
86
|
+
const steps = rtdbReplaySteps(events, target.instance);
|
|
16
87
|
const divergences = [];
|
|
17
88
|
let checkedEvents = 0;
|
|
18
89
|
const hasCapturedState = opts.capturedState !== undefined;
|
|
19
90
|
if (hasCapturedState) {
|
|
91
|
+
// Rewound in this sandbox, not through `rewoundRtdbTree`: priorities live
|
|
92
|
+
// in the backend's metadata, and no tree export carries them.
|
|
20
93
|
rtdbSandbox.setData(adminDb, { '/': opts.capturedState });
|
|
21
|
-
await rewindRtdbCommits(adminDb,
|
|
94
|
+
await rewindRtdbCommits(adminDb, steps.flatMap((step) => (step.kind === 'app-commit' || step.kind === 'admin-commit' ? [step.event] : [])));
|
|
22
95
|
}
|
|
23
|
-
for (const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (!isRtdbCommit(event))
|
|
30
|
-
continue;
|
|
31
|
-
const commit = event;
|
|
32
|
-
const path = commit.path ?? '/';
|
|
33
|
-
const isAdmin = commit.detail?.admin === true;
|
|
34
|
-
if (isAdmin) {
|
|
35
|
-
await replayRtdbAdminCommit(target, commit, divergences);
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
checkedEvents += 1;
|
|
39
|
-
try {
|
|
40
|
-
await replayRtdbAppCommit(target, commit, divergences);
|
|
41
|
-
}
|
|
42
|
-
catch (e) {
|
|
43
|
-
const isError = e instanceof Error;
|
|
44
|
-
divergences.push({
|
|
45
|
-
kind: 'now-denied',
|
|
46
|
-
path,
|
|
47
|
-
method: commit.method,
|
|
48
|
-
reason: isError ? e.message : String(e),
|
|
49
|
-
});
|
|
50
|
-
}
|
|
96
|
+
for (const [index, step] of steps.entries()) {
|
|
97
|
+
const before = divergences.length;
|
|
98
|
+
await replayStep(target, step, divergences, () => { checkedEvents += 1; });
|
|
99
|
+
// Each divergence names the replay step it came from, so engines compare step for step.
|
|
100
|
+
for (const divergence of divergences.slice(before))
|
|
101
|
+
divergence.step = index;
|
|
51
102
|
}
|
|
52
103
|
const replayedState = rtdbSandbox.snapshotState(adminDb);
|
|
53
104
|
if (hasCapturedState) {
|
|
@@ -61,6 +112,37 @@ export async function replay(events, opts) {
|
|
|
61
112
|
divergences,
|
|
62
113
|
};
|
|
63
114
|
}
|
|
115
|
+
/** Replay one step under the candidate rules; `checked` counts a step that carries a claim. */
|
|
116
|
+
async function replayStep(target, step, divergences, checked) {
|
|
117
|
+
if (step.kind === 'admin-commit') {
|
|
118
|
+
await replayRtdbAdminCommit(target, step.event, divergences);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
checked();
|
|
122
|
+
if (step.kind === 'allowed-read') {
|
|
123
|
+
await replayRtdbRead(target, step.event, divergences);
|
|
124
|
+
}
|
|
125
|
+
else if (step.kind === 'denial') {
|
|
126
|
+
checkRtdbDecision(target, step.event, 'deny', divergences);
|
|
127
|
+
}
|
|
128
|
+
else if (step.kind === 'allowed-registration') {
|
|
129
|
+
checkRtdbDecision(target, step.event, 'allow', divergences);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
const commit = step.event;
|
|
133
|
+
try {
|
|
134
|
+
await replayRtdbAppCommit(target, commit, divergences);
|
|
135
|
+
}
|
|
136
|
+
catch (e) {
|
|
137
|
+
divergences.push({
|
|
138
|
+
kind: 'now-denied',
|
|
139
|
+
path: commit.path ?? '/',
|
|
140
|
+
method: commit.method,
|
|
141
|
+
reason: e instanceof Error ? e.message : String(e),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
64
146
|
/**
|
|
65
147
|
* The instance an event names, or `undefined` for the default instance. An
|
|
66
148
|
* event captured before events named their instance carries no field, so it
|
|
@@ -87,58 +169,146 @@ async function replayRtdbAppCommit({ sandbox, instance }, commit, divergences) {
|
|
|
87
169
|
}
|
|
88
170
|
}
|
|
89
171
|
/**
|
|
90
|
-
* A
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
172
|
+
* A read by an application user that was allowed: a one-shot `get`, or the
|
|
173
|
+
* attach of a listener, whose first read the same `.read` rules decide. The
|
|
174
|
+
* candidate rules must keep allowing it: its `.read` rules, and the `query.*`
|
|
175
|
+
* rule expressions when it carried a query. An admin read and a denied read
|
|
176
|
+
* carry no claim the candidate rules must keep.
|
|
94
177
|
*/
|
|
95
|
-
function
|
|
178
|
+
function isAllowedRead(event) {
|
|
96
179
|
return event.kind === 'operation'
|
|
97
180
|
&& event.service === 'rtdb'
|
|
98
|
-
&& event.method === 'get'
|
|
181
|
+
&& (event.method === 'get' || (event.method === 'listen' && event.origin === 'listener'))
|
|
99
182
|
&& event.origin !== 'admin'
|
|
100
|
-
&& event.result === 'allow'
|
|
101
|
-
&& event.request?.query !== undefined;
|
|
183
|
+
&& event.result === 'allow';
|
|
102
184
|
}
|
|
103
|
-
/**
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
185
|
+
/**
|
|
186
|
+
* Decide an allowed read again under the candidate rules, by its `.read`
|
|
187
|
+
* rules and `query.*` expressions alone, against the replay tree at that
|
|
188
|
+
* point. The read is not run: a listener on an unindexed query only warns,
|
|
189
|
+
* where running it as a one-shot query would refuse it for the index.
|
|
190
|
+
*/
|
|
191
|
+
async function replayRtdbRead({ sandbox, instance }, event, divergences) {
|
|
192
|
+
syncReplayClock(sandbox, event.at);
|
|
193
|
+
const path = event.path ?? '/';
|
|
194
|
+
const backend = getOrCreateBackend(sandbox, resolveDatabaseInstance(instance));
|
|
195
|
+
try {
|
|
196
|
+
backend.validateRead(event.auth, path, event.request?.query);
|
|
114
197
|
}
|
|
115
|
-
|
|
116
|
-
|
|
198
|
+
catch (e) {
|
|
199
|
+
const reason = e instanceof Error ? e.message : String(e);
|
|
200
|
+
const denied = e.code === 'PERMISSION_DENIED';
|
|
201
|
+
divergences.push(denied
|
|
202
|
+
? { kind: 'now-denied', path, method: event.method, reason }
|
|
203
|
+
: { kind: 'unsupported', path, method: event.method, reason });
|
|
117
204
|
}
|
|
118
|
-
|
|
119
|
-
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* An operation by an application user that the rules denied. A candidate
|
|
208
|
+
* ruleset that allows it has opened access the captured rules kept closed.
|
|
209
|
+
*/
|
|
210
|
+
function isAppDenial(event) {
|
|
211
|
+
return event.kind === 'operation'
|
|
212
|
+
&& event.service === 'rtdb'
|
|
213
|
+
&& event.origin !== 'admin'
|
|
214
|
+
&& event.result === 'deny'
|
|
215
|
+
&& !isRevocation(event);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* A listener the rules stopped allowing after it attached, because of a write
|
|
219
|
+
* or a rules change. It is a consequence, not a request: its attach was
|
|
220
|
+
* checked as an allowed read, and the write that caused it is checked itself.
|
|
221
|
+
*/
|
|
222
|
+
function isRevocation(event) {
|
|
223
|
+
return event.detail?.revoked === true;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* An `onDisconnect` registration by an application user that the rules
|
|
227
|
+
* allowed. Production decides a registration when it is made, so the
|
|
228
|
+
* candidate rules must keep allowing it at that point in the session.
|
|
229
|
+
*/
|
|
230
|
+
function isAllowedRegistration(event) {
|
|
231
|
+
return event.kind === 'operation'
|
|
232
|
+
&& event.service === 'rtdb'
|
|
233
|
+
&& event.origin !== 'admin'
|
|
234
|
+
&& event.result === 'allow'
|
|
235
|
+
&& typeof event.method === 'string'
|
|
236
|
+
&& event.method.startsWith('onDisconnect.');
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* The backend check that decides a captured operation again under the
|
|
240
|
+
* candidate rules, against the replay tree as it stands at that point in the
|
|
241
|
+
* session, without writing or emitting an event; or the reason it cannot be
|
|
242
|
+
* decided from what the capture holds.
|
|
243
|
+
*/
|
|
244
|
+
function decisionCheck(backend, event) {
|
|
245
|
+
const path = event.path ?? '/';
|
|
246
|
+
const data = event.request?.data;
|
|
247
|
+
const detail = (event.detail ?? {});
|
|
248
|
+
switch (event.method) {
|
|
249
|
+
case 'get':
|
|
250
|
+
case 'listen':
|
|
251
|
+
return () => backend.validateRead(event.auth, path, event.request?.query);
|
|
252
|
+
case 'set':
|
|
253
|
+
case 'transaction':
|
|
254
|
+
return () => backend.validateSet(event.auth, path, data ?? null, (detail.priority ?? null));
|
|
255
|
+
case 'remove':
|
|
256
|
+
return () => backend.validateSet(event.auth, path, null);
|
|
257
|
+
case 'update':
|
|
258
|
+
if (!isJsonObject(detail.patch) || typeof detail.rootPath !== 'string') {
|
|
259
|
+
return 'the capture records only the denied path of this update, not the paths written with it, so the update cannot be rebuilt.';
|
|
260
|
+
}
|
|
261
|
+
return () => backend.validateUpdate(event.auth, detail.rootPath, detail.patch);
|
|
262
|
+
case 'setPriority':
|
|
263
|
+
return () => backend.validatePriority(event.auth, path, data);
|
|
264
|
+
case 'onDisconnect.set':
|
|
265
|
+
return () => backend.validateSet(event.auth, path, data ?? null, (detail.priority ?? null));
|
|
266
|
+
case 'onDisconnect.remove':
|
|
267
|
+
return () => backend.validateSet(event.auth, path, null);
|
|
268
|
+
case 'onDisconnect.update':
|
|
269
|
+
if (!isJsonObject(data))
|
|
270
|
+
return 'the captured onDisconnect update did not contain an object patch.';
|
|
271
|
+
return () => backend.validateUpdate(event.auth, path, data);
|
|
272
|
+
default:
|
|
273
|
+
return `RTDB replay does not check '${event.method}' operations.`;
|
|
120
274
|
}
|
|
121
|
-
return constraints;
|
|
122
275
|
}
|
|
123
|
-
|
|
276
|
+
/**
|
|
277
|
+
* Decide a captured operation again under the candidate rules. `captured` is
|
|
278
|
+
* the verdict the session's rules gave: a denial the candidate rules allow is
|
|
279
|
+
* `now-allowed`, an allowed registration they deny is `now-denied`.
|
|
280
|
+
*/
|
|
281
|
+
function checkRtdbDecision({ sandbox, instance }, event, captured, divergences) {
|
|
124
282
|
syncReplayClock(sandbox, event.at);
|
|
125
283
|
const path = event.path ?? '/';
|
|
126
|
-
const
|
|
127
|
-
|
|
284
|
+
const check = decisionCheck(getOrCreateBackend(sandbox, resolveDatabaseInstance(instance)), event);
|
|
285
|
+
if (typeof check === 'string') {
|
|
286
|
+
divergences.push({ kind: 'unsupported', path, method: event.method, reason: check });
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
let allowed = true;
|
|
290
|
+
let reason;
|
|
128
291
|
try {
|
|
129
|
-
|
|
130
|
-
await get(query(ref(db, path), ...constraintsOfSpec(event.request?.query)));
|
|
292
|
+
check();
|
|
131
293
|
}
|
|
132
294
|
catch (e) {
|
|
295
|
+
reason = e instanceof Error ? e.message : String(e);
|
|
296
|
+
if (e.code !== 'PERMISSION_DENIED') {
|
|
297
|
+
divergences.push({ kind: 'unsupported', path, method: event.method, reason });
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
allowed = false;
|
|
301
|
+
}
|
|
302
|
+
if (captured === 'deny' && allowed) {
|
|
133
303
|
divergences.push({
|
|
134
|
-
kind: 'now-
|
|
304
|
+
kind: 'now-allowed',
|
|
135
305
|
path,
|
|
136
306
|
method: event.method,
|
|
137
|
-
reason:
|
|
307
|
+
reason: 'the captured rules denied this operation; the candidate rules allow it.',
|
|
138
308
|
});
|
|
139
309
|
}
|
|
140
|
-
|
|
141
|
-
|
|
310
|
+
else if (captured === 'allow' && !allowed) {
|
|
311
|
+
divergences.push({ kind: 'now-denied', path, method: event.method, reason });
|
|
142
312
|
}
|
|
143
313
|
}
|
|
144
314
|
async function replayRtdbAdminCommit({ sandbox, instance }, commit, divergences) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/database/replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EACL,QAAQ,EACR,iBAAiB,GAKlB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,GAAG,EACH,gBAAgB,EAChB,WAAW,EACX,KAAK,EACL,GAAG,EACH,MAAM,EACN,cAAc,EACd,GAAG,EACH,WAAW,EACX,eAAe,EACf,MAAM,EACN,OAAO,IAAI,WAAW,GAGvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAkD3E,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,MAA+B,EAC/B,IAAuB;IAEvB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,MAAM,GAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IACjG,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAErC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvF,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC;IAE1D,IAAI,gBAAgB,EAAE,CAAC;QACrB,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC1D,MAAM,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,aAAa,IAAI,CAAC,CAAC;YACnB,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;YACtD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAAE,SAAS;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC;QACrB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QAED,aAAa,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC;YACnC,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,YAAY;gBAClB,IAAI;gBACJ,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;aACxC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,gBAAgB,EAAE,CAAC;QACrB,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IACzE,CAAC;IAED,OAAO;QACL,EAAE,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC;QAC5B,OAAO;QACP,aAAa;QACb,aAAa;QACb,WAAW;KACZ,CAAC;AACJ,CAAC;AAQD;;;;GAIG;AACH,SAAS,UAAU,CAAC,KAAmB;IACrC,OAAO,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED,SAAS,eAAe,CAAC,OAAgB,EAAE,EAAsB;IAC/D,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAClD,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,EAAE,OAAO,EAAE,QAAQ,EAAgB,EACnC,MAA0B,EAC1B,WAAmC;IAEnC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;IACjC,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1C,MAAM,4BAA4B,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,KAAmB;IAC7C,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW;WAC5B,KAAK,CAAC,OAAO,KAAK,MAAM;WACxB,KAAK,CAAC,MAAM,KAAK,KAAK;WACtB,KAAK,CAAC,MAAM,KAAK,OAAO;WACxB,KAAK,CAAC,MAAM,KAAK,OAAO;WACxB,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC;AAC1C,CAAC;AAED,wFAAwF;AACxF,SAAS,iBAAiB,CAAC,IAAe;IACxC,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,cAAc;YACrB,GAAG,EAAE,YAAY;YACjB,QAAQ,EAAE,iBAAiB;YAC3B,KAAK,EAAE,cAAc;SACb,CAAC;QACX,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACtG,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACxB,WAAW,CAAC,IAAI,CACd,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CACjG,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,EAAE,OAAO,EAAE,QAAQ,EAAgB,EACnC,KAA4B,EAC5B,WAAmC;IAEnC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;IACjC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1C,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAkB,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,YAAY;YAClB,IAAI;YACJ,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;SACnD,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,EAAE,OAAO,EAAE,QAAQ,EAAgB,EACnC,MAA0B,EAC1B,WAAmC;IAEnC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/C,MAAM,4BAA4B,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAA4C,EAC5C,OAA6B;IAE7B,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,SAAS;QAC3B,MAAM,WAAW,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;YAC7D,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACpC,MAAM,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;YAClE,SAAS;QACX,CAAC;QACD,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC,CAAC;YACrD,SAAS;QACX,CAAC;QACD,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;QAC5C,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,4BAA4B,CACzC,EAAY,EACZ,MAA0B,EAC1B,WAAmC;IAEnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC;IAChC,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5B,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,IAAa,EAAE,QAAQ,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,aAAa;YAChB,MAAM,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;YAC7D,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM;QACR,KAAK,QAAQ;YACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,aAAa;oBACnB,IAAI;oBACJ,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,MAAM,EAAE,8DAA8D;iBACvE,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,MAAM,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM;QACR,KAAK,aAAa;YAChB,MAAM,cAAc,CAClB,KAAK,EACL,GAAG,EAAE,CAAC,MAAM,CAAC,IAAa,EAC1B,EAAE,YAAY,EAAE,KAAK,EAAE,CACxB,CAAC;YACF,MAAM;QACR;YACE,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,aAAa;gBACnB,IAAI;gBACJ,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,iCAAiC,MAAM,CAAC,MAAM,YAAY;aACnE,CAAC,CAAC;IACP,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA0B;IACnD,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS;WAC7B,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,sBAAsB,CAAC,MAA0B;IACxD,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS;WAC7B,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA0B;IACtD,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS;WAC7B,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,yBAAyB,CAChC,MAA0B;IAE1B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAC/C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;QACvF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,cAAc,CACrB,MAA0B,EAC1B,KAAmC;IAEnC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;WAC1C,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,YAAY,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,YAAY,CAAC,KAAmB;IACvC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC;AAC7D,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,iBAAiB,CACxB,QAAiB,EACjB,MAAe,EACf,IAAY,EACZ,GAA2B;IAE3B,IAAI,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAE,OAAO;IAC9C,IAAI,IAAI,KAAK,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC;QAAE,OAAO;IACzE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,aAAa;YACnB,IAAI;YACJ,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACzE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,iBAAiB,CACf,QAAQ,CAAC,GAAG,CAAC,EACb,MAAM,CAAC,GAAG,CAAC,EACX,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,EAC3C,GAAG,CACJ,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/database/replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EACL,QAAQ,EACR,iBAAiB,GAKlB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,GAAG,EACH,MAAM,EACN,cAAc,EACd,GAAG,EACH,WAAW,EACX,eAAe,EACf,MAAM,EACN,OAAO,IAAI,WAAW,GAEvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AA+E9D,wHAAwH;AACxH,MAAM,UAAU,eAAe,CAAC,MAA+B,EAAE,QAAiB;IAChF,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IACrD,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI;YAAE,SAAS;QACzC,IAAI,aAAa,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;aACjE,IAAI,WAAW,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;aAC9D,IAAI,qBAAqB,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,CAAC;aACtF,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAA+B,EAC/B,aAAsB,EACtB,QAAiB;IAEjB,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IACrD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChD,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,aAAa,IAAI,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAA+B,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACzH,MAAM,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,EAGjG,CAAC;IACF,OAAO,sBAAsB,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,6FAA6F;AAC7F,SAAS,sBAAsB,CAAC,IAAa,EAAE,UAAkD;IAC/F,IAAI,GAAG,GAAY,eAAe,CAAC,IAAI,CAAC,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1D,IAAI,QAAQ,KAAK,IAAI;YAAE,SAAS;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,CAAC,IAAa,EAAW,EAAE;YACxC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YACrD,IAAI,YAAY,CAAC,IAAI,CAAC;gBAAE,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;YAClE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;QACnD,CAAC,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,MAAM,GAAY,GAAG,CAAC;QAC1B,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;QAC9B,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,MAAM;YAAG,MAAkC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/G,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,cAAc,CAAC,QAAiB,EAAE,MAAe;IAC/D,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,MAA+B,EAC/B,IAAuB;IAEvB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,MAAM,GAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IACjG,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC;IAE1D,IAAI,gBAAgB,EAAE,CAAC;QACrB,0EAA0E;QAC1E,8DAA8D;QAC9D,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC1D,MAAM,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9I,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QAClC,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,wFAAwF;QACxF,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC;IAC9E,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,gBAAgB,EAAE,CAAC;QACrB,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IACzE,CAAC;IAED,OAAO;QACL,EAAE,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC;QAC5B,OAAO;QACP,aAAa;QACb,aAAa;QACb,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,KAAK,UAAU,UAAU,CACvB,MAAoB,EACpB,IAAoB,EACpB,WAAmC,EACnC,OAAmB;IAEnB,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACjC,MAAM,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IACD,OAAO,EAAE,CAAC;IACV,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACjC,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACxD,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;QAChD,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,GAAG;gBACxB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAQD;;;;GAIG;AACH,SAAS,UAAU,CAAC,KAAmB;IACrC,OAAO,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED,SAAS,eAAe,CAAC,OAAgB,EAAE,EAAsB;IAC/D,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAClD,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,EAAE,OAAO,EAAE,QAAQ,EAAgB,EACnC,MAA0B,EAC1B,WAAmC;IAEnC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;IACjC,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1C,MAAM,4BAA4B,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,KAAmB;IACxC,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW;WAC5B,KAAK,CAAC,OAAO,KAAK,MAAM;WACxB,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;WACtF,KAAK,CAAC,MAAM,KAAK,OAAO;WACxB,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,cAAc,CAC3B,EAAE,OAAO,EAAE,QAAQ,EAAgB,EACnC,KAA4B,EAC5B,WAAmC;IAEnC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC;IAC/B,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/E,IAAI,CAAC;QACH,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAA8B,CAAC,CAAC;IACxF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAI,CAAwB,CAAC,IAAI,KAAK,mBAAmB,CAAC;QACtE,WAAW,CAAC,IAAI,CAAC,MAAM;YACrB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE;YAC5D,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,KAAmB;IACtC,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW;WAC5B,KAAK,CAAC,OAAO,KAAK,MAAM;WACxB,KAAK,CAAC,MAAM,KAAK,OAAO;WACxB,KAAK,CAAC,MAAM,KAAK,MAAM;WACvB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,KAA4B;IAChD,OAAQ,KAAK,CAAC,MAA4C,EAAE,OAAO,KAAK,IAAI,CAAC;AAC/E,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,KAAmB;IAChD,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW;WAC5B,KAAK,CAAC,OAAO,KAAK,MAAM;WACxB,KAAK,CAAC,MAAM,KAAK,OAAO;WACxB,KAAK,CAAC,MAAM,KAAK,OAAO;WACxB,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;WAChC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,OAAoB,EAAE,KAA4B;IACvE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;IACjC,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAgE,CAAC;IACnG,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ;YACX,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAA8B,CAAC,CAAC;QACrG,KAAK,KAAK,CAAC;QACX,KAAK,aAAa;YAChB,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAA2B,CAAC,CAAC;QACxH,KAAK,QAAQ;YACX,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3D,KAAK,QAAQ;YACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACvE,OAAO,0HAA0H,CAAC;YACpI,CAAC;YACD,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,QAAkB,EAAE,MAAM,CAAC,KAAgC,CAAC,CAAC;QACtH,KAAK,aAAa;YAChB,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAA8B,CAAC,CAAC;QAC1F,KAAK,kBAAkB;YACrB,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAA2B,CAAC,CAAC;QACxH,KAAK,qBAAqB;YACxB,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3D,KAAK,qBAAqB;YACxB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBAAE,OAAO,mEAAmE,CAAC;YACpG,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9D;YACE,OAAO,+BAA+B,KAAK,CAAC,MAAM,eAAe,CAAC;IACtE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CACxB,EAAE,OAAO,EAAE,QAAQ,EAAgB,EACnC,KAA4B,EAC5B,QAA0B,EAC1B,WAAmC;IAEnC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC;IAC/B,MAAM,KAAK,GAAG,aAAa,CAAC,kBAAkB,CAAC,OAAO,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACnG,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACrF,OAAO;IACT,CAAC;IACD,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,KAAK,EAAE,CAAC;IACV,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACpD,IAAK,CAAwB,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YAC3D,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9E,OAAO;QACT,CAAC;QACD,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;IACD,IAAI,QAAQ,KAAK,MAAM,IAAI,OAAO,EAAE,CAAC;QACnC,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,aAAa;YACnB,IAAI;YACJ,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,yEAAyE;SAClF,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5C,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,EAAE,OAAO,EAAE,QAAQ,EAAgB,EACnC,MAA0B,EAC1B,WAAmC;IAEnC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/C,MAAM,4BAA4B,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAA4C,EAC5C,OAA6B;IAE7B,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,SAAS;QAC3B,MAAM,WAAW,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;YAC7D,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACpC,MAAM,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;YAClE,SAAS;QACX,CAAC;QACD,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC,CAAC;YACrD,SAAS;QACX,CAAC;QACD,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;QAC5C,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,4BAA4B,CACzC,EAAY,EACZ,MAA0B,EAC1B,WAAmC;IAEnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC;IAChC,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5B,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,IAAa,EAAE,QAAQ,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,aAAa;YAChB,MAAM,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;YAC7D,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM;QACR,KAAK,QAAQ;YACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,aAAa;oBACnB,IAAI;oBACJ,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,MAAM,EAAE,8DAA8D;iBACvE,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,MAAM,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM;QACR,KAAK,aAAa;YAChB,MAAM,cAAc,CAClB,KAAK,EACL,GAAG,EAAE,CAAC,MAAM,CAAC,IAAa,EAC1B,EAAE,YAAY,EAAE,KAAK,EAAE,CACxB,CAAC;YACF,MAAM;QACR;YACE,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,aAAa;gBACnB,IAAI;gBACJ,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,iCAAiC,MAAM,CAAC,MAAM,YAAY;aACnE,CAAC,CAAC;IACP,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA0B;IACnD,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS;WAC7B,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,sBAAsB,CAAC,MAA0B;IACxD,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS;WAC7B,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA0B;IACtD,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS;WAC7B,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,yBAAyB,CAChC,MAA0B;IAE1B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAC/C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;QACvF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,cAAc,CACrB,MAA0B,EAC1B,KAAmC;IAEnC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;WAC1C,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,YAAY,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,YAAY,CAAC,KAAmB;IACvC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC;AAC7D,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,iBAAiB,CACxB,QAAiB,EACjB,MAAe,EACf,IAAY,EACZ,GAA2B;IAE3B,IAAI,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAE,OAAO;IAC9C,IAAI,IAAI,KAAK,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC;QAAE,OAAO;IACzE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,aAAa;YACnB,IAAI;YACJ,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACzE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,iBAAiB,CACf,QAAQ,CAAC,GAAG,CAAC,EACb,MAAM,CAAC,GAAG,CAAC,EACX,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,EAC3C,GAAG,CACJ,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { AuthState, Sandbox } from 'pyric/sandbox';
|
|
7
7
|
import type { ChildListener, ValueListenerSnapshot } from './listener-types.js';
|
|
8
8
|
import type { Priority, QueryRow, QuerySpec } from './query.js';
|
|
9
|
+
import { WritePlane } from './write-plane.js';
|
|
9
10
|
import type { JsonValue } from './data-tree.js';
|
|
10
11
|
import type { ListenerAttribution } from '../../sandbox/attribution/listener-owners.js';
|
|
11
12
|
export declare class RtdbBackend {
|
|
@@ -50,6 +51,10 @@ export declare class RtdbBackend {
|
|
|
50
51
|
update(auth: AuthState, path: string, patch: Record<string, JsonValue>): void;
|
|
51
52
|
remove(auth: AuthState, path: string): void;
|
|
52
53
|
setPriority(auth: AuthState, path: string, priority: Priority): void;
|
|
54
|
+
validateRead(auth: AuthState, path: string, spec?: QuerySpec): void;
|
|
55
|
+
validatePriority(auth: AuthState, path: string, priority: Priority): void;
|
|
56
|
+
/** Decide and record an `onDisconnect` registration; see `WritePlane.registerDisconnect`. */
|
|
57
|
+
registerDisconnect(auth: AuthState, operation: Parameters<WritePlane['registerDisconnect']>[1]): void;
|
|
53
58
|
validateSet(auth: AuthState, path: string, value: unknown, priority?: Priority): void;
|
|
54
59
|
validateUpdate(auth: AuthState, path: string, patch: Record<string, unknown>): void;
|
|
55
60
|
onValue(auth: AuthState, path: string, cb: (snap: ValueListenerSnapshot) => void, query?: QuerySpec, cancelCallback?: (error: Error) => void, onCanceled?: () => void, attribution?: ListenerAttribution): () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/database/sandbox/backend.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGhF,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/database/sandbox/backend.ts"],"names":[],"mappings":"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"}
|