@undefineds.co/xpod 0.3.18 → 0.3.23

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 (115) hide show
  1. package/config/bun.json +57 -11
  2. package/config/cloud.json +14 -12
  3. package/config/local.json +16 -14
  4. package/config/xpod.json +47 -9
  5. package/dist/api/matrix/PodMatrixStore.d.ts +4 -7
  6. package/dist/api/matrix/PodMatrixStore.js +116 -148
  7. package/dist/api/matrix/PodMatrixStore.js.map +1 -1
  8. package/dist/api/matrix/types.d.ts +2 -0
  9. package/dist/api/matrix/types.js.map +1 -1
  10. package/dist/api/runs/PiAgentRuntimeDriver.d.ts +1 -0
  11. package/dist/api/runs/PiAgentRuntimeDriver.js +4 -1
  12. package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
  13. package/dist/components/components.jsonld +3 -0
  14. package/dist/components/context.jsonld +71 -32
  15. package/dist/http/SubgraphSparqlHttpHandler.d.ts +1 -0
  16. package/dist/http/SubgraphSparqlHttpHandler.js +27 -4
  17. package/dist/http/SubgraphSparqlHttpHandler.js.map +1 -1
  18. package/dist/http/SubgraphSparqlHttpHandler.jsonld +4 -0
  19. package/dist/http/vector/VectorHttpHandler.d.ts +5 -1
  20. package/dist/http/vector/VectorHttpHandler.js +5 -5
  21. package/dist/http/vector/VectorHttpHandler.js.map +1 -1
  22. package/dist/http/vector/VectorHttpHandler.jsonld +40 -28
  23. package/dist/index.d.ts +5 -2
  24. package/dist/index.js +9 -4
  25. package/dist/index.js.map +1 -1
  26. package/dist/runtime/Proxy.d.ts +3 -0
  27. package/dist/runtime/Proxy.js +31 -7
  28. package/dist/runtime/Proxy.js.map +1 -1
  29. package/dist/solidfs/LocalSolidFS.js +31 -124
  30. package/dist/solidfs/LocalSolidFS.js.map +1 -1
  31. package/dist/solidfs/SolidFsPathUtils.d.ts +13 -0
  32. package/dist/solidfs/SolidFsPathUtils.js +114 -0
  33. package/dist/solidfs/SolidFsPathUtils.js.map +1 -0
  34. package/dist/solidfs/SolidFsSyncJournal.d.ts +117 -0
  35. package/dist/solidfs/SolidFsSyncJournal.js +553 -0
  36. package/dist/solidfs/SolidFsSyncJournal.js.map +1 -0
  37. package/dist/solidfs/index.d.ts +1 -0
  38. package/dist/solidfs/index.js +1 -0
  39. package/dist/solidfs/index.js.map +1 -1
  40. package/dist/solidfs/types.d.ts +1 -0
  41. package/dist/solidfs/types.js.map +1 -1
  42. package/dist/storage/SparqlUpdateResourceStore.js +94 -33
  43. package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
  44. package/dist/storage/accessors/MixDataAccessor.d.ts +22 -5
  45. package/dist/storage/accessors/MixDataAccessor.js +376 -61
  46. package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
  47. package/dist/storage/accessors/MixDataAccessor.jsonld +73 -5
  48. package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js +32 -10
  49. package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js.map +1 -1
  50. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +28 -6
  51. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
  52. package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +45 -0
  53. package/dist/storage/accessors/SolidRdfDataAccessor.js +277 -0
  54. package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -0
  55. package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +161 -0
  56. package/dist/storage/rdf/Rdf3xIndex.d.ts +122 -0
  57. package/dist/storage/rdf/Rdf3xIndex.js +2695 -0
  58. package/dist/storage/rdf/Rdf3xIndex.js.map +1 -0
  59. package/dist/storage/rdf/Rdf3xIndex.jsonld +528 -0
  60. package/dist/storage/rdf/Rdf3xSchema.d.ts +20 -0
  61. package/dist/storage/rdf/Rdf3xSchema.js +65 -0
  62. package/dist/storage/rdf/Rdf3xSchema.js.map +1 -0
  63. package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +10 -4
  64. package/dist/storage/rdf/RdfLocalQueryEngine.js +607 -127
  65. package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -1
  66. package/dist/storage/rdf/RdfQuadIndex.d.ts +12 -1
  67. package/dist/storage/rdf/RdfQuadIndex.js +152 -22
  68. package/dist/storage/rdf/RdfQuadIndex.js.map +1 -1
  69. package/dist/storage/rdf/RdfQuadIndex.jsonld +36 -4
  70. package/dist/storage/rdf/RdfSparqlAdapter.d.ts +20 -2
  71. package/dist/storage/rdf/RdfSparqlAdapter.js +364 -40
  72. package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
  73. package/dist/storage/rdf/RdfSparqlAdapter.jsonld +60 -0
  74. package/dist/storage/rdf/RdfTermDictionary.d.ts +8 -0
  75. package/dist/storage/rdf/RdfTermDictionary.js +141 -70
  76. package/dist/storage/rdf/RdfTermDictionary.js.map +1 -1
  77. package/dist/storage/rdf/RdfTermDictionary.jsonld +24 -0
  78. package/dist/storage/rdf/RdfTextIndex.js +10 -3
  79. package/dist/storage/rdf/RdfTextIndex.js.map +1 -1
  80. package/dist/storage/rdf/SolidRdfEngine.d.ts +15 -6
  81. package/dist/storage/rdf/SolidRdfEngine.js +218 -25
  82. package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
  83. package/dist/storage/rdf/SolidRdfEngine.jsonld +70 -7
  84. package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +11 -7
  85. package/dist/storage/rdf/SolidRdfSparqlEngine.js +60 -47
  86. package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
  87. package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +9 -5
  88. package/dist/storage/rdf/index.d.ts +2 -2
  89. package/dist/storage/rdf/index.js +3 -3
  90. package/dist/storage/rdf/index.js.map +1 -1
  91. package/dist/storage/rdf/models-benchmark.d.ts +12 -1
  92. package/dist/storage/rdf/models-benchmark.js +549 -32
  93. package/dist/storage/rdf/models-benchmark.js.map +1 -1
  94. package/dist/storage/rdf/types.d.ts +81 -7
  95. package/dist/storage/rdf/types.js.map +1 -1
  96. package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +36 -0
  97. package/dist/storage/sparql/CompatibilitySparqlEngine.js +96 -0
  98. package/dist/storage/sparql/CompatibilitySparqlEngine.js.map +1 -0
  99. package/dist/storage/sparql/CompatibilitySparqlEngine.jsonld +123 -0
  100. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +35 -0
  101. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +112 -0
  102. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js.map +1 -0
  103. package/dist/storage/sparql/SubgraphQueryEngine.d.ts +1 -36
  104. package/dist/storage/sparql/SubgraphQueryEngine.js +2 -115
  105. package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
  106. package/dist/storage/sparql/SubgraphQueryEngine.jsonld +1 -124
  107. package/dist/terminal/AclPermissionService.d.ts +2 -1
  108. package/dist/terminal/AclPermissionService.js +26 -3
  109. package/dist/terminal/AclPermissionService.js.map +1 -1
  110. package/dist/terminal/TerminalSessionManager.js +25 -3
  111. package/dist/terminal/TerminalSessionManager.js.map +1 -1
  112. package/package.json +1 -1
  113. package/dist/storage/rdf/Rdf3xTripleIndex.d.ts +0 -55
  114. package/dist/storage/rdf/Rdf3xTripleIndex.js +0 -1235
  115. package/dist/storage/rdf/Rdf3xTripleIndex.js.map +0 -1
