@undefineds.co/xpod 0.3.29 → 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 (35) hide show
  1. package/dist/authorization/PodAuthorizationResources.d.ts +1 -0
  2. package/dist/authorization/PodAuthorizationResources.js +36 -4
  3. package/dist/authorization/PodAuthorizationResources.js.map +1 -1
  4. package/dist/provision/LocalPodProvisioningService.js +2 -0
  5. package/dist/provision/LocalPodProvisioningService.js.map +1 -1
  6. package/dist/provision/ProvisionPodCreator.js +16 -0
  7. package/dist/provision/ProvisionPodCreator.js.map +1 -1
  8. package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
  9. package/dist/storage/rdf/PostgresRdfEngine.d.ts +12 -15
  10. package/dist/storage/rdf/PostgresRdfEngine.js +1040 -150
  11. package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -1
  12. package/dist/storage/rdf/PostgresRdfEngine.jsonld +40 -52
  13. package/dist/storage/rdf/{RdfLocalQueryEngine.d.ts → RdfQueryExecutor.d.ts} +3 -3
  14. package/dist/storage/rdf/{RdfLocalQueryEngine.js → RdfQueryExecutor.js} +9 -9
  15. package/dist/storage/rdf/RdfQueryExecutor.js.map +1 -0
  16. package/dist/storage/rdf/RdfSparqlAdapter.d.ts +5 -5
  17. package/dist/storage/rdf/RdfSparqlAdapter.js +27 -27
  18. package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
  19. package/dist/storage/rdf/SolidRdfEngine.d.ts +2 -5
  20. package/dist/storage/rdf/SolidRdfEngine.js +6 -38
  21. package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
  22. package/dist/storage/rdf/SolidRdfEngine.jsonld +0 -12
  23. package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
  24. package/dist/storage/rdf/index.d.ts +3 -3
  25. package/dist/storage/rdf/index.js +6 -6
  26. package/dist/storage/rdf/index.js.map +1 -1
  27. package/dist/storage/rdf/models-benchmark.d.ts +9 -9
  28. package/dist/storage/rdf/models-benchmark.js +23 -23
  29. package/dist/storage/rdf/models-benchmark.js.map +1 -1
  30. package/dist/storage/rdf/types.d.ts +5 -5
  31. package/dist/storage/rdf/types.js.map +1 -1
  32. package/package.json +1 -1
  33. package/templates/pod/acp/profile/.acr +21 -0
  34. package/templates/pod/wac/profile/.acl.hbs +18 -0
  35. package/dist/storage/rdf/RdfLocalQueryEngine.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MixDataAccessor.js","sourceRoot":"","sources":["../../../src/storage/accessors/MixDataAccessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { Readable } from 'stream';\nimport { getLoggerFor } from 'global-logger-factory';\nimport arrayifyStream from 'arrayify-stream';\nimport { DataFactory, Parser, Writer, termToId } from 'n3';\nimport jsonld from 'jsonld';\nimport { rdfParser } from 'rdf-parse';\nimport { Parser as SparqlParser } from 'sparqljs';\n\nimport type { Quad, Term } from '@rdfjs/types';\nimport {\n isContainerIdentifier,\n RepresentationMetadata,\n INTERNAL_QUADS,\n FoundHttpError,\n NotFoundHttpError,\n POSIX,\n SOLID_META,\n XSD,\n toLiteral,\n guardStream,\n addResourceMetadata,\n updateModifiedDate,\n} from '@solid/community-server';\nimport type {\n Representation,\n ResourceIdentifier,\n Guarded,\n DataAccessor,\n} from '@solid/community-server';\nimport {\n RdfSparqlAdapter,\n UnsupportedSparqlQueryError,\n type RdfSparqlUpdateDeltaOperation,\n} from '../rdf/RdfSparqlAdapter';\nimport {\n isLineAddressableRdfPath,\n isRdfDocumentPath,\n rdfContentTypeForPath,\n} from '../rdf/RdfContentTypes';\nimport { RdfQuadIndex } from '../rdf/RdfQuadIndex';\nimport { serializeRdfXml } from '../rdf/RdfXmlSerializer';\nimport { SolidRdfEngine } from '../rdf/SolidRdfEngine';\nimport type {\n RdfBindingRow,\n RdfLocalQuery,\n RdfQueryPattern,\n RdfQueryTermPattern,\n RdfSourceInput,\n RdfValuesBindingSource,\n} from '../rdf/types';\nimport { metadataRequestContext } from '../MetadataRequestContext';\n\nexport interface LocalRdfDocument {\n data: Guarded<Readable>;\n metadata: RepresentationMetadata;\n}\n\nexport interface LocalRdfReadableAccessor {\n getLocalRdfDocument(identifier: ResourceIdentifier): Promise<LocalRdfDocument>;\n}\n\nexport interface LocalRdfIndexAccessor {\n syncLocalRdfDocument(\n identifier: ResourceIdentifier,\n data?: Guarded<Readable>,\n contentType?: string,\n options?: LocalRdfSyncOptions,\n ): Promise<void>;\n deleteLocalRdfIndex(identifier: ResourceIdentifier): Promise<void>;\n}\n\nexport interface LocalRdfSyncOptions {\n source?: string;\n workspace?: string;\n localPath?: string;\n sourceVersion?: string;\n}\n\nexport interface SourceScopedStructuredRdfAccessor {\n writeRdfSourceDocument(\n identifier: ResourceIdentifier,\n quads: Quad[],\n metadata: RepresentationMetadata,\n source: RdfSourceInput,\n ): Promise<void>;\n deleteRdfSourceDocument(identifier: ResourceIdentifier): Promise<void>;\n}\n\ninterface LocalRdfGraphState {\n quads: Quad[];\n existed: boolean;\n}\n\ninterface LocalRdfAuthorityPatch {\n identifier: ResourceIdentifier;\n previousQuads: Quad[];\n previousExists: boolean;\n nextQuads: Quad[];\n}\n\n/**\n * MixDataAccessor - Routes data to appropriate storage based on content type\n * \n * - RDF data (internal/quads) -> structuredDataAccessor (Solid RDF engine by default)\n * - RDF file mirrors (.ttl/.jsonld) -> rdfFileDataAccessor (local FileSystem)\n * - Other data (binary, text, etc.) -> unstructuredDataAccessor (FileSystem, Minio, etc.)\n * \n * This uses composition instead of inheritance, allowing any DataAccessor\n * to be used as the RDF storage backend.\n */\nexport class MixDataAccessor implements DataAccessor {\n protected readonly logger = getLoggerFor(this);\n private readonly rdfSparqlAdapter = new RdfSparqlAdapter();\n \n private readonly structuredDataAccessor: DataAccessor;\n private readonly unstructuredDataAccessor: DataAccessor;\n private readonly rdfFileDataAccessor: DataAccessor;\n private readonly presignedRedirectEnabled: boolean;\n private readonly mirrorContainersToUnstructured: boolean;\n\n constructor(\n structuredDataAccessor: DataAccessor,\n unstructuredDataAccessor: DataAccessor,\n presignedRedirectEnabled = false,\n mirrorContainersToUnstructured = true,\n rdfFileDataAccessor: DataAccessor = unstructuredDataAccessor,\n ) {\n this.structuredDataAccessor = structuredDataAccessor;\n this.unstructuredDataAccessor = unstructuredDataAccessor;\n this.rdfFileDataAccessor = rdfFileDataAccessor;\n this.presignedRedirectEnabled = presignedRedirectEnabled;\n this.mirrorContainersToUnstructured = mirrorContainersToUnstructured;\n }\n\n /**\n * This accessor supports all types of data.\n */\n public async canHandle(representation: Representation): Promise<void> {\n return void 0;\n }\n\n /**\n * Checks if the given representation is unstructured (non-RDF).\n */\n private isUnstructured(metadata: RepresentationMetadata): boolean {\n return metadata.contentType !== INTERNAL_QUADS;\n }\n\n public async getData(identifier: ResourceIdentifier): Promise<Guarded<Readable>> {\n const metadata = await this.getMetadata(identifier);\n if (this.isUnstructured(metadata)) {\n // When presigned redirect is enabled and the unstructured accessor supports it,\n // generate a presigned URL and throw FoundHttpError to trigger a 302 redirect.\n if (this.presignedRedirectEnabled) {\n const accessor = this.unstructuredDataAccessor as { getPresignedUrl?: (id: ResourceIdentifier, expires?: number) => Promise<string> };\n if (typeof accessor.getPresignedUrl === 'function') {\n const presignedUrl = await accessor.getPresignedUrl(identifier);\n this.logger.debug(`Presigned redirect: ${identifier.path}`);\n throw new FoundHttpError(presignedUrl);\n }\n }\n return await this.unstructuredDataAccessor.getData(identifier);\n }\n return await this.structuredDataAccessor.getData(identifier);\n }\n\n /**\n * Read the local RDF file mirror used by SolidFS/local-first HTTP reads.\n *\n * `getData()` intentionally keeps returning the structured quad stream for\n * CSS internals. This method is the explicit file-content path for callers\n * that need a real Turtle/JSON-LD byte stream.\n */\n public async getLocalRdfDocument(identifier: ResourceIdentifier): Promise<LocalRdfDocument> {\n if (isContainerIdentifier(identifier)) {\n throw new NotFoundHttpError();\n }\n\n if (this.isByLineRdfIdentifier(identifier)) {\n try {\n return {\n data: await this.rdfFileDataAccessor.getData(identifier),\n metadata: await this.getExistingLocalRdfMetadata(identifier),\n };\n } catch (error) {\n if (!NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n }\n }\n\n const metadata = await this.getMetadata(identifier);\n if (!this.isLocalMirroredRdf(identifier, metadata)) {\n throw new NotFoundHttpError();\n }\n\n try {\n return {\n data: await this.rdfFileDataAccessor.getData(identifier),\n metadata: await this.getLocalRdfMetadata(identifier, metadata),\n };\n } catch (error) {\n if (!NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n }\n\n await this.refreshLocalRdfMirror(identifier);\n\n return {\n data: await this.rdfFileDataAccessor.getData(identifier),\n metadata: await this.getLocalRdfMetadata(identifier, metadata),\n };\n }\n\n public async getMetadata(identifier: ResourceIdentifier): Promise<RepresentationMetadata> {\n const cache = metadataRequestContext.getStore()?.metadataCache;\n const cacheKey = identifier.path;\n const cached = cache?.get(cacheKey);\n if (cached) {\n if (cached.kind === 'miss') {\n throw new NotFoundHttpError();\n }\n return new RepresentationMetadata(cached.metadata);\n }\n\n try {\n const metadata = await this.structuredDataAccessor.getMetadata(identifier);\n\n if (!metadata.contentType) {\n metadata.contentType = INTERNAL_QUADS;\n }\n\n cache?.set(cacheKey, { kind: 'hit', metadata: new RepresentationMetadata(metadata) });\n return metadata;\n } catch (error) {\n if (NotFoundHttpError.isInstance(error)) {\n cache?.set(cacheKey, { kind: 'miss' });\n }\n throw error;\n }\n }\n\n public async* getChildren(identifier: ResourceIdentifier): AsyncIterableIterator<RepresentationMetadata> {\n // Children metadata is stored in the structured accessor\n yield* this.structuredDataAccessor.getChildren(identifier);\n }\n\n public async writeContainer(\n identifier: ResourceIdentifier,\n metadata: RepresentationMetadata,\n ): Promise<void> {\n if (this.mirrorContainersToUnstructured && this.isUnstructured(metadata)) {\n await this.unstructuredDataAccessor.writeContainer(identifier, metadata);\n }\n await this.structuredDataAccessor.writeContainer(identifier, metadata);\n this.invalidateMetadataCache(identifier);\n }\n\n public async writeDocument(\n identifier: ResourceIdentifier,\n data: Guarded<Readable>,\n metadata: RepresentationMetadata,\n ): Promise<void> {\n if (this.isUnstructured(metadata)) {\n await this.writeUnstructuredDocument(identifier, data, metadata);\n this.invalidateMetadataCache(identifier);\n return;\n }\n await this.writeRdfDocument(identifier, data, metadata);\n this.invalidateMetadataCache(identifier);\n }\n\n public async writeMetadata(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n // Metadata always goes to structured storage\n await this.structuredDataAccessor.writeMetadata(identifier, metadata);\n this.invalidateMetadataCache(identifier);\n }\n\n public async deleteResource(identifier: ResourceIdentifier): Promise<void> {\n const metadata = await this.getMetadata(identifier);\n \n // RDF by-line resources are mirrored to local file storage so shell tools\n // can operate on real files; remove that mirror together with the index.\n if (this.isLocalMirroredRdf(identifier, metadata)) {\n await this.deleteRdfFileResourceIfPresent(identifier);\n } else if (this.isUnstructured(metadata)) {\n await this.deleteUnstructuredResourceIfPresent(identifier);\n }\n \n // Always delete from structured storage (contains metadata)\n await this.structuredDataAccessor.deleteResource(identifier);\n this.invalidateMetadataCache(identifier);\n }\n\n /**\n * Execute SPARQL UPDATE.\n *\n * Supported embedded deltas patch the local RDF authority file first and then\n * rebuild the structured RDF index. The structured accessor decides whether\n * unsupported shapes have an explicitly configured compatibility path.\n */\n public async executeSparqlUpdate(query: string, baseIri?: string): Promise<void> {\n if (baseIri) {\n const identifier = { path: baseIri };\n if (this.isByLineRdfIdentifier(identifier)) {\n try {\n const writtenIdentifiers = await this.executeLocalRdfSparqlUpdate(query, identifier);\n for (const writtenIdentifier of writtenIdentifiers) {\n this.invalidateMetadataCache(writtenIdentifier);\n }\n return;\n } catch (error) {\n if (!(error instanceof UnsupportedSparqlQueryError)) {\n throw error;\n }\n }\n }\n }\n\n const accessor = this.structuredDataAccessor as { executeSparqlUpdate?: (query: string, baseIri?: string) => Promise<void> };\n if (typeof accessor.executeSparqlUpdate !== 'function') {\n throw new Error('Structured data accessor does not support SPARQL UPDATE');\n }\n await accessor.executeSparqlUpdate(query, baseIri);\n if (baseIri) {\n const identifier = { path: baseIri };\n await this.refreshLocalRdfMirror(identifier);\n this.invalidateMetadataCache(identifier);\n }\n }\n\n private async executeLocalRdfSparqlUpdate(\n query: string,\n identifier: ResourceIdentifier,\n ): Promise<ResourceIdentifier[]> {\n const parsed = new SparqlParser({ baseIRI: identifier.path }).parse(query);\n const delta = this.rdfSparqlAdapter.compileUpdateDelta(parsed, this.parentContainer(identifier).path, {\n defaultGraph: identifier.path,\n });\n const writableGraphIris = this.localRdfDeltaWriteGraphIris(delta.operations);\n const graphStates = await this.loadLocalRdfDeltaGraphs(delta.operations, writableGraphIris);\n const graphQuads = new Map([...graphStates].map(([ graphIri, state ]) => [graphIri, state.quads]));\n const nextQuadsByGraph = this.applyLocalRdfDelta(graphQuads, delta.operations, writableGraphIris);\n const patches = writableGraphIris.map((graphIri): LocalRdfAuthorityPatch => {\n const previous = graphStates.get(graphIri);\n return {\n identifier: { path: graphIri },\n previousQuads: previous?.quads ?? [],\n previousExists: previous?.existed ?? false,\n nextQuads: nextQuadsByGraph.get(graphIri) ?? [],\n };\n });\n await this.writeLocalRdfAuthorityPatches(patches);\n return patches.map((patch) => patch.identifier);\n }\n\n private applyLocalRdfDelta(\n graphQuads: Map<string, Quad[]>,\n operations: RdfSparqlUpdateDeltaOperation[],\n writableGraphIris: string[],\n ): Map<string, Quad[]> {\n const writableGraphs = new Set(writableGraphIris);\n const byGraph = new Map<string, Map<string, Quad>>();\n for (const [ graphIri, quads ] of graphQuads) {\n byGraph.set(graphIri, new Map(quads.map((quad) => [this.quadKey(quad), quad])));\n }\n const currentQuads = (): Quad[] => [...byGraph.values()].flatMap((quads) => [...quads.values()]);\n const writableQuads = (graphIri: string): Map<string, Quad> => {\n let quads = byGraph.get(graphIri);\n if (!quads) {\n quads = new Map();\n byGraph.set(graphIri, quads);\n }\n return quads;\n };\n const deleteQuads = (quads: Quad[]): void => {\n for (const quad of quads) {\n const target = writableQuads(this.localRdfWriteGraphIri(quad.graph, writableGraphs));\n target.delete(this.quadKey(quad));\n }\n };\n const insertQuads = (quads: Quad[]): void => {\n for (const quad of quads) {\n const target = writableQuads(this.localRdfWriteGraphIri(quad.graph, writableGraphs));\n target.set(this.quadKey(quad), quad);\n }\n };\n\n for (const operation of operations) {\n if (operation.type === 'insert') {\n insertQuads(operation.quads);\n continue;\n }\n\n if (operation.type === 'delete') {\n deleteQuads(operation.quads);\n continue;\n }\n\n if (operation.type === 'insertDeleteWhere') {\n const rows = this.queryLocalUpdateBindings(currentQuads(), operation.query);\n deleteQuads(this.rdfSparqlAdapter.materializeDeleteWhere(operation.deletes, rows));\n insertQuads(this.rdfSparqlAdapter.materializeDeleteWhere(operation.inserts, rows));\n continue;\n }\n\n if (operation.type === 'insertWhere') {\n const rows = this.queryLocalUpdateBindings(currentQuads(), operation.query);\n insertQuads(this.rdfSparqlAdapter.materializeDeleteWhere(operation.inserts, rows));\n continue;\n }\n\n const rows = this.queryLocalUpdateBindings(currentQuads(), operation.query);\n deleteQuads(this.rdfSparqlAdapter.materializeDeleteWhere(operation.template, rows));\n }\n\n return new Map(writableGraphIris.map((graphIri) => [graphIri, [...(byGraph.get(graphIri)?.values() ?? [])]]));\n }\n\n private async loadLocalRdfDeltaGraphs(\n operations: RdfSparqlUpdateDeltaOperation[],\n writableGraphIris: readonly string[],\n ): Promise<Map<string, LocalRdfGraphState>> {\n const graphIris = this.localRdfDeltaGraphIris(operations, writableGraphIris);\n const graphStates = new Map<string, LocalRdfGraphState>();\n for (const graphIri of graphIris) {\n const graphIdentifier = { path: graphIri };\n if (!this.isByLineRdfIdentifier(graphIdentifier)) {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update only supports by-line local RDF graph documents');\n }\n const existing = await this.readLocalRdfState(graphIdentifier);\n const graph = DataFactory.namedNode(graphIri);\n const quads = existing.text.length > 0\n ? await this.parseLocalRdf(graphIdentifier, existing.text, this.localRdfContentType(graphIdentifier))\n .then((items) => items.map((quad) => this.toGraphQuad(quad, graph)))\n : [];\n graphStates.set(graphIri, { quads, existed: existing.existed });\n }\n return graphStates;\n }\n\n private localRdfDeltaGraphIris(\n operations: RdfSparqlUpdateDeltaOperation[],\n writableGraphIris: readonly string[],\n ): string[] {\n const graphIris = new Set<string>(writableGraphIris);\n for (const operation of operations) {\n const graphTerms = operation.type === 'deleteWhere'\n ? [\n ...operation.template.map((item) => item.graph),\n ...this.queryGraphTerms(operation.query),\n ]\n : operation.type === 'insertDeleteWhere'\n ? [\n ...operation.deletes.map((item) => item.graph),\n ...operation.inserts.map((item) => item.graph),\n ...this.queryGraphTerms(operation.query),\n ]\n : operation.type === 'insertWhere'\n ? [\n ...operation.inserts.map((item) => item.graph),\n ...this.queryGraphTerms(operation.query),\n ]\n : operation.quads.map((quad) => quad.graph);\n for (const graph of graphTerms) {\n this.addNamedGraphIris(graph, graphIris);\n }\n }\n return [...graphIris];\n }\n\n private localRdfDeltaWriteGraphIris(\n operations: RdfSparqlUpdateDeltaOperation[],\n ): string[] {\n const graphIris = new Set<string>();\n for (const operation of operations) {\n if (operation.type === 'deleteWhere') {\n this.addWritableTemplateGraphIris(operation.template.map((item) => item.graph), operation.query, graphIris);\n continue;\n }\n if (operation.type === 'insertDeleteWhere') {\n this.addWritableTemplateGraphIris([\n ...operation.deletes.map((item) => item.graph),\n ...operation.inserts.map((item) => item.graph),\n ], operation.query, graphIris);\n continue;\n }\n if (operation.type === 'insertWhere') {\n this.addWritableTemplateGraphIris(operation.inserts.map((item) => item.graph), operation.query, graphIris);\n continue;\n }\n const graphTerms = operation.quads.map((quad) => quad.graph);\n for (const graph of graphTerms) {\n this.addWritableNamedGraphIri(graph, graphIris);\n }\n }\n if (graphIris.size === 0) {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update requires explicit local RDF graph write targets');\n }\n return [...graphIris];\n }\n\n private addWritableTemplateGraphIris(\n graphs: RdfQueryTermPattern[],\n query: RdfLocalQuery,\n graphIris: Set<string>,\n ): void {\n for (const graph of graphs) {\n if (this.isQueryVariable(graph)) {\n this.addWritableGraphVariableIris(query, graph.variable, graphIris);\n continue;\n }\n this.addWritableNamedGraphIri(graph, graphIris);\n }\n }\n\n private addWritableGraphVariableIris(\n query: RdfLocalQuery,\n variable: string,\n graphIris: Set<string>,\n ): void {\n const values = new Set<string>();\n this.collectGraphVariableFilterIris(query, variable, values);\n if (values.size === 0) {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update only supports finite GRAPH variable write targets');\n }\n for (const value of values) {\n this.addWritableNamedGraphIri(DataFactory.namedNode(value) as unknown as Term, graphIris);\n }\n }\n\n private localRdfWriteGraphIri(graph: Term, writableGraphs: Set<string>): string {\n if (graph.termType !== 'NamedNode' || !writableGraphs.has(graph.value)) {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update can only write declared local RDF graph documents');\n }\n return graph.value;\n }\n\n private queryLocalUpdateBindings(\n quads: Quad[],\n query: RdfLocalQuery,\n ): RdfBindingRow[] {\n const index = new RdfQuadIndex({ path: ':memory:' });\n index.open();\n try {\n const engine = new SolidRdfEngine({ index });\n engine.put(quads);\n return engine.query(query).bindings;\n } finally {\n index.close();\n }\n }\n\n private queryGraphTerms(query: RdfLocalQuery): RdfQueryTermPattern[] {\n const graphTerms: RdfQueryTermPattern[] = [];\n const graphVariables = new Set<string>();\n this.collectQueryGraphTerms(query, graphTerms, graphVariables);\n this.collectGraphVariableFilterTerms(query, graphVariables, graphTerms);\n return graphTerms;\n }\n\n private collectQueryGraphTerms(\n query: RdfLocalQuery | {\n patterns: RdfQueryPattern[];\n values?: RdfValuesBindingSource[];\n optional?: RdfLocalQuery['optional'];\n unions?: RdfLocalQuery['unions'];\n minus?: RdfLocalQuery['minus'];\n exists?: RdfLocalQuery['exists'];\n },\n graphTerms: RdfQueryTermPattern[],\n graphVariables: Set<string>,\n ): void {\n for (const pattern of query.patterns) {\n if (!pattern.graph) {\n continue;\n }\n graphTerms.push(pattern.graph);\n if (this.isQueryVariable(pattern.graph)) {\n graphVariables.add(pattern.graph.variable);\n }\n }\n for (const optional of query.optional ?? []) {\n this.collectQueryGraphTerms(Array.isArray(optional) ? { patterns: optional } : optional, graphTerms, graphVariables);\n }\n for (const union of query.unions ?? []) {\n for (const branch of union.branches) {\n this.collectQueryGraphTerms(branch, graphTerms, graphVariables);\n }\n }\n for (const minus of query.minus ?? []) {\n this.collectQueryGraphTerms(minus, graphTerms, graphVariables);\n }\n for (const exists of query.exists ?? []) {\n this.collectQueryGraphTerms(exists, graphTerms, graphVariables);\n }\n }\n\n private collectGraphVariableFilterTerms(\n query: RdfLocalQuery | {\n values?: RdfValuesBindingSource[];\n filters?: RdfLocalQuery['filters'];\n optional?: RdfLocalQuery['optional'];\n unions?: RdfLocalQuery['unions'];\n minus?: RdfLocalQuery['minus'];\n exists?: RdfLocalQuery['exists'];\n },\n graphVariables: Set<string>,\n graphTerms: RdfQueryTermPattern[],\n ): void {\n for (const filter of query.filters ?? []) {\n if (!graphVariables.has(filter.variable)) {\n continue;\n }\n if (filter.value && this.isRdfTerm(filter.value)) {\n graphTerms.push(filter.value);\n }\n for (const value of filter.values ?? []) {\n if (this.isRdfTerm(value)) {\n graphTerms.push(value);\n }\n }\n }\n this.collectGraphVariableValueTerms(query.values ?? [], graphVariables, graphTerms);\n for (const optional of query.optional ?? []) {\n if (!Array.isArray(optional)) {\n this.collectGraphVariableFilterTerms(optional, graphVariables, graphTerms);\n }\n }\n for (const union of query.unions ?? []) {\n for (const branch of union.branches) {\n this.collectGraphVariableFilterTerms(branch, graphVariables, graphTerms);\n }\n }\n for (const minus of query.minus ?? []) {\n this.collectGraphVariableFilterTerms(minus, graphVariables, graphTerms);\n }\n for (const exists of query.exists ?? []) {\n this.collectGraphVariableFilterTerms(exists, graphVariables, graphTerms);\n }\n }\n\n private collectGraphVariableFilterIris(\n query: RdfLocalQuery | {\n values?: RdfValuesBindingSource[];\n filters?: RdfLocalQuery['filters'];\n optional?: RdfLocalQuery['optional'];\n unions?: RdfLocalQuery['unions'];\n minus?: RdfLocalQuery['minus'];\n exists?: RdfLocalQuery['exists'];\n },\n variable: string,\n values: Set<string>,\n ): void {\n for (const filter of query.filters ?? []) {\n if (filter.variable !== variable) {\n continue;\n }\n if ((filter.operator === '$eq' || filter.operator === '$sameTerm') && filter.value && this.isRdfTerm(filter.value)) {\n this.addGraphFilterValueIri(filter.value, values);\n }\n if (filter.operator === '$in') {\n for (const value of filter.values ?? []) {\n if (this.isRdfTerm(value)) {\n this.addGraphFilterValueIri(value, values);\n }\n }\n }\n }\n this.collectGraphVariableValueIris(query.values ?? [], variable, values);\n for (const optional of query.optional ?? []) {\n if (!Array.isArray(optional)) {\n this.collectGraphVariableFilterIris(optional, variable, values);\n }\n }\n for (const union of query.unions ?? []) {\n for (const branch of union.branches) {\n this.collectGraphVariableFilterIris(branch, variable, values);\n }\n }\n for (const minus of query.minus ?? []) {\n this.collectGraphVariableFilterIris(minus, variable, values);\n }\n for (const exists of query.exists ?? []) {\n this.collectGraphVariableFilterIris(exists, variable, values);\n }\n }\n\n private collectGraphVariableValueTerms(\n sources: readonly RdfValuesBindingSource[],\n graphVariables: Set<string>,\n graphTerms: RdfQueryTermPattern[],\n ): void {\n for (const source of sources) {\n for (const variable of source.variables) {\n if (!graphVariables.has(variable)) {\n continue;\n }\n for (const row of source.rows) {\n const value = row[variable];\n if (value) {\n graphTerms.push(value);\n }\n }\n }\n }\n }\n\n private collectGraphVariableValueIris(\n sources: readonly RdfValuesBindingSource[],\n variable: string,\n values: Set<string>,\n ): void {\n for (const source of sources) {\n if (!source.variables.includes(variable)) {\n continue;\n }\n for (const row of source.rows) {\n const value = row[variable];\n if (value) {\n this.addGraphFilterValueIri(value, values);\n }\n }\n }\n }\n\n private addGraphFilterValueIri(value: Term, values: Set<string>): void {\n if (value.termType !== 'NamedNode') {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update GRAPH variable write targets must be named graph documents');\n }\n values.add(value.value);\n }\n\n private addNamedGraphIris(graph: RdfQueryTermPattern | Term, graphIris: Set<string>): void {\n if (this.isRdfTerm(graph)) {\n if (graph.termType !== 'NamedNode') {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update only supports named graph documents');\n }\n graphIris.add(graph.value);\n return;\n }\n const values = (graph as { $in?: unknown }).$in;\n if (Array.isArray(values) && values.every((value) => this.isRdfTerm(value))) {\n for (const value of values) {\n if (value.termType !== 'NamedNode') {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update only supports named graph documents');\n }\n graphIris.add(value.value);\n }\n return;\n }\n if (this.isQueryVariable(graph)) {\n return;\n }\n throw new UnsupportedSparqlQueryError('Embedded local RDF update only supports explicit local RDF graph documents');\n }\n\n private addWritableNamedGraphIri(graph: RdfQueryTermPattern | Term, graphIris: Set<string>): void {\n if (!this.isRdfTerm(graph) || graph.termType !== 'NamedNode') {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update only supports explicit local RDF graph write targets');\n }\n if (!this.isByLineRdfIdentifier({ path: graph.value })) {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update only supports by-line local RDF graph write targets');\n }\n graphIris.add(graph.value);\n }\n\n private isQueryVariable(value: unknown): value is { variable: string } {\n return Boolean(value && typeof value === 'object' && 'variable' in value);\n }\n\n private isRdfTerm(value: unknown): value is Term {\n return Boolean(value && typeof value === 'object' && 'termType' in value);\n }\n\n private async readLocalRdfState(identifier: ResourceIdentifier): Promise<{ text: string; existed: boolean }> {\n try {\n return {\n text: await this.readStreamText(await this.rdfFileDataAccessor.getData(identifier)),\n existed: true,\n };\n } catch (error) {\n if (NotFoundHttpError.isInstance(error)) {\n await this.refreshLocalRdfMirror(identifier);\n try {\n return {\n text: await this.readStreamText(await this.rdfFileDataAccessor.getData(identifier)),\n existed: true,\n };\n } catch (retryError) {\n if (NotFoundHttpError.isInstance(retryError)) {\n return { text: '', existed: false };\n }\n throw retryError;\n }\n }\n throw error;\n }\n }\n\n private async writeLocalRdfAuthority(identifier: ResourceIdentifier, quads: Quad[]): Promise<void> {\n await this.ensureRdfFileParentContainers(identifier);\n await this.rdfFileDataAccessor.writeDocument(\n identifier,\n guardStream(Readable.from([ await this.serializeQuadsForLocalFile(identifier, quads) ])),\n this.createLocalRdfMetadata(identifier, new RepresentationMetadata(identifier)),\n );\n }\n\n private async writeLocalRdfAuthorityPatches(patches: LocalRdfAuthorityPatch[]): Promise<void> {\n const applied: LocalRdfAuthorityPatch[] = [];\n try {\n for (const patch of patches) {\n let localAuthorityWritten = false;\n try {\n const authorityQuads = patch.nextQuads.map((quad) => this.toDefaultGraphQuad(quad));\n await this.writeLocalRdfAuthority(patch.identifier, authorityQuads);\n localAuthorityWritten = true;\n await this.writeStructuredRdfIndex(patch.identifier, authorityQuads, new RepresentationMetadata(patch.identifier));\n applied.push(patch);\n } catch (error) {\n if (localAuthorityWritten) {\n applied.push(patch);\n }\n throw error;\n }\n }\n } catch (error) {\n await this.rollbackLocalRdfAuthorityPatches(applied);\n throw error;\n }\n }\n\n private async rollbackLocalRdfAuthorityPatches(patches: LocalRdfAuthorityPatch[]): Promise<void> {\n const failures: string[] = [];\n for (const patch of patches.slice().reverse()) {\n try {\n if (patch.previousExists) {\n const authorityQuads = patch.previousQuads.map((quad) => this.toDefaultGraphQuad(quad));\n await this.writeLocalRdfAuthority(patch.identifier, authorityQuads);\n await this.writeStructuredRdfIndex(patch.identifier, authorityQuads, new RepresentationMetadata(patch.identifier));\n } else {\n await this.deleteRdfFileResourceIfPresent(patch.identifier);\n await this.deleteLocalRdfIndex(patch.identifier);\n }\n this.invalidateMetadataCache(patch.identifier);\n } catch (rollbackError) {\n failures.push(`${patch.identifier.path}: ${rollbackError instanceof Error ? rollbackError.message : String(rollbackError)}`);\n }\n }\n if (failures.length > 0) {\n this.logger.warn(`Failed to fully roll back local RDF authority patch: ${failures.join('; ')}`);\n }\n }\n\n private toDefaultGraphQuad(quad: Quad): Quad {\n return DataFactory.quad(quad.subject, quad.predicate, quad.object);\n }\n\n private toGraphQuad(quad: Quad, graph: Term): Quad {\n return DataFactory.quad(quad.subject, quad.predicate, quad.object, graph as any) as Quad;\n }\n\n private quadKey(quad: Quad): string {\n return [quad.graph, quad.subject, quad.predicate, quad.object]\n .map((term) => termToId(term as any))\n .join('\\u001f');\n }\n\n /**\n * Rebuild the structured RDF index from an already-written local RDF file.\n *\n * SolidFS uses this after tools edit `.ttl`/`.jsonld` files directly. The\n * local file remains the content authority; the structured accessor is only\n * refreshed as query/index state.\n */\n public async syncLocalRdfDocument(\n identifier: ResourceIdentifier,\n data?: Guarded<Readable>,\n contentType?: string,\n options?: LocalRdfSyncOptions,\n ): Promise<void> {\n if (!this.isRdfDocumentIdentifier(identifier)) {\n throw new Error(`Cannot sync non RDF document into RDF index: ${identifier.path}`);\n }\n\n const source = data ?? await this.rdfFileDataAccessor.getData(identifier);\n const localContentType = contentType ?? this.localRdfContentType(identifier);\n const text = await this.readStreamText(source);\n if (data) {\n await this.ensureRdfFileParentContainers(identifier);\n await this.rdfFileDataAccessor.writeDocument(\n identifier,\n guardStream(Readable.from([ text ])),\n this.createLocalRdfMetadata(identifier, new RepresentationMetadata(identifier)),\n );\n }\n const quads = await this.parseLocalRdf(identifier, text, localContentType);\n await this.writeStructuredRdfIndex(identifier, quads, new RepresentationMetadata(identifier), {\n ...options,\n contentType: localContentType,\n });\n this.invalidateMetadataCache(identifier);\n }\n\n public async deleteLocalRdfIndex(identifier: ResourceIdentifier): Promise<void> {\n try {\n const sourceScopedAccessor = this.sourceScopedStructuredAccessor();\n if (sourceScopedAccessor) {\n await sourceScopedAccessor.deleteRdfSourceDocument(identifier);\n } else {\n await this.structuredDataAccessor.deleteResource(identifier);\n }\n this.invalidateMetadataCache(identifier);\n } catch (error) {\n if (!NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n }\n }\n\n private async writeRdfDocument(\n identifier: ResourceIdentifier,\n data: Guarded<Readable>,\n metadata: RepresentationMetadata,\n ): Promise<void> {\n const quads = await arrayifyStream<Quad>(data);\n const structuredMetadata = new RepresentationMetadata(metadata);\n addResourceMetadata(structuredMetadata, false);\n updateModifiedDate(structuredMetadata);\n await this.ensureRdfFileParentContainers(identifier);\n\n await this.rdfFileDataAccessor.writeDocument(\n identifier,\n guardStream(Readable.from([ await this.serializeQuadsForLocalFile(identifier, quads) ])),\n this.createLocalRdfMetadata(identifier, metadata),\n );\n\n try {\n await this.writeStructuredRdfIndex(identifier, quads, structuredMetadata);\n } catch (error) {\n await this.deleteRdfFileResourceIfPresent(identifier);\n throw error;\n }\n }\n\n private async writeStructuredRdfIndex(\n identifier: ResourceIdentifier,\n quads: Quad[],\n metadata: RepresentationMetadata,\n options: LocalRdfSyncOptions & { contentType?: string } = {},\n ): Promise<void> {\n const structuredMetadata = new RepresentationMetadata(metadata);\n addResourceMetadata(structuredMetadata, false);\n updateModifiedDate(structuredMetadata);\n const sourceScopedAccessor = this.sourceScopedStructuredAccessor();\n if (sourceScopedAccessor) {\n await sourceScopedAccessor.writeRdfSourceDocument(\n identifier,\n quads,\n structuredMetadata,\n this.rdfSourceInput(identifier, options),\n );\n return;\n }\n\n await this.structuredDataAccessor.writeDocument(identifier, guardStream(Readable.from(quads)), structuredMetadata);\n }\n\n private async refreshLocalRdfMirror(identifier: ResourceIdentifier): Promise<void> {\n let metadata: RepresentationMetadata;\n let quads: Quad[];\n try {\n metadata = await this.structuredDataAccessor.getMetadata(identifier);\n if (!this.isLocalMirroredRdf(identifier, metadata)) {\n return;\n }\n quads = await arrayifyStream<Quad>(await this.structuredDataAccessor.getData(identifier));\n } catch (error) {\n if (NotFoundHttpError.isInstance(error)) {\n await this.deleteRdfFileResourceIfPresent(identifier);\n return;\n }\n throw error;\n }\n\n await this.ensureRdfFileParentContainers(identifier);\n await this.rdfFileDataAccessor.writeDocument(\n identifier,\n guardStream(Readable.from([ await this.serializeQuadsForLocalFile(identifier, quads) ])),\n this.createLocalRdfMetadata(identifier, metadata),\n );\n }\n\n private async getLocalRdfMetadata(\n identifier: ResourceIdentifier,\n sourceMetadata: RepresentationMetadata,\n ): Promise<RepresentationMetadata> {\n try {\n return await this.getExistingLocalRdfMetadata(identifier);\n } catch (error) {\n if (!NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n return this.createLocalRdfMetadata(identifier, sourceMetadata);\n }\n }\n\n private async getExistingLocalRdfMetadata(identifier: ResourceIdentifier): Promise<RepresentationMetadata> {\n try {\n const metadata = await this.rdfFileDataAccessor.getMetadata(identifier);\n metadata.contentType = this.localRdfContentType(identifier);\n return metadata;\n } catch (error) {\n if (NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n this.logger.warn(`Ignoring unreadable local RDF metadata for ${identifier.path}: ${error instanceof Error ? error.message : String(error)}`);\n return this.createLocalRdfMetadata(identifier, new RepresentationMetadata(identifier));\n }\n }\n\n private createLocalRdfMetadata(\n identifier: ResourceIdentifier,\n metadata: RepresentationMetadata,\n ): RepresentationMetadata {\n const localMetadata = new RepresentationMetadata(metadata);\n const graphScopedQuads = localMetadata.quads()\n .filter((quad) => quad.graph.termType !== 'DefaultGraph');\n localMetadata.removeQuads(graphScopedQuads);\n localMetadata.contentType = this.localRdfContentType(identifier);\n return localMetadata;\n }\n\n private localRdfContentType(identifier: ResourceIdentifier): string {\n return rdfContentTypeForPath(identifier.path) ?? 'text/turtle';\n }\n\n private sourceScopedStructuredAccessor(): SourceScopedStructuredRdfAccessor | undefined {\n const accessor = this.structuredDataAccessor as Partial<SourceScopedStructuredRdfAccessor>;\n if (\n typeof accessor.writeRdfSourceDocument === 'function'\n && typeof accessor.deleteRdfSourceDocument === 'function'\n ) {\n return accessor as SourceScopedStructuredRdfAccessor;\n }\n return undefined;\n }\n\n private rdfSourceInput(\n identifier: ResourceIdentifier,\n options: LocalRdfSyncOptions & { contentType?: string },\n ): RdfSourceInput {\n const workspace = options.workspace ?? this.parentContainer(identifier).path;\n return {\n source: options.source ?? identifier.path,\n workspace,\n localPath: options.localPath ?? this.relativePathFromWorkspace(identifier.path, workspace),\n contentType: options.contentType ?? this.localRdfContentType(identifier),\n sourceVersion: options.sourceVersion,\n };\n }\n\n private relativePathFromWorkspace(identifierPath: string, workspaceValue: string): string | undefined {\n try {\n const resource = new URL(identifierPath);\n const workspace = new URL(workspaceValue.endsWith('/') ? workspaceValue : `${workspaceValue}/`);\n if (resource.origin !== workspace.origin || !resource.pathname.startsWith(workspace.pathname)) {\n return undefined;\n }\n return decodeURIComponent(resource.pathname.slice(workspace.pathname.length));\n } catch {\n return undefined;\n }\n }\n\n private isByLineRdfIdentifier(identifier: ResourceIdentifier): boolean {\n return isLineAddressableRdfPath(identifier.path);\n }\n\n private isRdfDocumentIdentifier(identifier: ResourceIdentifier): boolean {\n return isRdfDocumentPath(identifier.path);\n }\n\n private isLocalMirroredRdf(\n identifier: ResourceIdentifier,\n metadata: RepresentationMetadata,\n ): boolean {\n return metadata.contentType === INTERNAL_QUADS || this.isRdfDocumentIdentifier(identifier);\n }\n\n private async serializeQuadsForLocalFile(identifier: ResourceIdentifier, quads: Quad[]): Promise<string> {\n if (this.localRdfContentType(identifier) === 'application/ld+json') {\n const nquads = await this.serializeNQuads(quads);\n const document = await jsonld.fromRDF(nquads, { format: 'application/n-quads' });\n return `${JSON.stringify(document, null, 2)}\\n`;\n }\n\n if (this.localRdfContentType(identifier) === 'application/rdf+xml') {\n return serializeRdfXml(quads);\n }\n\n const writer = new Writer({ format: this.localRdfContentType(identifier) });\n return writer.quadsToString(quads);\n }\n\n private async serializeNQuads(quads: Quad[]): Promise<string> {\n return new Promise((resolve, reject) => {\n const writer = new Writer({ format: 'application/n-quads' });\n writer.addQuads(quads);\n writer.end((error, result) => {\n if (error) {\n reject(error);\n return;\n }\n resolve(result);\n });\n });\n }\n\n private async parseLocalRdf(\n identifier: ResourceIdentifier,\n text: string,\n contentType: string,\n ): Promise<Quad[]> {\n if (contentType === 'application/ld+json') {\n const nquads = await jsonld.toRDF(JSON.parse(text), {\n base: identifier.path,\n format: 'application/n-quads',\n }) as string;\n return new Parser({ format: 'application/n-quads', baseIRI: identifier.path }).parse(nquads);\n }\n\n if (contentType === 'application/rdf+xml') {\n return arrayifyStream<Quad>(rdfParser.parse(Readable.from([ text ]), {\n contentType,\n baseIRI: identifier.path,\n }) as any);\n }\n\n return new Parser({ format: contentType, baseIRI: identifier.path }).parse(text);\n }\n\n private async readStreamText(data: Guarded<Readable>): Promise<string> {\n const chunks = await arrayifyStream(data as any);\n return chunks\n .map((chunk: Buffer | Uint8Array | string) => typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf8'))\n .join('');\n }\n\n /**\n * Write unstructured document: store data in unstructured accessor,\n * then save metadata in structured accessor.\n */\n private async writeUnstructuredDocument(\n identifier: ResourceIdentifier,\n data: Guarded<Readable>,\n metadata: RepresentationMetadata,\n ): Promise<void> {\n // Write the actual data to unstructured storage\n await this.unstructuredDataAccessor.writeDocument(identifier, data, metadata);\n \n let updatedMetadata: RepresentationMetadata;\n if (typeof metadata.contentLength === 'number') {\n updatedMetadata = new RepresentationMetadata(metadata);\n updatedMetadata.add(\n POSIX.terms.size,\n toLiteral(metadata.contentLength, XSD.terms.integer),\n SOLID_META.terms.ResponseMetadata,\n );\n } else {\n updatedMetadata = await this.unstructuredDataAccessor.getMetadata(identifier);\n\n const removing: Quad[] = [];\n for (const quad of updatedMetadata.quads()) {\n if (!/^http/.test(quad.predicate.value)) {\n removing.push(quad);\n }\n }\n updatedMetadata.removeQuads(removing);\n }\n \n // Save metadata to structured storage\n try {\n await this.structuredDataAccessor.writeMetadata(identifier, updatedMetadata);\n } catch (error) {\n this.logger.error(`Error writing metadata for ${identifier.path}: ${error}`);\n // Rollback: delete the unstructured data\n await this.unstructuredDataAccessor.deleteResource(identifier);\n throw error;\n }\n }\n\n private async deleteUnstructuredResourceIfPresent(identifier: ResourceIdentifier): Promise<void> {\n try {\n await this.unstructuredDataAccessor.deleteResource(identifier);\n } catch (error: any) {\n if (error?.code !== 'ENOENT' && error?.code !== 'ENOTDIR' && !NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n }\n }\n\n private async deleteRdfFileResourceIfPresent(identifier: ResourceIdentifier): Promise<void> {\n try {\n await this.rdfFileDataAccessor.deleteResource(identifier);\n } catch (error: any) {\n if (error?.code !== 'ENOENT' && error?.code !== 'ENOTDIR' && !NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n }\n }\n\n private async ensureUnstructuredParentContainers(identifier: ResourceIdentifier): Promise<void> {\n await this.ensureParentContainers(identifier, this.unstructuredDataAccessor);\n }\n\n private async ensureRdfFileParentContainers(identifier: ResourceIdentifier): Promise<void> {\n await this.ensureParentContainers(identifier, this.rdfFileDataAccessor);\n }\n\n private async ensureParentContainers(identifier: ResourceIdentifier, accessor: DataAccessor): Promise<void> {\n const containers: ResourceIdentifier[] = [];\n let current = this.parentContainer(identifier);\n\n while (!this.sameIdentifier(current, identifier)) {\n containers.push(current);\n const next = this.parentContainer(current);\n if (this.sameIdentifier(next, current)) {\n break;\n }\n current = next;\n }\n\n for (const container of containers.reverse()) {\n await this.writeContainerIfMissing(accessor, container);\n }\n }\n\n private async writeContainerIfMissing(accessor: DataAccessor, identifier: ResourceIdentifier): Promise<void> {\n try {\n await accessor.getMetadata(identifier);\n return;\n } catch (error) {\n if (!NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n }\n\n await accessor.writeContainer(identifier, new RepresentationMetadata(identifier));\n }\n\n private sameIdentifier(left: ResourceIdentifier, right: ResourceIdentifier): boolean {\n return left.path === right.path;\n }\n\n private parentContainer(identifier: ResourceIdentifier): ResourceIdentifier {\n try {\n const url = new URL(identifier.path);\n if (url.pathname === '/' || url.pathname === '') {\n return { path: url.href.endsWith('/') ? url.href : `${url.href}/` };\n }\n const segments = url.pathname.replace(/\\/+$/u, '').split('/');\n segments.pop();\n url.pathname = `${segments.join('/') || '/'}`.replace(/\\/?$/u, '/');\n url.search = '';\n url.hash = '';\n return { path: url.href };\n } catch {\n const trimmed = identifier.path.replace(/\\/+$/u, '');\n const slashIndex = trimmed.lastIndexOf('/');\n if (slashIndex < 0) {\n return identifier;\n }\n return { path: `${trimmed.slice(0, slashIndex + 1)}` };\n }\n }\n\n private invalidateMetadataCache(identifier: ResourceIdentifier): void {\n const cache = metadataRequestContext.getStore()?.metadataCache;\n if (!cache) {\n return;\n }\n\n const exact = identifier.path;\n const trimmed = exact.endsWith('/') ? exact.replace(/\\/+$/u, '') : exact;\n const withSlash = exact.endsWith('/') ? exact : `${exact}/`;\n cache.delete(exact);\n cache.delete(trimmed);\n cache.delete(withSlash);\n }\n}\n"]}
1
+ {"version":3,"file":"MixDataAccessor.js","sourceRoot":"","sources":["../../../src/storage/accessors/MixDataAccessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { Readable } from 'stream';\nimport { getLoggerFor } from 'global-logger-factory';\nimport arrayifyStream from 'arrayify-stream';\nimport { DataFactory, Parser, Writer, termToId } from 'n3';\nimport jsonld from 'jsonld';\nimport { rdfParser } from 'rdf-parse';\nimport { Parser as SparqlParser } from 'sparqljs';\n\nimport type { Quad, Term } from '@rdfjs/types';\nimport {\n isContainerIdentifier,\n RepresentationMetadata,\n INTERNAL_QUADS,\n FoundHttpError,\n NotFoundHttpError,\n POSIX,\n SOLID_META,\n XSD,\n toLiteral,\n guardStream,\n addResourceMetadata,\n updateModifiedDate,\n} from '@solid/community-server';\nimport type {\n Representation,\n ResourceIdentifier,\n Guarded,\n DataAccessor,\n} from '@solid/community-server';\nimport {\n RdfSparqlAdapter,\n UnsupportedSparqlQueryError,\n type RdfSparqlUpdateDeltaOperation,\n} from '../rdf/RdfSparqlAdapter';\nimport {\n isLineAddressableRdfPath,\n isRdfDocumentPath,\n rdfContentTypeForPath,\n} from '../rdf/RdfContentTypes';\nimport { RdfQuadIndex } from '../rdf/RdfQuadIndex';\nimport { serializeRdfXml } from '../rdf/RdfXmlSerializer';\nimport { SolidRdfEngine } from '../rdf/SolidRdfEngine';\nimport type {\n RdfBindingRow,\n RdfQuery,\n RdfQueryPattern,\n RdfQueryTermPattern,\n RdfSourceInput,\n RdfValuesBindingSource,\n} from '../rdf/types';\nimport { metadataRequestContext } from '../MetadataRequestContext';\n\nexport interface LocalRdfDocument {\n data: Guarded<Readable>;\n metadata: RepresentationMetadata;\n}\n\nexport interface LocalRdfReadableAccessor {\n getLocalRdfDocument(identifier: ResourceIdentifier): Promise<LocalRdfDocument>;\n}\n\nexport interface LocalRdfIndexAccessor {\n syncLocalRdfDocument(\n identifier: ResourceIdentifier,\n data?: Guarded<Readable>,\n contentType?: string,\n options?: LocalRdfSyncOptions,\n ): Promise<void>;\n deleteLocalRdfIndex(identifier: ResourceIdentifier): Promise<void>;\n}\n\nexport interface LocalRdfSyncOptions {\n source?: string;\n workspace?: string;\n localPath?: string;\n sourceVersion?: string;\n}\n\nexport interface SourceScopedStructuredRdfAccessor {\n writeRdfSourceDocument(\n identifier: ResourceIdentifier,\n quads: Quad[],\n metadata: RepresentationMetadata,\n source: RdfSourceInput,\n ): Promise<void>;\n deleteRdfSourceDocument(identifier: ResourceIdentifier): Promise<void>;\n}\n\ninterface LocalRdfGraphState {\n quads: Quad[];\n existed: boolean;\n}\n\ninterface LocalRdfAuthorityPatch {\n identifier: ResourceIdentifier;\n previousQuads: Quad[];\n previousExists: boolean;\n nextQuads: Quad[];\n}\n\n/**\n * MixDataAccessor - Routes data to appropriate storage based on content type\n * \n * - RDF data (internal/quads) -> structuredDataAccessor (Solid RDF engine by default)\n * - RDF file mirrors (.ttl/.jsonld) -> rdfFileDataAccessor (local FileSystem)\n * - Other data (binary, text, etc.) -> unstructuredDataAccessor (FileSystem, Minio, etc.)\n * \n * This uses composition instead of inheritance, allowing any DataAccessor\n * to be used as the RDF storage backend.\n */\nexport class MixDataAccessor implements DataAccessor {\n protected readonly logger = getLoggerFor(this);\n private readonly rdfSparqlAdapter = new RdfSparqlAdapter();\n \n private readonly structuredDataAccessor: DataAccessor;\n private readonly unstructuredDataAccessor: DataAccessor;\n private readonly rdfFileDataAccessor: DataAccessor;\n private readonly presignedRedirectEnabled: boolean;\n private readonly mirrorContainersToUnstructured: boolean;\n\n constructor(\n structuredDataAccessor: DataAccessor,\n unstructuredDataAccessor: DataAccessor,\n presignedRedirectEnabled = false,\n mirrorContainersToUnstructured = true,\n rdfFileDataAccessor: DataAccessor = unstructuredDataAccessor,\n ) {\n this.structuredDataAccessor = structuredDataAccessor;\n this.unstructuredDataAccessor = unstructuredDataAccessor;\n this.rdfFileDataAccessor = rdfFileDataAccessor;\n this.presignedRedirectEnabled = presignedRedirectEnabled;\n this.mirrorContainersToUnstructured = mirrorContainersToUnstructured;\n }\n\n /**\n * This accessor supports all types of data.\n */\n public async canHandle(representation: Representation): Promise<void> {\n return void 0;\n }\n\n /**\n * Checks if the given representation is unstructured (non-RDF).\n */\n private isUnstructured(metadata: RepresentationMetadata): boolean {\n return metadata.contentType !== INTERNAL_QUADS;\n }\n\n public async getData(identifier: ResourceIdentifier): Promise<Guarded<Readable>> {\n const metadata = await this.getMetadata(identifier);\n if (this.isUnstructured(metadata)) {\n // When presigned redirect is enabled and the unstructured accessor supports it,\n // generate a presigned URL and throw FoundHttpError to trigger a 302 redirect.\n if (this.presignedRedirectEnabled) {\n const accessor = this.unstructuredDataAccessor as { getPresignedUrl?: (id: ResourceIdentifier, expires?: number) => Promise<string> };\n if (typeof accessor.getPresignedUrl === 'function') {\n const presignedUrl = await accessor.getPresignedUrl(identifier);\n this.logger.debug(`Presigned redirect: ${identifier.path}`);\n throw new FoundHttpError(presignedUrl);\n }\n }\n return await this.unstructuredDataAccessor.getData(identifier);\n }\n return await this.structuredDataAccessor.getData(identifier);\n }\n\n /**\n * Read the local RDF file mirror used by SolidFS/local-first HTTP reads.\n *\n * `getData()` intentionally keeps returning the structured quad stream for\n * CSS internals. This method is the explicit file-content path for callers\n * that need a real Turtle/JSON-LD byte stream.\n */\n public async getLocalRdfDocument(identifier: ResourceIdentifier): Promise<LocalRdfDocument> {\n if (isContainerIdentifier(identifier)) {\n throw new NotFoundHttpError();\n }\n\n if (this.isByLineRdfIdentifier(identifier)) {\n try {\n return {\n data: await this.rdfFileDataAccessor.getData(identifier),\n metadata: await this.getExistingLocalRdfMetadata(identifier),\n };\n } catch (error) {\n if (!NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n }\n }\n\n const metadata = await this.getMetadata(identifier);\n if (!this.isLocalMirroredRdf(identifier, metadata)) {\n throw new NotFoundHttpError();\n }\n\n try {\n return {\n data: await this.rdfFileDataAccessor.getData(identifier),\n metadata: await this.getLocalRdfMetadata(identifier, metadata),\n };\n } catch (error) {\n if (!NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n }\n\n await this.refreshLocalRdfMirror(identifier);\n\n return {\n data: await this.rdfFileDataAccessor.getData(identifier),\n metadata: await this.getLocalRdfMetadata(identifier, metadata),\n };\n }\n\n public async getMetadata(identifier: ResourceIdentifier): Promise<RepresentationMetadata> {\n const cache = metadataRequestContext.getStore()?.metadataCache;\n const cacheKey = identifier.path;\n const cached = cache?.get(cacheKey);\n if (cached) {\n if (cached.kind === 'miss') {\n throw new NotFoundHttpError();\n }\n return new RepresentationMetadata(cached.metadata);\n }\n\n try {\n const metadata = await this.structuredDataAccessor.getMetadata(identifier);\n\n if (!metadata.contentType) {\n metadata.contentType = INTERNAL_QUADS;\n }\n\n cache?.set(cacheKey, { kind: 'hit', metadata: new RepresentationMetadata(metadata) });\n return metadata;\n } catch (error) {\n if (NotFoundHttpError.isInstance(error)) {\n cache?.set(cacheKey, { kind: 'miss' });\n }\n throw error;\n }\n }\n\n public async* getChildren(identifier: ResourceIdentifier): AsyncIterableIterator<RepresentationMetadata> {\n // Children metadata is stored in the structured accessor\n yield* this.structuredDataAccessor.getChildren(identifier);\n }\n\n public async writeContainer(\n identifier: ResourceIdentifier,\n metadata: RepresentationMetadata,\n ): Promise<void> {\n if (this.mirrorContainersToUnstructured && this.isUnstructured(metadata)) {\n await this.unstructuredDataAccessor.writeContainer(identifier, metadata);\n }\n await this.structuredDataAccessor.writeContainer(identifier, metadata);\n this.invalidateMetadataCache(identifier);\n }\n\n public async writeDocument(\n identifier: ResourceIdentifier,\n data: Guarded<Readable>,\n metadata: RepresentationMetadata,\n ): Promise<void> {\n if (this.isUnstructured(metadata)) {\n await this.writeUnstructuredDocument(identifier, data, metadata);\n this.invalidateMetadataCache(identifier);\n return;\n }\n await this.writeRdfDocument(identifier, data, metadata);\n this.invalidateMetadataCache(identifier);\n }\n\n public async writeMetadata(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n // Metadata always goes to structured storage\n await this.structuredDataAccessor.writeMetadata(identifier, metadata);\n this.invalidateMetadataCache(identifier);\n }\n\n public async deleteResource(identifier: ResourceIdentifier): Promise<void> {\n const metadata = await this.getMetadata(identifier);\n \n // RDF by-line resources are mirrored to local file storage so shell tools\n // can operate on real files; remove that mirror together with the index.\n if (this.isLocalMirroredRdf(identifier, metadata)) {\n await this.deleteRdfFileResourceIfPresent(identifier);\n } else if (this.isUnstructured(metadata)) {\n await this.deleteUnstructuredResourceIfPresent(identifier);\n }\n \n // Always delete from structured storage (contains metadata)\n await this.structuredDataAccessor.deleteResource(identifier);\n this.invalidateMetadataCache(identifier);\n }\n\n /**\n * Execute SPARQL UPDATE.\n *\n * Supported embedded deltas patch the local RDF authority file first and then\n * rebuild the structured RDF index. The structured accessor decides whether\n * unsupported shapes have an explicitly configured compatibility path.\n */\n public async executeSparqlUpdate(query: string, baseIri?: string): Promise<void> {\n if (baseIri) {\n const identifier = { path: baseIri };\n if (this.isByLineRdfIdentifier(identifier)) {\n try {\n const writtenIdentifiers = await this.executeLocalRdfSparqlUpdate(query, identifier);\n for (const writtenIdentifier of writtenIdentifiers) {\n this.invalidateMetadataCache(writtenIdentifier);\n }\n return;\n } catch (error) {\n if (!(error instanceof UnsupportedSparqlQueryError)) {\n throw error;\n }\n }\n }\n }\n\n const accessor = this.structuredDataAccessor as { executeSparqlUpdate?: (query: string, baseIri?: string) => Promise<void> };\n if (typeof accessor.executeSparqlUpdate !== 'function') {\n throw new Error('Structured data accessor does not support SPARQL UPDATE');\n }\n await accessor.executeSparqlUpdate(query, baseIri);\n if (baseIri) {\n const identifier = { path: baseIri };\n await this.refreshLocalRdfMirror(identifier);\n this.invalidateMetadataCache(identifier);\n }\n }\n\n private async executeLocalRdfSparqlUpdate(\n query: string,\n identifier: ResourceIdentifier,\n ): Promise<ResourceIdentifier[]> {\n const parsed = new SparqlParser({ baseIRI: identifier.path }).parse(query);\n const delta = this.rdfSparqlAdapter.compileUpdateDelta(parsed, this.parentContainer(identifier).path, {\n defaultGraph: identifier.path,\n });\n const writableGraphIris = this.localRdfDeltaWriteGraphIris(delta.operations);\n const graphStates = await this.loadLocalRdfDeltaGraphs(delta.operations, writableGraphIris);\n const graphQuads = new Map([...graphStates].map(([ graphIri, state ]) => [graphIri, state.quads]));\n const nextQuadsByGraph = this.applyLocalRdfDelta(graphQuads, delta.operations, writableGraphIris);\n const patches = writableGraphIris.map((graphIri): LocalRdfAuthorityPatch => {\n const previous = graphStates.get(graphIri);\n return {\n identifier: { path: graphIri },\n previousQuads: previous?.quads ?? [],\n previousExists: previous?.existed ?? false,\n nextQuads: nextQuadsByGraph.get(graphIri) ?? [],\n };\n });\n await this.writeLocalRdfAuthorityPatches(patches);\n return patches.map((patch) => patch.identifier);\n }\n\n private applyLocalRdfDelta(\n graphQuads: Map<string, Quad[]>,\n operations: RdfSparqlUpdateDeltaOperation[],\n writableGraphIris: string[],\n ): Map<string, Quad[]> {\n const writableGraphs = new Set(writableGraphIris);\n const byGraph = new Map<string, Map<string, Quad>>();\n for (const [ graphIri, quads ] of graphQuads) {\n byGraph.set(graphIri, new Map(quads.map((quad) => [this.quadKey(quad), quad])));\n }\n const currentQuads = (): Quad[] => [...byGraph.values()].flatMap((quads) => [...quads.values()]);\n const writableQuads = (graphIri: string): Map<string, Quad> => {\n let quads = byGraph.get(graphIri);\n if (!quads) {\n quads = new Map();\n byGraph.set(graphIri, quads);\n }\n return quads;\n };\n const deleteQuads = (quads: Quad[]): void => {\n for (const quad of quads) {\n const target = writableQuads(this.localRdfWriteGraphIri(quad.graph, writableGraphs));\n target.delete(this.quadKey(quad));\n }\n };\n const insertQuads = (quads: Quad[]): void => {\n for (const quad of quads) {\n const target = writableQuads(this.localRdfWriteGraphIri(quad.graph, writableGraphs));\n target.set(this.quadKey(quad), quad);\n }\n };\n\n for (const operation of operations) {\n if (operation.type === 'insert') {\n insertQuads(operation.quads);\n continue;\n }\n\n if (operation.type === 'delete') {\n deleteQuads(operation.quads);\n continue;\n }\n\n if (operation.type === 'insertDeleteWhere') {\n const rows = this.queryLocalUpdateBindings(currentQuads(), operation.query);\n deleteQuads(this.rdfSparqlAdapter.materializeDeleteWhere(operation.deletes, rows));\n insertQuads(this.rdfSparqlAdapter.materializeDeleteWhere(operation.inserts, rows));\n continue;\n }\n\n if (operation.type === 'insertWhere') {\n const rows = this.queryLocalUpdateBindings(currentQuads(), operation.query);\n insertQuads(this.rdfSparqlAdapter.materializeDeleteWhere(operation.inserts, rows));\n continue;\n }\n\n const rows = this.queryLocalUpdateBindings(currentQuads(), operation.query);\n deleteQuads(this.rdfSparqlAdapter.materializeDeleteWhere(operation.template, rows));\n }\n\n return new Map(writableGraphIris.map((graphIri) => [graphIri, [...(byGraph.get(graphIri)?.values() ?? [])]]));\n }\n\n private async loadLocalRdfDeltaGraphs(\n operations: RdfSparqlUpdateDeltaOperation[],\n writableGraphIris: readonly string[],\n ): Promise<Map<string, LocalRdfGraphState>> {\n const graphIris = this.localRdfDeltaGraphIris(operations, writableGraphIris);\n const graphStates = new Map<string, LocalRdfGraphState>();\n for (const graphIri of graphIris) {\n const graphIdentifier = { path: graphIri };\n if (!this.isByLineRdfIdentifier(graphIdentifier)) {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update only supports by-line local RDF graph documents');\n }\n const existing = await this.readLocalRdfState(graphIdentifier);\n const graph = DataFactory.namedNode(graphIri);\n const quads = existing.text.length > 0\n ? await this.parseLocalRdf(graphIdentifier, existing.text, this.localRdfContentType(graphIdentifier))\n .then((items) => items.map((quad) => this.toGraphQuad(quad, graph)))\n : [];\n graphStates.set(graphIri, { quads, existed: existing.existed });\n }\n return graphStates;\n }\n\n private localRdfDeltaGraphIris(\n operations: RdfSparqlUpdateDeltaOperation[],\n writableGraphIris: readonly string[],\n ): string[] {\n const graphIris = new Set<string>(writableGraphIris);\n for (const operation of operations) {\n const graphTerms = operation.type === 'deleteWhere'\n ? [\n ...operation.template.map((item) => item.graph),\n ...this.queryGraphTerms(operation.query),\n ]\n : operation.type === 'insertDeleteWhere'\n ? [\n ...operation.deletes.map((item) => item.graph),\n ...operation.inserts.map((item) => item.graph),\n ...this.queryGraphTerms(operation.query),\n ]\n : operation.type === 'insertWhere'\n ? [\n ...operation.inserts.map((item) => item.graph),\n ...this.queryGraphTerms(operation.query),\n ]\n : operation.quads.map((quad) => quad.graph);\n for (const graph of graphTerms) {\n this.addNamedGraphIris(graph, graphIris);\n }\n }\n return [...graphIris];\n }\n\n private localRdfDeltaWriteGraphIris(\n operations: RdfSparqlUpdateDeltaOperation[],\n ): string[] {\n const graphIris = new Set<string>();\n for (const operation of operations) {\n if (operation.type === 'deleteWhere') {\n this.addWritableTemplateGraphIris(operation.template.map((item) => item.graph), operation.query, graphIris);\n continue;\n }\n if (operation.type === 'insertDeleteWhere') {\n this.addWritableTemplateGraphIris([\n ...operation.deletes.map((item) => item.graph),\n ...operation.inserts.map((item) => item.graph),\n ], operation.query, graphIris);\n continue;\n }\n if (operation.type === 'insertWhere') {\n this.addWritableTemplateGraphIris(operation.inserts.map((item) => item.graph), operation.query, graphIris);\n continue;\n }\n const graphTerms = operation.quads.map((quad) => quad.graph);\n for (const graph of graphTerms) {\n this.addWritableNamedGraphIri(graph, graphIris);\n }\n }\n if (graphIris.size === 0) {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update requires explicit local RDF graph write targets');\n }\n return [...graphIris];\n }\n\n private addWritableTemplateGraphIris(\n graphs: RdfQueryTermPattern[],\n query: RdfQuery,\n graphIris: Set<string>,\n ): void {\n for (const graph of graphs) {\n if (this.isQueryVariable(graph)) {\n this.addWritableGraphVariableIris(query, graph.variable, graphIris);\n continue;\n }\n this.addWritableNamedGraphIri(graph, graphIris);\n }\n }\n\n private addWritableGraphVariableIris(\n query: RdfQuery,\n variable: string,\n graphIris: Set<string>,\n ): void {\n const values = new Set<string>();\n this.collectGraphVariableFilterIris(query, variable, values);\n if (values.size === 0) {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update only supports finite GRAPH variable write targets');\n }\n for (const value of values) {\n this.addWritableNamedGraphIri(DataFactory.namedNode(value) as unknown as Term, graphIris);\n }\n }\n\n private localRdfWriteGraphIri(graph: Term, writableGraphs: Set<string>): string {\n if (graph.termType !== 'NamedNode' || !writableGraphs.has(graph.value)) {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update can only write declared local RDF graph documents');\n }\n return graph.value;\n }\n\n private queryLocalUpdateBindings(\n quads: Quad[],\n query: RdfQuery,\n ): RdfBindingRow[] {\n const index = new RdfQuadIndex({ path: ':memory:' });\n index.open();\n try {\n const engine = new SolidRdfEngine({ index });\n engine.put(quads);\n return engine.query(query).bindings;\n } finally {\n index.close();\n }\n }\n\n private queryGraphTerms(query: RdfQuery): RdfQueryTermPattern[] {\n const graphTerms: RdfQueryTermPattern[] = [];\n const graphVariables = new Set<string>();\n this.collectQueryGraphTerms(query, graphTerms, graphVariables);\n this.collectGraphVariableFilterTerms(query, graphVariables, graphTerms);\n return graphTerms;\n }\n\n private collectQueryGraphTerms(\n query: RdfQuery | {\n patterns: RdfQueryPattern[];\n values?: RdfValuesBindingSource[];\n optional?: RdfQuery['optional'];\n unions?: RdfQuery['unions'];\n minus?: RdfQuery['minus'];\n exists?: RdfQuery['exists'];\n },\n graphTerms: RdfQueryTermPattern[],\n graphVariables: Set<string>,\n ): void {\n for (const pattern of query.patterns) {\n if (!pattern.graph) {\n continue;\n }\n graphTerms.push(pattern.graph);\n if (this.isQueryVariable(pattern.graph)) {\n graphVariables.add(pattern.graph.variable);\n }\n }\n for (const optional of query.optional ?? []) {\n this.collectQueryGraphTerms(Array.isArray(optional) ? { patterns: optional } : optional, graphTerms, graphVariables);\n }\n for (const union of query.unions ?? []) {\n for (const branch of union.branches) {\n this.collectQueryGraphTerms(branch, graphTerms, graphVariables);\n }\n }\n for (const minus of query.minus ?? []) {\n this.collectQueryGraphTerms(minus, graphTerms, graphVariables);\n }\n for (const exists of query.exists ?? []) {\n this.collectQueryGraphTerms(exists, graphTerms, graphVariables);\n }\n }\n\n private collectGraphVariableFilterTerms(\n query: RdfQuery | {\n values?: RdfValuesBindingSource[];\n filters?: RdfQuery['filters'];\n optional?: RdfQuery['optional'];\n unions?: RdfQuery['unions'];\n minus?: RdfQuery['minus'];\n exists?: RdfQuery['exists'];\n },\n graphVariables: Set<string>,\n graphTerms: RdfQueryTermPattern[],\n ): void {\n for (const filter of query.filters ?? []) {\n if (!graphVariables.has(filter.variable)) {\n continue;\n }\n if (filter.value && this.isRdfTerm(filter.value)) {\n graphTerms.push(filter.value);\n }\n for (const value of filter.values ?? []) {\n if (this.isRdfTerm(value)) {\n graphTerms.push(value);\n }\n }\n }\n this.collectGraphVariableValueTerms(query.values ?? [], graphVariables, graphTerms);\n for (const optional of query.optional ?? []) {\n if (!Array.isArray(optional)) {\n this.collectGraphVariableFilterTerms(optional, graphVariables, graphTerms);\n }\n }\n for (const union of query.unions ?? []) {\n for (const branch of union.branches) {\n this.collectGraphVariableFilterTerms(branch, graphVariables, graphTerms);\n }\n }\n for (const minus of query.minus ?? []) {\n this.collectGraphVariableFilterTerms(minus, graphVariables, graphTerms);\n }\n for (const exists of query.exists ?? []) {\n this.collectGraphVariableFilterTerms(exists, graphVariables, graphTerms);\n }\n }\n\n private collectGraphVariableFilterIris(\n query: RdfQuery | {\n values?: RdfValuesBindingSource[];\n filters?: RdfQuery['filters'];\n optional?: RdfQuery['optional'];\n unions?: RdfQuery['unions'];\n minus?: RdfQuery['minus'];\n exists?: RdfQuery['exists'];\n },\n variable: string,\n values: Set<string>,\n ): void {\n for (const filter of query.filters ?? []) {\n if (filter.variable !== variable) {\n continue;\n }\n if ((filter.operator === '$eq' || filter.operator === '$sameTerm') && filter.value && this.isRdfTerm(filter.value)) {\n this.addGraphFilterValueIri(filter.value, values);\n }\n if (filter.operator === '$in') {\n for (const value of filter.values ?? []) {\n if (this.isRdfTerm(value)) {\n this.addGraphFilterValueIri(value, values);\n }\n }\n }\n }\n this.collectGraphVariableValueIris(query.values ?? [], variable, values);\n for (const optional of query.optional ?? []) {\n if (!Array.isArray(optional)) {\n this.collectGraphVariableFilterIris(optional, variable, values);\n }\n }\n for (const union of query.unions ?? []) {\n for (const branch of union.branches) {\n this.collectGraphVariableFilterIris(branch, variable, values);\n }\n }\n for (const minus of query.minus ?? []) {\n this.collectGraphVariableFilterIris(minus, variable, values);\n }\n for (const exists of query.exists ?? []) {\n this.collectGraphVariableFilterIris(exists, variable, values);\n }\n }\n\n private collectGraphVariableValueTerms(\n sources: readonly RdfValuesBindingSource[],\n graphVariables: Set<string>,\n graphTerms: RdfQueryTermPattern[],\n ): void {\n for (const source of sources) {\n for (const variable of source.variables) {\n if (!graphVariables.has(variable)) {\n continue;\n }\n for (const row of source.rows) {\n const value = row[variable];\n if (value) {\n graphTerms.push(value);\n }\n }\n }\n }\n }\n\n private collectGraphVariableValueIris(\n sources: readonly RdfValuesBindingSource[],\n variable: string,\n values: Set<string>,\n ): void {\n for (const source of sources) {\n if (!source.variables.includes(variable)) {\n continue;\n }\n for (const row of source.rows) {\n const value = row[variable];\n if (value) {\n this.addGraphFilterValueIri(value, values);\n }\n }\n }\n }\n\n private addGraphFilterValueIri(value: Term, values: Set<string>): void {\n if (value.termType !== 'NamedNode') {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update GRAPH variable write targets must be named graph documents');\n }\n values.add(value.value);\n }\n\n private addNamedGraphIris(graph: RdfQueryTermPattern | Term, graphIris: Set<string>): void {\n if (this.isRdfTerm(graph)) {\n if (graph.termType !== 'NamedNode') {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update only supports named graph documents');\n }\n graphIris.add(graph.value);\n return;\n }\n const values = (graph as { $in?: unknown }).$in;\n if (Array.isArray(values) && values.every((value) => this.isRdfTerm(value))) {\n for (const value of values) {\n if (value.termType !== 'NamedNode') {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update only supports named graph documents');\n }\n graphIris.add(value.value);\n }\n return;\n }\n if (this.isQueryVariable(graph)) {\n return;\n }\n throw new UnsupportedSparqlQueryError('Embedded local RDF update only supports explicit local RDF graph documents');\n }\n\n private addWritableNamedGraphIri(graph: RdfQueryTermPattern | Term, graphIris: Set<string>): void {\n if (!this.isRdfTerm(graph) || graph.termType !== 'NamedNode') {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update only supports explicit local RDF graph write targets');\n }\n if (!this.isByLineRdfIdentifier({ path: graph.value })) {\n throw new UnsupportedSparqlQueryError('Embedded local RDF update only supports by-line local RDF graph write targets');\n }\n graphIris.add(graph.value);\n }\n\n private isQueryVariable(value: unknown): value is { variable: string } {\n return Boolean(value && typeof value === 'object' && 'variable' in value);\n }\n\n private isRdfTerm(value: unknown): value is Term {\n return Boolean(value && typeof value === 'object' && 'termType' in value);\n }\n\n private async readLocalRdfState(identifier: ResourceIdentifier): Promise<{ text: string; existed: boolean }> {\n try {\n return {\n text: await this.readStreamText(await this.rdfFileDataAccessor.getData(identifier)),\n existed: true,\n };\n } catch (error) {\n if (NotFoundHttpError.isInstance(error)) {\n await this.refreshLocalRdfMirror(identifier);\n try {\n return {\n text: await this.readStreamText(await this.rdfFileDataAccessor.getData(identifier)),\n existed: true,\n };\n } catch (retryError) {\n if (NotFoundHttpError.isInstance(retryError)) {\n return { text: '', existed: false };\n }\n throw retryError;\n }\n }\n throw error;\n }\n }\n\n private async writeLocalRdfAuthority(identifier: ResourceIdentifier, quads: Quad[]): Promise<void> {\n await this.ensureRdfFileParentContainers(identifier);\n await this.rdfFileDataAccessor.writeDocument(\n identifier,\n guardStream(Readable.from([ await this.serializeQuadsForLocalFile(identifier, quads) ])),\n this.createLocalRdfMetadata(identifier, new RepresentationMetadata(identifier)),\n );\n }\n\n private async writeLocalRdfAuthorityPatches(patches: LocalRdfAuthorityPatch[]): Promise<void> {\n const applied: LocalRdfAuthorityPatch[] = [];\n try {\n for (const patch of patches) {\n let localAuthorityWritten = false;\n try {\n const authorityQuads = patch.nextQuads.map((quad) => this.toDefaultGraphQuad(quad));\n await this.writeLocalRdfAuthority(patch.identifier, authorityQuads);\n localAuthorityWritten = true;\n await this.writeStructuredRdfIndex(patch.identifier, authorityQuads, new RepresentationMetadata(patch.identifier));\n applied.push(patch);\n } catch (error) {\n if (localAuthorityWritten) {\n applied.push(patch);\n }\n throw error;\n }\n }\n } catch (error) {\n await this.rollbackLocalRdfAuthorityPatches(applied);\n throw error;\n }\n }\n\n private async rollbackLocalRdfAuthorityPatches(patches: LocalRdfAuthorityPatch[]): Promise<void> {\n const failures: string[] = [];\n for (const patch of patches.slice().reverse()) {\n try {\n if (patch.previousExists) {\n const authorityQuads = patch.previousQuads.map((quad) => this.toDefaultGraphQuad(quad));\n await this.writeLocalRdfAuthority(patch.identifier, authorityQuads);\n await this.writeStructuredRdfIndex(patch.identifier, authorityQuads, new RepresentationMetadata(patch.identifier));\n } else {\n await this.deleteRdfFileResourceIfPresent(patch.identifier);\n await this.deleteLocalRdfIndex(patch.identifier);\n }\n this.invalidateMetadataCache(patch.identifier);\n } catch (rollbackError) {\n failures.push(`${patch.identifier.path}: ${rollbackError instanceof Error ? rollbackError.message : String(rollbackError)}`);\n }\n }\n if (failures.length > 0) {\n this.logger.warn(`Failed to fully roll back local RDF authority patch: ${failures.join('; ')}`);\n }\n }\n\n private toDefaultGraphQuad(quad: Quad): Quad {\n return DataFactory.quad(quad.subject, quad.predicate, quad.object);\n }\n\n private toGraphQuad(quad: Quad, graph: Term): Quad {\n return DataFactory.quad(quad.subject, quad.predicate, quad.object, graph as any) as Quad;\n }\n\n private quadKey(quad: Quad): string {\n return [quad.graph, quad.subject, quad.predicate, quad.object]\n .map((term) => termToId(term as any))\n .join('\\u001f');\n }\n\n /**\n * Rebuild the structured RDF index from an already-written local RDF file.\n *\n * SolidFS uses this after tools edit `.ttl`/`.jsonld` files directly. The\n * local file remains the content authority; the structured accessor is only\n * refreshed as query/index state.\n */\n public async syncLocalRdfDocument(\n identifier: ResourceIdentifier,\n data?: Guarded<Readable>,\n contentType?: string,\n options?: LocalRdfSyncOptions,\n ): Promise<void> {\n if (!this.isRdfDocumentIdentifier(identifier)) {\n throw new Error(`Cannot sync non RDF document into RDF index: ${identifier.path}`);\n }\n\n const source = data ?? await this.rdfFileDataAccessor.getData(identifier);\n const localContentType = contentType ?? this.localRdfContentType(identifier);\n const text = await this.readStreamText(source);\n if (data) {\n await this.ensureRdfFileParentContainers(identifier);\n await this.rdfFileDataAccessor.writeDocument(\n identifier,\n guardStream(Readable.from([ text ])),\n this.createLocalRdfMetadata(identifier, new RepresentationMetadata(identifier)),\n );\n }\n const quads = await this.parseLocalRdf(identifier, text, localContentType);\n await this.writeStructuredRdfIndex(identifier, quads, new RepresentationMetadata(identifier), {\n ...options,\n contentType: localContentType,\n });\n this.invalidateMetadataCache(identifier);\n }\n\n public async deleteLocalRdfIndex(identifier: ResourceIdentifier): Promise<void> {\n try {\n const sourceScopedAccessor = this.sourceScopedStructuredAccessor();\n if (sourceScopedAccessor) {\n await sourceScopedAccessor.deleteRdfSourceDocument(identifier);\n } else {\n await this.structuredDataAccessor.deleteResource(identifier);\n }\n this.invalidateMetadataCache(identifier);\n } catch (error) {\n if (!NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n }\n }\n\n private async writeRdfDocument(\n identifier: ResourceIdentifier,\n data: Guarded<Readable>,\n metadata: RepresentationMetadata,\n ): Promise<void> {\n const quads = await arrayifyStream<Quad>(data);\n const structuredMetadata = new RepresentationMetadata(metadata);\n addResourceMetadata(structuredMetadata, false);\n updateModifiedDate(structuredMetadata);\n await this.ensureRdfFileParentContainers(identifier);\n\n await this.rdfFileDataAccessor.writeDocument(\n identifier,\n guardStream(Readable.from([ await this.serializeQuadsForLocalFile(identifier, quads) ])),\n this.createLocalRdfMetadata(identifier, metadata),\n );\n\n try {\n await this.writeStructuredRdfIndex(identifier, quads, structuredMetadata);\n } catch (error) {\n await this.deleteRdfFileResourceIfPresent(identifier);\n throw error;\n }\n }\n\n private async writeStructuredRdfIndex(\n identifier: ResourceIdentifier,\n quads: Quad[],\n metadata: RepresentationMetadata,\n options: LocalRdfSyncOptions & { contentType?: string } = {},\n ): Promise<void> {\n const structuredMetadata = new RepresentationMetadata(metadata);\n addResourceMetadata(structuredMetadata, false);\n updateModifiedDate(structuredMetadata);\n const sourceScopedAccessor = this.sourceScopedStructuredAccessor();\n if (sourceScopedAccessor) {\n await sourceScopedAccessor.writeRdfSourceDocument(\n identifier,\n quads,\n structuredMetadata,\n this.rdfSourceInput(identifier, options),\n );\n return;\n }\n\n await this.structuredDataAccessor.writeDocument(identifier, guardStream(Readable.from(quads)), structuredMetadata);\n }\n\n private async refreshLocalRdfMirror(identifier: ResourceIdentifier): Promise<void> {\n let metadata: RepresentationMetadata;\n let quads: Quad[];\n try {\n metadata = await this.structuredDataAccessor.getMetadata(identifier);\n if (!this.isLocalMirroredRdf(identifier, metadata)) {\n return;\n }\n quads = await arrayifyStream<Quad>(await this.structuredDataAccessor.getData(identifier));\n } catch (error) {\n if (NotFoundHttpError.isInstance(error)) {\n await this.deleteRdfFileResourceIfPresent(identifier);\n return;\n }\n throw error;\n }\n\n await this.ensureRdfFileParentContainers(identifier);\n await this.rdfFileDataAccessor.writeDocument(\n identifier,\n guardStream(Readable.from([ await this.serializeQuadsForLocalFile(identifier, quads) ])),\n this.createLocalRdfMetadata(identifier, metadata),\n );\n }\n\n private async getLocalRdfMetadata(\n identifier: ResourceIdentifier,\n sourceMetadata: RepresentationMetadata,\n ): Promise<RepresentationMetadata> {\n try {\n return await this.getExistingLocalRdfMetadata(identifier);\n } catch (error) {\n if (!NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n return this.createLocalRdfMetadata(identifier, sourceMetadata);\n }\n }\n\n private async getExistingLocalRdfMetadata(identifier: ResourceIdentifier): Promise<RepresentationMetadata> {\n try {\n const metadata = await this.rdfFileDataAccessor.getMetadata(identifier);\n metadata.contentType = this.localRdfContentType(identifier);\n return metadata;\n } catch (error) {\n if (NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n this.logger.warn(`Ignoring unreadable local RDF metadata for ${identifier.path}: ${error instanceof Error ? error.message : String(error)}`);\n return this.createLocalRdfMetadata(identifier, new RepresentationMetadata(identifier));\n }\n }\n\n private createLocalRdfMetadata(\n identifier: ResourceIdentifier,\n metadata: RepresentationMetadata,\n ): RepresentationMetadata {\n const localMetadata = new RepresentationMetadata(metadata);\n const graphScopedQuads = localMetadata.quads()\n .filter((quad) => quad.graph.termType !== 'DefaultGraph');\n localMetadata.removeQuads(graphScopedQuads);\n localMetadata.contentType = this.localRdfContentType(identifier);\n return localMetadata;\n }\n\n private localRdfContentType(identifier: ResourceIdentifier): string {\n return rdfContentTypeForPath(identifier.path) ?? 'text/turtle';\n }\n\n private sourceScopedStructuredAccessor(): SourceScopedStructuredRdfAccessor | undefined {\n const accessor = this.structuredDataAccessor as Partial<SourceScopedStructuredRdfAccessor>;\n if (\n typeof accessor.writeRdfSourceDocument === 'function'\n && typeof accessor.deleteRdfSourceDocument === 'function'\n ) {\n return accessor as SourceScopedStructuredRdfAccessor;\n }\n return undefined;\n }\n\n private rdfSourceInput(\n identifier: ResourceIdentifier,\n options: LocalRdfSyncOptions & { contentType?: string },\n ): RdfSourceInput {\n const workspace = options.workspace ?? this.parentContainer(identifier).path;\n return {\n source: options.source ?? identifier.path,\n workspace,\n localPath: options.localPath ?? this.relativePathFromWorkspace(identifier.path, workspace),\n contentType: options.contentType ?? this.localRdfContentType(identifier),\n sourceVersion: options.sourceVersion,\n };\n }\n\n private relativePathFromWorkspace(identifierPath: string, workspaceValue: string): string | undefined {\n try {\n const resource = new URL(identifierPath);\n const workspace = new URL(workspaceValue.endsWith('/') ? workspaceValue : `${workspaceValue}/`);\n if (resource.origin !== workspace.origin || !resource.pathname.startsWith(workspace.pathname)) {\n return undefined;\n }\n return decodeURIComponent(resource.pathname.slice(workspace.pathname.length));\n } catch {\n return undefined;\n }\n }\n\n private isByLineRdfIdentifier(identifier: ResourceIdentifier): boolean {\n return isLineAddressableRdfPath(identifier.path);\n }\n\n private isRdfDocumentIdentifier(identifier: ResourceIdentifier): boolean {\n return isRdfDocumentPath(identifier.path);\n }\n\n private isLocalMirroredRdf(\n identifier: ResourceIdentifier,\n metadata: RepresentationMetadata,\n ): boolean {\n return metadata.contentType === INTERNAL_QUADS || this.isRdfDocumentIdentifier(identifier);\n }\n\n private async serializeQuadsForLocalFile(identifier: ResourceIdentifier, quads: Quad[]): Promise<string> {\n if (this.localRdfContentType(identifier) === 'application/ld+json') {\n const nquads = await this.serializeNQuads(quads);\n const document = await jsonld.fromRDF(nquads, { format: 'application/n-quads' });\n return `${JSON.stringify(document, null, 2)}\\n`;\n }\n\n if (this.localRdfContentType(identifier) === 'application/rdf+xml') {\n return serializeRdfXml(quads);\n }\n\n const writer = new Writer({ format: this.localRdfContentType(identifier) });\n return writer.quadsToString(quads);\n }\n\n private async serializeNQuads(quads: Quad[]): Promise<string> {\n return new Promise((resolve, reject) => {\n const writer = new Writer({ format: 'application/n-quads' });\n writer.addQuads(quads);\n writer.end((error, result) => {\n if (error) {\n reject(error);\n return;\n }\n resolve(result);\n });\n });\n }\n\n private async parseLocalRdf(\n identifier: ResourceIdentifier,\n text: string,\n contentType: string,\n ): Promise<Quad[]> {\n if (contentType === 'application/ld+json') {\n const nquads = await jsonld.toRDF(JSON.parse(text), {\n base: identifier.path,\n format: 'application/n-quads',\n }) as string;\n return new Parser({ format: 'application/n-quads', baseIRI: identifier.path }).parse(nquads);\n }\n\n if (contentType === 'application/rdf+xml') {\n return arrayifyStream<Quad>(rdfParser.parse(Readable.from([ text ]), {\n contentType,\n baseIRI: identifier.path,\n }) as any);\n }\n\n return new Parser({ format: contentType, baseIRI: identifier.path }).parse(text);\n }\n\n private async readStreamText(data: Guarded<Readable>): Promise<string> {\n const chunks = await arrayifyStream(data as any);\n return chunks\n .map((chunk: Buffer | Uint8Array | string) => typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf8'))\n .join('');\n }\n\n /**\n * Write unstructured document: store data in unstructured accessor,\n * then save metadata in structured accessor.\n */\n private async writeUnstructuredDocument(\n identifier: ResourceIdentifier,\n data: Guarded<Readable>,\n metadata: RepresentationMetadata,\n ): Promise<void> {\n // Write the actual data to unstructured storage\n await this.unstructuredDataAccessor.writeDocument(identifier, data, metadata);\n \n let updatedMetadata: RepresentationMetadata;\n if (typeof metadata.contentLength === 'number') {\n updatedMetadata = new RepresentationMetadata(metadata);\n updatedMetadata.add(\n POSIX.terms.size,\n toLiteral(metadata.contentLength, XSD.terms.integer),\n SOLID_META.terms.ResponseMetadata,\n );\n } else {\n updatedMetadata = await this.unstructuredDataAccessor.getMetadata(identifier);\n\n const removing: Quad[] = [];\n for (const quad of updatedMetadata.quads()) {\n if (!/^http/.test(quad.predicate.value)) {\n removing.push(quad);\n }\n }\n updatedMetadata.removeQuads(removing);\n }\n \n // Save metadata to structured storage\n try {\n await this.structuredDataAccessor.writeMetadata(identifier, updatedMetadata);\n } catch (error) {\n this.logger.error(`Error writing metadata for ${identifier.path}: ${error}`);\n // Rollback: delete the unstructured data\n await this.unstructuredDataAccessor.deleteResource(identifier);\n throw error;\n }\n }\n\n private async deleteUnstructuredResourceIfPresent(identifier: ResourceIdentifier): Promise<void> {\n try {\n await this.unstructuredDataAccessor.deleteResource(identifier);\n } catch (error: any) {\n if (error?.code !== 'ENOENT' && error?.code !== 'ENOTDIR' && !NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n }\n }\n\n private async deleteRdfFileResourceIfPresent(identifier: ResourceIdentifier): Promise<void> {\n try {\n await this.rdfFileDataAccessor.deleteResource(identifier);\n } catch (error: any) {\n if (error?.code !== 'ENOENT' && error?.code !== 'ENOTDIR' && !NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n }\n }\n\n private async ensureUnstructuredParentContainers(identifier: ResourceIdentifier): Promise<void> {\n await this.ensureParentContainers(identifier, this.unstructuredDataAccessor);\n }\n\n private async ensureRdfFileParentContainers(identifier: ResourceIdentifier): Promise<void> {\n await this.ensureParentContainers(identifier, this.rdfFileDataAccessor);\n }\n\n private async ensureParentContainers(identifier: ResourceIdentifier, accessor: DataAccessor): Promise<void> {\n const containers: ResourceIdentifier[] = [];\n let current = this.parentContainer(identifier);\n\n while (!this.sameIdentifier(current, identifier)) {\n containers.push(current);\n const next = this.parentContainer(current);\n if (this.sameIdentifier(next, current)) {\n break;\n }\n current = next;\n }\n\n for (const container of containers.reverse()) {\n await this.writeContainerIfMissing(accessor, container);\n }\n }\n\n private async writeContainerIfMissing(accessor: DataAccessor, identifier: ResourceIdentifier): Promise<void> {\n try {\n await accessor.getMetadata(identifier);\n return;\n } catch (error) {\n if (!NotFoundHttpError.isInstance(error)) {\n throw error;\n }\n }\n\n await accessor.writeContainer(identifier, new RepresentationMetadata(identifier));\n }\n\n private sameIdentifier(left: ResourceIdentifier, right: ResourceIdentifier): boolean {\n return left.path === right.path;\n }\n\n private parentContainer(identifier: ResourceIdentifier): ResourceIdentifier {\n try {\n const url = new URL(identifier.path);\n if (url.pathname === '/' || url.pathname === '') {\n return { path: url.href.endsWith('/') ? url.href : `${url.href}/` };\n }\n const segments = url.pathname.replace(/\\/+$/u, '').split('/');\n segments.pop();\n url.pathname = `${segments.join('/') || '/'}`.replace(/\\/?$/u, '/');\n url.search = '';\n url.hash = '';\n return { path: url.href };\n } catch {\n const trimmed = identifier.path.replace(/\\/+$/u, '');\n const slashIndex = trimmed.lastIndexOf('/');\n if (slashIndex < 0) {\n return identifier;\n }\n return { path: `${trimmed.slice(0, slashIndex + 1)}` };\n }\n }\n\n private invalidateMetadataCache(identifier: ResourceIdentifier): void {\n const cache = metadataRequestContext.getStore()?.metadataCache;\n if (!cache) {\n return;\n }\n\n const exact = identifier.path;\n const trimmed = exact.endsWith('/') ? exact.replace(/\\/+$/u, '') : exact;\n const withSlash = exact.endsWith('/') ? exact : `${exact}/`;\n cache.delete(exact);\n cache.delete(trimmed);\n cache.delete(withSlash);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { Quad } from '@rdfjs/types';
2
- import type { RdfDerivedIndexRefreshResult, RdfEngineLike, RdfEngineStorageStats, RdfIndexPutOptions, RdfLocalQuery, RdfLocalQueryResult, RdfPatternQuery, RdfQuadIndexScanResult, RdfSourceInput } from './types';
2
+ import type { RdfDerivedIndexRefreshResult, RdfEngineLike, RdfEngineStorageStats, RdfIndexPutOptions, RdfQuery, RdfQueryResult, RdfPatternQuery, RdfQuadIndexScanResult, RdfSourceInput } from './types';
3
3
  import type { QuintPattern } from '../quint/types';
4
4
  export interface PostgresRdfEngineOptions {
5
5
  driver?: 'pglite' | 'pg';
@@ -16,19 +16,12 @@ export interface PostgresRdfEngineOptions {
16
16
  export declare class PostgresRdfEngine implements RdfEngineLike {
17
17
  private executor;
18
18
  private termDictionary;
19
- private cacheEngine;
20
- private cacheDir;
21
- private cachePath;
22
- private factsDataVersion;
23
- private cacheDirty;
24
19
  private initialized;
25
20
  private initializing;
26
21
  private readonly pgOptions;
27
22
  private sharedPoolConfig;
28
23
  private pglite;
29
24
  private pgPool;
30
- private rdf3xDataVersion;
31
- private rdf3xDirty;
32
25
  constructor(options: PostgresRdfEngineOptions);
33
26
  open(): Promise<void>;
34
27
  close(): Promise<void>;
@@ -41,7 +34,7 @@ export declare class PostgresRdfEngine implements RdfEngineLike {
41
34
  insertedRows: number;
42
35
  }>;
43
36
  scan(query: RdfPatternQuery): Promise<RdfQuadIndexScanResult>;
44
- query(query: RdfLocalQuery): Promise<RdfLocalQueryResult>;
37
+ query(query: RdfQuery): Promise<RdfQueryResult>;
45
38
  refreshDerivedIndexes(): Promise<RdfDerivedIndexRefreshResult>;
46
39
  storageStats(): Promise<RdfEngineStorageStats>;
47
40
  private initializeSchema;
@@ -51,7 +44,17 @@ export declare class PostgresRdfEngine implements RdfEngineLike {
51
44
  private clearRdf3xDerivedTables;
52
45
  private rebuildRdf3xDerivedIndexes;
53
46
  private scanNative;
47
+ private scanPostFilter;
54
48
  private queryNative;
49
+ private queryFacts;
50
+ private joinFactsPattern;
51
+ private joinFactsOptionalGroup;
52
+ private joinFactsUnionGroup;
53
+ private applyFactsMinusGroup;
54
+ private applyFactsExistsGroup;
55
+ private evaluateFactsDependentGroup;
56
+ private applyFactsValues;
57
+ private applyFactsBinds;
55
58
  private queryNativeAggregate;
56
59
  private canNativeAggregate;
57
60
  private canNativeAggregateHaving;
@@ -93,26 +96,20 @@ export declare class PostgresRdfEngine implements RdfEngineLike {
93
96
  private joinRowsToBindings;
94
97
  private indexMetrics;
95
98
  private localMetrics;
96
- private rebuildCacheFromStore;
97
- private loadCacheQuads;
98
99
  private insertQuads;
99
100
  private deleteExactQuad;
100
- private sourceRowToInput;
101
101
  private upsertSource;
102
102
  private findSourceRow;
103
103
  private bumpFactsDataVersion;
104
104
  private readFactsDataVersion;
105
105
  private readRdf3xFactsDataVersion;
106
106
  private ensureReady;
107
- private ensureCacheReady;
108
- private markDerivedDirty;
109
107
  private scalarCount;
110
108
  private factsStats;
111
109
  private rdf3xStats;
112
110
  private collectSpaceObjects;
113
111
  private requireExecutor;
114
112
  private requireDictionary;
115
- private requireCache;
116
113
  private requiredTerm;
117
114
  private openExecutor;
118
115
  }