graphvault-studio 0.1.2 → 0.1.3
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/CHANGELOG.md +14 -0
- package/README.md +38 -2
- package/dist/admin-cli.d.ts +3 -0
- package/dist/admin-cli.js +52 -3
- package/dist/admin-cli.js.map +1 -1
- package/dist/admin-client.d.ts +20 -3
- package/dist/admin-client.js +206 -55
- package/dist/admin-client.js.map +1 -1
- package/dist/admin-compatibility.d.ts +2 -0
- package/dist/admin-compatibility.js +53 -0
- package/dist/admin-compatibility.js.map +1 -0
- package/dist/admin-integrity.d.ts +26 -0
- package/dist/admin-integrity.js +76 -0
- package/dist/admin-integrity.js.map +1 -0
- package/dist/admin-server.d.ts +6 -0
- package/dist/admin-server.js +102 -6
- package/dist/admin-server.js.map +1 -1
- package/dist/admin-storage-io.d.ts +10 -0
- package/dist/admin-storage-io.js +80 -0
- package/dist/admin-storage-io.js.map +1 -0
- package/dist/admin-subtree.d.ts +8 -0
- package/dist/admin-subtree.js +92 -0
- package/dist/admin-subtree.js.map +1 -0
- package/dist/admin-types.d.ts +71 -0
- package/dist/admin-ui.js +100 -12
- package/dist/admin-ui.js.map +1 -1
- package/docs/PUBLISHING.md +5 -2
- package/docs/RELEASE_NOTES_0.1.0.md +2 -0
- package/docs/REMOTE_STORAGE.md +19 -1
- package/package.json +5 -3
package/dist/admin-client.js
CHANGED
|
@@ -6,9 +6,13 @@ import { StorageWriter } from "@sprengmeister/graphvault/internal/storage/storag
|
|
|
6
6
|
import { verifyStorage } from "@sprengmeister/graphvault/internal/storage/storage-verifier";
|
|
7
7
|
import { buildParentIndexRecord } from "@sprengmeister/graphvault/internal/storage/storage-parent-index";
|
|
8
8
|
import { executeGvqlStatement, parseGvql } from "@sprengmeister/graphvault/internal/gvql/gvql";
|
|
9
|
+
import { envelopeHash, transactionRecordHash, transactionHashPayload, verifyAdminIntegrity, } from "./admin-integrity.js";
|
|
10
|
+
import { graphvaultLibraryCompatibility } from "./admin-compatibility.js";
|
|
9
11
|
import { referencedChildren, summarizeNode, visitNode } from "./admin-inspection.js";
|
|
10
12
|
import { encodeAdminValue, getNodePath, setNodePath } from "./admin-mutation.js";
|
|
11
13
|
import { pathFromObjectToRoot } from "./admin-parent-index.js";
|
|
14
|
+
import { loadAdminSubtree } from "./admin-subtree.js";
|
|
15
|
+
import { envelopeFromAdminManifest, readAdminObjectRecord, writeAdminManifest, writeAdminObjectRecords, } from "./admin-storage-io.js";
|
|
12
16
|
export class StorageAdminClient {
|
|
13
17
|
options;
|
|
14
18
|
target;
|
|
@@ -38,8 +42,11 @@ export class StorageAdminClient {
|
|
|
38
42
|
transactionId: manifest.transactionId,
|
|
39
43
|
...(currentSnapshot ? { currentSnapshot } : {}),
|
|
40
44
|
objectCount: manifest.objectIds.length,
|
|
45
|
+
library: graphvaultLibraryCompatibility(),
|
|
41
46
|
...(latestTransaction ? { latestTransaction } : {}),
|
|
42
47
|
...(typeDictionary ? { typeDictionary } : {}),
|
|
48
|
+
hardening: this.hardening(),
|
|
49
|
+
operations: await this.operations(manifest, latestTransaction),
|
|
43
50
|
...(verification ? { verification } : { verificationSkipped: true }),
|
|
44
51
|
};
|
|
45
52
|
}
|
|
@@ -52,7 +59,7 @@ export class StorageAdminClient {
|
|
|
52
59
|
const offset = Math.max(0, options.offset ?? 0);
|
|
53
60
|
const limit = Math.min(500, Math.max(1, options.limit ?? manifest.objectIds.length));
|
|
54
61
|
for (const objectId of manifest.objectIds.slice(offset, offset + limit)) {
|
|
55
|
-
const record = await this.
|
|
62
|
+
const record = await this.readObjectRecord(manifest, objectId);
|
|
56
63
|
items.push({
|
|
57
64
|
objectId,
|
|
58
65
|
kind: record.node.kind,
|
|
@@ -64,7 +71,7 @@ export class StorageAdminClient {
|
|
|
64
71
|
return { offset, limit, total: manifest.objectIds.length, items };
|
|
65
72
|
}
|
|
66
73
|
async getObject(objectId) {
|
|
67
|
-
return this.
|
|
74
|
+
return this.readObjectRecord(await this.requireManifest(), objectId);
|
|
68
75
|
}
|
|
69
76
|
async rootReference() {
|
|
70
77
|
const manifest = await this.requireManifest();
|
|
@@ -74,10 +81,11 @@ export class StorageAdminClient {
|
|
|
74
81
|
};
|
|
75
82
|
}
|
|
76
83
|
async listObjectChildren(objectId) {
|
|
77
|
-
const
|
|
84
|
+
const manifest = await this.requireManifest();
|
|
85
|
+
const record = await this.readObjectRecord(manifest, objectId);
|
|
78
86
|
const children = [];
|
|
79
87
|
for (const [path, to] of referencedChildren(record.node)) {
|
|
80
|
-
const child = await this.
|
|
88
|
+
const child = await this.readObjectRecord(manifest, to);
|
|
81
89
|
children.push({
|
|
82
90
|
from: objectId,
|
|
83
91
|
to,
|
|
@@ -92,11 +100,11 @@ export class StorageAdminClient {
|
|
|
92
100
|
async hierarchyPath(targetObjectId) {
|
|
93
101
|
const manifest = await this.requireManifest();
|
|
94
102
|
const index = await this.parentIndexFor(manifest);
|
|
95
|
-
return pathFromObjectToRoot(index, targetObjectId, (objectId) => this.
|
|
103
|
+
return pathFromObjectToRoot(index, targetObjectId, (objectId) => this.readObjectRecord(manifest, objectId));
|
|
96
104
|
}
|
|
97
105
|
async graph() {
|
|
98
106
|
const manifest = await this.requireManifest();
|
|
99
|
-
const envelope = await this.
|
|
107
|
+
const envelope = await this.envelopeFromManifest(manifest);
|
|
100
108
|
const nodes = [];
|
|
101
109
|
const edges = [];
|
|
102
110
|
for (const [objectId, node] of Object.entries(envelope.nodes)) {
|
|
@@ -113,6 +121,10 @@ export class StorageAdminClient {
|
|
|
113
121
|
}
|
|
114
122
|
return { root: envelope.root, nodes, edges };
|
|
115
123
|
}
|
|
124
|
+
async subtree(options = {}) {
|
|
125
|
+
const manifest = await this.requireManifest();
|
|
126
|
+
return loadAdminSubtree(manifest, (objectId) => this.readObjectRecord(manifest, objectId), options);
|
|
127
|
+
}
|
|
116
128
|
async search(query, options = {}) {
|
|
117
129
|
const manifest = await this.requireManifest();
|
|
118
130
|
const needle = query.trim().toLowerCase();
|
|
@@ -122,7 +134,7 @@ export class StorageAdminClient {
|
|
|
122
134
|
const limit = Math.min(500, Math.max(1, options.limit ?? 500));
|
|
123
135
|
const results = [];
|
|
124
136
|
for (const objectId of manifest.objectIds) {
|
|
125
|
-
const record = await this.
|
|
137
|
+
const record = await this.readObjectRecord(manifest, objectId);
|
|
126
138
|
visitNode(record.node, (path, value) => {
|
|
127
139
|
if (results.length >= limit) {
|
|
128
140
|
return;
|
|
@@ -140,31 +152,14 @@ export class StorageAdminClient {
|
|
|
140
152
|
}
|
|
141
153
|
async gvql(query, options = {}) {
|
|
142
154
|
const manifest = await this.requireManifest();
|
|
143
|
-
const envelope = await this.
|
|
155
|
+
const envelope = await this.envelopeFromManifest(manifest);
|
|
144
156
|
const statement = parseGvql(query);
|
|
145
157
|
const result = executeGvqlStatement(envelope, statement, {
|
|
146
158
|
...options,
|
|
147
159
|
allowMutations: this.allowMutations && statement.kind === "update" && !options.dryRun,
|
|
148
160
|
});
|
|
149
161
|
if (result.kind === "update" && !result.dryRun) {
|
|
150
|
-
|
|
151
|
-
const snapshotFile = `snapshot-${String(transactionId).padStart(12, "0")}.json`;
|
|
152
|
-
const changedObjectIds = Array.from(new Set(result.changes.map((change) => change.objectId))).sort((a, b) => Number(a) - Number(b));
|
|
153
|
-
await this.writer.writeObjectRecords(envelope, transactionId, changedObjectIds);
|
|
154
|
-
await this.writer.writeManifest(envelope, transactionId);
|
|
155
|
-
await this.writer.writeParentIndex(envelope, transactionId);
|
|
156
|
-
await this.writer.writeJson(join(this.layout.snapshotsDirectory, snapshotFile), envelope);
|
|
157
|
-
await this.target.writeTextAtomic(this.layout.currentFile, snapshotFile);
|
|
158
|
-
await this.writer.writeTransactionRecord({
|
|
159
|
-
format: "graphvault-transaction",
|
|
160
|
-
version: 1,
|
|
161
|
-
transactionId,
|
|
162
|
-
committedAt: new Date().toISOString(),
|
|
163
|
-
snapshotFile,
|
|
164
|
-
objectIds: Object.keys(envelope.nodes).sort((a, b) => Number(a) - Number(b)),
|
|
165
|
-
mode: "standard",
|
|
166
|
-
targetCount: changedObjectIds.length,
|
|
167
|
-
});
|
|
162
|
+
await this.commitEnvelope(manifest.transactionId, envelope, "standard", result.changes.length, options.metadata);
|
|
168
163
|
this.parentIndex = undefined;
|
|
169
164
|
}
|
|
170
165
|
return result;
|
|
@@ -207,13 +202,39 @@ export class StorageAdminClient {
|
|
|
207
202
|
}
|
|
208
203
|
}
|
|
209
204
|
async verify() {
|
|
210
|
-
|
|
205
|
+
let manifest;
|
|
206
|
+
const result = await verifyStorage({
|
|
211
207
|
target: this.target,
|
|
212
208
|
lazyDirectory: this.layout.lazyDirectory,
|
|
213
|
-
readManifest: () =>
|
|
209
|
+
readManifest: async () => {
|
|
210
|
+
manifest = await this.reader.readManifest();
|
|
211
|
+
return manifest;
|
|
212
|
+
},
|
|
214
213
|
readLatestTransactionRecord: () => this.reader.readLatestTransactionRecord(),
|
|
215
|
-
readObjectRecord: (objectId) =>
|
|
214
|
+
readObjectRecord: (objectId) => {
|
|
215
|
+
if (!manifest) {
|
|
216
|
+
throw new Error("Storage manifest not found or unreadable.");
|
|
217
|
+
}
|
|
218
|
+
return this.readObjectRecord(manifest, objectId);
|
|
219
|
+
},
|
|
216
220
|
});
|
|
221
|
+
result.warnings ??= [];
|
|
222
|
+
if (manifest) {
|
|
223
|
+
const integrity = await verifyAdminIntegrity({
|
|
224
|
+
target: this.target,
|
|
225
|
+
layout: this.layout,
|
|
226
|
+
manifest,
|
|
227
|
+
transactions: await this.listTransactions(),
|
|
228
|
+
});
|
|
229
|
+
result.checkedIntegrityHashes = (result.checkedIntegrityHashes ?? 0) + integrity.checkedIntegrityHashes;
|
|
230
|
+
result.warnings.push(...integrity.warnings);
|
|
231
|
+
result.errors.push(...integrity.errors);
|
|
232
|
+
result.ok = result.errors.length === 0;
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
result.checkedIntegrityHashes ??= 0;
|
|
236
|
+
}
|
|
237
|
+
return result;
|
|
217
238
|
}
|
|
218
239
|
async maintain(options = {}) {
|
|
219
240
|
this.assertMutationsAllowed();
|
|
@@ -228,7 +249,7 @@ export class StorageAdminClient {
|
|
|
228
249
|
}
|
|
229
250
|
async previewMutation(mutation) {
|
|
230
251
|
const manifest = await this.requireManifest();
|
|
231
|
-
const envelope = await this.
|
|
252
|
+
const envelope = await this.envelopeFromManifest(manifest);
|
|
232
253
|
const node = envelope.nodes[mutation.objectId];
|
|
233
254
|
if (!node) {
|
|
234
255
|
throw new Error(`Object ${mutation.objectId} does not exist.`);
|
|
@@ -243,33 +264,83 @@ export class StorageAdminClient {
|
|
|
243
264
|
async mutate(mutation) {
|
|
244
265
|
this.assertMutationsAllowed();
|
|
245
266
|
const manifest = await this.requireManifest();
|
|
246
|
-
const envelope = await this.
|
|
267
|
+
const envelope = await this.envelopeFromManifest(manifest);
|
|
247
268
|
const node = envelope.nodes[mutation.objectId];
|
|
248
269
|
if (!node) {
|
|
249
270
|
throw new Error(`Object ${mutation.objectId} does not exist.`);
|
|
250
271
|
}
|
|
251
272
|
setNodePath(node, mutation.path, encodeAdminValue(mutation.value));
|
|
252
|
-
const
|
|
253
|
-
const snapshotFile = `snapshot-${String(transactionId).padStart(12, "0")}.json`;
|
|
254
|
-
await this.writer.writeObjectRecords(envelope, transactionId, Object.keys(envelope.nodes));
|
|
255
|
-
await this.writer.writeManifest(envelope, transactionId);
|
|
256
|
-
await this.writer.writeParentIndex(envelope, transactionId);
|
|
257
|
-
await this.writer.writeJson(join(this.layout.snapshotsDirectory, snapshotFile), envelope);
|
|
258
|
-
await this.target.writeTextAtomic(this.layout.currentFile, snapshotFile);
|
|
259
|
-
const record = {
|
|
260
|
-
format: "graphvault-transaction",
|
|
261
|
-
version: 1,
|
|
262
|
-
transactionId,
|
|
263
|
-
committedAt: new Date().toISOString(),
|
|
264
|
-
snapshotFile,
|
|
265
|
-
objectIds: Object.keys(envelope.nodes).sort((a, b) => Number(a) - Number(b)),
|
|
266
|
-
mode: "standard",
|
|
267
|
-
targetCount: 1,
|
|
268
|
-
};
|
|
269
|
-
await this.writer.writeTransactionRecord(record);
|
|
273
|
+
const record = await this.commitEnvelope(manifest.transactionId, envelope, "standard", 1, mutation.metadata);
|
|
270
274
|
this.parentIndex = undefined;
|
|
271
275
|
return record;
|
|
272
276
|
}
|
|
277
|
+
async commitEnvelope(expectedTransactionId, envelope, mode, targetCount, metadata) {
|
|
278
|
+
await this.target.ensureDirectory(this.walDirectory);
|
|
279
|
+
const lock = await this.acquireWriteLock();
|
|
280
|
+
try {
|
|
281
|
+
const latestManifest = await this.requireManifest();
|
|
282
|
+
if (latestManifest.transactionId !== expectedTransactionId) {
|
|
283
|
+
throw new Error(`Store changed concurrently. Expected transaction ${expectedTransactionId}, found ${latestManifest.transactionId}.`);
|
|
284
|
+
}
|
|
285
|
+
const transactionId = expectedTransactionId + 1;
|
|
286
|
+
const snapshotFile = `snapshot-${String(transactionId).padStart(12, "0")}.json`;
|
|
287
|
+
const objectIds = Object.keys(envelope.nodes).sort((a, b) => Number(a) - Number(b));
|
|
288
|
+
const prepareFile = `transaction-${String(transactionId).padStart(12, "0")}.prepare.json`;
|
|
289
|
+
if (this.transactionLogEnabled) {
|
|
290
|
+
await this.writeWalJson(prepareFile, {
|
|
291
|
+
format: "graphvault-wal",
|
|
292
|
+
version: 1,
|
|
293
|
+
status: "prepared",
|
|
294
|
+
transactionId,
|
|
295
|
+
preparedAt: new Date().toISOString(),
|
|
296
|
+
snapshotFile,
|
|
297
|
+
objectIds,
|
|
298
|
+
mode,
|
|
299
|
+
targetCount,
|
|
300
|
+
envelope,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
await writeAdminObjectRecords(this.target, this.layout, envelope, transactionId, objectIds);
|
|
304
|
+
await this.writer.writeJson(join(this.layout.snapshotsDirectory, snapshotFile), envelope);
|
|
305
|
+
await this.assertLockValid(lock);
|
|
306
|
+
if (this.transactionLogEnabled) {
|
|
307
|
+
await this.writeWalJson(`transaction-${String(transactionId).padStart(12, "0")}.commit.json`, {
|
|
308
|
+
format: "graphvault-wal",
|
|
309
|
+
version: 1,
|
|
310
|
+
status: "committed",
|
|
311
|
+
transactionId,
|
|
312
|
+
committedAt: new Date().toISOString(),
|
|
313
|
+
prepareFile,
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
await this.assertLockValid(lock);
|
|
317
|
+
const previousTransaction = (await this.listTransactions())[0];
|
|
318
|
+
const record = {
|
|
319
|
+
format: "graphvault-transaction",
|
|
320
|
+
version: 1,
|
|
321
|
+
transactionId,
|
|
322
|
+
committedAt: new Date().toISOString(),
|
|
323
|
+
snapshotFile,
|
|
324
|
+
objectIds,
|
|
325
|
+
mode,
|
|
326
|
+
targetCount,
|
|
327
|
+
...(metadata ? { metadata } : {}),
|
|
328
|
+
envelopeHash: envelopeHash(envelope),
|
|
329
|
+
...(previousTransaction?.transactionHash ? { previousHash: previousTransaction.transactionHash } : {}),
|
|
330
|
+
};
|
|
331
|
+
record.transactionHash = transactionRecordHash(transactionHashPayload(record));
|
|
332
|
+
await this.writer.writeTransactionRecord(record);
|
|
333
|
+
await this.assertLockValid(lock);
|
|
334
|
+
await this.writer.writeParentIndex(envelope, transactionId);
|
|
335
|
+
await this.assertLockValid(lock);
|
|
336
|
+
await this.target.writeTextAtomic(this.layout.currentFile, snapshotFile);
|
|
337
|
+
await writeAdminManifest(this.target, this.layout, envelope, transactionId, record.transactionHash);
|
|
338
|
+
return record;
|
|
339
|
+
}
|
|
340
|
+
finally {
|
|
341
|
+
await lock.release();
|
|
342
|
+
}
|
|
343
|
+
}
|
|
273
344
|
async requireManifest() {
|
|
274
345
|
const manifest = await this.reader.readManifest();
|
|
275
346
|
if (!manifest) {
|
|
@@ -277,6 +348,79 @@ export class StorageAdminClient {
|
|
|
277
348
|
}
|
|
278
349
|
return manifest;
|
|
279
350
|
}
|
|
351
|
+
readObjectRecord(manifest, objectId) {
|
|
352
|
+
return readAdminObjectRecord(this.target, this.layout, manifest, objectId);
|
|
353
|
+
}
|
|
354
|
+
envelopeFromManifest(manifest) {
|
|
355
|
+
return envelopeFromAdminManifest(this.target, this.layout, manifest);
|
|
356
|
+
}
|
|
357
|
+
get walDirectory() {
|
|
358
|
+
return join(this.options.storageDirectory, "wal");
|
|
359
|
+
}
|
|
360
|
+
get transactionLogEnabled() {
|
|
361
|
+
return (this.options.transactionLog ?? "full") === "full";
|
|
362
|
+
}
|
|
363
|
+
hardening() {
|
|
364
|
+
return {
|
|
365
|
+
mutationsAllowed: this.allowMutations,
|
|
366
|
+
transactionLog: this.options.transactionLog ?? "full",
|
|
367
|
+
writerLock: "enabled",
|
|
368
|
+
fencingTokens: "used-when-supported",
|
|
369
|
+
staleLockRecovery: typeof this.options.staleLockTimeoutMs === "number",
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
async operations(manifest, latestTransaction) {
|
|
373
|
+
const walFiles = await this.reader.readDirectoryIfExists(this.walDirectory);
|
|
374
|
+
const prepareFiles = walFiles.filter((file) => file.endsWith(".prepare.json"));
|
|
375
|
+
const commitFiles = walFiles.filter((file) => file.endsWith(".commit.json"));
|
|
376
|
+
const publishedTransactionId = manifest.transactionId;
|
|
377
|
+
let latestWalTransactionId = 0;
|
|
378
|
+
let pendingWalCommits = 0;
|
|
379
|
+
for (const file of commitFiles) {
|
|
380
|
+
try {
|
|
381
|
+
const record = JSON.parse(await this.target.readText(join(this.walDirectory, file)));
|
|
382
|
+
if (record.format !== "graphvault-wal" || record.status !== "committed") {
|
|
383
|
+
continue;
|
|
384
|
+
}
|
|
385
|
+
latestWalTransactionId = Math.max(latestWalTransactionId, record.transactionId);
|
|
386
|
+
if (record.transactionId > publishedTransactionId) {
|
|
387
|
+
pendingWalCommits++;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
catch {
|
|
391
|
+
// Verification surfaces malformed WAL; the operations pane stays lightweight.
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return {
|
|
395
|
+
transactionLog: this.options.transactionLog ?? "full",
|
|
396
|
+
mutationsAllowed: this.allowMutations,
|
|
397
|
+
lockTimeoutMs: this.options.lockTimeoutMs ?? 5_000,
|
|
398
|
+
...(typeof this.options.staleLockTimeoutMs === "number" ? { staleLockTimeoutMs: this.options.staleLockTimeoutMs } : {}),
|
|
399
|
+
walPrepareFiles: prepareFiles.length,
|
|
400
|
+
walCommitFiles: commitFiles.length,
|
|
401
|
+
latestWalTransactionId,
|
|
402
|
+
latestJournalTransactionId: latestTransaction?.transactionId ?? 0,
|
|
403
|
+
publishedTransactionId,
|
|
404
|
+
pendingWalCommits,
|
|
405
|
+
checkedIntegrityHashes: manifest.latestTransactionHash ? 1 : 0,
|
|
406
|
+
status: pendingWalCommits > 0 ? "recovery-pending" : "healthy",
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
async acquireWriteLock() {
|
|
410
|
+
const acquireLock = this.target.acquireLock;
|
|
411
|
+
return acquireLock(this.layout.lockFile, this.options.lockTimeoutMs ?? 5_000, this.lockOptions());
|
|
412
|
+
}
|
|
413
|
+
lockOptions() {
|
|
414
|
+
return typeof this.options.staleLockTimeoutMs === "number" ? { staleLockTimeoutMs: this.options.staleLockTimeoutMs } : {};
|
|
415
|
+
}
|
|
416
|
+
async assertLockValid(lock) {
|
|
417
|
+
if (lock.assertValid) {
|
|
418
|
+
await lock.assertValid();
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
async writeWalJson(file, value) {
|
|
422
|
+
await this.target.writeTextAtomic(join(this.walDirectory, file), `${JSON.stringify(value, null, 2)}\n`);
|
|
423
|
+
}
|
|
280
424
|
async compact(keepLatest) {
|
|
281
425
|
const current = await this.reader.readCurrentPointer();
|
|
282
426
|
if (!current) {
|
|
@@ -298,7 +442,8 @@ export class StorageAdminClient {
|
|
|
298
442
|
}
|
|
299
443
|
async collectGarbage() {
|
|
300
444
|
const manifest = await this.requireManifest();
|
|
301
|
-
const
|
|
445
|
+
const liveJsonRecords = liveObjectRecordFiles(manifest, "json");
|
|
446
|
+
const liveBinaryRecords = liveObjectRecordFiles(manifest, "bin");
|
|
302
447
|
let keptObjects = 0;
|
|
303
448
|
let removedObjects = 0;
|
|
304
449
|
let keptBinaryObjects = 0;
|
|
@@ -307,8 +452,7 @@ export class StorageAdminClient {
|
|
|
307
452
|
for (const file of await this.reader.readDirectoryIfExists(directory)) {
|
|
308
453
|
if (!file.endsWith(".json"))
|
|
309
454
|
continue;
|
|
310
|
-
|
|
311
|
-
if (liveObjects.has(objectId))
|
|
455
|
+
if (liveJsonRecords.has(file))
|
|
312
456
|
keptObjects++;
|
|
313
457
|
else {
|
|
314
458
|
await this.target.remove(join(directory, file));
|
|
@@ -320,8 +464,7 @@ export class StorageAdminClient {
|
|
|
320
464
|
for (const file of await this.reader.readDirectoryIfExists(directory)) {
|
|
321
465
|
if (!file.endsWith(".bin"))
|
|
322
466
|
continue;
|
|
323
|
-
|
|
324
|
-
if (liveObjects.has(objectId))
|
|
467
|
+
if (liveBinaryRecords.has(file))
|
|
325
468
|
keptBinaryObjects++;
|
|
326
469
|
else {
|
|
327
470
|
await this.target.remove(join(directory, file));
|
|
@@ -343,10 +486,18 @@ export class StorageAdminClient {
|
|
|
343
486
|
this.parentIndex = storedIndex;
|
|
344
487
|
}
|
|
345
488
|
else {
|
|
346
|
-
this.parentIndex = buildParentIndexRecord(await this.
|
|
489
|
+
this.parentIndex = buildParentIndexRecord(await this.envelopeFromManifest(manifest), manifest.transactionId);
|
|
347
490
|
}
|
|
348
491
|
}
|
|
349
492
|
return this.parentIndex;
|
|
350
493
|
}
|
|
351
494
|
}
|
|
495
|
+
function liveObjectRecordFiles(manifest, extension) {
|
|
496
|
+
const files = new Set();
|
|
497
|
+
for (const objectId of manifest.objectIds) {
|
|
498
|
+
files.add(`${objectId}.${extension}`);
|
|
499
|
+
files.add(`${objectId}.${manifest.objectVersions?.[objectId] ?? manifest.transactionId}.${extension}`);
|
|
500
|
+
}
|
|
501
|
+
return files;
|
|
502
|
+
}
|
|
352
503
|
//# sourceMappingURL=admin-client.js.map
|
package/dist/admin-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-client.js","sourceRoot":"","sources":["../src/admin-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admin-client.js","sourceRoot":"","sources":["../src/admin-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2DAA2D,CAAC;AACzH,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,6DAA6D,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,iEAAiE,CAAC;AACzG,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAC/F,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,GAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,GAExB,MAAM,uBAAuB,CAAC;AAuF/B,MAAM,OAAO,kBAAkB;IAQA;IAPZ,MAAM,CAAgB;IACtB,MAAM,CAAgB;IACtB,MAAM,CAAgB;IACtB,MAAM,CAAgB;IACtB,cAAc,CAAU;IACjC,WAAW,CAAgC;IAEnD,YAA6B,OAAkC;QAAlC,YAAO,GAAP,OAAO,CAA2B;QAC7D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,qBAAqB,EAAE,CAAC;QACnE,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAgC,EAAE;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,CAAC,eAAe,EAAE,iBAAiB,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC7E,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;YAChC,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE;YACzC,IAAI,CAAC,kBAAkB,EAAE;SAC1B,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAChF,OAAO;YACL,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;YAC/C,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM;YACtC,OAAO,EAAE,8BAA8B,EAAE;YACzC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;YAC3B,UAAU,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,CAAC;YAC9D,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;SACrE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAA+C,EAAE;QACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,KAAK,GAA0B,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACrF,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC;YACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ;gBACR,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;gBACtB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxF,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;aACpC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB;QAC9B,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/H,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAAgB;QACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACxD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,QAAQ;gBACd,EAAE;gBACF,IAAI;gBACJ,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;gBACrB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrF,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,cAAsB;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClD,OAAO,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9G,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAqB,EAAE,CAAC;QACnC,MAAM,KAAK,GAAqB,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpE,CAAC,CAAC;YACH,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC9B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;oBAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAqD,EAAE;QACnE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,OAAO,gBAAgB,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IACtG,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,UAA8B,EAAE;QAC1D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/D,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACrC,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;oBAC5B,OAAO;gBACT,CAAC;gBACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACtC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClF,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;gBAC5B,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,UAA0E,EAAE;QACpG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,EAAE,SAAS,EAAE;YACvD,GAAG,OAAO;YACV,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM;SACtF,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC/C,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YACjH,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC/B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC9F,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAsB,CAAC;gBAC1H,IAAI,MAAM,CAAC,MAAM,KAAK,wBAAwB,EAAE,CAAC;oBAC/C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,6EAA6E;YAC/E,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC;gBAChE,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAmB,CAAC;QAClG,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,QAA8C,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;YACxC,YAAY,EAAE,KAAK,IAAI,EAAE;gBACvB,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAA0C,CAAC;gBACpF,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,2BAA2B,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE;YAC5E,gBAAgB,EAAE,CAAC,QAAQ,EAAE,EAAE;gBAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC/D,CAAC;gBACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACnD,CAAC;SACF,CAAkF,CAAC;QACpF,MAAM,CAAC,QAAQ,KAAK,EAAE,CAAC;QACvB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC;gBAC3C,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ;gBACR,YAAY,EAAE,MAAM,IAAI,CAAC,gBAAgB,EAAkC;aAC5E,CAAC,CAAC;YACH,MAAM,CAAC,sBAAsB,GAAG,CAAC,MAAM,CAAC,sBAAsB,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,sBAAsB,CAAC;YACxG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,sBAAsB,KAAK,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,UAAsC,EAAE;QACrD,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QACtD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC;QAClE,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAAwE;QACnF,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAC7C,IAAI,CAAC,MAAM,EACX,WAAW,CAAC,aAAa,IAAI,IAAI,qBAAqB,EAAE,EACxD,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAC7B,WAAW,CAAC,gBAAgB,CAC7B,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAuB;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,CAAC,QAAQ,kBAAkB,CAAC,CAAC;QACjE,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;YACxC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAuB;QAClC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,CAAC,QAAQ,kBAAkB,CAAC,CAAC;QACjE,CAAC;QACD,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7G,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,qBAA6B,EAC7B,QAA4B,EAC5B,IAAe,EACf,WAAmB,EACnB,QAAmC;QAEnC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YACpD,IAAI,cAAc,CAAC,aAAa,KAAK,qBAAqB,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,oDAAoD,qBAAqB,WAAW,cAAc,CAAC,aAAa,GAAG,CAAC,CAAC;YACvI,CAAC;YACD,MAAM,aAAa,GAAG,qBAAqB,GAAG,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,YAAY,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC;YAChF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACpF,MAAM,WAAW,GAAG,eAAe,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,eAAe,CAAC;YAC1F,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC/B,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;oBACnC,MAAM,EAAE,gBAAgB;oBACxB,OAAO,EAAE,CAAC;oBACV,MAAM,EAAE,UAAU;oBAClB,aAAa;oBACb,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACpC,YAAY;oBACZ,SAAS;oBACT,IAAI;oBACJ,WAAW;oBACX,QAAQ;iBACwB,CAAC,CAAC;YACtC,CAAC;YACD,MAAM,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;YAC5F,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC1F,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC/B,MAAM,IAAI,CAAC,YAAY,CAAC,eAAe,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,cAAc,EAAE;oBAC5F,MAAM,EAAE,gBAAgB;oBACxB,OAAO,EAAE,CAAC;oBACV,MAAM,EAAE,WAAW;oBACnB,aAAa;oBACb,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACrC,WAAW;iBACoB,CAAC,CAAC;YACrC,CAAC;YACD,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,mBAAmB,GAAG,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAA2C,CAAC;YACzG,MAAM,MAAM,GAA+B;gBACzC,MAAM,EAAE,wBAAwB;gBAChC,OAAO,EAAE,CAAC;gBACV,aAAa;gBACb,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACrC,YAAY;gBACZ,SAAS;gBACT,IAAI;gBACJ,WAAW;gBACX,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjC,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC;gBACpC,GAAG,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,mBAAmB,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvG,CAAC;YACF,MAAM,CAAC,eAAe,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/E,MAAM,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YAC5D,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACzE,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;YACpG,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAA0C,CAAC;QAC1F,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,gBAAgB,CAAC,QAAkC,EAAE,QAAgB;QAC3E,OAAO,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7E,CAAC;IAEO,oBAAoB,CAAC,QAAkC;QAC7D,OAAO,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,IAAY,qBAAqB;QAC/B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC,KAAK,MAAM,CAAC;IAC5D,CAAC;IAEO,SAAS;QACf,OAAO;YACL,gBAAgB,EAAE,IAAI,CAAC,cAAc;YACrC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,MAAM;YACrD,UAAU,EAAE,SAAS;YACrB,aAAa,EAAE,qBAAqB;YACpC,iBAAiB,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,QAAQ;SACvE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,QAAkC,EAAE,iBAAqC;QAChG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5E,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QAC/E,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;QAC7E,MAAM,sBAAsB,GAAG,QAAQ,CAAC,aAAa,CAAC;QACtD,IAAI,sBAAsB,GAAG,CAAC,CAAC;QAC/B,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAA0B,CAAC;gBAC9G,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBACxE,SAAS;gBACX,CAAC;gBACD,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;gBAChF,IAAI,MAAM,CAAC,aAAa,GAAG,sBAAsB,EAAE,CAAC;oBAClD,iBAAiB,EAAE,CAAC;gBACtB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,8EAA8E;YAChF,CAAC;QACH,CAAC;QACD,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,MAAM;YACrD,gBAAgB,EAAE,IAAI,CAAC,cAAc;YACrC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK;YAClD,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvH,eAAe,EAAE,YAAY,CAAC,MAAM;YACpC,cAAc,EAAE,WAAW,CAAC,MAAM;YAClC,sBAAsB;YACtB,0BAA0B,EAAE,iBAAiB,EAAE,aAAa,IAAI,CAAC;YACjE,sBAAsB;YACtB,iBAAiB;YACjB,sBAAsB,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,MAAM,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;SAC/D,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAIH,CAAC;QAC9B,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACpG,CAAC;IAEO,WAAW;QACjB,OAAO,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5H,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,IAAqB;QACjD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,KAAc;QACrD,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1G,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,UAAkB;QACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACjC,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;aACvE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aACxE,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACzE,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;IACvD,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,eAAe,GAAG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjE,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAC7B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,SAAS;gBACtC,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,WAAW,EAAE,CAAC;qBACxC,CAAC;oBACJ,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;oBAChD,cAAc,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtE,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,SAAS;gBACrC,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,iBAAiB,EAAE,CAAC;qBAChD,CAAC;oBACJ,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;oBAChD,oBAAoB,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,aAAa,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;IACzH,CAAC;IAEO,sBAAsB;QAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;QAC3G,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,QAAkC;QAC7D,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;YACnF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YACxD,IAAI,WAAW,EAAE,aAAa,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC1D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,WAAW,GAAG,sBAAsB,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC/G,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,SAAS,qBAAqB,CAAC,QAAkC,EAAE,SAAyB;IAC1F,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC1C,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;QACtC,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,aAAa,IAAI,SAAS,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
const RECOMMENDED_GRAPHVAULT_VERSION = "0.2.0";
|
|
5
|
+
export function graphvaultLibraryCompatibility() {
|
|
6
|
+
const installedVersion = readInstalledGraphVaultVersion();
|
|
7
|
+
const warnings = [];
|
|
8
|
+
if (!installedVersion) {
|
|
9
|
+
warnings.push("Could not determine installed GraphVault Library version.");
|
|
10
|
+
}
|
|
11
|
+
else if (compareSemver(installedVersion, RECOMMENDED_GRAPHVAULT_VERSION) < 0) {
|
|
12
|
+
warnings.push(`GraphVault Library ${installedVersion} is older than the recommended ${RECOMMENDED_GRAPHVAULT_VERSION}.`);
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
packageName: "@sprengmeister/graphvault",
|
|
16
|
+
recommendedVersion: RECOMMENDED_GRAPHVAULT_VERSION,
|
|
17
|
+
status: warnings.length ? "warning" : "ok",
|
|
18
|
+
warnings,
|
|
19
|
+
...(installedVersion ? { installedVersion } : {}),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function readInstalledGraphVaultVersion() {
|
|
23
|
+
try {
|
|
24
|
+
const require = createRequire(import.meta.url);
|
|
25
|
+
const entry = require.resolve("@sprengmeister/graphvault");
|
|
26
|
+
const packageJsonPath = join(dirname(dirname(entry)), "package.json");
|
|
27
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
|
|
28
|
+
return typeof packageJson.version === "string" ? packageJson.version : undefined;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function compareSemver(left, right) {
|
|
35
|
+
const leftParts = parseSemver(left);
|
|
36
|
+
const rightParts = parseSemver(right);
|
|
37
|
+
for (let index = 0; index < 3; index++) {
|
|
38
|
+
const diff = (leftParts[index] ?? 0) - (rightParts[index] ?? 0);
|
|
39
|
+
if (diff !== 0) {
|
|
40
|
+
return diff;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
function parseSemver(value) {
|
|
46
|
+
return value
|
|
47
|
+
.replace(/^[^\d]*/, "")
|
|
48
|
+
.split(/[.-]/)
|
|
49
|
+
.slice(0, 3)
|
|
50
|
+
.map((part) => Number.parseInt(part, 10))
|
|
51
|
+
.map((part) => (Number.isFinite(part) ? part : 0));
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=admin-compatibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-compatibility.js","sourceRoot":"","sources":["../src/admin-compatibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,8BAA8B,GAAG,OAAO,CAAC;AAE/C,MAAM,UAAU,8BAA8B;IAC5C,MAAM,gBAAgB,GAAG,8BAA8B,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IAC7E,CAAC;SAAM,IAAI,aAAa,CAAC,gBAAgB,EAAE,8BAA8B,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/E,QAAQ,CAAC,IAAI,CAAC,sBAAsB,gBAAgB,kCAAkC,8BAA8B,GAAG,CAAC,CAAC;IAC3H,CAAC;IACD,OAAO;QACL,WAAW,EAAE,2BAA2B;QACxC,kBAAkB,EAAE,8BAA8B;QAClD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;QAC1C,QAAQ;QACR,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B;IACrC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC3D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAA0B,CAAC;QAC/F,OAAO,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,KAAa;IAChD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK;SACT,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,KAAK,CAAC,MAAM,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { SerializedEnvelope, StorageTarget, TransactionRecord } from "@sprengmeister/graphvault/internal/core/types";
|
|
2
|
+
import type { StorageLayout } from "@sprengmeister/graphvault/internal/storage/storage-layout";
|
|
3
|
+
import type { VersionedStorageManifest } from "./admin-storage-io.js";
|
|
4
|
+
import type { AdminTransactionMetadata } from "./admin-types.js";
|
|
5
|
+
export type IntegrityTransactionRecord = TransactionRecord & {
|
|
6
|
+
envelopeHash?: string;
|
|
7
|
+
previousHash?: string;
|
|
8
|
+
transactionHash?: string;
|
|
9
|
+
metadata?: AdminTransactionMetadata;
|
|
10
|
+
};
|
|
11
|
+
export type IntegrityStorageManifest = VersionedStorageManifest & {
|
|
12
|
+
latestTransactionHash?: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function envelopeHash(envelope: SerializedEnvelope): string;
|
|
15
|
+
export declare function transactionRecordHash(record: Omit<IntegrityTransactionRecord, "transactionHash">): string;
|
|
16
|
+
export declare function transactionHashPayload(record: IntegrityTransactionRecord): Omit<IntegrityTransactionRecord, "transactionHash">;
|
|
17
|
+
export declare function verifyAdminIntegrity(options: {
|
|
18
|
+
target: StorageTarget;
|
|
19
|
+
layout: StorageLayout;
|
|
20
|
+
manifest: IntegrityStorageManifest;
|
|
21
|
+
transactions: IntegrityTransactionRecord[];
|
|
22
|
+
}): Promise<{
|
|
23
|
+
checkedIntegrityHashes: number;
|
|
24
|
+
warnings: string[];
|
|
25
|
+
errors: string[];
|
|
26
|
+
}>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
export function envelopeHash(envelope) {
|
|
4
|
+
return sha256Hex(canonicalJson(envelope));
|
|
5
|
+
}
|
|
6
|
+
export function transactionRecordHash(record) {
|
|
7
|
+
return sha256Hex(canonicalJson(record));
|
|
8
|
+
}
|
|
9
|
+
export function transactionHashPayload(record) {
|
|
10
|
+
const { transactionHash: _transactionHash, ...payload } = record;
|
|
11
|
+
return payload;
|
|
12
|
+
}
|
|
13
|
+
export async function verifyAdminIntegrity(options) {
|
|
14
|
+
const warnings = [];
|
|
15
|
+
const errors = [];
|
|
16
|
+
let checkedIntegrityHashes = 0;
|
|
17
|
+
let previousHash;
|
|
18
|
+
const records = [...options.transactions].sort((a, b) => a.transactionId - b.transactionId);
|
|
19
|
+
for (const record of records) {
|
|
20
|
+
if (record.previousHash || record.transactionHash) {
|
|
21
|
+
if (record.previousHash !== previousHash) {
|
|
22
|
+
errors.push(`Transaction ${record.transactionId} has an invalid previousHash.`);
|
|
23
|
+
}
|
|
24
|
+
if (!record.transactionHash) {
|
|
25
|
+
errors.push(`Transaction ${record.transactionId} is missing transactionHash.`);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
checkedIntegrityHashes++;
|
|
29
|
+
if (record.transactionHash !== transactionRecordHash(transactionHashPayload(record))) {
|
|
30
|
+
errors.push(`Transaction ${record.transactionId} has an invalid transactionHash.`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (record.envelopeHash) {
|
|
35
|
+
try {
|
|
36
|
+
const snapshot = JSON.parse(await options.target.readText(join(options.layout.snapshotsDirectory, record.snapshotFile)));
|
|
37
|
+
checkedIntegrityHashes++;
|
|
38
|
+
if (record.envelopeHash !== envelopeHash(snapshot)) {
|
|
39
|
+
errors.push(`Transaction ${record.transactionId} envelopeHash does not match ${record.snapshotFile}.`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Snapshot-free write profiles are valid.
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
previousHash = record.transactionHash ?? previousHash;
|
|
47
|
+
}
|
|
48
|
+
const published = records.find((record) => record.transactionId === options.manifest.transactionId);
|
|
49
|
+
if (options.manifest.latestTransactionHash) {
|
|
50
|
+
checkedIntegrityHashes++;
|
|
51
|
+
if (published?.transactionHash && options.manifest.latestTransactionHash !== published.transactionHash) {
|
|
52
|
+
errors.push(`Manifest latestTransactionHash does not match transaction ${published.transactionId}.`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (records.length > 0 && !records.at(-1)?.transactionHash) {
|
|
56
|
+
warnings.push("Latest transaction record has no transactionHash; integrity-chain verification is limited for legacy data.");
|
|
57
|
+
}
|
|
58
|
+
return { checkedIntegrityHashes, warnings, errors };
|
|
59
|
+
}
|
|
60
|
+
function canonicalJson(value) {
|
|
61
|
+
return JSON.stringify(canonicalValue(value));
|
|
62
|
+
}
|
|
63
|
+
function sha256Hex(value) {
|
|
64
|
+
return createHash("sha256").update(value).digest("hex");
|
|
65
|
+
}
|
|
66
|
+
function canonicalValue(value) {
|
|
67
|
+
if (Array.isArray(value)) {
|
|
68
|
+
return value.map((item) => canonicalValue(item));
|
|
69
|
+
}
|
|
70
|
+
if (!value || typeof value !== "object") {
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
const record = value;
|
|
74
|
+
return Object.fromEntries(Object.keys(record).sort().map((key) => [key, canonicalValue(record[key])]));
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=admin-integrity.js.map
|