@@ -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 } from '@rdfjs/types';\nimport { termToId } from 'n3';\nimport type { QuintPattern, QuintStore } from '../quint/types';\nimport { isTerm } from '../quint/types';\nimport type {\n Rdf3xNumericObjectRangePattern,\n Rdf3xShadowJoinResult,\n Rdf3xShadowScanResult,\n Rdf3xTripleIndexOptions,\n Rdf3xTriplePattern,\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} from './types';\nimport { RdfQuadIndex } from './RdfQuadIndex';\nimport { Rdf3xTripleIndex } from './Rdf3xTripleIndex';\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 textIndex?: RdfTextIndex | RdfTextIndexOptions;\n vectorIndex?: RdfVectorIndex | RdfVectorIndexOptions;\n rdf3xIndex?: Rdf3xTripleIndex | Rdf3xTripleIndexOptions;\n rdf3xPrimary?: boolean;\n compatibilityStore?: QuintStore;\n autoOpen?: boolean;\n}\n\nexport class SolidRdfEngine {\n public readonly index: RdfQuadIndex;\n public readonly textIndex?: RdfTextIndex;\n public readonly vectorIndex?: RdfVectorIndex;\n public readonly rdf3xIndex?: Rdf3xTripleIndex;\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 readonly queryEngine: RdfLocalQueryEngine;\n private rdf3xDirty = true;\n\n public constructor(options: SolidRdfEngineOptions) {\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 if (options.rdf3xIndex instanceof Rdf3xTripleIndex) {\n this.rdf3xIndex = options.rdf3xIndex;\n this.ownsRdf3xIndex = false;\n } else if (isRdf3xTripleIndexOptions(options.rdf3xIndex)) {\n this.rdf3xIndex = new Rdf3xTripleIndex(options.rdf3xIndex);\n this.ownsRdf3xIndex = true;\n } else {\n this.ownsRdf3xIndex = false;\n }\n if (options.rdf3xPrimary && !this.rdf3xIndex) {\n throw new Error('SolidRdfEngine rdf3xPrimary requires an rdf3xIndex');\n }\n this.rdf3xPrimary = Boolean(options.rdf3xPrimary);\n this.compatibilityStore = options.compatibilityStore;\n this.queryEngine = new RdfLocalQueryEngine(\n this.index,\n this.textIndex,\n this.vectorIndex,\n this.rdf3xPrimary ? this.rdf3xIndex : undefined,\n );\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 scan(query: RdfPatternQuery): RdfQuadIndexScanResult {\n return this.index.scan(query.pattern, query.options);\n }\n\n public query(query: RdfLocalQuery): RdfLocalQueryResult {\n this.refreshRdf3xPrimary();\n return this.queryEngine.query(query);\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 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(): Rdf3xTripleIndex {\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 refreshRdf3xPrimary(): void {\n if (!this.rdf3xPrimary || !this.rdf3xDirty) {\n return;\n }\n this.requireRdf3xIndex().rebuildFromCurrentQuads();\n this.rdf3xDirty = false;\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 isRdf3xTripleIndexOptions(input: Rdf3xTripleIndex | Rdf3xTripleIndexOptions | undefined): input is Rdf3xTripleIndexOptions {\n return input !== undefined && !(input instanceof Rdf3xTripleIndex) && typeof input.path === 'string';\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 (key === 'graph' && isStartsWithOperator(value)) {\n result.graph = { $startsWith: value.$startsWith };\n continue;\n }\n if (key === 'object' && isNumericObjectRangeOperator(value)) {\n result.object = value;\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 isStartsWithOperator(value: unknown): value is { $startsWith: string } {\n return value !== null\n && typeof value === 'object'\n && '$startsWith' in value\n && typeof (value as { $startsWith?: unknown }).$startsWith === 'string';\n}\n\nfunction isNumericObjectRangeOperator(value: unknown): value is Rdf3xNumericObjectRangePattern {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && ['$gt', '$gte', '$lt', '$lte'].some((operator) => operator in value);\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} 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 {\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"]}
@@ -25,6 +25,30 @@
25
25
  ]
26
26
  }
27
27
  },
28
+ {
29
+ "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_derivedIndexProfile",
30
+ "range": {
31
+ "@type": "ParameterRangeUnion",
32
+ "parameterRangeElements": [
33
+ {
34
+ "@type": "ParameterRangeUnion",
35
+ "parameterRangeElements": [
36
+ {
37
+ "@type": "ParameterRangeLiteral",
38
+ "parameterRangeValueLiteral": "baseline"
39
+ },
40
+ {
41
+ "@type": "ParameterRangeLiteral",
42
+ "parameterRangeValueLiteral": "rdf3x"
43
+ }
44
+ ]
45
+ },
46
+ {
47
+ "@type": "ParameterRangeUndefined"
48
+ }
49
+ ]
50
+ }
51
+ },
28
52
  {
29
53
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_textIndex_path",
30
54
  "range": "xsd:string"
@@ -133,7 +157,24 @@
133
157
  {
134
158
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_rdf3xIndex",
135
159
  "memberFieldName": "rdf3xIndex",
136
- "range": "undefineds:dist/storage/rdf/Rdf3xTripleIndex.jsonld#Rdf3xTripleIndex"
160
+ "range": "undefineds:dist/storage/rdf/Rdf3xIndex.jsonld#Rdf3xIndex"
161
+ },
162
+ {
163
+ "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_derivedIndexProfile",
164
+ "memberFieldName": "derivedIndexProfile",
165
+ "range": {
166
+ "@type": "ParameterRangeUnion",
167
+ "parameterRangeElements": [
168
+ {
169
+ "@type": "ParameterRangeLiteral",
170
+ "parameterRangeValueLiteral": "baseline"
171
+ },
172
+ {
173
+ "@type": "ParameterRangeLiteral",
174
+ "parameterRangeValueLiteral": "rdf3x"
175
+ }
176
+ ]
177
+ }
137
178
  },
138
179
  {
139
180
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_ownsIndex",
@@ -163,14 +204,14 @@
163
204
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_shadowComparator",
164
205
  "memberFieldName": "shadowComparator"
165
206
  },
166
- {
167
- "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_queryEngine",
168
- "memberFieldName": "queryEngine"
169
- },
170
207
  {
171
208
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_rdf3xDirty",
172
209
  "memberFieldName": "rdf3xDirty"
173
210
  },
211
+ {
212
+ "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_rdf3xDataVersion",
213
+ "memberFieldName": "rdf3xDataVersion"
214
+ },
174
215
  {
175
216
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_constructor",
176
217
  "memberFieldName": "constructor"
@@ -199,6 +240,10 @@
199
240
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_delete",
200
241
  "memberFieldName": "delete"
201
242
  },
243
+ {
244
+ "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_applyDelta",
245
+ "memberFieldName": "applyDelta"
246
+ },
202
247
  {
203
248
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_scan",
204
249
  "memberFieldName": "scan"
@@ -207,6 +252,10 @@
207
252
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_query",
208
253
  "memberFieldName": "query"
209
254
  },
255
+ {
256
+ "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_refreshDerivedIndexes",
257
+ "memberFieldName": "refreshDerivedIndexes"
258
+ },
210
259
  {
211
260
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_indexTextSource",
212
261
  "memberFieldName": "indexTextSource"
@@ -247,6 +296,10 @@
247
296
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_supportsPrimary",
248
297
  "memberFieldName": "supportsPrimary"
249
298
  },
299
+ {
300
+ "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_storageStats",
301
+ "memberFieldName": "storageStats"
302
+ },
250
303
  {
251
304
  "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_requireTextIndex",
252
305
  "memberFieldName": "requireTextIndex"
@@ -264,8 +317,12 @@
264
317
  "memberFieldName": "markRdf3xDirty"
265
318
  },
266
319
  {
267
- "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_refreshRdf3xPrimary",
268
- "memberFieldName": "refreshRdf3xPrimary"
320
+ "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_isRdf3xPrimaryReady",
321
+ "memberFieldName": "isRdf3xPrimaryReady"
322
+ },
323
+ {
324
+ "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine__member_refreshRdf3xDerivedIndex",
325
+ "memberFieldName": "refreshRdf3xDerivedIndex"
269
326
  }
270
327
  ],
271
328
  "constructorArguments": [
@@ -292,6 +349,12 @@
292
349
  ]
293
350
  }
294
351
  },
352
+ {
353
+ "keyRaw": "derivedIndexProfile",
354
+ "value": {
355
+ "@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_derivedIndexProfile"
356
+ }
357
+ },
295
358
  {
296
359
  "keyRaw": "textIndex",
297
360
  "value": {
@@ -1,12 +1,11 @@
1
1
  import type { AsyncIterator } from 'asynciterator';
2
- import type { Bindings } from '@comunica/types';
3
- import type { Quad } from '@rdfjs/types';
2
+ import type { Quad, Term, Variable } from '@rdfjs/types';
4
3
  import type { SparqlEngine } from '../sparql/SubgraphQueryEngine';
5
4
  import type { ShadowRdfQuintStore } from './ShadowRdfQuintStore';
6
5
  import type { SolidRdfEngine } from './SolidRdfEngine';
7
6
  export interface SolidRdfSparqlEngineOptions {
8
7
  rdfEngine: SolidRdfEngine;
9
- fallback: SparqlEngine;
8
+ fallback?: SparqlEngine;
10
9
  shadowStore?: ShadowRdfQuintStore;
11
10
  enablePrimary?: boolean;
12
11
  onFallback?: (reason: SolidRdfSparqlFallback) => void;
@@ -50,23 +49,22 @@ export interface SolidRdfSparqlFallbackBudget {
50
49
  maxFallbackCount?: number;
51
50
  operations?: SolidRdfSparqlOperation[];
52
51
  }
53
- type BindingsStream = AsyncIterator<Bindings> & {
52
+ type BindingsStream = AsyncIterator<RdfBindings> & {
54
53
  metadata?: () => Promise<{
55
54
  variables: import('@rdfjs/types').Variable[];
56
55
  }>;
57
56
  };
58
57
  export declare class SolidRdfSparqlEngine implements SparqlEngine {
59
58
  private readonly adapter;
60
- private readonly bindingsFactory;
61
59
  private readonly rdfEngine;
62
- private readonly fallback;
60
+ private readonly fallback?;
63
61
  private readonly shadowStore?;
64
62
  private readonly enablePrimary;
65
63
  private readonly onFallback?;
66
64
  private readonly operationCounts;
67
65
  private lastPrimary?;
68
66
  private lastFallback?;
69
- constructor(rdfEngine: SolidRdfEngine, fallback: SparqlEngine, shadowStore?: ShadowRdfQuintStore, enablePrimary?: boolean, onFallback?: (reason: SolidRdfSparqlFallback) => void);
67
+ constructor(rdfEngine: SolidRdfEngine, fallback?: SparqlEngine, shadowStore?: ShadowRdfQuintStore, enablePrimary?: boolean, onFallback?: (reason: SolidRdfSparqlFallback) => void);
70
68
  queryBindings(query: string, basePath: string): Promise<BindingsStream>;
71
69
  queryBoolean(query: string, basePath: string): Promise<boolean>;
72
70
  queryQuads(query: string, basePath: string): Promise<any>;
@@ -89,4 +87,10 @@ export declare class SolidRdfSparqlEngine implements SparqlEngine {
89
87
  private recordFallback;
90
88
  private countsFor;
91
89
  }
90
+ declare class RdfBindings extends Map<Variable, Term> {
91
+ private readonly byName;
92
+ constructor(entries: [Variable, Term][]);
93
+ get(key: string | Variable): Term | undefined;
94
+ has(key: string | Variable): boolean;
95
+ }
92
96
  export {};
@@ -3,14 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SolidRdfSparqlEngine = void 0;
4
4
  const asynciterator_1 = require("asynciterator");
5
5
  const rdf_data_factory_1 = require("rdf-data-factory");
6
- const utils_bindings_factory_1 = require("@comunica/utils-bindings-factory");
7
6
  const n3_1 = require("n3");
8
7
  const RdfSparqlAdapter_1 = require("./RdfSparqlAdapter");
9
8
  const rdfDataFactory = new rdf_data_factory_1.DataFactory();
10
9
  class SolidRdfSparqlEngine {
11
10
  constructor(rdfEngine, fallback, shadowStore, enablePrimary = true, onFallback) {
12
11
  this.adapter = new RdfSparqlAdapter_1.RdfSparqlAdapter();
13
- this.bindingsFactory = new utils_bindings_factory_1.BindingsFactory(rdfDataFactory);
14
12
  this.operationCounts = new Map();
15
13
  this.rdfEngine = rdfEngine;
16
14
  this.fallback = fallback;
@@ -21,13 +19,13 @@ class SolidRdfSparqlEngine {
21
19
  async queryBindings(query, basePath) {
22
20
  await this.ensureReady();
23
21
  if (!this.enablePrimary) {
24
- return this.fallbackWith('queryBindings', 'primary disabled', () => this.fallback.queryBindings(query, basePath));
22
+ return this.fallbackWith('queryBindings', 'primary disabled', (fallback) => fallback.queryBindings(query, basePath));
25
23
  }
26
24
  const start = Date.now();
27
25
  try {
28
26
  const compiled = this.adapter.compile(query, basePath);
29
27
  if (compiled.queryType !== 'SELECT') {
30
- return this.fallbackWith('queryBindings', `compiled ${compiled.queryType} cannot produce bindings`, () => this.fallback.queryBindings(query, basePath));
28
+ return this.fallbackWith('queryBindings', `compiled ${compiled.queryType} cannot produce bindings`, (fallback) => fallback.queryBindings(query, basePath));
31
29
  }
32
30
  const result = await this.rdfEngine.query(compiled.query);
33
31
  this.recordPrimary('queryBindings', start, result);
@@ -37,19 +35,19 @@ class SolidRdfSparqlEngine {
37
35
  if (error instanceof RdfSparqlAdapter_1.DisabledSparqlFeatureError) {
38
36
  throw error;
39
37
  }
40
- return this.fallbackWith('queryBindings', fallbackReason(error), () => this.fallback.queryBindings(query, basePath));
38
+ return this.fallbackWith('queryBindings', fallbackReason(error), (fallback) => fallback.queryBindings(query, basePath));
41
39
  }
42
40
  }
43
41
  async queryBoolean(query, basePath) {
44
42
  await this.ensureReady();
45
43
  if (!this.enablePrimary) {
46
- return this.fallbackWith('queryBoolean', 'primary disabled', () => this.fallback.queryBoolean(query, basePath));
44
+ return this.fallbackWith('queryBoolean', 'primary disabled', (fallback) => fallback.queryBoolean(query, basePath));
47
45
  }
48
46
  const start = Date.now();
49
47
  try {
50
48
  const compiled = this.adapter.compile(query, basePath);
51
49
  if (compiled.queryType !== 'ASK') {
52
- return this.fallbackWith('queryBoolean', `compiled ${compiled.queryType} cannot produce boolean`, () => this.fallback.queryBoolean(query, basePath));
50
+ return this.fallbackWith('queryBoolean', `compiled ${compiled.queryType} cannot produce boolean`, (fallback) => fallback.queryBoolean(query, basePath));
53
51
  }
54
52
  const result = await this.rdfEngine.query(compiled.query);
55
53
  this.recordPrimary('queryBoolean', start, result);
@@ -59,13 +57,13 @@ class SolidRdfSparqlEngine {
59
57
  if (error instanceof RdfSparqlAdapter_1.DisabledSparqlFeatureError) {
60
58
  throw error;
61
59
  }
62
- return this.fallbackWith('queryBoolean', fallbackReason(error), () => this.fallback.queryBoolean(query, basePath));
60
+ return this.fallbackWith('queryBoolean', fallbackReason(error), (fallback) => fallback.queryBoolean(query, basePath));
63
61
  }
64
62
  }
65
63
  async queryQuads(query, basePath) {
66
64
  await this.ensureReady();
67
65
  if (!this.enablePrimary) {
68
- return this.fallbackWith('queryQuads', 'primary disabled', () => this.fallback.queryQuads(query, basePath));
66
+ return this.fallbackWith('queryQuads', 'primary disabled', (fallback) => fallback.queryQuads(query, basePath));
69
67
  }
70
68
  const start = Date.now();
71
69
  try {
@@ -76,33 +74,28 @@ class SolidRdfSparqlEngine {
76
74
  if (error instanceof RdfSparqlAdapter_1.DisabledSparqlFeatureError) {
77
75
  throw error;
78
76
  }
79
- return this.fallbackWith('queryQuads', fallbackReason(error), () => this.fallback.queryQuads(query, basePath));
77
+ return this.fallbackWith('queryQuads', fallbackReason(error), (fallback) => fallback.queryQuads(query, basePath));
80
78
  }
81
79
  }
82
80
  async queryVoid(query, basePath) {
83
81
  await this.ensureReady();
84
82
  if (!this.enablePrimary) {
85
- return this.fallbackWith('queryVoid', 'primary disabled', () => this.fallback.queryVoid(query, basePath));
83
+ return this.fallbackWith('queryVoid', 'primary disabled', (fallback) => fallback.queryVoid(query, basePath));
86
84
  }
87
85
  const start = Date.now();
88
86
  try {
89
- const delta = this.adapter.compileUpdateDelta(query, basePath);
87
+ const delta = this.adapter.compileUpdateDelta(query, basePath, {
88
+ defaultGraph: implicitUpdateDefaultGraph(basePath),
89
+ });
90
90
  let deletedRows = 0;
91
91
  let computedDeletes = 0;
92
92
  let computedInserts = 0;
93
93
  for (const operation of delta.operations) {
94
94
  if (operation.type === 'delete') {
95
- for (const quad of operation.quads) {
96
- deletedRows += this.rdfEngine.delete({
97
- graph: quad.graph,
98
- subject: quad.subject,
99
- predicate: quad.predicate,
100
- object: quad.object,
101
- });
102
- }
95
+ deletedRows += this.rdfEngine.applyDelta(operation.quads.map(quadToPattern), []).deletedRows;
103
96
  }
104
97
  else if (operation.type === 'insert') {
105
- this.rdfEngine.put(operation.quads);
98
+ this.rdfEngine.applyDelta([], operation.quads);
106
99
  }
107
100
  else if (operation.type === 'insertDeleteWhere') {
108
101
  const result = this.rdfEngine.query(operation.query);
@@ -110,34 +103,19 @@ class SolidRdfSparqlEngine {
110
103
  const inserts = this.adapter.materializeDeleteWhere(operation.inserts, result.bindings);
111
104
  computedDeletes += deletes.length;
112
105
  computedInserts += inserts.length;
113
- for (const quad of deletes) {
114
- deletedRows += this.rdfEngine.delete({
115
- graph: quad.graph,
116
- subject: quad.subject,
117
- predicate: quad.predicate,
118
- object: quad.object,
119
- });
120
- }
121
- this.rdfEngine.put(inserts);
106
+ deletedRows += this.rdfEngine.applyDelta(deletes.map(quadToPattern), inserts).deletedRows;
122
107
  }
123
108
  else if (operation.type === 'insertWhere') {
124
109
  const result = this.rdfEngine.query(operation.query);
125
110
  const inserts = this.adapter.materializeDeleteWhere(operation.inserts, result.bindings);
126
111
  computedInserts += inserts.length;
127
- this.rdfEngine.put(inserts);
112
+ this.rdfEngine.applyDelta([], inserts);
128
113
  }
129
114
  else {
130
115
  const result = this.rdfEngine.query(operation.query);
131
116
  const quads = this.adapter.materializeDeleteWhere(operation.template, result.bindings);
132
117
  computedDeletes += quads.length;
133
- for (const quad of quads) {
134
- deletedRows += this.rdfEngine.delete({
135
- graph: quad.graph,
136
- subject: quad.subject,
137
- predicate: quad.predicate,
138
- object: quad.object,
139
- });
140
- }
118
+ deletedRows += this.rdfEngine.applyDelta(quads.map(quadToPattern), []).deletedRows;
141
119
  }
142
120
  }
143
121
  this.recordPrimary('queryVoid', start, {
@@ -160,13 +138,13 @@ class SolidRdfSparqlEngine {
160
138
  if (error instanceof RdfSparqlAdapter_1.DisabledSparqlFeatureError) {
161
139
  throw error;
162
140
  }
163
- return this.fallbackWith('queryVoid', fallbackReason(error), () => this.fallback.queryVoid(query, basePath));
141
+ return this.fallbackWith('queryVoid', fallbackReason(error), (fallback) => fallback.queryVoid(query, basePath));
164
142
  }
165
143
  }
166
144
  async constructGraph(graph, basePath) {
167
145
  await this.ensureReady();
168
146
  if (!this.enablePrimary) {
169
- return this.fallbackWith('constructGraph', 'primary disabled', () => this.fallback.constructGraph(graph, basePath));
147
+ return this.fallbackWith('constructGraph', 'primary disabled', (fallback) => fallback.constructGraph(graph, basePath));
170
148
  }
171
149
  if (!graph.startsWith(basePath)) {
172
150
  return new asynciterator_1.ArrayIterator([]);
@@ -183,13 +161,13 @@ class SolidRdfSparqlEngine {
183
161
  if (error instanceof RdfSparqlAdapter_1.DisabledSparqlFeatureError) {
184
162
  throw error;
185
163
  }
186
- return this.fallbackWith('constructGraph', fallbackReason(error), () => this.fallback.constructGraph(graph, basePath));
164
+ return this.fallbackWith('constructGraph', fallbackReason(error), (fallback) => fallback.constructGraph(graph, basePath));
187
165
  }
188
166
  }
189
167
  async listGraphs(basePath) {
190
168
  await this.ensureReady();
191
169
  if (!this.enablePrimary) {
192
- return this.fallbackWith('listGraphs', 'primary disabled', () => this.fallback.listGraphs(basePath));
170
+ return this.fallbackWith('listGraphs', 'primary disabled', (fallback) => fallback.listGraphs(basePath));
193
171
  }
194
172
  const start = Date.now();
195
173
  try {
@@ -209,12 +187,12 @@ class SolidRdfSparqlEngine {
209
187
  if (error instanceof RdfSparqlAdapter_1.DisabledSparqlFeatureError) {
210
188
  throw error;
211
189
  }
212
- return this.fallbackWith('listGraphs', fallbackReason(error), () => this.fallback.listGraphs(basePath));
190
+ return this.fallbackWith('listGraphs', fallbackReason(error), (fallback) => fallback.listGraphs(basePath));
213
191
  }
214
192
  }
215
193
  async close() {
216
194
  await this.rdfEngine.close();
217
- await this.fallback.close();
195
+ await this.fallback?.close();
218
196
  }
219
197
  getMetrics() {
220
198
  const operationCounts = [...this.operationCounts.entries()]
@@ -275,13 +253,16 @@ class SolidRdfSparqlEngine {
275
253
  return term ? [rdfDataFactory.variable(variableName), term] : null;
276
254
  })
277
255
  .filter((entry) => entry !== null);
278
- return this.bindingsFactory.bindings(entries);
256
+ return new RdfBindings(entries);
279
257
  }
280
258
  async fallbackWith(operation, reason, run) {
259
+ if (!this.fallback) {
260
+ throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError(`No compatibility SPARQL fallback configured for ${operation}: ${reason}`);
261
+ }
281
262
  this.onFallback?.({ operation, reason });
282
263
  const start = Date.now();
283
264
  try {
284
- return await run();
265
+ return await run(this.fallback);
285
266
  }
286
267
  finally {
287
268
  this.recordFallback(operation, reason, Date.now() - start);
@@ -426,6 +407,27 @@ class SolidRdfSparqlEngine {
426
407
  }
427
408
  }
428
409
  exports.SolidRdfSparqlEngine = SolidRdfSparqlEngine;
410
+ class RdfBindings extends Map {
411
+ constructor(entries) {
412
+ super(entries);
413
+ this.byName = new Map();
414
+ for (const [variable, term] of entries) {
415
+ this.byName.set(variable.value, term);
416
+ }
417
+ }
418
+ get(key) {
419
+ if (typeof key === 'string') {
420
+ return this.byName.get(key);
421
+ }
422
+ return this.byName.get(key.value) ?? super.get(key);
423
+ }
424
+ has(key) {
425
+ if (typeof key === 'string') {
426
+ return this.byName.has(key);
427
+ }
428
+ return this.byName.has(key.value) || super.has(key);
429
+ }
430
+ }
429
431
  function inferVariables(bindings) {
430
432
  const names = new Set();
431
433
  for (const binding of bindings) {
@@ -471,6 +473,17 @@ function operationCountSnapshot(operation, counts) {
471
473
  function ratio(numerator, denominator) {
472
474
  return denominator === 0 ? 0 : numerator / denominator;
473
475
  }
476
+ function implicitUpdateDefaultGraph(basePath) {
477
+ return basePath.endsWith('/') ? undefined : basePath;
478
+ }
479
+ function quadToPattern(quad) {
480
+ return {
481
+ graph: quad.graph,
482
+ subject: quad.subject,
483
+ predicate: quad.predicate,
484
+ object: quad.object,
485
+ };
486
+ }
474
487
  function escapeIri(value) {
475
488
  return value.replace(/[<>"{}|^`\\]/g, (char) => encodeURIComponent(char));
476
489
  }