@undefineds.co/xpod 0.3.27 → 0.3.31

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.
Files changed (36) hide show
  1. package/config/cli.json +8 -0
  2. package/dist/authorization/PodAuthorizationResources.d.ts +1 -0
  3. package/dist/authorization/PodAuthorizationResources.js +36 -4
  4. package/dist/authorization/PodAuthorizationResources.js.map +1 -1
  5. package/dist/provision/LocalPodProvisioningService.js +2 -0
  6. package/dist/provision/LocalPodProvisioningService.js.map +1 -1
  7. package/dist/provision/ProvisionPodCreator.js +16 -0
  8. package/dist/provision/ProvisionPodCreator.js.map +1 -1
  9. package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
  10. package/dist/storage/rdf/PostgresRdfEngine.d.ts +12 -15
  11. package/dist/storage/rdf/PostgresRdfEngine.js +1040 -150
  12. package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -1
  13. package/dist/storage/rdf/PostgresRdfEngine.jsonld +40 -52
  14. package/dist/storage/rdf/{RdfLocalQueryEngine.d.ts → RdfQueryExecutor.d.ts} +3 -3
  15. package/dist/storage/rdf/{RdfLocalQueryEngine.js → RdfQueryExecutor.js} +9 -9
  16. package/dist/storage/rdf/RdfQueryExecutor.js.map +1 -0
  17. package/dist/storage/rdf/RdfSparqlAdapter.d.ts +5 -5
  18. package/dist/storage/rdf/RdfSparqlAdapter.js +27 -27
  19. package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
  20. package/dist/storage/rdf/SolidRdfEngine.d.ts +2 -5
  21. package/dist/storage/rdf/SolidRdfEngine.js +6 -38
  22. package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
  23. package/dist/storage/rdf/SolidRdfEngine.jsonld +0 -12
  24. package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
  25. package/dist/storage/rdf/index.d.ts +3 -3
  26. package/dist/storage/rdf/index.js +6 -6
  27. package/dist/storage/rdf/index.js.map +1 -1
  28. package/dist/storage/rdf/models-benchmark.d.ts +9 -9
  29. package/dist/storage/rdf/models-benchmark.js +23 -23
  30. package/dist/storage/rdf/models-benchmark.js.map +1 -1
  31. package/dist/storage/rdf/types.d.ts +5 -5
  32. package/dist/storage/rdf/types.js.map +1 -1
  33. package/package.json +1 -1
  34. package/templates/pod/acp/profile/.acr +21 -0
  35. package/templates/pod/wac/profile/.acl.hbs +18 -0
  36. package/dist/storage/rdf/RdfLocalQueryEngine.js.map +0 -1
@@ -5,7 +5,7 @@ import { RdfQuadIndex } from './RdfQuadIndex';
5
5
  import { Rdf3xIndex } from './Rdf3xIndex';
6
6
  import { RdfTextIndex } from './RdfTextIndex';
7
7
  import { RdfVectorIndex } from './RdfVectorIndex';
