mindoodb 0.0.63 → 0.0.65
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 +14 -1
- package/dist/browser/index.mjs +15 -0
- package/dist/core/BaseMindooDB.d.ts +19 -0
- package/dist/core/BaseMindooDB.d.ts.map +1 -1
- package/dist/core/BaseMindooDB.js +607 -323
- package/dist/core/BaseMindooDB.js.map +1 -1
- package/dist/core/accesscontrol/tier1Evaluator.d.ts +59 -0
- package/dist/core/accesscontrol/tier1Evaluator.d.ts.map +1 -0
- package/dist/core/accesscontrol/tier1Evaluator.js +77 -0
- package/dist/core/accesscontrol/tier1Evaluator.js.map +1 -0
- package/dist/core/appendonlystores/network/IrohNetworkTransport.d.ts +58 -5
- package/dist/core/appendonlystores/network/IrohNetworkTransport.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/IrohNetworkTransport.js +77 -8
- package/dist/core/appendonlystores/network/IrohNetworkTransport.js.map +1 -1
- package/dist/core/appendonlystores/network/IrohStreamIO.d.ts +32 -10
- package/dist/core/appendonlystores/network/IrohStreamIO.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/IrohStreamIO.js +26 -10
- package/dist/core/appendonlystores/network/IrohStreamIO.js.map +1 -1
- package/dist/core/appendonlystores/network/irohLocator.d.ts +16 -0
- package/dist/core/appendonlystores/network/irohLocator.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/irohLocator.js +36 -0
- package/dist/core/appendonlystores/network/irohLocator.js.map +1 -1
- package/dist/core/builtinDbInvariants.d.ts +12 -6
- package/dist/core/builtinDbInvariants.d.ts.map +1 -1
- package/dist/core/builtinDbInvariants.js +7 -1
- package/dist/core/builtinDbInvariants.js.map +1 -1
- package/dist/core/expressions/builder.d.ts +25 -0
- package/dist/core/expressions/builder.d.ts.map +1 -1
- package/dist/core/expressions/builder.js +33 -13
- package/dist/core/expressions/builder.js.map +1 -1
- package/dist/core/expressions/evaluateExpression.d.ts +55 -2
- package/dist/core/expressions/evaluateExpression.d.ts.map +1 -1
- package/dist/core/expressions/evaluateExpression.js +95 -3
- package/dist/core/expressions/evaluateExpression.js.map +1 -1
- package/dist/core/expressions/formulaSource.d.ts.map +1 -1
- package/dist/core/expressions/formulaSource.js +21 -2
- package/dist/core/expressions/formulaSource.js.map +1 -1
- package/dist/core/expressions/index.d.ts +1 -1
- package/dist/core/expressions/index.d.ts.map +1 -1
- package/dist/core/expressions/index.js +3 -1
- package/dist/core/expressions/index.js.map +1 -1
- package/dist/core/expressions/metadata.d.ts +1 -1
- package/dist/core/expressions/metadata.d.ts.map +1 -1
- package/dist/core/expressions/metadata.js +5 -0
- package/dist/core/expressions/metadata.js.map +1 -1
- package/dist/core/expressions/types.d.ts +17 -2
- package/dist/core/expressions/types.d.ts.map +1 -1
- package/dist/core/index.d.ts +7 -4
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +29 -11
- package/dist/core/index.js.map +1 -1
- package/dist/core/indexing/createViewDataProvider.d.ts.map +1 -1
- package/dist/core/indexing/createViewDataProvider.js +1 -0
- package/dist/core/indexing/createViewDataProvider.js.map +1 -1
- package/dist/core/indexing/summary/SummaryVirtualViewDataProvider.d.ts.map +1 -1
- package/dist/core/indexing/summary/SummaryVirtualViewDataProvider.js +1 -0
- package/dist/core/indexing/summary/SummaryVirtualViewDataProvider.js.map +1 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js +1 -0
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js.map +1 -1
- package/dist/core/peerdevices/PeerDeviceDocument.d.ts +144 -0
- package/dist/core/peerdevices/PeerDeviceDocument.d.ts.map +1 -0
- package/dist/core/peerdevices/PeerDeviceDocument.js +209 -0
- package/dist/core/peerdevices/PeerDeviceDocument.js.map +1 -0
- package/dist/core/query/executeQuery.d.ts +1 -1
- package/dist/core/query/executeQuery.d.ts.map +1 -1
- package/dist/core/query/executeQuery.js +106 -71
- package/dist/core/query/executeQuery.js.map +1 -1
- package/dist/core/query/executeQueryInclude.d.ts +99 -0
- package/dist/core/query/executeQueryInclude.d.ts.map +1 -0
- package/dist/core/query/executeQueryInclude.js +447 -0
- package/dist/core/query/executeQueryInclude.js.map +1 -0
- package/dist/core/query/index.d.ts +2 -1
- package/dist/core/query/index.d.ts.map +1 -1
- package/dist/core/query/index.js +5 -1
- package/dist/core/query/index.js.map +1 -1
- package/dist/core/query/queryInternals.d.ts +45 -0
- package/dist/core/query/queryInternals.d.ts.map +1 -0
- package/dist/core/query/queryInternals.js +87 -0
- package/dist/core/query/queryInternals.js.map +1 -0
- package/dist/core/query/queryLive.d.ts.map +1 -1
- package/dist/core/query/queryLive.js +67 -8
- package/dist/core/query/queryLive.js.map +1 -1
- package/dist/core/query/queryView.d.ts.map +1 -1
- package/dist/core/query/queryView.js +19 -0
- package/dist/core/query/queryView.js.map +1 -1
- package/dist/core/query/types.d.ts +122 -7
- package/dist/core/query/types.d.ts.map +1 -1
- package/dist/core/query/types.js +13 -1
- package/dist/core/query/types.js.map +1 -1
- package/dist/core/types.d.ts +15 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/userkeys/fingerprint.d.ts +12 -4
- package/dist/core/userkeys/fingerprint.d.ts.map +1 -1
- package/dist/core/userkeys/fingerprint.js +14 -5
- package/dist/core/userkeys/fingerprint.js.map +1 -1
- package/dist/iroh/index.d.ts +3 -2
- package/dist/iroh/index.d.ts.map +1 -1
- package/dist/iroh/index.js +8 -1
- package/dist/iroh/index.js.map +1 -1
- package/dist/node/server/TenantManager.d.ts +5 -0
- package/dist/node/server/TenantManager.d.ts.map +1 -1
- package/dist/node/server/TenantManager.js +35 -56
- package/dist/node/server/TenantManager.js.map +1 -1
- package/dist/node/server/nativeIrohStreamIO.d.ts.map +1 -1
- package/dist/node/server/nativeIrohStreamIO.js +17 -4
- package/dist/node/server/nativeIrohStreamIO.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Peer-device records: how one device advertises its Iroh endpoint id to the
|
|
4
|
+
* other members of a tenant.
|
|
5
|
+
*
|
|
6
|
+
* A device publishes one `dev_<fingerprint>` document into `userdirectory`,
|
|
7
|
+
* encrypted with the tenant `default` key. That placement is deliberate:
|
|
8
|
+
*
|
|
9
|
+
* - **`userdirectory`, not `grantaccess`.** Every member already replicates
|
|
10
|
+
* `userdirectory`, and a device can write its own record there without an
|
|
11
|
+
* administrator approving anything.
|
|
12
|
+
* - **`default`, not `$publicinfos`.** The hoster holds the `$publicinfos`
|
|
13
|
+
* key, and who talks to whom over Iroh is none of the hoster's business.
|
|
14
|
+
* `default` keeps the record readable for every tenant member and opaque to
|
|
15
|
+
* the server.
|
|
16
|
+
* - **`dev_` prefix.** That makes it a *personal document* (see
|
|
17
|
+
* {@link PERSONAL_DOC_ID_PREFIXES}), so the write invariant lets its creator
|
|
18
|
+
* — and only its creator — change and delete it.
|
|
19
|
+
*
|
|
20
|
+
* ## Why records must be verified on read
|
|
21
|
+
*
|
|
22
|
+
* Any tenant member can write a `dev_` document holding any endpoint id they
|
|
23
|
+
* like. The doc id and payload are therefore claims, not facts.
|
|
24
|
+
* {@link verifyPeerDeviceRecord} only accepts a record when all three hold:
|
|
25
|
+
*
|
|
26
|
+
* 1. the doc id is the fingerprint of the `signingPublicKey` in the payload,
|
|
27
|
+
* 2. the `doc_create` entry was signed by exactly that key, and
|
|
28
|
+
* 3. that key is an active (non-revoked) grant in the tenant.
|
|
29
|
+
*
|
|
30
|
+
* Together these mean a record can only be published by the device that owns
|
|
31
|
+
* the signing key it names, so nobody can put their own endpoint id under
|
|
32
|
+
* someone else's device.
|
|
33
|
+
*
|
|
34
|
+
* **Known v1 gap — id squatting.** A member can create `dev_<someone else's
|
|
35
|
+
* fingerprint>` before that device does. The squatted record fails step 2 and
|
|
36
|
+
* is discarded, so it cannot impersonate anyone; but the real device then
|
|
37
|
+
* cannot create its own record under that id and stays invisible to the
|
|
38
|
+
* picker. Detect it by the record being present yet unverifiable.
|
|
39
|
+
*/
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.PEER_DEVICE_SCHEMA_VERSION = exports.PEER_DEVICE_TYPE = exports.PEER_DEVICE_FORM = exports.PEER_DEVICE_DOC_ID_PREFIX = void 0;
|
|
42
|
+
exports.peerDeviceDocumentId = peerDeviceDocumentId;
|
|
43
|
+
exports.isPeerDeviceDocId = isPeerDeviceDocId;
|
|
44
|
+
exports.publishPeerDeviceRecord = publishPeerDeviceRecord;
|
|
45
|
+
exports.removePeerDeviceRecord = removePeerDeviceRecord;
|
|
46
|
+
exports.verifyPeerDeviceRecord = verifyPeerDeviceRecord;
|
|
47
|
+
exports.listPeerDeviceRecords = listPeerDeviceRecords;
|
|
48
|
+
const types_1 = require("../types");
|
|
49
|
+
const fingerprint_1 = require("../userkeys/fingerprint");
|
|
50
|
+
exports.PEER_DEVICE_DOC_ID_PREFIX = "dev_";
|
|
51
|
+
exports.PEER_DEVICE_FORM = "userdirectory";
|
|
52
|
+
exports.PEER_DEVICE_TYPE = "peerdevice";
|
|
53
|
+
exports.PEER_DEVICE_SCHEMA_VERSION = 1;
|
|
54
|
+
/**
|
|
55
|
+
* Deterministic document id for a device, derived from its signing key
|
|
56
|
+
* fingerprint.
|
|
57
|
+
*
|
|
58
|
+
* Deterministic so a device republishing after a reload updates its record
|
|
59
|
+
* instead of accumulating a new one per session. Colons are stripped because
|
|
60
|
+
* custom ids must match `^[a-z][a-z0-9_]*$` (`CUSTOM_DOC_ID_REGEX`).
|
|
61
|
+
*/
|
|
62
|
+
function peerDeviceDocumentId(signingKeyFingerprint) {
|
|
63
|
+
return `${exports.PEER_DEVICE_DOC_ID_PREFIX}${signingKeyFingerprint.replace(/:/g, "").toLowerCase()}`;
|
|
64
|
+
}
|
|
65
|
+
function isPeerDeviceDocId(docId) {
|
|
66
|
+
return docId.startsWith(exports.PEER_DEVICE_DOC_ID_PREFIX);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Publish (or refresh) this device's record.
|
|
70
|
+
*
|
|
71
|
+
* Idempotent: the id is derived from the device's own signing key, so calling
|
|
72
|
+
* this on every unlock keeps one record per device and updates the endpoint id
|
|
73
|
+
* and label in place.
|
|
74
|
+
*
|
|
75
|
+
* Note this does *not* pass `assumeUniqueId`. The id is deterministic rather
|
|
76
|
+
* than random, so two replicas creating it concurrently must share Automerge
|
|
77
|
+
* ancestry in order to converge instead of forking. That code path also
|
|
78
|
+
* forbids `initialValues`, which is why the payload is written with a
|
|
79
|
+
* follow-up `changeDoc` — the same call that refreshes an existing record.
|
|
80
|
+
*/
|
|
81
|
+
async function publishPeerDeviceRecord(input) {
|
|
82
|
+
const fingerprint = await (0, fingerprint_1.fingerprintPublicKeyPem)(input.signingPublicKey, input.subtle);
|
|
83
|
+
const docId = peerDeviceDocumentId(fingerprint);
|
|
84
|
+
const doc = (await input.db.getDocument(docId).catch(() => null)) ??
|
|
85
|
+
(await input.db.createDocument({
|
|
86
|
+
id: docId,
|
|
87
|
+
decryptionKeyId: types_1.DEFAULT_TENANT_KEY_ID,
|
|
88
|
+
signingKeyPair: input.signingKeyPair,
|
|
89
|
+
signingKeyPassword: input.signingKeyPassword,
|
|
90
|
+
}));
|
|
91
|
+
const label = input.label ?? "";
|
|
92
|
+
const current = doc.getData();
|
|
93
|
+
const unchanged = current.type === exports.PEER_DEVICE_TYPE &&
|
|
94
|
+
current.schemaVersion === exports.PEER_DEVICE_SCHEMA_VERSION &&
|
|
95
|
+
current.irohEndpointId === input.irohEndpointId &&
|
|
96
|
+
current.signingPublicKey === input.signingPublicKey &&
|
|
97
|
+
(current.label ?? "") === label;
|
|
98
|
+
// Callers republish on every unlock and after every `userdirectory` sync.
|
|
99
|
+
// Rewriting `updatedAt` unconditionally would append an entry each time,
|
|
100
|
+
// and since that entry syncs and triggers the next refresh, the two halves
|
|
101
|
+
// would keep feeding each other. Only a real change is worth a write.
|
|
102
|
+
if (unchanged) {
|
|
103
|
+
return doc;
|
|
104
|
+
}
|
|
105
|
+
await input.db.changeDoc(doc, (editable) => {
|
|
106
|
+
const data = editable.getData();
|
|
107
|
+
data.form = exports.PEER_DEVICE_FORM;
|
|
108
|
+
data.type = exports.PEER_DEVICE_TYPE;
|
|
109
|
+
data.schemaVersion = exports.PEER_DEVICE_SCHEMA_VERSION;
|
|
110
|
+
data.irohEndpointId = input.irohEndpointId;
|
|
111
|
+
data.signingPublicKey = input.signingPublicKey;
|
|
112
|
+
data.label = label;
|
|
113
|
+
data.updatedAt = Date.now();
|
|
114
|
+
});
|
|
115
|
+
return doc;
|
|
116
|
+
}
|
|
117
|
+
/** Withdraw this device's record, e.g. when signing out of the tenant. */
|
|
118
|
+
async function removePeerDeviceRecord(input) {
|
|
119
|
+
const fingerprint = await (0, fingerprint_1.fingerprintPublicKeyPem)(input.signingPublicKey, input.subtle);
|
|
120
|
+
const docId = peerDeviceDocumentId(fingerprint);
|
|
121
|
+
await input.db.deleteDocument(docId).catch(() => {
|
|
122
|
+
// Already gone, or never published from this device.
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Check one record's claim. Returns the verified record, or `null` when any
|
|
127
|
+
* step of the chain described in the module docs fails.
|
|
128
|
+
*/
|
|
129
|
+
async function verifyPeerDeviceRecord(input) {
|
|
130
|
+
const docId = input.doc.getId();
|
|
131
|
+
const data = input.doc.getData();
|
|
132
|
+
const signingPublicKey = typeof data.signingPublicKey === "string" ? data.signingPublicKey : "";
|
|
133
|
+
const irohEndpointId = typeof data.irohEndpointId === "string" ? data.irohEndpointId.trim().toLowerCase() : "";
|
|
134
|
+
if (data.type !== exports.PEER_DEVICE_TYPE || !signingPublicKey || !/^[0-9a-f]{64}$/.test(irohEndpointId)) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
// 1. The id must be the fingerprint of the key the payload names, so a
|
|
138
|
+
// record cannot sit under a device id it does not belong to.
|
|
139
|
+
const fingerprint = await (0, fingerprint_1.fingerprintPublicKeyPem)(signingPublicKey, input.subtle);
|
|
140
|
+
if (peerDeviceDocumentId(fingerprint) !== docId) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
// 2. That key must be the one that actually created the document. Without
|
|
144
|
+
// this, any member could publish a record naming someone else's key.
|
|
145
|
+
const creatorKey = await resolveCreateSigner(input.db, docId);
|
|
146
|
+
if (!creatorKey || normalizePem(creatorKey) !== normalizePem(signingPublicKey)) {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
// 3. And it must still be a live grant, so revoked devices drop out.
|
|
150
|
+
if (!(await input.directory.validatePublicSigningKey(signingPublicKey).catch(() => false))) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
docId,
|
|
155
|
+
irohEndpointId,
|
|
156
|
+
signingPublicKey,
|
|
157
|
+
signingKeyFingerprint: fingerprint,
|
|
158
|
+
label: typeof data.label === "string" && data.label ? data.label : undefined,
|
|
159
|
+
updatedAt: typeof data.updatedAt === "number" ? data.updatedAt : 0,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Every verified peer-device record in this `userdirectory` replica.
|
|
164
|
+
*
|
|
165
|
+
* Requires the tenant `default` key to be unlocked; records that cannot be
|
|
166
|
+
* decrypted are simply absent. Unverifiable records are skipped silently —
|
|
167
|
+
* they are the expected shape of an attack, not an error to surface.
|
|
168
|
+
*/
|
|
169
|
+
async function listPeerDeviceRecords(input) {
|
|
170
|
+
// `idPrefix` matching is boundary-aware: "dev" matches `dev_…`, not `device…`.
|
|
171
|
+
const docIds = await input.db.getAllDocumentIds({ idPrefix: "dev" });
|
|
172
|
+
const records = [];
|
|
173
|
+
for (const docId of docIds) {
|
|
174
|
+
if (!isPeerDeviceDocId(docId)) {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
const doc = await input.db.getDocument(docId).catch(() => null);
|
|
178
|
+
if (!doc) {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const record = await verifyPeerDeviceRecord({
|
|
182
|
+
db: input.db,
|
|
183
|
+
directory: input.directory,
|
|
184
|
+
doc,
|
|
185
|
+
subtle: input.subtle,
|
|
186
|
+
});
|
|
187
|
+
if (record && record.irohEndpointId !== input.excludeEndpointId) {
|
|
188
|
+
records.push(record);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return records;
|
|
192
|
+
}
|
|
193
|
+
/** Signing key that wrote the `doc_create` entry, or null when it is not here yet. */
|
|
194
|
+
async function resolveCreateSigner(db, docId) {
|
|
195
|
+
try {
|
|
196
|
+
// History is ordered causally, so `doc_create` is on the first page.
|
|
197
|
+
const page = await db.getDocumentHistoryPage(docId, { limit: 10 });
|
|
198
|
+
const create = page.entries.find((entry) => entry.entryType === "doc_create");
|
|
199
|
+
return create?.changeCreatedByPublicKey ?? null;
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/** PEM formatting varies by transport; compare the key material, not the wrapping. */
|
|
206
|
+
function normalizePem(pem) {
|
|
207
|
+
return pem.replace(/\s+/g, "");
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=PeerDeviceDocument.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PeerDeviceDocument.js","sourceRoot":"","sources":["../../../src/core/peerdevices/PeerDeviceDocument.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,5 +14,5 @@ import { type MindooQuery, type MindooQueryOptions, type MindooQueryResult } fro
|
|
|
14
14
|
* score for `{ special: "textScore" }` sorting — the default ordering
|
|
15
15
|
* when a `text` clause is present without an explicit `sortBy`.
|
|
16
16
|
*/
|
|
17
|
-
export declare function executeQuery(db: MindooDB, summary: DocumentSummaryStore,
|
|
17
|
+
export declare function executeQuery(db: MindooDB, summary: DocumentSummaryStore, input: MindooQuery, options?: MindooQueryOptions): Promise<MindooQueryResult>;
|
|
18
18
|
//# sourceMappingURL=executeQuery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executeQuery.d.ts","sourceRoot":"","sources":["../../../src/core/query/executeQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAa,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"executeQuery.d.ts","sourceRoot":"","sources":["../../../src/core/query/executeQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAa,MAAM,UAAU,CAAC;AAcpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAGrF,OAAO,EAEL,KAAK,WAAW,EAIhB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAGvB,MAAM,SAAS,CAAC;AAiMjB;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAuH5B"}
|
|
@@ -4,8 +4,9 @@ exports.executeQuery = executeQuery;
|
|
|
4
4
|
const expressions_1 = require("../expressions");
|
|
5
5
|
const encryptedFields_1 = require("../crypto/encryptedFields");
|
|
6
6
|
const extractSummaryFields_1 = require("../indexing/summary/extractSummaryFields");
|
|
7
|
-
const types_1 = require("
|
|
8
|
-
const
|
|
7
|
+
const types_1 = require("./types");
|
|
8
|
+
const queryInternals_1 = require("./queryInternals");
|
|
9
|
+
const executeQueryInclude_1 = require("./executeQueryInclude");
|
|
9
10
|
/**
|
|
10
11
|
* Resolve and prepare the full-text index for a query with a `text`
|
|
11
12
|
* clause: brings the index up to date, verifies indexing is enabled, and
|
|
@@ -20,12 +21,12 @@ async function resolveTextClauseScores(db, query, options) {
|
|
|
20
21
|
return null;
|
|
21
22
|
}
|
|
22
23
|
if (!db.getFullTextIndex) {
|
|
23
|
-
throw new
|
|
24
|
+
throw new types_1.MindooQueryError(`This MindooDB instance does not support full-text search.`, "fulltext-not-enabled");
|
|
24
25
|
}
|
|
25
26
|
const index = db.getFullTextIndex();
|
|
26
27
|
await index.update(options);
|
|
27
28
|
if (!index.isEnabled()) {
|
|
28
|
-
throw new
|
|
29
|
+
throw new types_1.MindooQueryError(`Query has a text clause, but full-text indexing is not enabled for this database ` +
|
|
29
30
|
`(enable it via setFulltextSetup({ enabled: true }), see docs/fulltext-search.md).`, "fulltext-not-enabled");
|
|
30
31
|
}
|
|
31
32
|
const { hits } = index.searchSync(text.query, {
|
|
@@ -41,17 +42,45 @@ async function resolveTextClauseScores(db, query, options) {
|
|
|
41
42
|
return { scores, index };
|
|
42
43
|
}
|
|
43
44
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
45
|
+
* Turn a caller's query into one the evaluator can run: formula source text
|
|
46
|
+
* becomes an expression, and anything that is neither is rejected here.
|
|
47
|
+
*
|
|
48
|
+
* Both matter for the same reason. The evaluator returns `undefined` for a
|
|
49
|
+
* node it does not recognize, and `undefined` as a filter means "no match" —
|
|
50
|
+
* so a filter handed over as source text, or built by hand with a typo,
|
|
51
|
+
* used to come back as an empty result set with `coverage: "full"`, which
|
|
52
|
+
* reads exactly like a correct query over data that isn't there.
|
|
46
53
|
*/
|
|
47
|
-
function
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
function parseQuery(query) {
|
|
55
|
+
return {
|
|
56
|
+
...query,
|
|
57
|
+
filter: parseFilter(query.filter, "Query filter"),
|
|
58
|
+
include: query.include ? parseIncludes(query.include, "") : undefined,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function parseFilter(filter, label) {
|
|
62
|
+
if (typeof filter !== "string") {
|
|
63
|
+
return filter;
|
|
50
64
|
}
|
|
51
|
-
|
|
52
|
-
return
|
|
65
|
+
try {
|
|
66
|
+
return (0, expressions_1.parseMindooDBFormulaBooleanExpression)(filter);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
throw new types_1.MindooQueryError(`${label} is not valid formula source: ${error instanceof Error ? error.message : String(error)}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** Formula-source filters are supported at every include level, not just the root. */
|
|
73
|
+
function parseIncludes(includes, slotPath) {
|
|
74
|
+
const parsed = {};
|
|
75
|
+
for (const [slot, include] of Object.entries(includes)) {
|
|
76
|
+
const label = slotPath ? `${slotPath}.${slot}` : slot;
|
|
77
|
+
parsed[slot] = {
|
|
78
|
+
...include,
|
|
79
|
+
filter: parseFilter(include.filter, `Filter of include "${label}"`),
|
|
80
|
+
include: include.include ? parseIncludes(include.include, label) : undefined,
|
|
81
|
+
};
|
|
53
82
|
}
|
|
54
|
-
return
|
|
83
|
+
return parsed;
|
|
55
84
|
}
|
|
56
85
|
/** All expressions a query references (filter + expression sort keys). */
|
|
57
86
|
function collectQueryExpressions(query) {
|
|
@@ -72,44 +101,34 @@ function collectQueryExpressions(query) {
|
|
|
72
101
|
*/
|
|
73
102
|
function validateQueryExpressions(expressions, allowFullScan) {
|
|
74
103
|
for (const expression of expressions) {
|
|
104
|
+
const unknown = (0, expressions_1.findUnknownExpressionNode)(expression);
|
|
105
|
+
if (unknown !== null) {
|
|
106
|
+
throw new types_1.MindooQueryError(`Query expression contains ${unknown}, which the expression language does not define. ` +
|
|
107
|
+
`Build expressions with createViewLanguage() (or pass the filter as formula source text).`);
|
|
108
|
+
}
|
|
75
109
|
const requirements = (0, expressions_1.analyzeExpressionRequirements)(expression);
|
|
76
110
|
if (requirements.needsViewContext) {
|
|
77
|
-
throw new
|
|
111
|
+
throw new types_1.MindooQueryError(`Query expressions cannot use view-tree operations (${requirements.viewContextOperations.join(", ")}); ` +
|
|
78
112
|
`these only evaluate inside a materialized view (use db.queryView() with categories instead).`);
|
|
79
113
|
}
|
|
80
114
|
if (requirements.needsDecryption && !allowFullScan) {
|
|
81
|
-
throw new
|
|
115
|
+
throw new types_1.MindooQueryError(`Query expressions reference encrypted fields (decrypt), which the summary buffer does not store. ` +
|
|
82
116
|
`Re-run with allowFullScan: true to evaluate them against materialized documents (expensive).`);
|
|
83
117
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return sortKey.direction === "descending";
|
|
88
|
-
}
|
|
89
|
-
function computeSortValues(sortKeys, context, textScore) {
|
|
90
|
-
return sortKeys.map((sortKey) => {
|
|
91
|
-
if (sortKey.special === "textScore") {
|
|
92
|
-
return textScore ?? 0;
|
|
93
|
-
}
|
|
94
|
-
if (sortKey.expression) {
|
|
95
|
-
return (0, expressions_1.evaluateExpression)(sortKey.expression, context);
|
|
118
|
+
if (requirements.needsParentContext) {
|
|
119
|
+
throw new types_1.MindooQueryError(`Query expressions cannot use v.parent(); there is no parent document at the top level of a query. ` +
|
|
120
|
+
`It only resolves inside the filter of an include lookup.`);
|
|
96
121
|
}
|
|
97
|
-
|
|
98
|
-
// carries the mirrored managed fields (`_lastModified`, `_attachments`).
|
|
99
|
-
return (0, extractSummaryFields_1.getSummaryFieldValue)(context.doc, sortKey.field ?? "");
|
|
100
|
-
});
|
|
122
|
+
}
|
|
101
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Sorts, pages, and turns candidates into result rows. The paged
|
|
126
|
+
* candidates are returned alongside so include hydration can reach their
|
|
127
|
+
* unprojected values without scanning again.
|
|
128
|
+
*/
|
|
102
129
|
function sortAndPage(candidates, query, sortKeys) {
|
|
103
130
|
if (sortKeys.length > 0) {
|
|
104
|
-
candidates.sort((left, right) =>
|
|
105
|
-
for (let i = 0; i < sortKeys.length; i++) {
|
|
106
|
-
const result = (0, types_1.compareValues)(left.sortValues[i], right.sortValues[i], sortDirectionDescending(sortKeys[i]));
|
|
107
|
-
if (result !== 0) {
|
|
108
|
-
return result;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return left.docId.localeCompare(right.docId);
|
|
112
|
-
});
|
|
131
|
+
candidates.sort((left, right) => (0, queryInternals_1.compareCandidates)(left, right, sortKeys));
|
|
113
132
|
}
|
|
114
133
|
const total = candidates.length;
|
|
115
134
|
const offset = Math.max(0, query.offset ?? 0);
|
|
@@ -122,24 +141,9 @@ function sortAndPage(candidates, query, sortKeys) {
|
|
|
122
141
|
? { docId, fields, lastModified }
|
|
123
142
|
: { docId, fields, lastModified, textScore }),
|
|
124
143
|
total,
|
|
144
|
+
paged,
|
|
125
145
|
};
|
|
126
146
|
}
|
|
127
|
-
function projectFields(fields, projection) {
|
|
128
|
-
if (!projection) {
|
|
129
|
-
return fields;
|
|
130
|
-
}
|
|
131
|
-
const projected = {};
|
|
132
|
-
for (const path of projection) {
|
|
133
|
-
const value = (0, extractSummaryFields_1.getSummaryFieldValue)(fields, path);
|
|
134
|
-
if (value !== undefined) {
|
|
135
|
-
projected[path] = value;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
return projected;
|
|
139
|
-
}
|
|
140
|
-
function queryOrigin(db) {
|
|
141
|
-
return `${db.getTenant().getId()}/${db.getStore().getId()}`;
|
|
142
|
-
}
|
|
143
147
|
/**
|
|
144
148
|
* Execute an ad-hoc query against the document summary buffer.
|
|
145
149
|
*
|
|
@@ -153,13 +157,21 @@ function queryOrigin(db) {
|
|
|
153
157
|
* score for `{ special: "textScore" }` sorting — the default ordering
|
|
154
158
|
* when a `text` clause is present without an explicit `sortBy`.
|
|
155
159
|
*/
|
|
156
|
-
async function executeQuery(db, summary,
|
|
160
|
+
async function executeQuery(db, summary, input, options) {
|
|
161
|
+
const query = parseQuery(input);
|
|
157
162
|
const expressions = collectQueryExpressions(query);
|
|
158
163
|
if (options?.allowFullScan) {
|
|
164
|
+
if (query.include) {
|
|
165
|
+
throw new types_1.MindooQueryError(`Queries cannot combine allowFullScan with include lookups: includes are answered from the ` +
|
|
166
|
+
`summary buffer of every involved database, which is exactly what allowFullScan bypasses.`);
|
|
167
|
+
}
|
|
159
168
|
validateQueryExpressions(expressions, true);
|
|
160
169
|
return executeFullScanQuery(db, query, expressions, options);
|
|
161
170
|
}
|
|
162
171
|
validateQueryExpressions(expressions, false);
|
|
172
|
+
if (query.include) {
|
|
173
|
+
(0, executeQueryInclude_1.validateQueryIncludes)(query.include);
|
|
174
|
+
}
|
|
163
175
|
// Coverage check: every field referenced by filter/sort expressions and
|
|
164
176
|
// plain-field sort keys must be answerable from the summary.
|
|
165
177
|
const referencedPaths = new Set();
|
|
@@ -175,20 +187,20 @@ async function executeQuery(db, summary, query, options) {
|
|
|
175
187
|
}
|
|
176
188
|
for (const path of referencedPaths) {
|
|
177
189
|
if (!summary.isFieldCovered(path)) {
|
|
178
|
-
throw new
|
|
190
|
+
throw new types_1.MindooQueryError(`Field "${path}" is not covered by the summary configuration ` +
|
|
179
191
|
`(check include/exclude in SummaryConfig, or re-run with allowFullScan: true).`);
|
|
180
192
|
}
|
|
181
193
|
}
|
|
182
194
|
const textMatch = await resolveTextClauseScores(db, query, options);
|
|
183
195
|
if (options?.signal?.aborted) {
|
|
184
|
-
throw new
|
|
196
|
+
throw new types_1.MindooQueryError("Query aborted while updating the full-text index.");
|
|
185
197
|
}
|
|
186
198
|
await summary.update(options);
|
|
187
199
|
if (options?.signal?.aborted) {
|
|
188
|
-
throw new
|
|
200
|
+
throw new types_1.MindooQueryError("Query aborted while updating the summary buffer.");
|
|
189
201
|
}
|
|
190
|
-
const origin = queryOrigin(db);
|
|
191
|
-
const sortKeys = effectiveSortKeys(query);
|
|
202
|
+
const origin = (0, queryInternals_1.queryOrigin)(db);
|
|
203
|
+
const sortKeys = (0, queryInternals_1.effectiveSortKeys)(query);
|
|
192
204
|
const candidates = [];
|
|
193
205
|
for (const entry of summary.getAllEntries()) {
|
|
194
206
|
let textScore;
|
|
@@ -203,6 +215,7 @@ async function executeQuery(db, summary, query, options) {
|
|
|
203
215
|
doc: evaluationDoc,
|
|
204
216
|
values: {},
|
|
205
217
|
origin,
|
|
218
|
+
docId: entry.docId,
|
|
206
219
|
lastModifiedAt: new Date(entry.lastModified).toISOString(),
|
|
207
220
|
decryptionKeyId: entry.decryptionKeyId,
|
|
208
221
|
variables: {},
|
|
@@ -212,18 +225,38 @@ async function executeQuery(db, summary, query, options) {
|
|
|
212
225
|
}
|
|
213
226
|
candidates.push({
|
|
214
227
|
docId: entry.docId,
|
|
215
|
-
fields: projectFields(evaluationDoc, query.fields),
|
|
228
|
+
fields: (0, queryInternals_1.projectFields)(evaluationDoc, query.fields),
|
|
216
229
|
lastModified: entry.lastModified,
|
|
217
230
|
textScore,
|
|
218
|
-
sortValues: computeSortValues(sortKeys, context, textScore),
|
|
231
|
+
sortValues: (0, queryInternals_1.computeSortValues)(sortKeys, context, textScore),
|
|
232
|
+
evaluationDoc,
|
|
219
233
|
});
|
|
220
234
|
}
|
|
221
|
-
const { rows, total } = sortAndPage(candidates, query, sortKeys);
|
|
235
|
+
const { rows, total, paged } = sortAndPage(candidates, query, sortKeys);
|
|
222
236
|
// Coverage is the minimum of the summary and full-text coverage: while
|
|
223
237
|
// either side is still backfilling, results may be incomplete.
|
|
224
|
-
|
|
238
|
+
let coverage = textMatch && textMatch.index.getCoverage() === "rebuilding"
|
|
225
239
|
? "rebuilding"
|
|
226
240
|
: summary.getCoverage();
|
|
241
|
+
// Includes are hydrated AFTER paging: only the rows actually returned
|
|
242
|
+
// get related documents, so a `limit: 20` page costs 20 rows' worth of
|
|
243
|
+
// joins regardless of how many documents matched.
|
|
244
|
+
if (query.include) {
|
|
245
|
+
const parents = rows.map((row, index) => ({
|
|
246
|
+
row,
|
|
247
|
+
docId: row.docId,
|
|
248
|
+
doc: paged[index].evaluationDoc,
|
|
249
|
+
}));
|
|
250
|
+
const includeCoverage = await (0, executeQueryInclude_1.hydrateQueryIncludes)({
|
|
251
|
+
parentDb: db,
|
|
252
|
+
parentSummary: summary,
|
|
253
|
+
includes: query.include,
|
|
254
|
+
parents,
|
|
255
|
+
depth: 1,
|
|
256
|
+
options,
|
|
257
|
+
});
|
|
258
|
+
coverage = (0, queryInternals_1.mergeCoverage)(coverage, includeCoverage);
|
|
259
|
+
}
|
|
227
260
|
return { rows, total, coverage };
|
|
228
261
|
}
|
|
229
262
|
/** Resolve the plaintext for every `decrypt` node before evaluating a document. */
|
|
@@ -254,8 +287,8 @@ async function executeFullScanQuery(db, query, expressions, options) {
|
|
|
254
287
|
// full-scan path — scanning document bodies cannot compute relevance
|
|
255
288
|
// scores, and the index requirement stays consistent between paths.
|
|
256
289
|
const textMatch = await resolveTextClauseScores(db, query, options);
|
|
257
|
-
const origin = queryOrigin(db);
|
|
258
|
-
const sortKeys = effectiveSortKeys(query);
|
|
290
|
+
const origin = (0, queryInternals_1.queryOrigin)(db);
|
|
291
|
+
const sortKeys = (0, queryInternals_1.effectiveSortKeys)(query);
|
|
259
292
|
const decryptRequests = [];
|
|
260
293
|
for (const expression of expressions) {
|
|
261
294
|
decryptRequests.push(...(0, expressions_1.collectDecryptRequests)(expression));
|
|
@@ -268,10 +301,10 @@ async function executeFullScanQuery(db, query, expressions, options) {
|
|
|
268
301
|
for await (const { doc } of db.iterateChangesSince(null)) {
|
|
269
302
|
processed++;
|
|
270
303
|
if (signal?.aborted) {
|
|
271
|
-
throw new
|
|
304
|
+
throw new types_1.MindooQueryError("Query aborted during full scan.");
|
|
272
305
|
}
|
|
273
306
|
if (onProgress && onProgress({ processed, total, origin }) === false) {
|
|
274
|
-
throw new
|
|
307
|
+
throw new types_1.MindooQueryError("Query cancelled by progress callback during full scan.");
|
|
275
308
|
}
|
|
276
309
|
if (doc.isDeleted()) {
|
|
277
310
|
continue;
|
|
@@ -289,6 +322,7 @@ async function executeFullScanQuery(db, query, expressions, options) {
|
|
|
289
322
|
doc: data,
|
|
290
323
|
values: {},
|
|
291
324
|
origin,
|
|
325
|
+
docId: mindooDoc.getId(),
|
|
292
326
|
createdAt: new Date(mindooDoc.getCreatedAt()).toISOString(),
|
|
293
327
|
lastModifiedAt: new Date(mindooDoc.getLastModified()).toISOString(),
|
|
294
328
|
decryptionKeyId: mindooDoc.getDecryptionKeyId(),
|
|
@@ -303,10 +337,11 @@ async function executeFullScanQuery(db, query, expressions, options) {
|
|
|
303
337
|
}
|
|
304
338
|
candidates.push({
|
|
305
339
|
docId: mindooDoc.getId(),
|
|
306
|
-
fields: projectFields(data, query.fields),
|
|
340
|
+
fields: (0, queryInternals_1.projectFields)(data, query.fields),
|
|
307
341
|
lastModified: mindooDoc.getLastModified(),
|
|
308
342
|
textScore,
|
|
309
|
-
sortValues: computeSortValues(sortKeys, context, textScore),
|
|
343
|
+
sortValues: (0, queryInternals_1.computeSortValues)(sortKeys, context, textScore),
|
|
344
|
+
evaluationDoc: data,
|
|
310
345
|
});
|
|
311
346
|
}
|
|
312
347
|
const { rows, total: matchTotal } = sortAndPage(candidates, query, sortKeys);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executeQuery.js","sourceRoot":"","sources":["../../../src/core/query/executeQuery.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"executeQuery.js","sourceRoot":"","sources":["../../../src/core/query/executeQuery.ts"],"names":[],"mappings":";;AAyOA,oCA4HC;AAnWD,gDAUwB;AACxB,+DAAkE;AAElE,mFAAqF;AAErF,mCAUiB;AACjB,qDAQ0B;AAC1B,+DAI+B;AAE/B;;;;;;;GAOG;AACH,KAAK,UAAU,uBAAuB,CACpC,EAAY,EACZ,KAAwB,EACxB,OAA4B;IAE5B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACzB,MAAM,IAAI,wBAAgB,CACxB,2DAA2D,EAC3D,sBAAsB,CACvB,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACpC,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,wBAAgB,CACxB,mFAAmF;YACnF,mFAAmF,EACnF,sBAAsB,CACvB,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE;QAC5C,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,UAAU,CAAC,KAAkB;IACpC,OAAO;QACL,GAAG,KAAK;QACR,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC;QACjD,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;KACjD,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAClB,MAA6B,EAC7B,KAAa;IAEb,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAA,mDAAqC,EAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,wBAAgB,CACxB,GAAG,KAAK,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,sFAAsF;AACtF,SAAS,aAAa,CACpB,QAA4C,EAC5C,QAAgB;IAEhB,MAAM,MAAM,GAA6C,EAAE,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,GAAG;YACb,GAAG,OAAO;YACV,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,sBAAsB,KAAK,GAAG,CAAC;YACnE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;SAC7E,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0EAA0E;AAC1E,SAAS,uBAAuB,CAAC,KAAwB;IACvD,MAAM,WAAW,GAA4B,EAAE,CAAC;IAChD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAAC,WAAoC,EAAE,aAAsB;IAC5F,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAA,uCAAyB,EAAC,UAAU,CAAC,CAAC;QACtD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,wBAAgB,CACxB,6BAA6B,OAAO,mDAAmD;gBACvF,0FAA0F,CAC3F,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,IAAA,2CAA6B,EAAC,UAAU,CAAC,CAAC;QAC/D,IAAI,YAAY,CAAC,gBAAgB,EAAE,CAAC;YAClC,MAAM,IAAI,wBAAgB,CACxB,sDAAsD,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;gBACxG,8FAA8F,CAC/F,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,CAAC,eAAe,IAAI,CAAC,aAAa,EAAE,CAAC;YACnD,MAAM,IAAI,wBAAgB,CACxB,mGAAmG;gBACnG,8FAA8F,CAC/F,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,CAAC,kBAAkB,EAAE,CAAC;YACpC,MAAM,IAAI,wBAAgB,CACxB,oGAAoG;gBACpG,0DAA0D,CAC3D,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAClB,UAA0B,EAC1B,KAAwB,EACxB,QAA8B;IAE9B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,kCAAiB,EAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,KAAK,GAAG,KAAK,KAAK,SAAS;QAC/B,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;QAC1B,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAE1D,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE,CAC7D,SAAS,KAAK,SAAS;YACrB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE;YACjC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,CAC/C;QACD,KAAK;QACL,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,YAAY,CAChC,EAAY,EACZ,OAA6B,EAC7B,KAAkB,EAClB,OAA4B;IAE5B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAEnD,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,wBAAgB,CACxB,4FAA4F;gBAC5F,0FAA0F,CAC3F,CAAC;QACJ,CAAC;QACD,wBAAwB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC5C,OAAO,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,wBAAwB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,IAAA,2CAAqB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,wEAAwE;IACxE,6DAA6D;IAC7D,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,IAAA,iCAAmB,EAAC,UAAU,CAAC,EAAE,CAAC;YACnD,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACzC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,wBAAgB,CACxB,UAAU,IAAI,gDAAgD;gBAC9D,+EAA+E,CAChF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACpE,IAAI,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,wBAAgB,CAAC,mDAAmD,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,wBAAgB,CAAC,kDAAkD,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,4BAAW,EAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAA,kCAAiB,EAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAmB,EAAE,CAAC;IAEtC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QAC5C,IAAI,SAA6B,CAAC;QAClC,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,IAAA,gDAAyB,EAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAClF,MAAM,OAAO,GAAgC;YAC3C,GAAG,EAAE,aAAa;YAClB,MAAM,EAAE,EAAE;YACV,MAAM;YACN,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,cAAc,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE;YAC1D,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,SAAS,EAAE,EAAE;SACd,CAAC;QAEF,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAA,iCAAmB,EAAC,IAAA,gCAAkB,EAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;YACpF,SAAS;QACX,CAAC;QAED,UAAU,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,IAAA,8BAAa,EAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;YAClD,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,SAAS;YACT,UAAU,EAAE,IAAA,kCAAiB,EAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;YAC3D,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxE,uEAAuE;IACvE,+DAA+D;IAC/D,IAAI,QAAQ,GACV,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,YAAY;QACzD,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAE5B,sEAAsE;IACtE,uEAAuE;IACvE,kDAAkD;IAClD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,OAAO,GAA2B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAChE,GAAG;YACH,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,GAAG,EAAE,KAAK,CAAC,KAAK,CAAE,CAAC,aAAa;SACjC,CAAC,CAAC,CAAC;QACJ,MAAM,eAAe,GAAG,MAAM,IAAA,0CAAoB,EAAC;YACjD,QAAQ,EAAE,EAAE;YACZ,aAAa,EAAE,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,OAAO;YACvB,OAAO;YACP,KAAK,EAAE,CAAC;YACR,OAAO;SACR,CAAC,CAAC;QACH,QAAQ,GAAG,IAAA,8BAAa,EAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,mFAAmF;AACnF,KAAK,UAAU,sBAAsB,CACnC,EAAY,EACZ,QAA0B,EAC1B,IAA6B,EAC7B,OAAoC;IAEpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG;YAC7B,CAAC,CAAC,MAAM,CAAC,IAAA,gCAAkB,EAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;YAChE,CAAC,CAAC,IAAI,CAAC;QACT,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,IAAA,uCAAqB,EACpD,EAAE,CAAC,SAAS,EAAE,EACd,IAAI,EACJ,OAAO,CAAC,KAAK,EACb,WAAW,CACZ,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,oBAAoB,CACjC,EAAY,EACZ,KAAwB,EACxB,WAAoC,EACpC,OAA4B;IAE5B,iEAAiE;IACjE,qEAAqE;IACrE,oEAAoE;IACpE,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAEpE,MAAM,MAAM,GAAG,IAAA,4BAAW,EAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAA,kCAAiB,EAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAqB,EAAE,CAAC;IAC7C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAA,oCAAsB,EAAC,UAAU,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IACvC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,MAAM,UAAU,GAAmB,EAAE,CAAC;IAEtC,IAAI,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,SAAS,EAAE,CAAC;QACZ,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,wBAAgB,CAAC,iCAAiC,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,UAAU,IAAI,UAAU,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;YACrE,MAAM,IAAI,wBAAgB,CAAC,wDAAwD,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,GAAgB,CAAC;QAEnC,IAAI,SAA6B,CAAC;QAClC,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;YACpD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAA6B,CAAC;QAC5D,MAAM,WAAW,GAAgC;YAC/C,GAAG,EAAE,IAAI;YACT,MAAM,EAAE,EAAE;YACV,MAAM;YACN,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE;YACxB,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,WAAW,EAAE;YAC3D,cAAc,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,WAAW,EAAE;YACnE,eAAe,EAAE,SAAS,CAAC,kBAAkB,EAAE;YAC/C,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;YAClC,eAAe,EAAE,SAAS,CAAC,iBAAiB,EAAE;YAC9C,SAAS,EAAE,EAAE;SACd,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QACvF,MAAM,OAAO,GAAgC,EAAE,GAAG,WAAW,EAAE,SAAS,EAAE,CAAC;QAE3E,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAA,iCAAmB,EAAC,IAAA,gCAAkB,EAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;YACpF,SAAS;QACX,CAAC;QAED,UAAU,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE;YACxB,MAAM,EAAE,IAAA,8BAAa,EAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACzC,YAAY,EAAE,SAAS,CAAC,eAAe,EAAE;YACzC,SAAS;YACT,UAAU,EAAE,IAAA,kCAAiB,EAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;YAC3D,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7E,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC5D,CAAC"}
|