8
- import type { RdfLocalQuery, RdfLocalQueryResult } from './types';
8
+ import type { RdfQuery, RdfQueryResult } from './types';
9
9
  export interface SolidRdfEngineOptions {
10
10
  index: RdfQuadIndex | RdfQuadIndexOptions;
11
11
  derivedIndexProfile?: RdfDerivedIndexProfile;
@@ -29,8 +29,6 @@ export declare class SolidRdfEngine implements RdfEngineLike {
29
29
  private readonly rdf3xPrimary;
30
30
  private readonly compatibilityStore?;
31
31
  private shadowComparator?;
32
- private rdf3xDirty;
33
- private rdf3xDataVersion;
34
32
  constructor(options: SolidRdfEngineOptions);
35
33
  open(): void;
36
34
  close(): Promise<void>;
@@ -43,7 +41,7 @@ export declare class SolidRdfEngine implements RdfEngineLike {
43
41
  insertedRows: number;
44
42
  };
45
43
  scan(query: RdfPatternQuery): RdfQuadIndexScanResult;
46
- query(query: RdfLocalQuery): RdfLocalQueryResult;
44
+ query(query: RdfQuery): RdfQueryResult;
47
45
  refreshDerivedIndexes(): RdfDerivedIndexRefreshResult;
48
46
  indexTextSource(source: RdfTextSourceInput, text: string, chunks?: RdfTextChunkInput[]): void;
49
47
  deleteTextSource(source: string): number;
@@ -59,7 +57,6 @@ export declare class SolidRdfEngine implements RdfEngineLike {
59
57
  private requireTextIndex;
60
58
  private requireVectorIndex;
61
59
  private requireRdf3xIndex;
62
- private markRdf3xDirty;
63
60
  private isRdf3xPrimaryReady;
64
61
  private refreshRdf3xDerivedIndex;
65
62
  }
@@ -8,10 +8,9 @@ const Rdf3xIndex_1 = require("./Rdf3xIndex");
8
8
  const RdfTextIndex_1 = require("./RdfTextIndex");
9
9
  const RdfVectorIndex_1 = require("./RdfVectorIndex");
10
10
  const RdfShadowComparator_1 = require("./RdfShadowComparator");
11
- const RdfLocalQueryEngine_1 = require("./RdfLocalQueryEngine");
11
+ const RdfQueryExecutor_1 = require("./RdfQueryExecutor");
12
12
  class SolidRdfEngine {
13
13
  constructor(options) {
14
- this.rdf3xDirty = true;
15
14
  const indexOptions = isRdfQuadIndexOptions(options.index) ? options.index : undefined;
16
15
  const rdf3xIndexInput = normalizeOptionalRdf3xIndex(options.rdf3xIndex);
17
16
  this.derivedIndexProfile = resolveDerivedIndexProfile(options, indexOptions, rdf3xIndexInput);
@@ -108,41 +107,27 @@ class SolidRdfEngine {
108
107
  }
109
108
  put(quads, options) {
110
109
  this.index.multiPut(Array.isArray(quads) ? quads : [quads], options);
111
- this.markRdf3xDirty();
112
110
  }
113
111
  replaceSource(quads, source) {
114
112
  this.index.replaceSource(quads, source);
115
- this.markRdf3xDirty();
116
113
  }
117
114
  deleteSource(source) {
118
- const changes = this.index.deleteSource(source);
119
- if (changes > 0) {
120
- this.markRdf3xDirty();
121
- }
122
- return changes;
115
+ return this.index.deleteSource(source);
123
116
  }
124
117
  delete(pattern) {
125
- const changes = this.index.delete(pattern);
126
- if (changes > 0) {
127
- this.markRdf3xDirty();
128
- }
129
- return changes;
118
+ return this.index.delete(pattern);
130
119
  }
131
120
  applyDelta(deletes, inserts, options) {
132
- const result = this.index.applyDelta(deletes, inserts, options);
133
- if (result.deletedRows > 0 || result.insertedRows > 0) {
134
- this.markRdf3xDirty();
135
- }
136
- return result;
121
+ return this.index.applyDelta(deletes, inserts, options);
137
122
  }
138
123
  scan(query) {
139
124
  return this.index.scan(query.pattern, query.options);
140
125
  }
141
126
  query(query) {
142
127
  const rdf3xReady = this.isRdf3xPrimaryReady();
143
- const result = new RdfLocalQueryEngine_1.RdfLocalQueryEngine(this.index, this.textIndex, this.vectorIndex, rdf3xReady ? this.rdf3xIndex : undefined).query(query);
128
+ const result = new RdfQueryExecutor_1.RdfQueryExecutor(this.index, this.textIndex, this.vectorIndex, rdf3xReady ? this.rdf3xIndex : undefined).query(query);
144
129
  if (this.rdf3xPrimary && this.rdf3xIndex && !rdf3xReady) {
145
- result.metrics.plan.unshift('Rdf3xPrimaryStaleFallback');
130
+ result.metrics.plan.unshift('Rdf3xPrimaryNeedsRefreshFallback');
146
131
  }
147
132
  return result;
148
133
  }
@@ -269,11 +254,6 @@ class SolidRdfEngine {
269
254
  }
270
255
  return this.rdf3xIndex;
271
256
  }
272
- markRdf3xDirty() {
273
- if (this.rdf3xIndex) {
274
- this.rdf3xDirty = true;
275
- }
276
- }
277
257
  isRdf3xPrimaryReady() {
278
258
  return Boolean(this.rdf3xPrimary && this.rdf3xIndex?.isSyncedWithCurrentQuads());
279
259
  }
@@ -282,19 +262,9 @@ class SolidRdfEngine {
282
262
  return undefined;
283
263
  }
284
264
  const dataVersion = factsDataVersion;
285
- if (!this.rdf3xDirty && this.rdf3xDataVersion === dataVersion) {
286
- return {
287
- refreshed: false,
288
- previousFactsDataVersion: dataVersion,
289
- factsDataVersion: dataVersion,
290
- syncedWithFacts: true,
291
- };
292
- }
293
265
  const rdf3xIndex = this.rdf3xIndex;
294
266
  const previousFactsDataVersion = rdf3xIndex.factsDataVersion();
295
267
  if (previousFactsDataVersion === dataVersion) {
296
- this.rdf3xDirty = false;
297
- this.rdf3xDataVersion = dataVersion;
298
268
  return {
299
269
  refreshed: false,
300
270
  previousFactsDataVersion,
@@ -303,8 +273,6 @@ class SolidRdfEngine {
303
273
  };
304
274
  }
305
275
  const rebuild = rdf3xIndex.rebuildFromCurrentQuads();
306
- this.rdf3xDirty = false;
307
- this.rdf3xDataVersion = rebuild.factsDataVersion;
308
276
  return {
309
277
  refreshed: true,
310
278
  previousFactsDataVersion,
@@ -1 +1 @@
1
- {"version":3,"file":"SolidRdfEngine.js","sourceRoot":"","sources":["../../../src/storage/rdf/SolidRdfEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Quad, Term } from '@rdfjs/types';\nimport { termToId } from 'n3';\nimport type { QuintPattern, QuintStore } from '../quint/types';\nimport { isTerm } from '../quint/types';\nimport type {\n Rdf3xObjectOperatorPattern,\n Rdf3xObjectTextSearchPattern,\n Rdf3xShadowJoinResult,\n Rdf3xShadowScanResult,\n Rdf3xTermInPattern,\n Rdf3xTermMetadataPattern,\n Rdf3xTermNotInPattern,\n Rdf3xIndexOptions,\n Rdf3xTriplePattern,\n RdfDerivedIndexProfile,\n RdfDerivedIndexRefreshResult,\n RdfEngineStorageStats,\n RdfIndexPutOptions,\n RdfPatternQuery,\n RdfQuadJoinOptions,\n RdfQuadJoinPattern,\n RdfQuadIndexOptions,\n RdfQuadIndexScanResult,\n RdfSourceInput,\n RdfShadowScanResult,\n RdfTextChunkInput,\n RdfTextIndexOptions,\n RdfTextSearchOptions,\n RdfTextSearchResult,\n RdfTextSourceInput,\n RdfVectorChunkInput,\n RdfVectorIndexOptions,\n RdfVectorSearchOptions,\n RdfVectorSearchResult,\n RdfVectorSourceInput,\n RdfEngineLike,\n} from './types';\nimport { RdfQuadIndex } from './RdfQuadIndex';\nimport { Rdf3xIndex } from './Rdf3xIndex';\nimport { RdfTextIndex } from './RdfTextIndex';\nimport { RdfVectorIndex } from './RdfVectorIndex';\nimport { RdfShadowComparator, diffQuads } from './RdfShadowComparator';\nimport { RdfLocalQueryEngine } from './RdfLocalQueryEngine';\nimport type { RdfLocalQuery, RdfLocalQueryResult } from './types';\n\nexport interface SolidRdfEngineOptions {\n index: RdfQuadIndex | RdfQuadIndexOptions;\n derivedIndexProfile?: RdfDerivedIndexProfile;\n textIndex?: RdfTextIndex | RdfTextIndexOptions;\n vectorIndex?: RdfVectorIndex | RdfVectorIndexOptions;\n rdf3xIndex?: Rdf3xIndex | Rdf3xIndexOptions;\n rdf3xPrimary?: boolean;\n compatibilityStore?: QuintStore;\n autoOpen?: boolean;\n}\n\nexport class SolidRdfEngine implements RdfEngineLike {\n public readonly index: RdfQuadIndex;\n public readonly textIndex?: RdfTextIndex;\n public readonly vectorIndex?: RdfVectorIndex;\n public readonly rdf3xIndex?: Rdf3xIndex;\n public readonly derivedIndexProfile: RdfDerivedIndexProfile;\n private readonly ownsIndex: boolean;\n private readonly ownsTextIndex: boolean;\n private readonly ownsVectorIndex: boolean;\n private readonly ownsRdf3xIndex: boolean;\n private readonly rdf3xPrimary: boolean;\n private readonly compatibilityStore?: QuintStore;\n private shadowComparator?: RdfShadowComparator;\n private rdf3xDirty = true;\n private rdf3xDataVersion: number | undefined;\n\n public constructor(options: SolidRdfEngineOptions) {\n const indexOptions = isRdfQuadIndexOptions(options.index) ? options.index : undefined;\n const rdf3xIndexInput = normalizeOptionalRdf3xIndex(options.rdf3xIndex);\n this.derivedIndexProfile = resolveDerivedIndexProfile(options, indexOptions, rdf3xIndexInput);\n if (options.index instanceof RdfQuadIndex) {\n this.index = options.index;\n this.ownsIndex = false;\n } else {\n this.index = new RdfQuadIndex(options.index);\n this.ownsIndex = true;\n }\n if (options.textIndex instanceof RdfTextIndex) {\n this.textIndex = options.textIndex;\n this.ownsTextIndex = false;\n } else if (isRdfTextIndexOptions(options.textIndex)) {\n this.textIndex = new RdfTextIndex(options.textIndex);\n this.ownsTextIndex = true;\n } else {\n this.ownsTextIndex = false;\n }\n if (options.vectorIndex instanceof RdfVectorIndex) {\n this.vectorIndex = options.vectorIndex;\n this.ownsVectorIndex = false;\n } else if (isRdfVectorIndexOptions(options.vectorIndex)) {\n this.vectorIndex = new RdfVectorIndex(options.vectorIndex);\n this.ownsVectorIndex = true;\n } else {\n this.ownsVectorIndex = false;\n }\n let autoConfiguredRdf3xPrimary = false;\n if (rdf3xIndexInput instanceof Rdf3xIndex) {\n this.rdf3xIndex = rdf3xIndexInput;\n this.ownsRdf3xIndex = false;\n } else if (isRdf3xIndexOptions(rdf3xIndexInput)) {\n this.rdf3xIndex = new Rdf3xIndex(rdf3xIndexInput);\n this.ownsRdf3xIndex = true;\n } else if (shouldAutoConfigureRdf3xIndex(this.derivedIndexProfile, rdf3xIndexInput, indexOptions)) {\n this.rdf3xIndex = new Rdf3xIndex({\n path: indexOptions.path,\n debug: indexOptions.debug,\n });\n this.ownsRdf3xIndex = true;\n autoConfiguredRdf3xPrimary = true;\n } else {\n this.ownsRdf3xIndex = false;\n }\n if (this.derivedIndexProfile === 'baseline' && this.rdf3xIndex) {\n throw new Error('SolidRdfEngine derivedIndexProfile=baseline cannot materialize an rdf3xIndex');\n }\n if (this.derivedIndexProfile === 'rdf3x' && !this.rdf3xIndex) {\n throw new Error('SolidRdfEngine derivedIndexProfile=rdf3x requires an rdf3xIndex or a file-backed index option');\n }\n if (options.rdf3xPrimary && !this.rdf3xIndex) {\n throw new Error('SolidRdfEngine rdf3xPrimary requires an rdf3xIndex or a file-backed index option');\n }\n this.rdf3xPrimary = options.rdf3xPrimary ?? autoConfiguredRdf3xPrimary;\n this.compatibilityStore = options.compatibilityStore;\n if (this.compatibilityStore) {\n this.shadowComparator = new RdfShadowComparator(this.index, this.compatibilityStore);\n }\n if (options.autoOpen) {\n this.open();\n }\n }\n\n public open(): void {\n this.index.open();\n this.textIndex?.open();\n this.vectorIndex?.open();\n this.rdf3xIndex?.open();\n }\n\n public async close(): Promise<void> {\n if (this.ownsRdf3xIndex) {\n this.rdf3xIndex?.close();\n }\n if (this.ownsVectorIndex) {\n this.vectorIndex?.close();\n }\n if (this.ownsTextIndex) {\n this.textIndex?.close();\n }\n if (this.ownsIndex) {\n this.index.close();\n }\n if (this.compatibilityStore) {\n await this.compatibilityStore.close();\n }\n }\n\n public put(quads: Quad | Quad[], options?: RdfIndexPutOptions): void {\n this.index.multiPut(Array.isArray(quads) ? quads : [quads], options);\n this.markRdf3xDirty();\n }\n\n public replaceSource(quads: Quad[], source: RdfSourceInput): void {\n this.index.replaceSource(quads, source);\n this.markRdf3xDirty();\n }\n\n public deleteSource(source: string): number {\n const changes = this.index.deleteSource(source);\n if (changes > 0) {\n this.markRdf3xDirty();\n }\n return changes;\n }\n\n public delete(pattern: QuintPattern): number {\n const changes = this.index.delete(pattern);\n if (changes > 0) {\n this.markRdf3xDirty();\n }\n return changes;\n }\n\n public applyDelta(deletes: QuintPattern[], inserts: Quad[], options?: RdfIndexPutOptions): { deletedRows: number; insertedRows: number } {\n const result = this.index.applyDelta(deletes, inserts, options);\n if (result.deletedRows > 0 || result.insertedRows > 0) {\n this.markRdf3xDirty();\n }\n return result;\n }\n\n public scan(query: RdfPatternQuery): RdfQuadIndexScanResult {\n return this.index.scan(query.pattern, query.options);\n }\n\n public query(query: RdfLocalQuery): RdfLocalQueryResult {\n const rdf3xReady = this.isRdf3xPrimaryReady();\n const result = new RdfLocalQueryEngine(\n this.index,\n this.textIndex,\n this.vectorIndex,\n rdf3xReady ? this.rdf3xIndex : undefined,\n ).query(query);\n if (this.rdf3xPrimary && this.rdf3xIndex && !rdf3xReady) {\n result.metrics.plan.unshift('Rdf3xPrimaryStaleFallback');\n }\n return result;\n }\n\n public refreshDerivedIndexes(): RdfDerivedIndexRefreshResult {\n const factsDataVersion = this.index.dataVersion();\n const rdf3x = this.refreshRdf3xDerivedIndex(factsDataVersion);\n return {\n derivedIndexProfile: this.derivedIndexProfile,\n factsDataVersion,\n ...(rdf3x ? { rdf3x } : {}),\n };\n }\n\n public indexTextSource(source: RdfTextSourceInput, text: string, chunks?: RdfTextChunkInput[]): void {\n this.requireTextIndex().indexText(source, text, chunks);\n }\n\n public deleteTextSource(source: string): number {\n return this.requireTextIndex().deleteSource(source);\n }\n\n public searchText(options: RdfTextSearchOptions | string): RdfTextSearchResult[] {\n return this.requireTextIndex().search(typeof options === 'string' ? { query: options } : options);\n }\n\n public indexVectorSource(source: RdfVectorSourceInput, chunks: RdfVectorChunkInput[]): void {\n this.requireVectorIndex().indexVector(source, chunks);\n }\n\n public deleteVectorSource(source: string): number {\n return this.requireVectorIndex().deleteSource(source);\n }\n\n public searchVector(options: RdfVectorSearchOptions): RdfVectorSearchResult[] {\n return this.requireVectorIndex().search(options);\n }\n\n public async shadowScan(query: RdfPatternQuery): Promise<RdfShadowScanResult> {\n if (!this.shadowComparator) {\n throw new Error('SolidRdfEngine shadowScan requires a compatibility QuintStore');\n }\n return this.shadowComparator.compareScan(query);\n }\n\n public shadowRdf3xScan(query: RdfPatternQuery): Rdf3xShadowScanResult {\n const rdf3xIndex = this.requireRdf3xIndex();\n const rdf3xPattern = toRdf3xTriplePattern(query.pattern);\n const rebuild = rdf3xIndex.rebuildFromCurrentQuads();\n const primary = this.index.scan(query.pattern, query.options);\n const rdf3x = rdf3xIndex.scan(rdf3xPattern, query.options);\n const diff = diffQuads(rdf3x.quads, primary.quads);\n const orderedMatch = canonicalQuadKeys(primary.quads).join('\\n') === canonicalQuadKeys(rdf3x.quads).join('\\n');\n return {\n matched: diff.missingFromPrimary.length === 0 && diff.extraInPrimary.length === 0,\n orderedMatch,\n primary: primary.quads,\n rdf3x: rdf3x.quads,\n diff: {\n missingFromRdf3x: diff.extraInPrimary,\n extraInRdf3x: diff.missingFromPrimary,\n },\n primaryMetrics: primary.metrics,\n rdf3xMetrics: rdf3x.metrics,\n rebuild,\n };\n }\n\n public shadowRdf3xJoin(\n patterns: RdfQuadJoinPattern[],\n options?: RdfQuadJoinOptions,\n ): Rdf3xShadowJoinResult {\n const rdf3xIndex = this.requireRdf3xIndex();\n const rebuild = rdf3xIndex.rebuildFromCurrentQuads();\n const primary = this.index.joinPatterns(patterns, options);\n const rdf3x = rdf3xIndex.joinPatterns(patterns, options);\n const primaryKeys = primary.bindings.map(canonicalBindingKey);\n const rdf3xKeys = rdf3x.bindings.map(canonicalBindingKey);\n const diff = diffBindingKeys(rdf3xKeys, primaryKeys);\n return {\n matched: diff.missingFromRdf3x.length === 0 && diff.extraInRdf3x.length === 0,\n orderedMatch: primaryKeys.join('\\n') === rdf3xKeys.join('\\n'),\n primary: primary.bindings,\n rdf3x: rdf3x.bindings,\n diff,\n primaryMetrics: primary.metrics,\n rdf3xMetrics: rdf3x.metrics,\n rebuild,\n };\n }\n\n public supportsPrimary(query: RdfPatternQuery): boolean {\n try {\n this.index.scan(query.pattern, { ...query.options, limit: 0 });\n return true;\n } catch {\n return false;\n }\n }\n\n public storageStats(): RdfEngineStorageStats {\n const facts = this.index.stats();\n const rdf3x = this.rdf3xIndex\n ? {\n stats: this.rdf3xIndex.stats(),\n syncedWithFacts: this.rdf3xIndex.isSyncedWithCurrentQuads(),\n }\n : undefined;\n const factsBytes = facts.databaseBytes;\n const derivedBytes = rdf3x?.stats.databaseBytes ?? 0;\n const totalBytes = factsBytes + derivedBytes;\n return {\n derivedIndexProfile: this.derivedIndexProfile,\n facts,\n ...(rdf3x ? { rdf3x } : {}),\n factsBytes,\n derivedBytes,\n totalBytes,\n derivedToFactsRatio: byteRatio(derivedBytes, factsBytes),\n totalToFactsRatio: byteRatio(totalBytes, factsBytes),\n };\n }\n\n private requireTextIndex(): RdfTextIndex {\n if (!this.textIndex) {\n throw new Error('SolidRdfEngine text index is not configured');\n }\n return this.textIndex;\n }\n\n private requireVectorIndex(): RdfVectorIndex {\n if (!this.vectorIndex) {\n throw new Error('SolidRdfEngine vector index is not configured');\n }\n return this.vectorIndex;\n }\n\n private requireRdf3xIndex(): Rdf3xIndex {\n if (!this.rdf3xIndex) {\n throw new Error('SolidRdfEngine RDF-3X shadow index is not configured');\n }\n return this.rdf3xIndex;\n }\n\n private markRdf3xDirty(): void {\n if (this.rdf3xIndex) {\n this.rdf3xDirty = true;\n }\n }\n\n private isRdf3xPrimaryReady(): boolean {\n return Boolean(this.rdf3xPrimary && this.rdf3xIndex?.isSyncedWithCurrentQuads());\n }\n\n private refreshRdf3xDerivedIndex(factsDataVersion = this.index.dataVersion()): RdfDerivedIndexRefreshResult['rdf3x'] {\n if (!this.rdf3xIndex) {\n return undefined;\n }\n const dataVersion = factsDataVersion;\n if (!this.rdf3xDirty && this.rdf3xDataVersion === dataVersion) {\n return {\n refreshed: false,\n previousFactsDataVersion: dataVersion,\n factsDataVersion: dataVersion,\n syncedWithFacts: true,\n };\n }\n const rdf3xIndex = this.rdf3xIndex;\n const previousFactsDataVersion = rdf3xIndex.factsDataVersion();\n if (previousFactsDataVersion === dataVersion) {\n this.rdf3xDirty = false;\n this.rdf3xDataVersion = dataVersion;\n return {\n refreshed: false,\n previousFactsDataVersion,\n factsDataVersion: dataVersion,\n syncedWithFacts: true,\n };\n }\n const rebuild = rdf3xIndex.rebuildFromCurrentQuads();\n this.rdf3xDirty = false;\n this.rdf3xDataVersion = rebuild.factsDataVersion;\n return {\n refreshed: true,\n previousFactsDataVersion,\n factsDataVersion: rebuild.factsDataVersion,\n syncedWithFacts: rdf3xIndex.factsDataVersion() === this.index.dataVersion(),\n rebuild,\n };\n }\n}\n\nfunction isRdfTextIndexOptions(input: RdfTextIndex | RdfTextIndexOptions | undefined): input is RdfTextIndexOptions {\n return input !== undefined && !(input instanceof RdfTextIndex) && typeof input.path === 'string';\n}\n\nfunction isRdfVectorIndexOptions(input: RdfVectorIndex | RdfVectorIndexOptions | undefined): input is RdfVectorIndexOptions {\n return input !== undefined && !(input instanceof RdfVectorIndex) && typeof input.path === 'string';\n}\n\nfunction isRdf3xIndexOptions(input: Rdf3xIndex | Rdf3xIndexOptions | undefined): input is Rdf3xIndexOptions {\n return input !== undefined && !(input instanceof Rdf3xIndex) && typeof input.path === 'string';\n}\n\nfunction isRdfQuadIndexOptions(input: RdfQuadIndex | RdfQuadIndexOptions): input is RdfQuadIndexOptions {\n return !(input instanceof RdfQuadIndex) && typeof input.path === 'string';\n}\n\nfunction resolveDerivedIndexProfile(\n options: SolidRdfEngineOptions,\n indexOptions: RdfQuadIndexOptions | undefined,\n rdf3xIndexInput: Rdf3xIndex | Rdf3xIndexOptions | undefined,\n): RdfDerivedIndexProfile {\n if (options.derivedIndexProfile) {\n return options.derivedIndexProfile;\n }\n if (rdf3xIndexInput !== undefined || options.rdf3xPrimary === true) {\n return 'rdf3x';\n }\n if (options.rdf3xPrimary === false) {\n return 'baseline';\n }\n return indexOptions !== undefined && indexOptions.path !== ':memory:' ? 'rdf3x' : 'baseline';\n}\n\nfunction shouldAutoConfigureRdf3xIndex(\n profile: RdfDerivedIndexProfile,\n rdf3xIndexInput: Rdf3xIndex | Rdf3xIndexOptions | undefined,\n indexOptions: RdfQuadIndexOptions | undefined,\n): indexOptions is RdfQuadIndexOptions {\n return profile === 'rdf3x'\n && rdf3xIndexInput === undefined\n && indexOptions !== undefined\n && indexOptions.path !== ':memory:';\n}\n\nfunction normalizeOptionalRdf3xIndex(input: Rdf3xIndex | Rdf3xIndexOptions | undefined): Rdf3xIndex | Rdf3xIndexOptions | undefined {\n if (input instanceof Rdf3xIndex || isRdf3xIndexOptions(input)) {\n return input;\n }\n return undefined;\n}\n\nfunction byteRatio(numerator: number, denominator: number): number {\n if (denominator <= 0) {\n return numerator <= 0 ? 1 : Number.POSITIVE_INFINITY;\n }\n return numerator / denominator;\n}\n\nfunction canonicalQuadKeys(quads: Quad[]): string[] {\n return quads.map((quad) => [\n termToId(quad.graph as any),\n termToId(quad.subject as any),\n termToId(quad.predicate as any),\n termToId(quad.object as any),\n ].join('\\u001f'));\n}\n\nfunction canonicalBindingKey(binding: Record<string, unknown>): string {\n return Object.keys(binding)\n .sort()\n .map((key) => `${key}=${termToId(binding[key] as any)}`)\n .join('\\u001f');\n}\n\nfunction diffBindingKeys(\n rdf3xKeys: string[],\n primaryKeys: string[],\n): Rdf3xShadowJoinResult['diff'] {\n const rdf3xSet = new Set(rdf3xKeys);\n const primarySet = new Set(primaryKeys);\n return {\n missingFromRdf3x: Array.from(primarySet).filter((key) => !rdf3xSet.has(key)).sort(),\n extraInRdf3x: Array.from(rdf3xSet).filter((key) => !primarySet.has(key)).sort(),\n };\n}\n\nfunction toRdf3xTriplePattern(pattern: QuintPattern): Rdf3xTriplePattern {\n const result: Rdf3xTriplePattern = {};\n for (const key of ['graph', 'subject', 'predicate', 'object'] as const) {\n const value = pattern[key];\n if (!value) {\n continue;\n }\n if (!isTerm(value)) {\n if (isRdf3xTermInPattern(value)) {\n result[key] = value;\n continue;\n }\n if (isRdf3xTermNotInPattern(value)) {\n result[key] = value;\n continue;\n }\n if (isRdf3xCompatibleOperatorPattern(key, value)) {\n result[key] = value as Rdf3xTriplePattern[typeof key];\n continue;\n }\n throw new Error(`SolidRdfEngine RDF-3X shadow scan only supports exact ${key} terms${key === 'graph' ? ' or graph $startsWith' : ''}`);\n }\n result[key] = value;\n }\n return result;\n}\n\nfunction isRdf3xTermInPattern(value: unknown): value is Rdf3xTermInPattern {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && Object.keys(value).length === 1\n && Array.isArray((value as { $in?: unknown }).$in)\n && ((value as { $in: unknown[] }).$in).length > 0\n && ((value as { $in: unknown[] }).$in).every((entry) => isTerm(entry as any));\n}\n\nfunction isRdf3xTermNotInPattern(value: unknown): value is Rdf3xTermNotInPattern {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && Object.keys(value).length === 1\n && Array.isArray((value as { $notIn?: unknown }).$notIn)\n && ((value as { $notIn: unknown[] }).$notIn).length > 0\n && ((value as { $notIn: unknown[] }).$notIn).every((entry) => isTerm(entry as any));\n}\n\nfunction isRdf3xCompatibleOperatorPattern(\n key: keyof Rdf3xTriplePattern,\n value: unknown,\n): value is Rdf3xTermMetadataPattern | Rdf3xObjectOperatorPattern {\n if (value === null || typeof value !== 'object' || 'termType' in value) {\n return false;\n }\n const allowed = new Set<string>([\n '$in',\n '$notIn',\n '$termType',\n '$language',\n '$notLanguage',\n '$langMatches',\n '$datatype',\n '$notDatatype',\n ...(key === 'graph' ? ['$startsWith'] : []),\n ...(key === 'object' ? ['$gt', '$gte', '$lt', '$lte', '$contains', '$endsWith'] : []),\n ]);\n if (Object.keys(value).length === 0 || Object.keys(value).some((operator) => !allowed.has(operator))) {\n return false;\n }\n const operators = value as Record<string, unknown>;\n if (operators.$in !== undefined && !isRdf3xTermInPattern({ $in: operators.$in })) return false;\n if (operators.$notIn !== undefined && !isRdf3xTermNotInPattern({ $notIn: operators.$notIn })) return false;\n if (operators.$startsWith !== undefined && typeof operators.$startsWith !== 'string') return false;\n if (operators.$termType !== undefined && !['iri', 'blank', 'literal', 'numeric'].includes(operators.$termType as string)) return false;\n for (const languageOperator of ['$language', '$notLanguage', '$langMatches']) {\n if (operators[languageOperator] !== undefined && typeof operators[languageOperator] !== 'string') return false;\n }\n for (const datatypeOperator of ['$datatype', '$notDatatype']) {\n const datatype = operators[datatypeOperator];\n if (datatype !== undefined && (!isTerm(datatype as any) || (datatype as Term).termType !== 'NamedNode')) return false;\n }\n if (key === 'object') {\n for (const rangeOperator of ['$gt', '$gte', '$lt', '$lte']) {\n const rangeValue = operators[rangeOperator];\n if (rangeValue !== undefined && !isRdf3xObjectRangeValue(rangeValue)) return false;\n }\n for (const textOperator of ['$contains', '$endsWith'] satisfies Array<keyof Rdf3xObjectTextSearchPattern>) {\n if (operators[textOperator] !== undefined && typeof operators[textOperator] !== 'string') return false;\n }\n }\n return true;\n}\n\nfunction isRdf3xObjectRangeValue(value: unknown): boolean {\n if (typeof value === 'number') {\n return Number.isFinite(value);\n }\n if (typeof value === 'string') {\n return true;\n }\n return isTerm(value as any);\n}\n"]}
1
+ {"version":3,"file":"SolidRdfEngine.js","sourceRoot":"","sources":["../../../src/storage/rdf/SolidRdfEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Quad, Term } from '@rdfjs/types';\nimport { termToId } from 'n3';\nimport type { QuintPattern, QuintStore } from '../quint/types';\nimport { isTerm } from '../quint/types';\nimport type {\n Rdf3xObjectOperatorPattern,\n Rdf3xObjectTextSearchPattern,\n Rdf3xShadowJoinResult,\n Rdf3xShadowScanResult,\n Rdf3xTermInPattern,\n Rdf3xTermMetadataPattern,\n Rdf3xTermNotInPattern,\n Rdf3xIndexOptions,\n Rdf3xTriplePattern,\n RdfDerivedIndexProfile,\n RdfDerivedIndexRefreshResult,\n RdfEngineStorageStats,\n RdfIndexPutOptions,\n RdfPatternQuery,\n RdfQuadJoinOptions,\n RdfQuadJoinPattern,\n RdfQuadIndexOptions,\n RdfQuadIndexScanResult,\n RdfSourceInput,\n RdfShadowScanResult,\n RdfTextChunkInput,\n RdfTextIndexOptions,\n RdfTextSearchOptions,\n RdfTextSearchResult,\n RdfTextSourceInput,\n RdfVectorChunkInput,\n RdfVectorIndexOptions,\n RdfVectorSearchOptions,\n RdfVectorSearchResult,\n RdfVectorSourceInput,\n RdfEngineLike,\n} from './types';\nimport { RdfQuadIndex } from './RdfQuadIndex';\nimport { Rdf3xIndex } from './Rdf3xIndex';\nimport { RdfTextIndex } from './RdfTextIndex';\nimport { RdfVectorIndex } from './RdfVectorIndex';\nimport { RdfShadowComparator, diffQuads } from './RdfShadowComparator';\nimport { RdfQueryExecutor } from './RdfQueryExecutor';\nimport type { RdfQuery, RdfQueryResult } from './types';\n\nexport interface SolidRdfEngineOptions {\n index: RdfQuadIndex | RdfQuadIndexOptions;\n derivedIndexProfile?: RdfDerivedIndexProfile;\n textIndex?: RdfTextIndex | RdfTextIndexOptions;\n vectorIndex?: RdfVectorIndex | RdfVectorIndexOptions;\n rdf3xIndex?: Rdf3xIndex | Rdf3xIndexOptions;\n rdf3xPrimary?: boolean;\n compatibilityStore?: QuintStore;\n autoOpen?: boolean;\n}\n\nexport class SolidRdfEngine implements RdfEngineLike {\n public readonly index: RdfQuadIndex;\n public readonly textIndex?: RdfTextIndex;\n public readonly vectorIndex?: RdfVectorIndex;\n public readonly rdf3xIndex?: Rdf3xIndex;\n public readonly derivedIndexProfile: RdfDerivedIndexProfile;\n private readonly ownsIndex: boolean;\n private readonly ownsTextIndex: boolean;\n private readonly ownsVectorIndex: boolean;\n private readonly ownsRdf3xIndex: boolean;\n private readonly rdf3xPrimary: boolean;\n private readonly compatibilityStore?: QuintStore;\n private shadowComparator?: RdfShadowComparator;\n\n public constructor(options: SolidRdfEngineOptions) {\n const indexOptions = isRdfQuadIndexOptions(options.index) ? options.index : undefined;\n const rdf3xIndexInput = normalizeOptionalRdf3xIndex(options.rdf3xIndex);\n this.derivedIndexProfile = resolveDerivedIndexProfile(options, indexOptions, rdf3xIndexInput);\n if (options.index instanceof RdfQuadIndex) {\n this.index = options.index;\n this.ownsIndex = false;\n } else {\n this.index = new RdfQuadIndex(options.index);\n this.ownsIndex = true;\n }\n if (options.textIndex instanceof RdfTextIndex) {\n this.textIndex = options.textIndex;\n this.ownsTextIndex = false;\n } else if (isRdfTextIndexOptions(options.textIndex)) {\n this.textIndex = new RdfTextIndex(options.textIndex);\n this.ownsTextIndex = true;\n } else {\n this.ownsTextIndex = false;\n }\n if (options.vectorIndex instanceof RdfVectorIndex) {\n this.vectorIndex = options.vectorIndex;\n this.ownsVectorIndex = false;\n } else if (isRdfVectorIndexOptions(options.vectorIndex)) {\n this.vectorIndex = new RdfVectorIndex(options.vectorIndex);\n this.ownsVectorIndex = true;\n } else {\n this.ownsVectorIndex = false;\n }\n let autoConfiguredRdf3xPrimary = false;\n if (rdf3xIndexInput instanceof Rdf3xIndex) {\n this.rdf3xIndex = rdf3xIndexInput;\n this.ownsRdf3xIndex = false;\n } else if (isRdf3xIndexOptions(rdf3xIndexInput)) {\n this.rdf3xIndex = new Rdf3xIndex(rdf3xIndexInput);\n this.ownsRdf3xIndex = true;\n } else if (shouldAutoConfigureRdf3xIndex(this.derivedIndexProfile, rdf3xIndexInput, indexOptions)) {\n this.rdf3xIndex = new Rdf3xIndex({\n path: indexOptions.path,\n debug: indexOptions.debug,\n });\n this.ownsRdf3xIndex = true;\n autoConfiguredRdf3xPrimary = true;\n } else {\n this.ownsRdf3xIndex = false;\n }\n if (this.derivedIndexProfile === 'baseline' && this.rdf3xIndex) {\n throw new Error('SolidRdfEngine derivedIndexProfile=baseline cannot materialize an rdf3xIndex');\n }\n if (this.derivedIndexProfile === 'rdf3x' && !this.rdf3xIndex) {\n throw new Error('SolidRdfEngine derivedIndexProfile=rdf3x requires an rdf3xIndex or a file-backed index option');\n }\n if (options.rdf3xPrimary && !this.rdf3xIndex) {\n throw new Error('SolidRdfEngine rdf3xPrimary requires an rdf3xIndex or a file-backed index option');\n }\n this.rdf3xPrimary = options.rdf3xPrimary ?? autoConfiguredRdf3xPrimary;\n this.compatibilityStore = options.compatibilityStore;\n if (this.compatibilityStore) {\n this.shadowComparator = new RdfShadowComparator(this.index, this.compatibilityStore);\n }\n if (options.autoOpen) {\n this.open();\n }\n }\n\n public open(): void {\n this.index.open();\n this.textIndex?.open();\n this.vectorIndex?.open();\n this.rdf3xIndex?.open();\n }\n\n public async close(): Promise<void> {\n if (this.ownsRdf3xIndex) {\n this.rdf3xIndex?.close();\n }\n if (this.ownsVectorIndex) {\n this.vectorIndex?.close();\n }\n if (this.ownsTextIndex) {\n this.textIndex?.close();\n }\n if (this.ownsIndex) {\n this.index.close();\n }\n if (this.compatibilityStore) {\n await this.compatibilityStore.close();\n }\n }\n\n public put(quads: Quad | Quad[], options?: RdfIndexPutOptions): void {\n this.index.multiPut(Array.isArray(quads) ? quads : [quads], options);\n }\n\n public replaceSource(quads: Quad[], source: RdfSourceInput): void {\n this.index.replaceSource(quads, source);\n }\n\n public deleteSource(source: string): number {\n return this.index.deleteSource(source);\n }\n\n public delete(pattern: QuintPattern): number {\n return this.index.delete(pattern);\n }\n\n public applyDelta(deletes: QuintPattern[], inserts: Quad[], options?: RdfIndexPutOptions): { deletedRows: number; insertedRows: number } {\n return this.index.applyDelta(deletes, inserts, options);\n }\n\n public scan(query: RdfPatternQuery): RdfQuadIndexScanResult {\n return this.index.scan(query.pattern, query.options);\n }\n\n public query(query: RdfQuery): RdfQueryResult {\n const rdf3xReady = this.isRdf3xPrimaryReady();\n const result = new RdfQueryExecutor(\n this.index,\n this.textIndex,\n this.vectorIndex,\n rdf3xReady ? this.rdf3xIndex : undefined,\n ).query(query);\n if (this.rdf3xPrimary && this.rdf3xIndex && !rdf3xReady) {\n result.metrics.plan.unshift('Rdf3xPrimaryNeedsRefreshFallback');\n }\n return result;\n }\n\n public refreshDerivedIndexes(): RdfDerivedIndexRefreshResult {\n const factsDataVersion = this.index.dataVersion();\n const rdf3x = this.refreshRdf3xDerivedIndex(factsDataVersion);\n return {\n derivedIndexProfile: this.derivedIndexProfile,\n factsDataVersion,\n ...(rdf3x ? { rdf3x } : {}),\n };\n }\n\n public indexTextSource(source: RdfTextSourceInput, text: string, chunks?: RdfTextChunkInput[]): void {\n this.requireTextIndex().indexText(source, text, chunks);\n }\n\n public deleteTextSource(source: string): number {\n return this.requireTextIndex().deleteSource(source);\n }\n\n public searchText(options: RdfTextSearchOptions | string): RdfTextSearchResult[] {\n return this.requireTextIndex().search(typeof options === 'string' ? { query: options } : options);\n }\n\n public indexVectorSource(source: RdfVectorSourceInput, chunks: RdfVectorChunkInput[]): void {\n this.requireVectorIndex().indexVector(source, chunks);\n }\n\n public deleteVectorSource(source: string): number {\n return this.requireVectorIndex().deleteSource(source);\n }\n\n public searchVector(options: RdfVectorSearchOptions): RdfVectorSearchResult[] {\n return this.requireVectorIndex().search(options);\n }\n\n public async shadowScan(query: RdfPatternQuery): Promise<RdfShadowScanResult> {\n if (!this.shadowComparator) {\n throw new Error('SolidRdfEngine shadowScan requires a compatibility QuintStore');\n }\n return this.shadowComparator.compareScan(query);\n }\n\n public shadowRdf3xScan(query: RdfPatternQuery): Rdf3xShadowScanResult {\n const rdf3xIndex = this.requireRdf3xIndex();\n const rdf3xPattern = toRdf3xTriplePattern(query.pattern);\n const rebuild = rdf3xIndex.rebuildFromCurrentQuads();\n const primary = this.index.scan(query.pattern, query.options);\n const rdf3x = rdf3xIndex.scan(rdf3xPattern, query.options);\n const diff = diffQuads(rdf3x.quads, primary.quads);\n const orderedMatch = canonicalQuadKeys(primary.quads).join('\\n') === canonicalQuadKeys(rdf3x.quads).join('\\n');\n return {\n matched: diff.missingFromPrimary.length === 0 && diff.extraInPrimary.length === 0,\n orderedMatch,\n primary: primary.quads,\n rdf3x: rdf3x.quads,\n diff: {\n missingFromRdf3x: diff.extraInPrimary,\n extraInRdf3x: diff.missingFromPrimary,\n },\n primaryMetrics: primary.metrics,\n rdf3xMetrics: rdf3x.metrics,\n rebuild,\n };\n }\n\n public shadowRdf3xJoin(\n patterns: RdfQuadJoinPattern[],\n options?: RdfQuadJoinOptions,\n ): Rdf3xShadowJoinResult {\n const rdf3xIndex = this.requireRdf3xIndex();\n const rebuild = rdf3xIndex.rebuildFromCurrentQuads();\n const primary = this.index.joinPatterns(patterns, options);\n const rdf3x = rdf3xIndex.joinPatterns(patterns, options);\n const primaryKeys = primary.bindings.map(canonicalBindingKey);\n const rdf3xKeys = rdf3x.bindings.map(canonicalBindingKey);\n const diff = diffBindingKeys(rdf3xKeys, primaryKeys);\n return {\n matched: diff.missingFromRdf3x.length === 0 && diff.extraInRdf3x.length === 0,\n orderedMatch: primaryKeys.join('\\n') === rdf3xKeys.join('\\n'),\n primary: primary.bindings,\n rdf3x: rdf3x.bindings,\n diff,\n primaryMetrics: primary.metrics,\n rdf3xMetrics: rdf3x.metrics,\n rebuild,\n };\n }\n\n public supportsPrimary(query: RdfPatternQuery): boolean {\n try {\n this.index.scan(query.pattern, { ...query.options, limit: 0 });\n return true;\n } catch {\n return false;\n }\n }\n\n public storageStats(): RdfEngineStorageStats {\n const facts = this.index.stats();\n const rdf3x = this.rdf3xIndex\n ? {\n stats: this.rdf3xIndex.stats(),\n syncedWithFacts: this.rdf3xIndex.isSyncedWithCurrentQuads(),\n }\n : undefined;\n const factsBytes = facts.databaseBytes;\n const derivedBytes = rdf3x?.stats.databaseBytes ?? 0;\n const totalBytes = factsBytes + derivedBytes;\n return {\n derivedIndexProfile: this.derivedIndexProfile,\n facts,\n ...(rdf3x ? { rdf3x } : {}),\n factsBytes,\n derivedBytes,\n totalBytes,\n derivedToFactsRatio: byteRatio(derivedBytes, factsBytes),\n totalToFactsRatio: byteRatio(totalBytes, factsBytes),\n };\n }\n\n private requireTextIndex(): RdfTextIndex {\n if (!this.textIndex) {\n throw new Error('SolidRdfEngine text index is not configured');\n }\n return this.textIndex;\n }\n\n private requireVectorIndex(): RdfVectorIndex {\n if (!this.vectorIndex) {\n throw new Error('SolidRdfEngine vector index is not configured');\n }\n return this.vectorIndex;\n }\n\n private requireRdf3xIndex(): Rdf3xIndex {\n if (!this.rdf3xIndex) {\n throw new Error('SolidRdfEngine RDF-3X shadow index is not configured');\n }\n return this.rdf3xIndex;\n }\n\n private isRdf3xPrimaryReady(): boolean {\n return Boolean(this.rdf3xPrimary && this.rdf3xIndex?.isSyncedWithCurrentQuads());\n }\n\n private refreshRdf3xDerivedIndex(factsDataVersion = this.index.dataVersion()): RdfDerivedIndexRefreshResult['rdf3x'] {\n if (!this.rdf3xIndex) {\n return undefined;\n }\n const dataVersion = factsDataVersion;\n const rdf3xIndex = this.rdf3xIndex;\n const previousFactsDataVersion = rdf3xIndex.factsDataVersion();\n if (previousFactsDataVersion === dataVersion) {\n return {\n refreshed: false,\n previousFactsDataVersion,\n factsDataVersion: dataVersion,\n syncedWithFacts: true,\n };\n }\n const rebuild = rdf3xIndex.rebuildFromCurrentQuads();\n return {\n refreshed: true,\n previousFactsDataVersion,\n factsDataVersion: rebuild.factsDataVersion,\n syncedWithFacts: rdf3xIndex.factsDataVersion() === this.index.dataVersion(),\n rebuild,\n };\n }\n}\n\nfunction isRdfTextIndexOptions(input: RdfTextIndex | RdfTextIndexOptions | undefined): input is RdfTextIndexOptions {\n return input !== undefined && !(input instanceof RdfTextIndex) && typeof input.path === 'string';\n}\n\nfunction isRdfVectorIndexOptions(input: RdfVectorIndex | RdfVectorIndexOptions | undefined): input is RdfVectorIndexOptions {\n return input !== undefined && !(input instanceof RdfVectorIndex) && typeof input.path === 'string';\n}\n\nfunction isRdf3xIndexOptions(input: Rdf3xIndex | Rdf3xIndexOptions | undefined): input is Rdf3xIndexOptions {\n return input !== undefined && !(input instanceof Rdf3xIndex) && typeof input.path === 'string';\n}\n\nfunction isRdfQuadIndexOptions(input: RdfQuadIndex | RdfQuadIndexOptions): input is RdfQuadIndexOptions {\n return !(input instanceof RdfQuadIndex) && typeof input.path === 'string';\n}\n\nfunction resolveDerivedIndexProfile(\n options: SolidRdfEngineOptions,\n indexOptions: RdfQuadIndexOptions | undefined,\n rdf3xIndexInput: Rdf3xIndex | Rdf3xIndexOptions | undefined,\n): RdfDerivedIndexProfile {\n if (options.derivedIndexProfile) {\n return options.derivedIndexProfile;\n }\n if (rdf3xIndexInput !== undefined || options.rdf3xPrimary === true) {\n return 'rdf3x';\n }\n if (options.rdf3xPrimary === false) {\n return 'baseline';\n }\n return indexOptions !== undefined && indexOptions.path !== ':memory:' ? 'rdf3x' : 'baseline';\n}\n\nfunction shouldAutoConfigureRdf3xIndex(\n profile: RdfDerivedIndexProfile,\n rdf3xIndexInput: Rdf3xIndex | Rdf3xIndexOptions | undefined,\n indexOptions: RdfQuadIndexOptions | undefined,\n): indexOptions is RdfQuadIndexOptions {\n return profile === 'rdf3x'\n && rdf3xIndexInput === undefined\n && indexOptions !== undefined\n && indexOptions.path !== ':memory:';\n}\n\nfunction normalizeOptionalRdf3xIndex(input: Rdf3xIndex | Rdf3xIndexOptions | undefined): Rdf3xIndex | Rdf3xIndexOptions | undefined {\n if (input instanceof Rdf3xIndex || isRdf3xIndexOptions(input)) {\n return input;\n }\n return undefined;\n}\n\nfunction byteRatio(numerator: number, denominator: number): number {\n if (denominator <= 0) {\n return numerator <= 0 ? 1 : Number.POSITIVE_INFINITY;\n }\n return numerator / denominator;\n}\n\nfunction canonicalQuadKeys(quads: Quad[]): string[] {\n return quads.map((quad) => [\n termToId(quad.graph as any),\n termToId(quad.subject as any),\n termToId(quad.predicate as any),\n termToId(quad.object as any),\n ].join('\\u001f'));\n}\n\nfunction canonicalBindingKey(binding: Record<string, unknown>): string {\n return Object.keys(binding)\n .sort()\n .map((key) => `${key}=${termToId(binding[key] as any)}`)\n .join('\\u001f');\n}\n\nfunction diffBindingKeys(\n rdf3xKeys: string[],\n primaryKeys: string[],\n): Rdf3xShadowJoinResult['diff'] {\n const rdf3xSet = new Set(rdf3xKeys);\n const primarySet = new Set(primaryKeys);\n return {\n missingFromRdf3x: Array.from(primarySet).filter((key) => !rdf3xSet.has(key)).sort(),\n extraInRdf3x: Array.from(rdf3xSet).filter((key) => !primarySet.has(key)).sort(),\n };\n}\n\nfunction toRdf3xTriplePattern(pattern: QuintPattern): Rdf3xTriplePattern {\n const result: Rdf3xTriplePattern = {};\n for (const key of ['graph', 'subject', 'predicate', 'object'] as const) {\n const value = pattern[key];\n if (!value) {\n continue;\n }\n if (!isTerm(value)) {\n if (isRdf3xTermInPattern(value)) {\n result[key] = value;\n continue;\n }\n if (isRdf3xTermNotInPattern(value)) {\n result[key] = value;\n continue;\n }\n if (isRdf3xCompatibleOperatorPattern(key, value)) {\n result[key] = value as Rdf3xTriplePattern[typeof key];\n continue;\n }\n throw new Error(`SolidRdfEngine RDF-3X shadow scan only supports exact ${key} terms${key === 'graph' ? ' or graph $startsWith' : ''}`);\n }\n result[key] = value;\n }\n return result;\n}\n\nfunction isRdf3xTermInPattern(value: unknown): value is Rdf3xTermInPattern {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && Object.keys(value).length === 1\n && Array.isArray((value as { $in?: unknown }).$in)\n && ((value as { $in: unknown[] }).$in).length > 0\n && ((value as { $in: unknown[] }).$in).every((entry) => isTerm(entry as any));\n}\n\nfunction isRdf3xTermNotInPattern(value: unknown): value is Rdf3xTermNotInPattern {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && Object.keys(value).length === 1\n && Array.isArray((value as { $notIn?: unknown }).$notIn)\n && ((value as { $notIn: unknown[] }).$notIn).length > 0\n && ((value as { $notIn: unknown[] }).$notIn).every((entry) => isTerm(entry as any));\n}\n\nfunction isRdf3xCompatibleOperatorPattern(\n key: keyof Rdf3xTriplePattern,\n value: unknown,\n): value is Rdf3xTermMetadataPattern | Rdf3xObjectOperatorPattern {\n if (value === null || typeof value !== 'object' || 'termType' in value) {\n return false;\n }\n const allowed = new Set<string>([\n '$in',\n '$notIn',\n '$termType',\n '$language',\n '$notLanguage',\n '$langMatches',\n '$datatype',\n '$notDatatype',\n ...(key === 'graph' ? ['$startsWith'] : []),\n ...(key === 'object' ? ['$gt', '$gte', '$lt', '$lte', '$contains', '$endsWith'] : []),\n ]);\n if (Object.keys(value).length === 0 || Object.keys(value).some((operator) => !allowed.has(operator))) {\n return false;\n }\n const operators = value as Record<string, unknown>;\n if (operators.$in !== undefined && !isRdf3xTermInPattern({ $in: operators.$in })) return false;\n if (operators.$notIn !== undefined && !isRdf3xTermNotInPattern({ $notIn: operators.$notIn })) return false;\n if (operators.$startsWith !== undefined && typeof operators.$startsWith !== 'string') return false;\n if (operators.$termType !== undefined && !['iri', 'blank', 'literal', 'numeric'].includes(operators.$termType as string)) return false;\n for (const languageOperator of ['$language', '$notLanguage', '$langMatches']) {\n if (operators[languageOperator] !== undefined && typeof operators[languageOperator] !== 'string') return false;\n }\n for (const datatypeOperator of ['$datatype', '$notDatatype']) {\n const datatype = operators[datatypeOperator];\n if (datatype !== undefined && (!isTerm(datatype as any) || (datatype as Term).termType !== 'NamedNode')) return false;\n }\n if (key === 'object') {\n for (const rangeOperator of ['$gt', '$gte', '$lt', '$lte']) {\n const rangeValue = operators[rangeOperator];\n if (rangeValue !== undefined && !isRdf3xObjectRangeValue(rangeValue)) return false;\n }\n for (const textOperator of ['$contains', '$endsWith'] satisfies Array<keyof Rdf3xObjectTextSearchPattern>) {\n if (operators[textOperator] !== undefined && typeof operators[textOperator] !== 'string') return false;\n }\n }\n return true;\n}\n\nfunction isRdf3xObjectRangeValue(value: unknown): boolean {\n if (typeof value === 'number') {\n return Number.isFinite(value);\n }\n if (typeof value === 'string') {\n return true;\n }\n return isTerm(value as any);\n}\n"]}
@@ -207,14 +207,6 @@
207
207
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_shadowComparator",
208
208
  "memberFieldName": "shadowComparator"
209
209
  },
210
- {
211
- "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_rdf3xDirty",
212
- "memberFieldName": "rdf3xDirty"
213
- },
214
- {
215
- "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_rdf3xDataVersion",
216
- "memberFieldName": "rdf3xDataVersion"
217
- },
218
210
  {
219
211
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_constructor",
220
212
  "memberFieldName": "constructor"
@@ -315,10 +307,6 @@
315
307
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_requireRdf3xIndex",
316
308
  "memberFieldName": "requireRdf3xIndex"
317
309
  },
318
- {
319
- "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_markRdf3xDirty",
320
- "memberFieldName": "markRdf3xDirty"
321
- },
322
310
  {
323
311
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_isRdf3xPrimaryReady",
324
312
  "memberFieldName": "isRdf3xPrimaryReady"
@@ -1 +1 @@
1
- {"version":3,"file":"SolidRdfSparqlEngine.js","sourceRoot":"","sources":["../../../src/storage/rdf/SolidRdfSparqlEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArrayIterator } from 'asynciterator';\nimport type { AsyncIterator } from 'asynciterator';\nimport type { DefaultGraph, Quad, Quad_Object, Term, Variable } from '@rdfjs/types';\nimport { DataFactory as RdfDataFactory } from 'rdf-data-factory';\nimport { termToId } from 'n3';\nimport type { SparqlEngine } from '../sparql/SubgraphQueryEngine';\nimport type { QuintPattern } from '../quint/types';\nimport { DisabledSparqlFeatureError, RdfSparqlAdapter, UnsupportedSparqlQueryError } from './RdfSparqlAdapter';\nimport type { ShadowRdfQuintStore } from './ShadowRdfQuintStore';\nimport type { RdfBindingRow, RdfEngineLike, RdfLocalQueryResult, RdfQueryTermPattern } from './types';\n\nexport interface SolidRdfSparqlEngineOptions {\n rdfEngine: RdfEngineLike;\n fallback?: SparqlEngine;\n shadowStore?: ShadowRdfQuintStore;\n enablePrimary?: boolean;\n onFallback?: (reason: SolidRdfSparqlFallback) => void;\n}\n\nexport interface SolidRdfSparqlFallback {\n operation: 'queryBindings' | 'queryBoolean' | 'queryQuads' | 'queryVoid' | 'constructGraph' | 'listGraphs';\n reason: string;\n}\n\nexport type SolidRdfSparqlOperation = SolidRdfSparqlFallback['operation'];\n\nexport interface SolidRdfSparqlOperationCount {\n operation: SolidRdfSparqlOperation;\n primaryCount: number;\n fallbackCount: number;\n totalCount: number;\n fallbackRate: number;\n primaryDurationMs: number;\n fallbackDurationMs: number;\n}\n\nexport interface SolidRdfSparqlPrimaryMetric {\n operation: SolidRdfSparqlOperation;\n durationMs: number;\n scannedRows: number;\n returnedRows: number;\n plan: string[];\n indexChoices: string[];\n}\n\nexport interface SolidRdfSparqlFallbackMetric extends SolidRdfSparqlFallback {\n durationMs: number;\n}\n\nexport interface SolidRdfSparqlMetricsSnapshot {\n primaryCount: number;\n fallbackCount: number;\n totalCount: number;\n fallbackRate: number;\n operationCounts: SolidRdfSparqlOperationCount[];\n lastPrimary?: SolidRdfSparqlPrimaryMetric;\n lastFallback?: SolidRdfSparqlFallbackMetric;\n}\n\nexport interface SolidRdfSparqlFallbackBudget {\n maxFallbackRate?: number;\n maxFallbackCount?: number;\n operations?: SolidRdfSparqlOperation[];\n}\n\ntype BindingsStream = AsyncIterator<RdfBindings> & {\n metadata?: () => Promise<{ variables: import('@rdfjs/types').Variable[] }>;\n};\n\ninterface MutableOperationCount {\n primaryCount: number;\n fallbackCount: number;\n primaryDurationMs: number;\n fallbackDurationMs: number;\n}\n\nconst rdfDataFactory = new RdfDataFactory();\n\nexport class SolidRdfSparqlEngine implements SparqlEngine {\n private readonly adapter = new RdfSparqlAdapter();\n private readonly rdfEngine: RdfEngineLike;\n private readonly fallback?: SparqlEngine;\n private readonly shadowStore?: ShadowRdfQuintStore;\n private readonly enablePrimary: boolean;\n private readonly onFallback?: (reason: SolidRdfSparqlFallback) => void;\n private readonly operationCounts = new Map<SolidRdfSparqlOperation, MutableOperationCount>();\n private lastPrimary?: SolidRdfSparqlPrimaryMetric;\n private lastFallback?: SolidRdfSparqlFallbackMetric;\n\n public constructor(\n rdfEngine: RdfEngineLike,\n fallback?: SparqlEngine,\n shadowStore?: ShadowRdfQuintStore,\n enablePrimary = true,\n onFallback?: (reason: SolidRdfSparqlFallback) => void,\n ) {\n this.rdfEngine = rdfEngine;\n this.fallback = fallback;\n this.shadowStore = shadowStore;\n this.enablePrimary = enablePrimary;\n this.onFallback = onFallback;\n }\n\n public async queryBindings(query: string, basePath: string): Promise<BindingsStream> {\n await this.ensureReady();\n if (!this.enablePrimary) {\n return this.fallbackWith('queryBindings', 'primary disabled', (fallback) => fallback.queryBindings(query, basePath));\n }\n\n const start = Date.now();\n try {\n const compiled = this.adapter.compile(query, basePath);\n if (compiled.queryType !== 'SELECT') {\n return this.fallbackWith('queryBindings', `compiled ${compiled.queryType} cannot produce bindings`, (fallback) => fallback.queryBindings(query, basePath));\n }\n const result = await this.rdfEngine.query(compiled.query);\n this.recordPrimary('queryBindings', start, result);\n return this.bindingsStream(result, compiled.variables);\n } catch (error) {\n if (error instanceof DisabledSparqlFeatureError) {\n throw error;\n }\n return this.fallbackWith('queryBindings', fallbackReason(error), (fallback) => fallback.queryBindings(query, basePath));\n }\n }\n\n public async queryBoolean(query: string, basePath: string): Promise<boolean> {\n await this.ensureReady();\n if (!this.enablePrimary) {\n return this.fallbackWith('queryBoolean', 'primary disabled', (fallback) => fallback.queryBoolean(query, basePath));\n }\n\n const start = Date.now();\n try {\n const compiled = this.adapter.compile(query, basePath);\n if (compiled.queryType !== 'ASK') {\n return this.fallbackWith('queryBoolean', `compiled ${compiled.queryType} cannot produce boolean`, (fallback) => fallback.queryBoolean(query, basePath));\n }\n const result = await this.rdfEngine.query(compiled.query);\n this.recordPrimary('queryBoolean', start, result);\n return result.bindings.length > 0;\n } catch (error) {\n if (error instanceof DisabledSparqlFeatureError) {\n throw error;\n }\n return this.fallbackWith('queryBoolean', fallbackReason(error), (fallback) => fallback.queryBoolean(query, basePath));\n }\n }\n\n public async queryQuads(query: string, basePath: string): Promise<any> {\n await this.ensureReady();\n if (!this.enablePrimary) {\n return this.fallbackWith('queryQuads', 'primary disabled', (fallback) => fallback.queryQuads(query, basePath));\n }\n\n const start = Date.now();\n try {\n const quads = await this.executeQuadsPrimary(query, basePath, 'queryQuads', start);\n return new ArrayIterator(quads);\n } catch (error) {\n if (error instanceof DisabledSparqlFeatureError) {\n throw error;\n }\n return this.fallbackWith('queryQuads', fallbackReason(error), (fallback) => fallback.queryQuads(query, basePath));\n }\n }\n\n public async queryVoid(query: string, basePath: string): Promise<void> {\n await this.ensureReady();\n if (!this.enablePrimary) {\n return this.fallbackWith('queryVoid', 'primary disabled', (fallback) => fallback.queryVoid(query, basePath));\n }\n\n const start = Date.now();\n try {\n const delta = this.adapter.compileUpdateDelta(query, basePath, {\n defaultGraph: implicitUpdateDefaultGraph(basePath),\n });\n let deletedRows = 0;\n let computedDeletes = 0;\n let computedInserts = 0;\n for (const operation of delta.operations) {\n if (operation.type === 'delete') {\n deletedRows += (await this.rdfEngine.applyDelta(operation.quads.map(quadToPattern), [])).deletedRows;\n } else if (operation.type === 'insert') {\n await this.rdfEngine.applyDelta([], operation.quads);\n } else if (operation.type === 'insertDeleteWhere') {\n const result = await this.rdfEngine.query(operation.query);\n const deletes = this.adapter.materializeDeleteWhere(operation.deletes, result.bindings);\n const inserts = this.adapter.materializeDeleteWhere(operation.inserts, result.bindings);\n computedDeletes += deletes.length;\n computedInserts += inserts.length;\n deletedRows += (await this.rdfEngine.applyDelta(deletes.map(quadToPattern), inserts)).deletedRows;\n } else if (operation.type === 'insertWhere') {\n const result = await this.rdfEngine.query(operation.query);\n const inserts = this.adapter.materializeDeleteWhere(operation.inserts, result.bindings);\n computedInserts += inserts.length;\n await this.rdfEngine.applyDelta([], inserts);\n } else {\n const result = await this.rdfEngine.query(operation.query);\n const quads = this.adapter.materializeDeleteWhere(operation.template, result.bindings);\n computedDeletes += quads.length;\n deletedRows += (await this.rdfEngine.applyDelta(quads.map(quadToPattern), [])).deletedRows;\n }\n }\n this.recordPrimary('queryVoid', start, {\n bindings: [],\n metrics: {\n engine: 'solid-rdf',\n plan: ['UpdateDelta', `delete:${delta.deletes.length + computedDeletes}`, `deletedRows:${deletedRows}`, `insert:${delta.inserts.length + computedInserts}`],\n scannedRows: delta.deletes.length + computedDeletes + delta.inserts.length + computedInserts,\n joinedRows: 0,\n returnedRows: 0,\n durationMs: Date.now() - start,\n indexChoices: ['update-delta'],\n filtersApplied: 0,\n filtersPushedDown: 0,\n },\n });\n return undefined;\n } catch (error) {\n if (error instanceof DisabledSparqlFeatureError) {\n throw error;\n }\n return this.fallbackWith('queryVoid', fallbackReason(error), (fallback) => fallback.queryVoid(query, basePath));\n }\n }\n\n public async constructGraph(graph: string, basePath: string): Promise<AsyncIterator<Quad>> {\n await this.ensureReady();\n if (!this.enablePrimary) {\n return this.fallbackWith('constructGraph', 'primary disabled', (fallback) => fallback.constructGraph(graph, basePath));\n }\n if (!graph.startsWith(basePath)) {\n return new ArrayIterator([] as Quad[]);\n }\n\n const start = Date.now();\n try {\n const quads = await this.executeConstructPrimary(`\n CONSTRUCT { ?s ?p ?o }\n WHERE { GRAPH <${escapeIri(graph)}> { ?s ?p ?o } }\n `, basePath, 'constructGraph', start);\n return new ArrayIterator(quads);\n } catch (error) {\n if (error instanceof DisabledSparqlFeatureError) {\n throw error;\n }\n return this.fallbackWith('constructGraph', fallbackReason(error), (fallback) => fallback.constructGraph(graph, basePath));\n }\n }\n\n public async listGraphs(basePath: string): Promise<Set<string>> {\n await this.ensureReady();\n if (!this.enablePrimary) {\n return this.fallbackWith('listGraphs', 'primary disabled', (fallback) => fallback.listGraphs(basePath));\n }\n\n const start = Date.now();\n try {\n const result = await this.executeSelectPrimary(`\n SELECT DISTINCT ?g WHERE { GRAPH ?g { ?s ?p ?o } }\n `, basePath, 'listGraphs', start);\n const graphs = new Set<string>();\n for (const binding of result.bindings) {\n const graph = binding.g;\n if (graph?.termType === 'NamedNode') {\n graphs.add(graph.value);\n }\n }\n return graphs;\n } catch (error) {\n if (error instanceof DisabledSparqlFeatureError) {\n throw error;\n }\n return this.fallbackWith('listGraphs', fallbackReason(error), (fallback) => fallback.listGraphs(basePath));\n }\n }\n\n public async close(): Promise<void> {\n await this.rdfEngine.close();\n await this.fallback?.close();\n }\n\n public getMetrics(): SolidRdfSparqlMetricsSnapshot {\n const operationCounts = [...this.operationCounts.entries()]\n .map(([ operation, counts ]) => operationCountSnapshot(operation, counts))\n .sort((left, right) => left.operation.localeCompare(right.operation));\n const primaryCount = operationCounts.reduce((sum, counts) => sum + counts.primaryCount, 0);\n const fallbackCount = operationCounts.reduce((sum, counts) => sum + counts.fallbackCount, 0);\n const totalCount = primaryCount + fallbackCount;\n return {\n primaryCount,\n fallbackCount,\n totalCount,\n fallbackRate: ratio(fallbackCount, totalCount),\n operationCounts,\n lastPrimary: this.lastPrimary,\n lastFallback: this.lastFallback,\n };\n }\n\n public assertFallbackBudget(budget: SolidRdfSparqlFallbackBudget = {}): void {\n const snapshot = this.getMetrics();\n const maxFallbackRate = budget.maxFallbackRate ?? 0;\n const maxFallbackCount = budget.maxFallbackCount ?? 0;\n const operationSet = budget.operations ? new Set(budget.operations) : undefined;\n const counts = operationSet\n ? snapshot.operationCounts.filter((count) => operationSet.has(count.operation))\n : snapshot.operationCounts;\n const primaryCount = counts.reduce((sum, count) => sum + count.primaryCount, 0);\n const fallbackCount = counts.reduce((sum, count) => sum + count.fallbackCount, 0);\n const totalCount = primaryCount + fallbackCount;\n const fallbackRate = ratio(fallbackCount, totalCount);\n if (fallbackCount <= maxFallbackCount && fallbackRate <= maxFallbackRate) {\n return;\n }\n const scope = operationSet ? ` for ${[...operationSet].join(',')}` : '';\n const reason = snapshot.lastFallback ? `; last fallback ${snapshot.lastFallback.operation}: ${snapshot.lastFallback.reason}` : '';\n throw new Error(`SolidRdfSparql fallback budget exceeded${scope}: ${fallbackCount}/${totalCount} (${fallbackRate}) > count ${maxFallbackCount}, rate ${maxFallbackRate}${reason}`);\n }\n\n public resetMetrics(): void {\n this.operationCounts.clear();\n this.lastPrimary = undefined;\n this.lastFallback = undefined;\n }\n\n private bindingsStream(result: RdfLocalQueryResult, variables: string[]): BindingsStream {\n const projectedVariables = variables.length > 0\n ? variables\n : inferVariables(result.bindings);\n const rows = result.bindings.map((binding) => this.bindings(binding, projectedVariables));\n const iterator = new ArrayIterator(rows) as BindingsStream;\n iterator.metadata = async () => ({\n variables: projectedVariables.map((variableName) => rdfDataFactory.variable(variableName) as import('@rdfjs/types').Variable),\n });\n return iterator;\n }\n\n private bindings(binding: RdfBindingRow, variables: string[]): RdfBindings {\n const entries: [Variable, Term][] = variables\n .map((variableName) => {\n const term = binding[variableName];\n return term ? [rdfDataFactory.variable(variableName) as Variable, term] : null;\n })\n .filter((entry): entry is [Variable, Term] => entry !== null);\n return new RdfBindings(entries);\n }\n\n private async fallbackWith<T>(\n operation: SolidRdfSparqlOperation,\n reason: string,\n run: (fallback: SparqlEngine) => Promise<T>,\n ): Promise<T> {\n if (!this.fallback) {\n throw new UnsupportedSparqlQueryError(`No compatibility SPARQL fallback configured for ${operation}: ${reason}`);\n }\n this.onFallback?.({ operation, reason });\n const start = Date.now();\n try {\n return await run(this.fallback);\n } finally {\n this.recordFallback(operation, reason, Date.now() - start);\n }\n }\n\n private async ensureReady(): Promise<void> {\n if (this.shadowStore) {\n await this.shadowStore.open();\n }\n }\n\n private async executeSelectPrimary(\n query: string,\n basePath: string,\n operation: SolidRdfSparqlOperation,\n start: number,\n ): Promise<RdfLocalQueryResult> {\n const compiled = this.adapter.compile(query, basePath);\n if (compiled.queryType !== 'SELECT') {\n throw new UnsupportedSparqlQueryError(`compiled ${compiled.queryType} cannot produce bindings`);\n }\n const result = await this.rdfEngine.query(compiled.query);\n this.recordPrimary(operation, start, result);\n return result;\n }\n\n private async executeConstructPrimary(\n query: string,\n basePath: string,\n operation: SolidRdfSparqlOperation,\n start: number,\n ): Promise<Quad[]> {\n const compiled = this.adapter.compile(query, basePath);\n if (compiled.queryType !== 'CONSTRUCT' || !compiled.constructTemplate) {\n throw new UnsupportedSparqlQueryError(`compiled ${compiled.queryType} cannot produce quads`);\n }\n const result = await this.rdfEngine.query(compiled.query);\n const quads = this.adapter.materializeConstruct(compiled.constructTemplate, result.bindings, rdfDataFactory.defaultGraph() as Term);\n this.recordPrimary(operation, start, {\n ...result,\n bindings: [],\n metrics: {\n ...result.metrics,\n returnedRows: quads.length,\n plan: [...result.metrics.plan, 'Construct'],\n },\n });\n return quads;\n }\n\n private async executeQuadsPrimary(\n query: string,\n basePath: string,\n operation: SolidRdfSparqlOperation,\n start: number,\n ): Promise<Quad[]> {\n const compiled = this.adapter.compile(query, basePath);\n if (compiled.queryType === 'CONSTRUCT' && compiled.constructTemplate) {\n const result = await this.rdfEngine.query(compiled.query);\n const quads = this.adapter.materializeConstruct(compiled.constructTemplate, result.bindings, rdfDataFactory.defaultGraph() as Term);\n this.recordPrimary(operation, start, {\n ...result,\n bindings: [],\n metrics: {\n ...result.metrics,\n returnedRows: quads.length,\n plan: [...result.metrics.plan, 'Construct'],\n },\n });\n return quads;\n }\n if (compiled.queryType === 'DESCRIBE' && compiled.describeTargets) {\n return this.executeDescribePrimary(compiled.query, compiled.describeTargets, basePath, operation, start);\n }\n throw new UnsupportedSparqlQueryError(`compiled ${compiled.queryType} cannot produce quads`);\n }\n\n private async executeDescribePrimary(\n query: import('./types').RdfLocalQuery,\n targets: RdfQueryTermPattern[],\n basePath: string,\n operation: SolidRdfSparqlOperation,\n start: number,\n ): Promise<Quad[]> {\n const seed = await this.rdfEngine.query(query);\n const quads: Quad[] = [];\n const seen = new Set<string>();\n\n for (const target of targets) {\n for (const binding of seed.bindings) {\n const subject = resolveQueryTerm(target, binding);\n if (!subject || subject.termType !== 'NamedNode') {\n continue;\n }\n const describe = await this.rdfEngine.query({\n patterns: [\n {\n subject,\n predicate: { variable: 'p' },\n object: { variable: 'o' },\n graph: { $startsWith: basePath },\n },\n ],\n select: ['p', 'o'],\n });\n for (const row of describe.bindings) {\n const predicate = row.p;\n const object = row.o;\n if (predicate?.termType !== 'NamedNode' || !isQuadObjectTerm(object)) {\n continue;\n }\n const quad = rdfDataFactory.quad(subject, predicate, object, rdfDataFactory.defaultGraph() as DefaultGraph) as Quad;\n const key = [quad.subject, quad.predicate, quad.object, quad.graph].map((term) => termToId(term as any)).join('\\u001f');\n if (!seen.has(key)) {\n seen.add(key);\n quads.push(quad);\n }\n }\n }\n }\n\n this.recordPrimary(operation, start, {\n bindings: [],\n metrics: {\n ...seed.metrics,\n returnedRows: quads.length,\n plan: [...seed.metrics.plan, 'Describe'],\n },\n });\n return quads;\n }\n\n private recordPrimary(\n operation: SolidRdfSparqlOperation,\n start: number,\n result: RdfLocalQueryResult,\n ): void {\n const durationMs = Date.now() - start;\n const counts = this.countsFor(operation);\n counts.primaryCount += 1;\n counts.primaryDurationMs += durationMs;\n this.lastPrimary = {\n operation,\n durationMs,\n scannedRows: result.metrics.scannedRows,\n returnedRows: result.metrics.returnedRows,\n plan: result.metrics.plan,\n indexChoices: result.metrics.indexChoices,\n };\n }\n\n private recordFallback(operation: SolidRdfSparqlOperation, reason: string, durationMs: number): void {\n const counts = this.countsFor(operation);\n counts.fallbackCount += 1;\n counts.fallbackDurationMs += durationMs;\n this.lastFallback = {\n operation,\n reason,\n durationMs,\n };\n }\n\n private countsFor(operation: SolidRdfSparqlOperation): MutableOperationCount {\n const existing = this.operationCounts.get(operation);\n if (existing) {\n return existing;\n }\n const created = {\n primaryCount: 0,\n fallbackCount: 0,\n primaryDurationMs: 0,\n fallbackDurationMs: 0,\n };\n this.operationCounts.set(operation, created);\n return created;\n }\n\n}\n\nclass RdfBindings extends Map<Variable, Term> {\n private readonly byName = new Map<string, Term>();\n\n public constructor(entries: [Variable, Term][]) {\n super(entries);\n for (const [ variable, term ] of entries) {\n this.byName.set(variable.value, term);\n }\n }\n\n public override get(key: string | Variable): Term | undefined {\n if (typeof key === 'string') {\n return this.byName.get(key);\n }\n return this.byName.get(key.value) ?? super.get(key);\n }\n\n public override has(key: string | Variable): boolean {\n if (typeof key === 'string') {\n return this.byName.has(key);\n }\n return this.byName.has(key.value) || super.has(key);\n }\n}\n\nfunction inferVariables(bindings: RdfBindingRow[]): string[] {\n const names = new Set<string>();\n for (const binding of bindings) {\n for (const name of Object.keys(binding)) {\n names.add(name);\n }\n }\n return [...names];\n}\n\nfunction resolveQueryTerm(term: RdfQueryTermPattern, binding: RdfBindingRow): Term | undefined {\n if (term && typeof term === 'object' && 'variable' in term) {\n return binding[term.variable];\n }\n return term as Term;\n}\n\nfunction isQuadObjectTerm(term: Term | undefined): term is Quad_Object {\n return Boolean(\n term\n && term.termType !== 'Variable'\n && term.termType !== 'DefaultGraph'\n && term.termType !== 'Quad',\n );\n}\n\nfunction fallbackReason(error: unknown): string {\n if (error instanceof UnsupportedSparqlQueryError) {\n return error.message;\n }\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n\nfunction operationCountSnapshot(\n operation: SolidRdfSparqlOperation,\n counts: MutableOperationCount,\n): SolidRdfSparqlOperationCount {\n const totalCount = counts.primaryCount + counts.fallbackCount;\n return {\n operation,\n primaryCount: counts.primaryCount,\n fallbackCount: counts.fallbackCount,\n totalCount,\n fallbackRate: ratio(counts.fallbackCount, totalCount),\n primaryDurationMs: counts.primaryDurationMs,\n fallbackDurationMs: counts.fallbackDurationMs,\n };\n}\n\nfunction ratio(numerator: number, denominator: number): number {\n return denominator === 0 ? 0 : numerator / denominator;\n}\n\nfunction implicitUpdateDefaultGraph(basePath: string): string | undefined {\n return basePath.endsWith('/') ? undefined : basePath;\n}\n\nfunction quadToPattern(quad: Quad): QuintPattern {\n return {\n graph: quad.graph,\n subject: quad.subject,\n predicate: quad.predicate,\n object: quad.object,\n };\n}\n\nfunction escapeIri(value: string): string {\n return value.replace(/[<>\"{}|^`\\\\]/g, (char) => encodeURIComponent(char));\n}\n"]}
1
+ {"version":3,"file":"SolidRdfSparqlEngine.js","sourceRoot":"","sources":["../../../src/storage/rdf/SolidRdfSparqlEngine.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAG9C,uDAAiE;AACjE,2BAA8B;AAG9B,yDAA+G;AAqE/G,MAAM,cAAc,GAAG,IAAI,8BAAc,EAAE,CAAC;AAE5C,MAAa,oBAAoB;IAW/B,YACE,SAAwB,EACxB,QAAuB,EACvB,WAAiC,EACjC,aAAa,GAAG,IAAI,EACpB,UAAqD;QAftC,YAAO,GAAG,IAAI,mCAAgB,EAAE,CAAC;QAMjC,oBAAe,GAAG,IAAI,GAAG,EAAkD,CAAC;QAW3F,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,QAAgB;QACxD,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACvH,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACvD,IAAI,QAAQ,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,YAAY,QAAQ,CAAC,SAAS,0BAA0B,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC7J,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC1D,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,6CAA0B,EAAE,CAAC;gBAChD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1H,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,QAAgB;QACvD,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACrH,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACvD,IAAI,QAAQ,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,YAAY,QAAQ,CAAC,SAAS,yBAAyB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC1J,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC1D,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAClD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,6CAA0B,EAAE,CAAC;gBAChD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACxH,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,QAAgB;QACrD,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACjH,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;YACnF,OAAO,IAAI,6BAAa,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,6CAA0B,EAAE,CAAC;gBAChD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpH,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,QAAgB;QACpD,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC/G,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE;gBAC7D,YAAY,EAAE,0BAA0B,CAAC,QAAQ,CAAC;aACnD,CAAC,CAAC;YACH,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzC,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAChC,WAAW,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;gBACvG,CAAC;qBAAM,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACvC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;gBACvD,CAAC;qBAAM,IAAI,SAAS,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;oBAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACxF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACxF,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;oBAClC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;oBAClC,WAAW,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;gBACpG,CAAC;qBAAM,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACxF,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;oBAClC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACN,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACvF,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC;oBAChC,WAAW,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;gBAC7F,CAAC;YACH,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE;gBACrC,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE;oBACP,MAAM,EAAE,WAAW;oBACnB,IAAI,EAAE,CAAC,aAAa,EAAE,UAAU,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,EAAE,EAAE,eAAe,WAAW,EAAE,EAAE,UAAU,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;oBAC3J,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe;oBAC5F,UAAU,EAAE,CAAC;oBACb,YAAY,EAAE,CAAC;oBACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;oBAC9B,YAAY,EAAE,CAAC,cAAc,CAAC;oBAC9B,cAAc,EAAE,CAAC;oBACjB,iBAAiB,EAAE,CAAC;iBACrB;aACF,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,6CAA0B,EAAE,CAAC;gBAChD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClH,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,QAAgB;QACzD,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACzH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,6BAAa,CAAC,EAAY,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC;;yBAE9B,SAAS,CAAC,KAAK,CAAC;OAClC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;YACtC,OAAO,IAAI,6BAAa,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,6CAA0B,EAAE,CAAC;gBAChD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5H,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,QAAgB;QACtC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1G,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC;;OAE9C,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;YACjC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;gBACxB,IAAI,KAAK,EAAE,QAAQ,KAAK,WAAW,EAAE,CAAC;oBACpC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,6CAA0B,EAAE,CAAC;gBAChD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC/B,CAAC;IAEM,UAAU;QACf,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;aACxD,GAAG,CAAC,CAAC,CAAE,SAAS,EAAE,MAAM,CAAE,EAAE,EAAE,CAAC,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;aACzE,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACxE,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAC3F,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAC7F,MAAM,UAAU,GAAG,YAAY,GAAG,aAAa,CAAC;QAChD,OAAO;YACL,YAAY;YACZ,aAAa;YACb,UAAU;YACV,YAAY,EAAE,KAAK,CAAC,aAAa,EAAE,UAAU,CAAC;YAC9C,eAAe;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;IACJ,CAAC;IAEM,oBAAoB,CAAC,SAAuC,EAAE;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACnC,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;QACpD,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChF,MAAM,MAAM,GAAG,YAAY;YACzB,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC/E,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAChF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,UAAU,GAAG,YAAY,GAAG,aAAa,CAAC;QAChD,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QACtD,IAAI,aAAa,IAAI,gBAAgB,IAAI,YAAY,IAAI,eAAe,EAAE,CAAC;YACzE,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,mBAAmB,QAAQ,CAAC,YAAY,CAAC,SAAS,KAAK,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClI,MAAM,IAAI,KAAK,CAAC,0CAA0C,KAAK,KAAK,aAAa,IAAI,UAAU,KAAK,YAAY,aAAa,gBAAgB,UAAU,eAAe,GAAG,MAAM,EAAE,CAAC,CAAC;IACrL,CAAC;IAEM,YAAY;QACjB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAChC,CAAC;IAEO,cAAc,CAAC,MAAsB,EAAE,SAAmB;QAChE,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;YAC7C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAC1F,MAAM,QAAQ,GAAG,IAAI,6BAAa,CAAC,IAAI,CAAmB,CAAC;QAC3D,QAAQ,CAAC,QAAQ,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC;YAC/B,SAAS,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAoC,CAAC;SAC9H,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,QAAQ,CAAC,OAAsB,EAAE,SAAmB;QAC1D,MAAM,OAAO,GAAuB,SAAS;aAC1C,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;YACpB,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAa,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjF,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,KAAK,EAA6B,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QAChE,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,SAAkC,EAClC,MAAc,EACd,GAA2C;QAE3C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,8CAA2B,CAAC,mDAAmD,SAAS,KAAK,MAAM,EAAE,CAAC,CAAC;QACnH,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,KAAa,EACb,QAAgB,EAChB,SAAkC,EAClC,KAAa;QAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,QAAQ,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,8CAA2B,CAAC,YAAY,QAAQ,CAAC,SAAS,0BAA0B,CAAC,CAAC;QAClG,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,uBAAuB,CACnC,KAAa,EACb,QAAgB,EAChB,SAAkC,EAClC,KAAa;QAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,QAAQ,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YACtE,MAAM,IAAI,8CAA2B,CAAC,YAAY,QAAQ,CAAC,SAAS,uBAAuB,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,YAAY,EAAU,CAAC,CAAC;QACpI,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE;YACnC,GAAG,MAAM;YACT,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE;gBACP,GAAG,MAAM,CAAC,OAAO;gBACjB,YAAY,EAAE,KAAK,CAAC,MAAM;gBAC1B,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;aAC5C;SACF,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,KAAa,EACb,QAAgB,EAChB,SAAkC,EAClC,KAAa;QAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,QAAQ,CAAC,SAAS,KAAK,WAAW,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,YAAY,EAAU,CAAC,CAAC;YACpI,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE;gBACnC,GAAG,MAAM;gBACT,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE;oBACP,GAAG,MAAM,CAAC,OAAO;oBACjB,YAAY,EAAE,KAAK,CAAC,MAAM;oBAC1B,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;iBAC5C;aACF,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,QAAQ,CAAC,SAAS,KAAK,UAAU,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC3G,CAAC;QACD,MAAM,IAAI,8CAA2B,CAAC,YAAY,QAAQ,CAAC,SAAS,uBAAuB,CAAC,CAAC;IAC/F,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,KAAiC,EACjC,OAA8B,EAC9B,QAAgB,EAChB,SAAkC,EAClC,KAAa;QAEb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAW,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAClD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;oBACjD,SAAS;gBACX,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;oBAC1C,QAAQ,EAAE;wBACR;4BACE,OAAO;4BACP,SAAS,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;4BAC5B,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;4BACzB,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE;yBACjC;qBACF;oBACD,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;iBACnB,CAAC,CAAC;gBACH,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;oBACpC,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;oBACxB,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;oBACrB,IAAI,SAAS,EAAE,QAAQ,KAAK,WAAW,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;wBACrE,SAAS;oBACX,CAAC;oBACD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,YAAY,EAAkB,CAAS,CAAC;oBACpH,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,aAAQ,EAAC,IAAW,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACxH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBACd,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE;YACnC,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE;gBACP,GAAG,IAAI,CAAC,OAAO;gBACf,YAAY,EAAE,KAAK,CAAC,MAAM;gBAC1B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC;aACzC;SACF,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,aAAa,CACnB,SAAkC,EAClC,KAAa,EACb,MAAsB;QAEtB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;QACzB,MAAM,CAAC,iBAAiB,IAAI,UAAU,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG;YACjB,SAAS;YACT,UAAU;YACV,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW;YACvC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY;YACzC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;YACzB,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY;SAC1C,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,SAAkC,EAAE,MAAc,EAAE,UAAkB;QAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;QAC1B,MAAM,CAAC,kBAAkB,IAAI,UAAU,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG;YAClB,SAAS;YACT,MAAM;YACN,UAAU;SACX,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,SAAkC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,OAAO,GAAG;YACd,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,CAAC;YAChB,iBAAiB,EAAE,CAAC;YACpB,kBAAkB,EAAE,CAAC;SACtB,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,OAAO,CAAC;IACjB,CAAC;CAEF;AA7cD,oDA6cC;AAED,MAAM,WAAY,SAAQ,GAAmB;IAG3C,YAAmB,OAA2B;QAC5C,KAAK,CAAC,OAAO,CAAC,CAAC;QAHA,WAAM,GAAG,IAAI,GAAG,EAAgB,CAAC;QAIhD,KAAK,MAAM,CAAE,QAAQ,EAAE,IAAI,CAAE,IAAI,OAAO,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEe,GAAG,CAAC,GAAsB;QACxC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IAEe,GAAG,CAAC,GAAsB;QACxC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;CACF;AAED,SAAS,cAAc,CAAC,QAAyB;IAC/C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAyB,EAAE,OAAsB;IACzE,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QAC3D,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,IAAY,CAAC;AACtB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAsB;IAC9C,OAAO,OAAO,CACZ,IAAI;WACC,IAAI,CAAC,QAAQ,KAAK,UAAU;WAC5B,IAAI,CAAC,QAAQ,KAAK,cAAc;WAChC,IAAI,CAAC,QAAQ,KAAK,MAAM,CAC9B,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,YAAY,8CAA2B,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,sBAAsB,CAC7B,SAAkC,EAClC,MAA6B;IAE7B,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;IAC9D,OAAO;QACL,SAAS;QACT,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,UAAU;QACV,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC;QACrD,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,SAAiB,EAAE,WAAmB;IACnD,OAAO,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,WAAW,CAAC;AACzD,CAAC;AAED,SAAS,0BAA0B,CAAC,QAAgB;IAClD,OAAO,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC;AAED,SAAS,aAAa,CAAC,IAAU;IAC/B,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import { ArrayIterator } from 'asynciterator';\nimport type { AsyncIterator } from 'asynciterator';\nimport type { DefaultGraph, Quad, Quad_Object, Term, Variable } from '@rdfjs/types';\nimport { DataFactory as RdfDataFactory } from 'rdf-data-factory';\nimport { termToId } from 'n3';\nimport type { SparqlEngine } from '../sparql/SubgraphQueryEngine';\nimport type { QuintPattern } from '../quint/types';\nimport { DisabledSparqlFeatureError, RdfSparqlAdapter, UnsupportedSparqlQueryError } from './RdfSparqlAdapter';\nimport type { ShadowRdfQuintStore } from './ShadowRdfQuintStore';\nimport type { RdfBindingRow, RdfEngineLike, RdfQueryResult, RdfQueryTermPattern } from './types';\n\nexport interface SolidRdfSparqlEngineOptions {\n rdfEngine: RdfEngineLike;\n fallback?: SparqlEngine;\n shadowStore?: ShadowRdfQuintStore;\n enablePrimary?: boolean;\n onFallback?: (reason: SolidRdfSparqlFallback) => void;\n}\n\nexport interface SolidRdfSparqlFallback {\n operation: 'queryBindings' | 'queryBoolean' | 'queryQuads' | 'queryVoid' | 'constructGraph' | 'listGraphs';\n reason: string;\n}\n\nexport type SolidRdfSparqlOperation = SolidRdfSparqlFallback['operation'];\n\nexport interface SolidRdfSparqlOperationCount {\n operation: SolidRdfSparqlOperation;\n primaryCount: number;\n fallbackCount: number;\n totalCount: number;\n fallbackRate: number;\n primaryDurationMs: number;\n fallbackDurationMs: number;\n}\n\nexport interface SolidRdfSparqlPrimaryMetric {\n operation: SolidRdfSparqlOperation;\n durationMs: number;\n scannedRows: number;\n returnedRows: number;\n plan: string[];\n indexChoices: string[];\n}\n\nexport interface SolidRdfSparqlFallbackMetric extends SolidRdfSparqlFallback {\n durationMs: number;\n}\n\nexport interface SolidRdfSparqlMetricsSnapshot {\n primaryCount: number;\n fallbackCount: number;\n totalCount: number;\n fallbackRate: number;\n operationCounts: SolidRdfSparqlOperationCount[];\n lastPrimary?: SolidRdfSparqlPrimaryMetric;\n lastFallback?: SolidRdfSparqlFallbackMetric;\n}\n\nexport interface SolidRdfSparqlFallbackBudget {\n maxFallbackRate?: number;\n maxFallbackCount?: number;\n operations?: SolidRdfSparqlOperation[];\n}\n\ntype BindingsStream = AsyncIterator<RdfBindings> & {\n metadata?: () => Promise<{ variables: import('@rdfjs/types').Variable[] }>;\n};\n\ninterface MutableOperationCount {\n primaryCount: number;\n fallbackCount: number;\n primaryDurationMs: number;\n fallbackDurationMs: number;\n}\n\nconst rdfDataFactory = new RdfDataFactory();\n\nexport class SolidRdfSparqlEngine implements SparqlEngine {\n private readonly adapter = new RdfSparqlAdapter();\n private readonly rdfEngine: RdfEngineLike;\n private readonly fallback?: SparqlEngine;\n private readonly shadowStore?: ShadowRdfQuintStore;\n private readonly enablePrimary: boolean;\n private readonly onFallback?: (reason: SolidRdfSparqlFallback) => void;\n private readonly operationCounts = new Map<SolidRdfSparqlOperation, MutableOperationCount>();\n private lastPrimary?: SolidRdfSparqlPrimaryMetric;\n private lastFallback?: SolidRdfSparqlFallbackMetric;\n\n public constructor(\n rdfEngine: RdfEngineLike,\n fallback?: SparqlEngine,\n shadowStore?: ShadowRdfQuintStore,\n enablePrimary = true,\n onFallback?: (reason: SolidRdfSparqlFallback) => void,\n ) {\n this.rdfEngine = rdfEngine;\n this.fallback = fallback;\n this.shadowStore = shadowStore;\n this.enablePrimary = enablePrimary;\n this.onFallback = onFallback;\n }\n\n public async queryBindings(query: string, basePath: string): Promise<BindingsStream> {\n await this.ensureReady();\n if (!this.enablePrimary) {\n return this.fallbackWith('queryBindings', 'primary disabled', (fallback) => fallback.queryBindings(query, basePath));\n }\n\n const start = Date.now();\n try {\n const compiled = this.adapter.compile(query, basePath);\n if (compiled.queryType !== 'SELECT') {\n return this.fallbackWith('queryBindings', `compiled ${compiled.queryType} cannot produce bindings`, (fallback) => fallback.queryBindings(query, basePath));\n }\n const result = await this.rdfEngine.query(compiled.query);\n this.recordPrimary('queryBindings', start, result);\n return this.bindingsStream(result, compiled.variables);\n } catch (error) {\n if (error instanceof DisabledSparqlFeatureError) {\n throw error;\n }\n return this.fallbackWith('queryBindings', fallbackReason(error), (fallback) => fallback.queryBindings(query, basePath));\n }\n }\n\n public async queryBoolean(query: string, basePath: string): Promise<boolean> {\n await this.ensureReady();\n if (!this.enablePrimary) {\n return this.fallbackWith('queryBoolean', 'primary disabled', (fallback) => fallback.queryBoolean(query, basePath));\n }\n\n const start = Date.now();\n try {\n const compiled = this.adapter.compile(query, basePath);\n if (compiled.queryType !== 'ASK') {\n return this.fallbackWith('queryBoolean', `compiled ${compiled.queryType} cannot produce boolean`, (fallback) => fallback.queryBoolean(query, basePath));\n }\n const result = await this.rdfEngine.query(compiled.query);\n this.recordPrimary('queryBoolean', start, result);\n return result.bindings.length > 0;\n } catch (error) {\n if (error instanceof DisabledSparqlFeatureError) {\n throw error;\n }\n return this.fallbackWith('queryBoolean', fallbackReason(error), (fallback) => fallback.queryBoolean(query, basePath));\n }\n }\n\n public async queryQuads(query: string, basePath: string): Promise<any> {\n await this.ensureReady();\n if (!this.enablePrimary) {\n return this.fallbackWith('queryQuads', 'primary disabled', (fallback) => fallback.queryQuads(query, basePath));\n }\n\n const start = Date.now();\n try {\n const quads = await this.executeQuadsPrimary(query, basePath, 'queryQuads', start);\n return new ArrayIterator(quads);\n } catch (error) {\n if (error instanceof DisabledSparqlFeatureError) {\n throw error;\n }\n return this.fallbackWith('queryQuads', fallbackReason(error), (fallback) => fallback.queryQuads(query, basePath));\n }\n }\n\n public async queryVoid(query: string, basePath: string): Promise<void> {\n await this.ensureReady();\n if (!this.enablePrimary) {\n return this.fallbackWith('queryVoid', 'primary disabled', (fallback) => fallback.queryVoid(query, basePath));\n }\n\n const start = Date.now();\n try {\n const delta = this.adapter.compileUpdateDelta(query, basePath, {\n defaultGraph: implicitUpdateDefaultGraph(basePath),\n });\n let deletedRows = 0;\n let computedDeletes = 0;\n let computedInserts = 0;\n for (const operation of delta.operations) {\n if (operation.type === 'delete') {\n deletedRows += (await this.rdfEngine.applyDelta(operation.quads.map(quadToPattern), [])).deletedRows;\n } else if (operation.type === 'insert') {\n await this.rdfEngine.applyDelta([], operation.quads);\n } else if (operation.type === 'insertDeleteWhere') {\n const result = await this.rdfEngine.query(operation.query);\n const deletes = this.adapter.materializeDeleteWhere(operation.deletes, result.bindings);\n const inserts = this.adapter.materializeDeleteWhere(operation.inserts, result.bindings);\n computedDeletes += deletes.length;\n computedInserts += inserts.length;\n deletedRows += (await this.rdfEngine.applyDelta(deletes.map(quadToPattern), inserts)).deletedRows;\n } else if (operation.type === 'insertWhere') {\n const result = await this.rdfEngine.query(operation.query);\n const inserts = this.adapter.materializeDeleteWhere(operation.inserts, result.bindings);\n computedInserts += inserts.length;\n await this.rdfEngine.applyDelta([], inserts);\n } else {\n const result = await this.rdfEngine.query(operation.query);\n const quads = this.adapter.materializeDeleteWhere(operation.template, result.bindings);\n computedDeletes += quads.length;\n deletedRows += (await this.rdfEngine.applyDelta(quads.map(quadToPattern), [])).deletedRows;\n }\n }\n this.recordPrimary('queryVoid', start, {\n bindings: [],\n metrics: {\n engine: 'solid-rdf',\n plan: ['UpdateDelta', `delete:${delta.deletes.length + computedDeletes}`, `deletedRows:${deletedRows}`, `insert:${delta.inserts.length + computedInserts}`],\n scannedRows: delta.deletes.length + computedDeletes + delta.inserts.length + computedInserts,\n joinedRows: 0,\n returnedRows: 0,\n durationMs: Date.now() - start,\n indexChoices: ['update-delta'],\n filtersApplied: 0,\n filtersPushedDown: 0,\n },\n });\n return undefined;\n } catch (error) {\n if (error instanceof DisabledSparqlFeatureError) {\n throw error;\n }\n return this.fallbackWith('queryVoid', fallbackReason(error), (fallback) => fallback.queryVoid(query, basePath));\n }\n }\n\n public async constructGraph(graph: string, basePath: string): Promise<AsyncIterator<Quad>> {\n await this.ensureReady();\n if (!this.enablePrimary) {\n return this.fallbackWith('constructGraph', 'primary disabled', (fallback) => fallback.constructGraph(graph, basePath));\n }\n if (!graph.startsWith(basePath)) {\n return new ArrayIterator([] as Quad[]);\n }\n\n const start = Date.now();\n try {\n const quads = await this.executeConstructPrimary(`\n CONSTRUCT { ?s ?p ?o }\n WHERE { GRAPH <${escapeIri(graph)}> { ?s ?p ?o } }\n `, basePath, 'constructGraph', start);\n return new ArrayIterator(quads);\n } catch (error) {\n if (error instanceof DisabledSparqlFeatureError) {\n throw error;\n }\n return this.fallbackWith('constructGraph', fallbackReason(error), (fallback) => fallback.constructGraph(graph, basePath));\n }\n }\n\n public async listGraphs(basePath: string): Promise<Set<string>> {\n await this.ensureReady();\n if (!this.enablePrimary) {\n return this.fallbackWith('listGraphs', 'primary disabled', (fallback) => fallback.listGraphs(basePath));\n }\n\n const start = Date.now();\n try {\n const result = await this.executeSelectPrimary(`\n SELECT DISTINCT ?g WHERE { GRAPH ?g { ?s ?p ?o } }\n `, basePath, 'listGraphs', start);\n const graphs = new Set<string>();\n for (const binding of result.bindings) {\n const graph = binding.g;\n if (graph?.termType === 'NamedNode') {\n graphs.add(graph.value);\n }\n }\n return graphs;\n } catch (error) {\n if (error instanceof DisabledSparqlFeatureError) {\n throw error;\n }\n return this.fallbackWith('listGraphs', fallbackReason(error), (fallback) => fallback.listGraphs(basePath));\n }\n }\n\n public async close(): Promise<void> {\n await this.rdfEngine.close();\n await this.fallback?.close();\n }\n\n public getMetrics(): SolidRdfSparqlMetricsSnapshot {\n const operationCounts = [...this.operationCounts.entries()]\n .map(([ operation, counts ]) => operationCountSnapshot(operation, counts))\n .sort((left, right) => left.operation.localeCompare(right.operation));\n const primaryCount = operationCounts.reduce((sum, counts) => sum + counts.primaryCount, 0);\n const fallbackCount = operationCounts.reduce((sum, counts) => sum + counts.fallbackCount, 0);\n const totalCount = primaryCount + fallbackCount;\n return {\n primaryCount,\n fallbackCount,\n totalCount,\n fallbackRate: ratio(fallbackCount, totalCount),\n operationCounts,\n lastPrimary: this.lastPrimary,\n lastFallback: this.lastFallback,\n };\n }\n\n public assertFallbackBudget(budget: SolidRdfSparqlFallbackBudget = {}): void {\n const snapshot = this.getMetrics();\n const maxFallbackRate = budget.maxFallbackRate ?? 0;\n const maxFallbackCount = budget.maxFallbackCount ?? 0;\n const operationSet = budget.operations ? new Set(budget.operations) : undefined;\n const counts = operationSet\n ? snapshot.operationCounts.filter((count) => operationSet.has(count.operation))\n : snapshot.operationCounts;\n const primaryCount = counts.reduce((sum, count) => sum + count.primaryCount, 0);\n const fallbackCount = counts.reduce((sum, count) => sum + count.fallbackCount, 0);\n const totalCount = primaryCount + fallbackCount;\n const fallbackRate = ratio(fallbackCount, totalCount);\n if (fallbackCount <= maxFallbackCount && fallbackRate <= maxFallbackRate) {\n return;\n }\n const scope = operationSet ? ` for ${[...operationSet].join(',')}` : '';\n const reason = snapshot.lastFallback ? `; last fallback ${snapshot.lastFallback.operation}: ${snapshot.lastFallback.reason}` : '';\n throw new Error(`SolidRdfSparql fallback budget exceeded${scope}: ${fallbackCount}/${totalCount} (${fallbackRate}) > count ${maxFallbackCount}, rate ${maxFallbackRate}${reason}`);\n }\n\n public resetMetrics(): void {\n this.operationCounts.clear();\n this.lastPrimary = undefined;\n this.lastFallback = undefined;\n }\n\n private bindingsStream(result: RdfQueryResult, variables: string[]): BindingsStream {\n const projectedVariables = variables.length > 0\n ? variables\n : inferVariables(result.bindings);\n const rows = result.bindings.map((binding) => this.bindings(binding, projectedVariables));\n const iterator = new ArrayIterator(rows) as BindingsStream;\n iterator.metadata = async () => ({\n variables: projectedVariables.map((variableName) => rdfDataFactory.variable(variableName) as import('@rdfjs/types').Variable),\n });\n return iterator;\n }\n\n private bindings(binding: RdfBindingRow, variables: string[]): RdfBindings {\n const entries: [Variable, Term][] = variables\n .map((variableName) => {\n const term = binding[variableName];\n return term ? [rdfDataFactory.variable(variableName) as Variable, term] : null;\n })\n .filter((entry): entry is [Variable, Term] => entry !== null);\n return new RdfBindings(entries);\n }\n\n private async fallbackWith<T>(\n operation: SolidRdfSparqlOperation,\n reason: string,\n run: (fallback: SparqlEngine) => Promise<T>,\n ): Promise<T> {\n if (!this.fallback) {\n throw new UnsupportedSparqlQueryError(`No compatibility SPARQL fallback configured for ${operation}: ${reason}`);\n }\n this.onFallback?.({ operation, reason });\n const start = Date.now();\n try {\n return await run(this.fallback);\n } finally {\n this.recordFallback(operation, reason, Date.now() - start);\n }\n }\n\n private async ensureReady(): Promise<void> {\n if (this.shadowStore) {\n await this.shadowStore.open();\n }\n }\n\n private async executeSelectPrimary(\n query: string,\n basePath: string,\n operation: SolidRdfSparqlOperation,\n start: number,\n ): Promise<RdfQueryResult> {\n const compiled = this.adapter.compile(query, basePath);\n if (compiled.queryType !== 'SELECT') {\n throw new UnsupportedSparqlQueryError(`compiled ${compiled.queryType} cannot produce bindings`);\n }\n const result = await this.rdfEngine.query(compiled.query);\n this.recordPrimary(operation, start, result);\n return result;\n }\n\n private async executeConstructPrimary(\n query: string,\n basePath: string,\n operation: SolidRdfSparqlOperation,\n start: number,\n ): Promise<Quad[]> {\n const compiled = this.adapter.compile(query, basePath);\n if (compiled.queryType !== 'CONSTRUCT' || !compiled.constructTemplate) {\n throw new UnsupportedSparqlQueryError(`compiled ${compiled.queryType} cannot produce quads`);\n }\n const result = await this.rdfEngine.query(compiled.query);\n const quads = this.adapter.materializeConstruct(compiled.constructTemplate, result.bindings, rdfDataFactory.defaultGraph() as Term);\n this.recordPrimary(operation, start, {\n ...result,\n bindings: [],\n metrics: {\n ...result.metrics,\n returnedRows: quads.length,\n plan: [...result.metrics.plan, 'Construct'],\n },\n });\n return quads;\n }\n\n private async executeQuadsPrimary(\n query: string,\n basePath: string,\n operation: SolidRdfSparqlOperation,\n start: number,\n ): Promise<Quad[]> {\n const compiled = this.adapter.compile(query, basePath);\n if (compiled.queryType === 'CONSTRUCT' && compiled.constructTemplate) {\n const result = await this.rdfEngine.query(compiled.query);\n const quads = this.adapter.materializeConstruct(compiled.constructTemplate, result.bindings, rdfDataFactory.defaultGraph() as Term);\n this.recordPrimary(operation, start, {\n ...result,\n bindings: [],\n metrics: {\n ...result.metrics,\n returnedRows: quads.length,\n plan: [...result.metrics.plan, 'Construct'],\n },\n });\n return quads;\n }\n if (compiled.queryType === 'DESCRIBE' && compiled.describeTargets) {\n return this.executeDescribePrimary(compiled.query, compiled.describeTargets, basePath, operation, start);\n }\n throw new UnsupportedSparqlQueryError(`compiled ${compiled.queryType} cannot produce quads`);\n }\n\n private async executeDescribePrimary(\n query: import('./types').RdfQuery,\n targets: RdfQueryTermPattern[],\n basePath: string,\n operation: SolidRdfSparqlOperation,\n start: number,\n ): Promise<Quad[]> {\n const seed = await this.rdfEngine.query(query);\n const quads: Quad[] = [];\n const seen = new Set<string>();\n\n for (const target of targets) {\n for (const binding of seed.bindings) {\n const subject = resolveQueryTerm(target, binding);\n if (!subject || subject.termType !== 'NamedNode') {\n continue;\n }\n const describe = await this.rdfEngine.query({\n patterns: [\n {\n subject,\n predicate: { variable: 'p' },\n object: { variable: 'o' },\n graph: { $startsWith: basePath },\n },\n ],\n select: ['p', 'o'],\n });\n for (const row of describe.bindings) {\n const predicate = row.p;\n const object = row.o;\n if (predicate?.termType !== 'NamedNode' || !isQuadObjectTerm(object)) {\n continue;\n }\n const quad = rdfDataFactory.quad(subject, predicate, object, rdfDataFactory.defaultGraph() as DefaultGraph) as Quad;\n const key = [quad.subject, quad.predicate, quad.object, quad.graph].map((term) => termToId(term as any)).join('\\u001f');\n if (!seen.has(key)) {\n seen.add(key);\n quads.push(quad);\n }\n }\n }\n }\n\n this.recordPrimary(operation, start, {\n bindings: [],\n metrics: {\n ...seed.metrics,\n returnedRows: quads.length,\n plan: [...seed.metrics.plan, 'Describe'],\n },\n });\n return quads;\n }\n\n private recordPrimary(\n operation: SolidRdfSparqlOperation,\n start: number,\n result: RdfQueryResult,\n ): void {\n const durationMs = Date.now() - start;\n const counts = this.countsFor(operation);\n counts.primaryCount += 1;\n counts.primaryDurationMs += durationMs;\n this.lastPrimary = {\n operation,\n durationMs,\n scannedRows: result.metrics.scannedRows,\n returnedRows: result.metrics.returnedRows,\n plan: result.metrics.plan,\n indexChoices: result.metrics.indexChoices,\n };\n }\n\n private recordFallback(operation: SolidRdfSparqlOperation, reason: string, durationMs: number): void {\n const counts = this.countsFor(operation);\n counts.fallbackCount += 1;\n counts.fallbackDurationMs += durationMs;\n this.lastFallback = {\n operation,\n reason,\n durationMs,\n };\n }\n\n private countsFor(operation: SolidRdfSparqlOperation): MutableOperationCount {\n const existing = this.operationCounts.get(operation);\n if (existing) {\n return existing;\n }\n const created = {\n primaryCount: 0,\n fallbackCount: 0,\n primaryDurationMs: 0,\n fallbackDurationMs: 0,\n };\n this.operationCounts.set(operation, created);\n return created;\n }\n\n}\n\nclass RdfBindings extends Map<Variable, Term> {\n private readonly byName = new Map<string, Term>();\n\n public constructor(entries: [Variable, Term][]) {\n super(entries);\n for (const [ variable, term ] of entries) {\n this.byName.set(variable.value, term);\n }\n }\n\n public override get(key: string | Variable): Term | undefined {\n if (typeof key === 'string') {\n return this.byName.get(key);\n }\n return this.byName.get(key.value) ?? super.get(key);\n }\n\n public override has(key: string | Variable): boolean {\n if (typeof key === 'string') {\n return this.byName.has(key);\n }\n return this.byName.has(key.value) || super.has(key);\n }\n}\n\nfunction inferVariables(bindings: RdfBindingRow[]): string[] {\n const names = new Set<string>();\n for (const binding of bindings) {\n for (const name of Object.keys(binding)) {\n names.add(name);\n }\n }\n return [...names];\n}\n\nfunction resolveQueryTerm(term: RdfQueryTermPattern, binding: RdfBindingRow): Term | undefined {\n if (term && typeof term === 'object' && 'variable' in term) {\n return binding[term.variable];\n }\n return term as Term;\n}\n\nfunction isQuadObjectTerm(term: Term | undefined): term is Quad_Object {\n return Boolean(\n term\n && term.termType !== 'Variable'\n && term.termType !== 'DefaultGraph'\n && term.termType !== 'Quad',\n );\n}\n\nfunction fallbackReason(error: unknown): string {\n if (error instanceof UnsupportedSparqlQueryError) {\n return error.message;\n }\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n\nfunction operationCountSnapshot(\n operation: SolidRdfSparqlOperation,\n counts: MutableOperationCount,\n): SolidRdfSparqlOperationCount {\n const totalCount = counts.primaryCount + counts.fallbackCount;\n return {\n operation,\n primaryCount: counts.primaryCount,\n fallbackCount: counts.fallbackCount,\n totalCount,\n fallbackRate: ratio(counts.fallbackCount, totalCount),\n primaryDurationMs: counts.primaryDurationMs,\n fallbackDurationMs: counts.fallbackDurationMs,\n };\n}\n\nfunction ratio(numerator: number, denominator: number): number {\n return denominator === 0 ? 0 : numerator / denominator;\n}\n\nfunction implicitUpdateDefaultGraph(basePath: string): string | undefined {\n return basePath.endsWith('/') ? undefined : basePath;\n}\n\nfunction quadToPattern(quad: Quad): QuintPattern {\n return {\n graph: quad.graph,\n subject: quad.subject,\n predicate: quad.predicate,\n object: quad.object,\n };\n}\n\nfunction escapeIri(value: string): string {\n return value.replace(/[<>\"{}|^`\\\\]/g, (char) => encodeURIComponent(char));\n}\n"]}
@@ -6,11 +6,11 @@ export { RdfTextIndex } from './RdfTextIndex';
6
6
  export { RdfVectorIndex } from './RdfVectorIndex';
7
7
  export { isLineAddressableRdf, isLineAddressableRdfContentType, isLineAddressableRdfPath, isRdfDocument, isRdfDocumentContentType, isRdfDocumentPath, isSafeRdfDocumentContentType, normalizeContentType, rdfContentTypeForPath, } from './RdfContentTypes';
8
8
  export { RdfShadowComparator, canonicalQuadKey, diffQuads } from './RdfShadowComparator';
9
- export { RdfLocalQueryEngine, variable as rdfVar } from './RdfLocalQueryEngine';
9
+ export { RdfQueryExecutor, variable as rdfVar } from './RdfQueryExecutor';
10
10
  export { ShadowRdfQuintStore, type ShadowRdfQuintStoreOptions } from './ShadowRdfQuintStore';
11
11
  export { SolidRdfEngine, type SolidRdfEngineOptions } from './SolidRdfEngine';
12
12
  export { PostgresRdfEngine, type PostgresRdfEngineOptions } from './PostgresRdfEngine';
13
13
  export { DisabledSparqlFeatureError, RdfSparqlAdapter, UnsupportedSparqlQueryError, type RdfSparqlCompileResult, type RdfSparqlDeleteOperation, type RdfSparqlDeleteWhereOperation, type RdfSparqlDeleteWhereTemplate, type RdfSparqlInsertOperation, type RdfSparqlUpdateDelta, type RdfSparqlUpdateDeltaOperation, } from './RdfSparqlAdapter';
14
14
  export { SolidRdfSparqlEngine, type SolidRdfSparqlEngineOptions, type SolidRdfSparqlFallback, type SolidRdfSparqlFallbackMetric, type SolidRdfSparqlMetricsSnapshot, type SolidRdfSparqlOperation, type SolidRdfSparqlOperationCount, type SolidRdfSparqlPrimaryMetric, } from './SolidRdfSparqlEngine';
15
- export { rdfModelsBenchmarkCases, rdfModelsBenchmarkCaseNames, rdfModelsLocalQueryBenchmarkCases, rdfModelsLocalQueryBenchmarkCaseNames, defaultSyntheticMessagesForRdfModelsScale, estimateRdfModelsSyntheticQuadCount, rdfModelsBenchmarkScaleSatisfied, rdfModelsBenchmarkSyntheticPodCount, rdfModelsBenchmarkScaleTargetQuads, runRdfModelsBenchmark, runRdfModelsRdf3xShadowBenchmark, runRdfModelsShadowBenchmark, RDF_MODELS_SYNTHETIC_MESSAGE_QUADS, type RdfBenchmarkScale, type RdfModelBenchmarkCase, type RdfModelLocalQueryBenchmarkCase, type RdfModelLocalQueryBenchmarkResult, type RdfModelBenchmarkReport, type RdfModelBenchmarkResult, type RdfModelBenchmarkRunOptions, type RdfModelShadowBenchmarkReport, type RdfModelRdf3xShadowBenchmarkReport, type RdfModelRdf3xShadowJoinBenchmarkResult, type RdfModelRdf3xShadowBenchmarkResult, type RdfModelShadowBenchmarkResult, type RdfModelShadowBenchmarkRunOptions, type RdfModelShadowBenchmarkSide, } from './models-benchmark';
16
- export type { RdfEngineLike, RdfEngineStorageStats, RdfDerivedIndexRefreshResult, RdfIndexStats, RdfDerivedIndexProfile, Rdf3xCardinalityEstimate, Rdf3xCountResult, Rdf3xJoinMetrics, Rdf3xJoinOptions, Rdf3xJoinScanResult, Rdf3xIndexMetrics, Rdf3xIndexStats, Rdf3xObjectOperatorPattern, Rdf3xObjectRangePattern, Rdf3xPairProjectionName, Rdf3xPatternKey, Rdf3xPermutationName, Rdf3xRebuildResult, Rdf3xTermKey, Rdf3xTermInPattern, Rdf3xTermMetadataPattern, Rdf3xTermNotInPattern, Rdf3xTermProjectionName, Rdf3xTermTypePatternValue, Rdf3xIndexOptions, Rdf3xTriplePattern, Rdf3xTripleScanOptions, Rdf3xTripleScanResult, Rdf3xShadowBindingDiff, Rdf3xShadowQuadDiff, Rdf3xShadowJoinResult, Rdf3xShadowScanResult, RdfIndexSpaceObject, RdfIndexMetrics, RdfIndexPutOptions, RdfBindingRow, RdfConstructTemplate, RdfQuadJoinOptions, RdfQuadJoinCountOptions, RdfQuadJoinOrder, RdfQuadJoinPattern, RdfQuadJoinScanResult, RdfLocalQuery, RdfQueryAggregate, RdfLocalQueryMetrics, RdfLocalQueryResult, RdfPatternQuery, RdfQuadIndexOptions, RdfQuadIndexScanResult, RdfQuadRow, RdfQueryOrder, RdfQueryPattern, RdfQueryPatternKey, RdfQueryTermPattern, RdfQueryVariable, RdfShadowBackfillOptions, RdfShadowBackfillResult, RdfShadowDiff, RdfShadowScanResult, RdfSourceInput, RdfSourceRow, RdfTextChunkInput, RdfTextChunkRow, RdfTextIndexOptions, RdfTextIndexStats, RdfTextSearchOptions, RdfTextSearchPattern, RdfTextSearchResult, RdfTextSourceInput, RdfTextTermDocumentFrequency, RdfVectorChunkInput, RdfVectorChunkRow, RdfVectorDistanceMetric, RdfVectorIndexOptions, RdfVectorIndexStats, RdfVectorModelDistribution, RdfVectorSearchOptions, RdfVectorSearchPattern, RdfVectorSearchResult, RdfVectorSourceInput, RdfTermKind, RdfTermLookup, RdfTermRow, RdfTermSelection, } from './types';
15
+ export { rdfModelsBenchmarkCases, rdfModelsBenchmarkCaseNames, rdfModelsQueryBenchmarkCases, rdfModelsQueryBenchmarkCaseNames, defaultSyntheticMessagesForRdfModelsScale, estimateRdfModelsSyntheticQuadCount, rdfModelsBenchmarkScaleSatisfied, rdfModelsBenchmarkSyntheticPodCount, rdfModelsBenchmarkScaleTargetQuads, runRdfModelsBenchmark, runRdfModelsRdf3xShadowBenchmark, runRdfModelsShadowBenchmark, RDF_MODELS_SYNTHETIC_MESSAGE_QUADS, type RdfBenchmarkScale, type RdfModelBenchmarkCase, type RdfModelQueryBenchmarkCase, type RdfModelQueryBenchmarkResult, type RdfModelBenchmarkReport, type RdfModelBenchmarkResult, type RdfModelBenchmarkRunOptions, type RdfModelShadowBenchmarkReport, type RdfModelRdf3xShadowBenchmarkReport, type RdfModelRdf3xShadowJoinBenchmarkResult, type RdfModelRdf3xShadowBenchmarkResult, type RdfModelShadowBenchmarkResult, type RdfModelShadowBenchmarkRunOptions, type RdfModelShadowBenchmarkSide, } from './models-benchmark';
16
+ export type { RdfEngineLike, RdfEngineStorageStats, RdfDerivedIndexRefreshResult, RdfIndexStats, RdfDerivedIndexProfile, Rdf3xCardinalityEstimate, Rdf3xCountResult, Rdf3xJoinMetrics, Rdf3xJoinOptions, Rdf3xJoinScanResult, Rdf3xIndexMetrics, Rdf3xIndexStats, Rdf3xObjectOperatorPattern, Rdf3xObjectRangePattern, Rdf3xPairProjectionName, Rdf3xPatternKey, Rdf3xPermutationName, Rdf3xRebuildResult, Rdf3xTermKey, Rdf3xTermInPattern, Rdf3xTermMetadataPattern, Rdf3xTermNotInPattern, Rdf3xTermProjectionName, Rdf3xTermTypePatternValue, Rdf3xIndexOptions, Rdf3xTriplePattern, Rdf3xTripleScanOptions, Rdf3xTripleScanResult, Rdf3xShadowBindingDiff, Rdf3xShadowQuadDiff, Rdf3xShadowJoinResult, Rdf3xShadowScanResult, RdfIndexSpaceObject, RdfIndexMetrics, RdfIndexPutOptions, RdfBindingRow, RdfConstructTemplate, RdfQuadJoinOptions, RdfQuadJoinCountOptions, RdfQuadJoinOrder, RdfQuadJoinPattern, RdfQuadJoinScanResult, RdfQuery, RdfQueryAggregate, RdfQueryMetrics, RdfQueryResult, RdfPatternQuery, RdfQuadIndexOptions, RdfQuadIndexScanResult, RdfQuadRow, RdfQueryOrder, RdfQueryPattern, RdfQueryPatternKey, RdfQueryTermPattern, RdfQueryVariable, RdfShadowBackfillOptions, RdfShadowBackfillResult, RdfShadowDiff, RdfShadowScanResult, RdfSourceInput, RdfSourceRow, RdfTextChunkInput, RdfTextChunkRow, RdfTextIndexOptions, RdfTextIndexStats, RdfTextSearchOptions, RdfTextSearchPattern, RdfTextSearchResult, RdfTextSourceInput, RdfTextTermDocumentFrequency, RdfVectorChunkInput, RdfVectorChunkRow, RdfVectorDistanceMetric, RdfVectorIndexOptions, RdfVectorIndexStats, RdfVectorModelDistribution, RdfVectorSearchOptions, RdfVectorSearchPattern, RdfVectorSearchResult, RdfVectorSourceInput, RdfTermKind, RdfTermLookup, RdfTermRow, RdfTermSelection, } from './types';