@undefineds.co/xpod 0.3.74 → 0.4.0-rc.139
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/xpod.js +43 -8
- package/config/bun.json +45 -48
- package/config/cloud.json +13 -90
- package/config/components-ignore.json +0 -1
- package/config/local.json +111 -63
- package/config/resolver.json +4 -2
- package/config/terminal.json +4 -1
- package/config/xpod.base.json +16 -8
- package/config/xpod.json +51 -54
- package/dist/acceptance/PublicCloudSemanticConformance.d.ts +4 -0
- package/dist/acceptance/PublicCloudSemanticConformance.js +214 -0
- package/dist/acceptance/QleverSearchConformance.d.ts +39 -0
- package/dist/acceptance/QleverSearchConformance.js +686 -0
- package/dist/acceptance/QleverSemanticConformance.d.ts +3 -0
- package/dist/acceptance/QleverSemanticConformance.js +178 -0
- package/dist/acceptance/RdfSemanticConformance.d.ts +114 -0
- package/dist/acceptance/RdfSemanticConformance.js +307 -0
- package/dist/acceptance/run-installed-qlever-conformance.d.ts +12 -0
- package/dist/acceptance/run-installed-qlever-conformance.js +87 -0
- package/dist/acceptance/run-installed-rdf-conformance.d.ts +12 -0
- package/dist/acceptance/run-installed-rdf-conformance.js +88 -0
- package/dist/ai/service/EmbeddingProviderError.d.ts +7 -0
- package/dist/ai/service/EmbeddingProviderError.js +42 -0
- package/dist/api/ai-gateway/connect/index.js +5 -2
- package/dist/api/auth/AuthContext.d.ts +5 -0
- package/dist/api/auth/AuthContext.js +10 -0
- package/dist/api/container/common.js +21 -8
- package/dist/api/container/rdf.d.ts +1 -0
- package/dist/api/container/rdf.js +43 -4
- package/dist/api/container/types.d.ts +4 -0
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +2 -0
- package/dist/api/runs/PiAgentRuntimeDriver.js +1 -0
- package/dist/api/runs/RdfRunContextRetriever.d.ts +8 -0
- package/dist/api/runs/RdfRunContextRetriever.js +23 -1
- package/dist/api/runtime.js +20 -6
- package/dist/api/service/RdfSearchIndexingService.d.ts +37 -3
- package/dist/api/service/RdfSearchIndexingService.js +130 -18
- package/dist/api/service/RdfSearchIndexingSolidFsSyncer.d.ts +8 -0
- package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js +102 -15
- package/dist/api/service/RdfSearchReconciliationWorker.d.ts +76 -0
- package/dist/api/service/RdfSearchReconciliationWorker.js +294 -0
- package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
- package/dist/components/components.jsonld +9 -12
- package/dist/components/context.jsonld +227 -348
- package/dist/document/MarkdownRetrievalPointProjector.d.ts +33 -0
- package/dist/document/MarkdownRetrievalPointProjector.js +196 -0
- package/dist/document/MarkdownRetrievalPointProjector.jsonld +135 -0
- package/dist/document/ReaderMaterialization.d.ts +34 -0
- package/dist/document/ReaderMaterialization.js +3 -0
- package/dist/document/ReaderMaterialization.jsonld +151 -0
- package/dist/document/ReaderMaterializationRepository.d.ts +27 -0
- package/dist/document/ReaderMaterializationRepository.js +400 -0
- package/dist/document/ReaderMaterializationRepository.jsonld +84 -0
- package/dist/document/index.d.ts +3 -1
- package/dist/document/index.js +3 -1
- package/dist/http/SubgraphSparqlHttpHandler.js +34 -54
- package/dist/http/search/SearchHttpHandler.js +14 -12
- package/dist/http/terminal/TerminalHttpHandler.d.ts +3 -0
- package/dist/http/terminal/TerminalHttpHandler.js +1 -0
- package/dist/http/terminal/TerminalHttpHandler.jsonld +11 -0
- package/dist/identity/drizzle/DrizzleIndexedStorage.js +19 -39
- package/dist/identity/drizzle/db.d.ts +1 -0
- package/dist/identity/drizzle/db.js +35 -0
- package/dist/index.d.ts +9 -17
- package/dist/index.js +14 -22
- package/dist/provision/ProvisionPodCreator.d.ts +1 -1
- package/dist/provision/ProvisionPodCreator.js +4 -3
- package/dist/runtime/css-process.js +0 -1
- package/dist/search/RdfSearchIntentSink.d.ts +17 -0
- package/dist/search/RdfSearchIntentSink.js +46 -0
- package/dist/search/RdfSearchIntentSink.jsonld +47 -0
- package/dist/search/RdfSearchReconciliationRepository.d.ts +81 -0
- package/dist/search/RdfSearchReconciliationRepository.js +771 -0
- package/dist/solidfs/LocalRdfAuthorityRecoveryInitializer.d.ts +15 -0
- package/dist/solidfs/LocalRdfAuthorityRecoveryInitializer.js +48 -0
- package/dist/solidfs/LocalRdfAuthorityRecoveryInitializer.jsonld +99 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js +22 -4
- package/dist/solidfs/SolidFsSyncJournal.d.ts +7 -1
- package/dist/solidfs/SolidFsSyncJournal.js +20 -5
- package/dist/solidfs/SolidFsSyncJournal.jsonld +43 -0
- package/dist/solidfs/index.d.ts +1 -0
- package/dist/solidfs/index.js +1 -0
- package/dist/storage/SparqlUpdateResourceStore.js +3 -3
- package/dist/storage/accessors/MixDataAccessor.d.ts +21 -29
- package/dist/storage/accessors/MixDataAccessor.js +182 -399
- package/dist/storage/accessors/MixDataAccessor.jsonld +109 -87
- package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +12 -8
- package/dist/storage/accessors/SolidRdfDataAccessor.js +189 -59
- package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +14 -29
- package/dist/storage/rdf/LocalQleverNativeSparqlClient.d.ts +55 -0
- package/dist/storage/rdf/LocalQleverNativeSparqlClient.js +519 -0
- package/dist/storage/rdf/LocalQleverNativeSparqlClient.jsonld +314 -0
- package/dist/storage/rdf/PostgresRdfEngine.d.ts +3 -1
- package/dist/storage/rdf/PostgresRdfEngine.js +111 -74
- package/dist/storage/rdf/PostgresRdfEngine.jsonld +12 -22
- package/dist/storage/rdf/PostgresRdfSchemaValidation.d.ts +8 -0
- package/dist/storage/rdf/PostgresRdfSchemaValidation.js +82 -0
- package/dist/storage/rdf/PostgresRdfTextIndex.d.ts +6 -3
- package/dist/storage/rdf/PostgresRdfTextIndex.js +158 -80
- package/dist/storage/rdf/PostgresRdfTextIndex.jsonld +16 -4
- package/dist/storage/rdf/PostgresRdfVectorIndex.d.ts +4 -5
- package/dist/storage/rdf/PostgresRdfVectorIndex.js +124 -120
- package/dist/storage/rdf/PostgresRdfVectorIndex.jsonld +14 -18
- package/dist/storage/rdf/QleverSparqlEngine.d.ts +35 -0
- package/dist/storage/rdf/QleverSparqlEngine.js +185 -0
- package/dist/storage/rdf/QleverSparqlEngine.jsonld +70 -0
- package/dist/storage/rdf/Rdf3xIndex.js +20 -16
- package/dist/storage/rdf/RdfAccessScope.d.ts +4 -0
- package/dist/storage/rdf/RdfAccessScope.js +74 -9
- package/dist/storage/rdf/RdfAccessScope.jsonld +16 -0
- package/dist/storage/rdf/RdfEngineRdfJsSource.d.ts +14 -0
- package/dist/storage/rdf/RdfEngineRdfJsSource.js +179 -0
- package/dist/storage/rdf/RdfQuadIndex.d.ts +13 -14
- package/dist/storage/rdf/RdfQuadIndex.js +286 -99
- package/dist/storage/rdf/RdfQuadIndex.jsonld +10 -22
- package/dist/storage/rdf/RdfQueryExecutor.js +10 -4
- package/dist/storage/rdf/RdfQuerySparqlEngine.d.ts +33 -0
- package/dist/storage/rdf/RdfQuerySparqlEngine.js +215 -0
- package/dist/storage/rdf/RdfQuerySparqlEngine.jsonld +78 -0
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +0 -4
- package/dist/storage/rdf/RdfSparqlAdapter.js +75 -173
- package/dist/storage/rdf/RdfSparqlBoundary.d.ts +37 -0
- package/dist/storage/rdf/RdfSparqlBoundary.js +247 -0
- package/dist/storage/rdf/RdfSparqlSerialization.d.ts +3 -0
- package/dist/storage/rdf/RdfSparqlSerialization.js +19 -0
- package/dist/storage/rdf/RdfSqliteConnection.d.ts +7 -0
- package/dist/storage/rdf/RdfSqliteConnection.js +23 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +0 -8
- package/dist/storage/rdf/RdfTermDictionary.js +0 -136
- package/dist/storage/rdf/RdfTermDictionary.jsonld +0 -32
- package/dist/storage/rdf/RdfTermSemantics.d.ts +6 -0
- package/dist/storage/rdf/RdfTermSemantics.js +29 -0
- package/dist/storage/rdf/RdfTextIndex.d.ts +5 -6
- package/dist/storage/rdf/RdfTextIndex.js +187 -115
- package/dist/storage/rdf/RdfTextIndex.jsonld +10 -14
- package/dist/storage/rdf/RdfVectorIndex.d.ts +4 -4
- package/dist/storage/rdf/RdfVectorIndex.js +156 -233
- package/dist/storage/rdf/RdfVectorIndex.jsonld +10 -14
- package/dist/storage/rdf/SolidRdfEngine.d.ts +16 -21
- package/dist/storage/rdf/SolidRdfEngine.js +28 -308
- package/dist/storage/rdf/SolidRdfEngine.jsonld +26 -148
- package/dist/storage/rdf/XpodComunicaQueryEngine.d.ts +10 -0
- package/dist/storage/rdf/XpodComunicaQueryEngine.js +72 -0
- package/dist/storage/rdf/index.d.ts +7 -6
- package/dist/storage/rdf/index.js +17 -12
- package/dist/storage/rdf/models-benchmark.d.ts +5 -1
- package/dist/storage/rdf/models-benchmark.js +17 -19
- package/dist/storage/rdf/types.d.ts +68 -6
- package/dist/storage/rdf/types.jsonld +69 -0
- package/dist/storage/sparql/SubgraphQueryEngine.d.ts +13 -7
- package/dist/storage/sparql/SubgraphQueryEngine.js +6 -6
- package/dist/storage/vector/index.d.ts +0 -1
- package/dist/storage/vector/index.js +0 -1
- package/dist/terminal/AclPermissionService.d.ts +4 -5
- package/dist/terminal/AclPermissionService.js +55 -75
- package/dist/terminal/TerminalSessionManager.d.ts +3 -2
- package/dist/terminal/TerminalSessionManager.js +3 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js +29 -26
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.js +9 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.js +6 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js +3 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts +6 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js +13 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.js +31 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql/builder/expression-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql/builder/expression-builder.js +5 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql/builder/expression-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.js +45 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js +29 -26
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.js +9 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.js +6 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js +3 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts +6 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js +14 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.js +30 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql/builder/expression-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql/builder/expression-builder.js +5 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql/builder/expression-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.js +45 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/package.json +5 -4
- package/package.json +19 -8
- package/static/app/assets/{index-36TJKN-3.js → index-BikOyGPu.js} +34 -34
- package/static/app/assets/inrupt-smoke.js +2 -2
- package/static/app/assets/main.css +1 -1
- package/static/app/assets/main.js +11 -11
- package/static/auth-callback/assets/{AiConfigContext-DNfRNaZQ.js → AiConfigContext-iQ74JmRZ.js} +1 -1
- package/static/auth-callback/assets/{AiConfigPage-BBiTOm3o.js → AiConfigPage-BBDKE1gJ.js} +1 -1
- package/static/auth-callback/assets/{DocumentProcessingPanel-BzpEwqKT.js → DocumentProcessingPanel-D9NntIEK.js} +1 -1
- package/static/auth-callback/assets/{IndexLifecyclePanel-CvXMwooQ.js → IndexLifecyclePanel-BG07yBdA.js} +1 -1
- package/static/auth-callback/assets/{IndexSubjectPanel-CayA221L.js → IndexSubjectPanel-B-bUnU3G.js} +1 -1
- package/static/auth-callback/assets/{ModelAssignmentsPanel-Iew2QgtR.js → ModelAssignmentsPanel-C7I-Nqy-.js} +1 -1
- package/static/auth-callback/assets/{ModelsPage-CTJKAUA3.js → ModelsPage-C2hxyrmI.js} +1 -1
- package/static/auth-callback/assets/{NetworkPage--8ZCjIHB.js → NetworkPage-IGIc2q1Y.js} +1 -1
- package/static/auth-callback/assets/{PaneListHeader-BT-OGKL7.js → PaneListHeader-CebuPl_g.js} +1 -1
- package/static/auth-callback/assets/{SearchIndexingPanel-CFjjk1-C.js → SearchIndexingPanel-6HnZSg00.js} +1 -1
- package/static/auth-callback/assets/{StatusSubjectPanel-DAN5Ej9q.js → StatusSubjectPanel-votxBkr5.js} +1 -1
- package/static/auth-callback/assets/{StatusWorkspace-CEgmKJcX.js → StatusWorkspace-Cksl61zX.js} +1 -1
- package/static/auth-callback/assets/{SystemSettingsPage-Bk0TB4RU.js → SystemSettingsPage-CKZFUaZT.js} +1 -1
- package/static/auth-callback/assets/{SystemSettingsSubjectPanel-CKl8ukiz.js → SystemSettingsSubjectPanel-pzfUcCf4.js} +1 -1
- package/static/auth-callback/assets/{activity-BOtct9Ie.js → activity-DQL6kZHZ.js} +1 -1
- package/static/auth-callback/assets/auth-callback-B_s8Ye5Z.css +1 -0
- package/static/auth-callback/assets/{auth-callback-ai6OMe6C.js → auth-callback-BxQMd_Mc.js} +39 -39
- package/static/auth-callback/assets/{badge-DGSg5wio.js → badge-DvW4LUHH.js} +1 -1
- package/static/auth-callback/assets/{download-4eVPmxQ_.js → download-Cx_uaCR1.js} +1 -1
- package/static/auth-callback/assets/{external-link-BlD92fAM.js → external-link-D6L6ExH1.js} +1 -1
- package/static/auth-callback/assets/{index-FrugCRsJ.js → index-BAS_hxGu.js} +1 -1
- package/static/auth-callback/assets/{index-7ppych8q.js → index-BmBjpCoD.js} +1 -1
- package/static/auth-callback/assets/{index-browser-dwpJ2mdT.js → index-browser-pdn4D3M4.js} +1 -1
- package/static/auth-callback/assets/{key-round-BFOQbNNp.js → key-round-BTBzOggq.js} +1 -1
- package/static/auth-callback/assets/{rotate-ccw-BySVgaAP.js → rotate-ccw-eV7Cx8sB.js} +1 -1
- package/static/auth-callback/assets/{skeleton-CgcxPTqc.js → skeleton-Bg4GYgBM.js} +1 -1
- package/static/auth-callback/assets/{waypoints-DM902DhB.js → waypoints-CJbydf0B.js} +1 -1
- package/static/auth-callback/assets/{workspace-layout-DlZlN49Q.js → workspace-layout-C6Hh8Xf-.js} +1 -1
- package/static/auth-callback/auth-callback.html +2 -2
- package/static/dashboard/assets/{AiConfigContext-VnWI7bOR.js → AiConfigContext-BkJj28vK.js} +1 -1
- package/static/dashboard/assets/{AiConfigPage-Dn3oxXcA.js → AiConfigPage-Cs9B4uyp.js} +1 -1
- package/static/dashboard/assets/{DocumentProcessingPanel-CAF1uLi3.js → DocumentProcessingPanel-BBWmM7mS.js} +1 -1
- package/static/dashboard/assets/{IndexLifecyclePanel-D9zVZwu8.js → IndexLifecyclePanel-D5xGTT_i.js} +1 -1
- package/static/dashboard/assets/{IndexSubjectPanel-_JCGwJmO.js → IndexSubjectPanel-d-mjDthn.js} +1 -1
- package/static/dashboard/assets/{ModelAssignmentsPanel-DtlxQxFa.js → ModelAssignmentsPanel-C-OLNbqf.js} +1 -1
- package/static/dashboard/assets/{ModelsPage-CCNTpXM5.js → ModelsPage-CBrLjuUn.js} +1 -1
- package/static/dashboard/assets/{NetworkPage-BAKv9unq.js → NetworkPage-BlYk8L1z.js} +1 -1
- package/static/dashboard/assets/{PaneListHeader-Dr1jq2Ii.js → PaneListHeader-A5oZJQC0.js} +1 -1
- package/static/dashboard/assets/{SearchIndexingPanel-BW0pPrQB.js → SearchIndexingPanel-Bs1j8ZP2.js} +1 -1
- package/static/dashboard/assets/{StatusSubjectPanel-c9iebk4M.js → StatusSubjectPanel-Qao3orvi.js} +1 -1
- package/static/dashboard/assets/{StatusWorkspace-KZ7zrrmB.js → StatusWorkspace-rDM0yDtk.js} +1 -1
- package/static/dashboard/assets/{SystemSettingsPage-fVSfJMi9.js → SystemSettingsPage-FPRPkKaR.js} +1 -1
- package/static/dashboard/assets/{SystemSettingsSubjectPanel-DUSxcVT8.js → SystemSettingsSubjectPanel-CjlJAxnX.js} +1 -1
- package/static/dashboard/assets/{activity-Dg4XxJA8.js → activity-CJ5K6hYC.js} +1 -1
- package/static/dashboard/assets/{badge-OHMG7sYk.js → badge-L-NMOi1P.js} +1 -1
- package/static/dashboard/assets/dashboard-B_s8Ye5Z.css +1 -0
- package/static/dashboard/assets/{dashboard-UuQZ5g0B.js → dashboard-DyjAyYxx.js} +34 -34
- package/static/dashboard/assets/{download-CkbQhuL2.js → download-Bi4u5K5B.js} +1 -1
- package/static/dashboard/assets/{external-link-C15frgwD.js → external-link-jmhLDfvT.js} +1 -1
- package/static/dashboard/assets/{index-BiU8tNWd.js → index-BoaGJBxf.js} +1 -1
- package/static/dashboard/assets/{index-JUkJUI4K.js → index-C22TAEi4.js} +1 -1
- package/static/dashboard/assets/{key-round-BVREfX5D.js → key-round-Dk1VmMrn.js} +1 -1
- package/static/dashboard/assets/{rotate-ccw-cPEquKE_.js → rotate-ccw-DIfLsSwi.js} +1 -1
- package/static/dashboard/assets/{skeleton-BPM2LdA5.js → skeleton-BGPJMHb-.js} +1 -1
- package/static/dashboard/assets/{waypoints-Cd3kODMk.js → waypoints-CY53egpu.js} +1 -1
- package/static/dashboard/assets/{workspace-layout-BP3gLLXb.js → workspace-layout-CoHkcx70.js} +1 -1
- package/static/dashboard/dashboard.html +2 -2
- package/static/settings/assets/{AiConfigContext-B-D3riwG.js → AiConfigContext-BcEPlEJe.js} +1 -1
- package/static/settings/assets/{AiConfigPage-CAYT-CgT.js → AiConfigPage-D-t3ZUhg.js} +1 -1
- package/static/settings/assets/{DocumentProcessingPanel-D__vS86O.js → DocumentProcessingPanel-m2SasiMO.js} +1 -1
- package/static/settings/assets/{IndexLifecyclePanel-CuYEAG62.js → IndexLifecyclePanel-BNmAvx8V.js} +1 -1
- package/static/settings/assets/{IndexSubjectPanel-Do71gQQC.js → IndexSubjectPanel-C5-L2AcW.js} +1 -1
- package/static/settings/assets/{ModelAssignmentsPanel-Cn3kSze7.js → ModelAssignmentsPanel-Cfpkf02Y.js} +1 -1
- package/static/settings/assets/{ModelsPage-BKO0ARYt.js → ModelsPage-DZrACwVN.js} +1 -1
- package/static/settings/assets/{NetworkPage-XPYrdyVd.js → NetworkPage-BlrGGfqL.js} +1 -1
- package/static/settings/assets/{PaneListHeader-BAiQcCss.js → PaneListHeader-C3TCs1RI.js} +1 -1
- package/static/settings/assets/{SearchIndexingPanel-Bx3Fco0x.js → SearchIndexingPanel-Cyp3CUzX.js} +1 -1
- package/static/settings/assets/{StatusSubjectPanel-BzKzXmSL.js → StatusSubjectPanel-gRkb8WEX.js} +1 -1
- package/static/settings/assets/{StatusWorkspace-NjLpo9xp.js → StatusWorkspace-Dptx4Ec2.js} +1 -1
- package/static/settings/assets/{SystemSettingsPage-CclI_Lpv.js → SystemSettingsPage-BWgGUQbs.js} +1 -1
- package/static/settings/assets/{SystemSettingsSubjectPanel-CMnSE-8N.js → SystemSettingsSubjectPanel-VflUvpgC.js} +1 -1
- package/static/settings/assets/{activity-DYpNPFzG.js → activity-D7iNhTkQ.js} +1 -1
- package/static/settings/assets/{badge-C7Vhmg28.js → badge-DO0r_RT4.js} +1 -1
- package/static/settings/assets/{download-DdXcAiwj.js → download-CsJlNSbd.js} +1 -1
- package/static/settings/assets/{external-link-D7thdQae.js → external-link-BCR7SHme.js} +1 -1
- package/static/settings/assets/{index-CwBKvDQZ.js → index-Cgq16ekN.js} +1 -1
- package/static/settings/assets/{index-BnYbrf5s.js → index-SrhQvcrU.js} +1 -1
- package/static/settings/assets/{index-browser-DYzi1DO1.js → index-browser-THpcMCnz.js} +1 -1
- package/static/settings/assets/{key-round-BXErodZA.js → key-round-Dd3jk1BT.js} +1 -1
- package/static/settings/assets/{rotate-ccw-DPyOBmDD.js → rotate-ccw-tiL14i1d.js} +1 -1
- package/static/settings/assets/settings-B_s8Ye5Z.css +1 -0
- package/static/settings/assets/{settings-BGpEf8nx.js → settings-CVLDPejo.js} +34 -34
- package/static/settings/assets/{skeleton-S9l3JIr9.js → skeleton-DBxLuNgU.js} +1 -1
- package/static/settings/assets/{waypoints-C5By7zWc.js → waypoints-DS3e3hv7.js} +1 -1
- package/static/settings/assets/{workspace-layout-Bb6RVAEx.js → workspace-layout-mucrxyTK.js} +1 -1
- package/static/settings/settings.html +2 -2
- package/config/search.json +0 -66
- package/dist/document/HeadingChunker.jsonld +0 -41
- package/dist/security/secret-cell/DeploymentRootKeyProvider.jsonld +0 -124
- package/dist/security/secret-cell/SecretCellVault.jsonld +0 -207
- package/dist/storage/PostgresDerivedIndexJournal.d.ts +0 -47
- package/dist/storage/PostgresDerivedIndexJournal.js +0 -408
- package/dist/storage/PostgresDerivedIndexJournal.jsonld +0 -303
- package/dist/storage/RdfDerivedIndexingListener.d.ts +0 -32
- package/dist/storage/RdfDerivedIndexingListener.js +0 -135
- package/dist/storage/RdfDerivedIndexingListener.jsonld +0 -228
- package/dist/storage/accessors/QuadstoreSparqlDataAccessor.d.ts +0 -148
- package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js +0 -436
- package/dist/storage/accessors/QuadstoreSparqlDataAccessor.jsonld +0 -172
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.d.ts +0 -102
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +0 -474
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld +0 -192
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +0 -486
- package/dist/storage/rdf/ShadowRdfQuintStore.d.ts +0 -59
- package/dist/storage/rdf/ShadowRdfQuintStore.js +0 -216
- package/dist/storage/rdf/ShadowRdfQuintStore.jsonld +0 -312
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +0 -107
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +0 -1117
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +0 -312
- package/dist/storage/sparql/AlgebraUtils.d.ts +0 -48
- package/dist/storage/sparql/AlgebraUtils.js +0 -118
- package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +0 -37
- package/dist/storage/sparql/CompatibilitySparqlEngine.js +0 -96
- package/dist/storage/sparql/CompatibilitySparqlEngine.jsonld +0 -123
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +0 -36
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +0 -124
- package/dist/storage/sparql/ComunicaOptimizedEngine.d.ts +0 -59
- package/dist/storage/sparql/ComunicaOptimizedEngine.js +0 -254
- package/dist/storage/sparql/ComunicaQuintEngine.d.ts +0 -143
- package/dist/storage/sparql/ComunicaQuintEngine.js +0 -781
- package/dist/storage/sparql/ExpressionEvaluator.d.ts +0 -54
- package/dist/storage/sparql/ExpressionEvaluator.js +0 -340
- package/dist/storage/sparql/FilterPushdownExtractor.d.ts +0 -74
- package/dist/storage/sparql/FilterPushdownExtractor.js +0 -421
- package/dist/storage/sparql/OptimizedQuadstoreEngine.d.ts +0 -65
- package/dist/storage/sparql/OptimizedQuadstoreEngine.js +0 -327
- package/dist/storage/sparql/OptimizedQuadstoreSource.d.ts +0 -46
- package/dist/storage/sparql/OptimizedQuadstoreSource.js +0 -118
- package/dist/storage/sparql/PatternBuilder.d.ts +0 -41
- package/dist/storage/sparql/PatternBuilder.js +0 -118
- package/dist/storage/sparql/QueryOptimizer.d.ts +0 -125
- package/dist/storage/sparql/QueryOptimizer.js +0 -375
- package/dist/storage/sparql/QuintEngine.d.ts +0 -92
- package/dist/storage/sparql/QuintEngine.js +0 -150
- package/dist/storage/sparql/QuintQuerySource.d.ts +0 -241
- package/dist/storage/sparql/QuintQuerySource.js +0 -1069
- package/dist/storage/sparql/SimpleSparqlExecutor.d.ts +0 -40
- package/dist/storage/sparql/SimpleSparqlExecutor.js +0 -131
- package/dist/storage/vector/VectorIndexingListener.d.ts +0 -114
- package/dist/storage/vector/VectorIndexingListener.js +0 -346
- package/static/auth-callback/assets/auth-callback-rWdEQY5f.css +0 -1
- package/static/dashboard/assets/dashboard-rWdEQY5f.css +0 -1
- package/static/settings/assets/settings-rWdEQY5f.css +0 -1
|
@@ -12,14 +12,11 @@ const arrayify_stream_1 = __importDefault(require("arrayify-stream"));
|
|
|
12
12
|
const n3_1 = require("n3");
|
|
13
13
|
const jsonld_1 = __importDefault(require("jsonld"));
|
|
14
14
|
const rdf_parse_1 = require("rdf-parse");
|
|
15
|
-
const sparqljs_1 = require("sparqljs");
|
|
16
15
|
const community_server_1 = require("@solid/community-server");
|
|
17
|
-
const
|
|
16
|
+
const RdfSparqlBoundary_1 = require("../rdf/RdfSparqlBoundary");
|
|
18
17
|
const RdfContentTypes_1 = require("../rdf/RdfContentTypes");
|
|
19
18
|
const RdfTextProjection_1 = require("../rdf/RdfTextProjection");
|
|
20
|
-
const RdfQuadIndex_1 = require("../rdf/RdfQuadIndex");
|
|
21
19
|
const RdfXmlSerializer_1 = require("../rdf/RdfXmlSerializer");
|
|
22
|
-
const SolidRdfEngine_1 = require("../rdf/SolidRdfEngine");
|
|
23
20
|
const RdfAccessScope_1 = require("../rdf/RdfAccessScope");
|
|
24
21
|
const MetadataRequestContext_1 = require("../MetadataRequestContext");
|
|
25
22
|
const ResourceReadContext_1 = require("../ResourceReadContext");
|
|
@@ -34,9 +31,8 @@ const ResourceReadContext_1 = require("../ResourceReadContext");
|
|
|
34
31
|
* to be used as the RDF storage backend.
|
|
35
32
|
*/
|
|
36
33
|
class MixDataAccessor {
|
|
37
|
-
constructor(structuredDataAccessor, unstructuredDataAccessor, presignedRedirectEnabled = false, mirrorContainersToUnstructured = true, rdfFileDataAccessor = unstructuredDataAccessor, textSearchIndexingEnabled = false, rdfFileMapper, localRdfAuthorityJournal) {
|
|
34
|
+
constructor(structuredDataAccessor, unstructuredDataAccessor, presignedRedirectEnabled = false, mirrorContainersToUnstructured = true, rdfFileDataAccessor = unstructuredDataAccessor, textSearchIndexingEnabled = false, rdfFileMapper, localRdfAuthorityJournal, rdfSearchIntentSink) {
|
|
38
35
|
this.logger = (0, global_logger_factory_1.getLoggerFor)(this);
|
|
39
|
-
this.rdfSparqlAdapter = new RdfSparqlAdapter_1.RdfSparqlAdapter();
|
|
40
36
|
this.structuredDataAccessor = structuredDataAccessor;
|
|
41
37
|
this.unstructuredDataAccessor = unstructuredDataAccessor;
|
|
42
38
|
this.rdfFileDataAccessor = rdfFileDataAccessor;
|
|
@@ -45,6 +41,7 @@ class MixDataAccessor {
|
|
|
45
41
|
this.presignedRedirectEnabled = presignedRedirectEnabled;
|
|
46
42
|
this.mirrorContainersToUnstructured = mirrorContainersToUnstructured;
|
|
47
43
|
this.textSearchIndexingEnabled = textSearchIndexingEnabled;
|
|
44
|
+
this.rdfSearchIntentSink = rdfSearchIntentSink;
|
|
48
45
|
}
|
|
49
46
|
/**
|
|
50
47
|
* This accessor supports all types of data.
|
|
@@ -180,6 +177,7 @@ class MixDataAccessor {
|
|
|
180
177
|
}
|
|
181
178
|
else if (this.isUnstructured(metadata)) {
|
|
182
179
|
await this.deleteUnstructuredResourceIfPresent(identifier);
|
|
180
|
+
await this.deleteSearchIndexes(identifier);
|
|
183
181
|
}
|
|
184
182
|
// Always delete from structured storage (contains metadata)
|
|
185
183
|
await this.structuredDataAccessor.deleteResource(identifier);
|
|
@@ -188,409 +186,88 @@ class MixDataAccessor {
|
|
|
188
186
|
/**
|
|
189
187
|
* Execute SPARQL UPDATE.
|
|
190
188
|
*
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
* unsupported shapes have an explicitly configured compatibility path.
|
|
189
|
+
* Native QLever prepares an exact graph delta. The accessor validates its
|
|
190
|
+
* write scope, patches the local RDF authority files, and rebuilds the index.
|
|
194
191
|
*/
|
|
195
|
-
async executeSparqlUpdate(query, baseIri, accessScope) {
|
|
196
|
-
if (baseIri) {
|
|
197
|
-
|
|
198
|
-
if (await this.shouldApplyLocalRdfSparqlUpdate(identifier)) {
|
|
199
|
-
try {
|
|
200
|
-
const writtenIdentifiers = await this.executeLocalRdfSparqlUpdate(query, identifier, new Set([identifier.path]), accessScope);
|
|
201
|
-
for (const writtenIdentifier of writtenIdentifiers) {
|
|
202
|
-
this.invalidateMetadataCache(writtenIdentifier);
|
|
203
|
-
}
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
catch (error) {
|
|
207
|
-
if (!(error instanceof RdfSparqlAdapter_1.UnsupportedSparqlQueryError)) {
|
|
208
|
-
throw error;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
192
|
+
async executeSparqlUpdate(query, baseIri, accessScope, options) {
|
|
193
|
+
if (!baseIri) {
|
|
194
|
+
throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Pod SPARQL UPDATE requires a server-owned base IRI', { code: 'rdf.sparql.update_authority_required' });
|
|
212
195
|
}
|
|
213
|
-
const
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
await accessor.executeSparqlUpdate(query, baseIri);
|
|
218
|
-
if (baseIri) {
|
|
219
|
-
const identifier = { path: baseIri };
|
|
220
|
-
await this.refreshLocalRdfMirror(identifier);
|
|
221
|
-
this.invalidateMetadataCache(identifier);
|
|
196
|
+
const prepared = await this.prepareNativeRdfSparqlUpdate(query, baseIri, accessScope, options);
|
|
197
|
+
const writtenIdentifiers = await this.executePreparedRdfSparqlUpdate(prepared, baseIri, accessScope);
|
|
198
|
+
for (const writtenIdentifier of writtenIdentifiers) {
|
|
199
|
+
this.invalidateMetadataCache(writtenIdentifier);
|
|
222
200
|
}
|
|
223
201
|
}
|
|
224
|
-
async
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
202
|
+
async prepareNativeRdfSparqlUpdate(query, baseIri, accessScope, options) {
|
|
203
|
+
const accessor = this.structuredDataAccessor;
|
|
204
|
+
if (typeof accessor.prepareSparqlUpdate !== 'function') {
|
|
205
|
+
throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Native QLever prepared-update support is required for Pod SPARQL UPDATE', {
|
|
206
|
+
code: 'rdf.sparql.update_authority_required',
|
|
207
|
+
capability: 'sparql.update.authority',
|
|
208
|
+
});
|
|
230
209
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
210
|
+
const prepareOptions = options
|
|
211
|
+
? {
|
|
212
|
+
...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),
|
|
213
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
214
|
+
}
|
|
215
|
+
: undefined;
|
|
216
|
+
const prepared = await accessor.prepareSparqlUpdate(query, baseIri, accessScope, prepareOptions);
|
|
217
|
+
if (!prepared) {
|
|
218
|
+
throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Native QLever did not return a prepared update delta', {
|
|
219
|
+
code: 'rdf.sparql.update_authority_required',
|
|
220
|
+
capability: 'sparql.update.authority',
|
|
221
|
+
});
|
|
236
222
|
}
|
|
223
|
+
return prepared;
|
|
237
224
|
}
|
|
238
|
-
async
|
|
239
|
-
const
|
|
240
|
-
const
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
const writableGraphIris = this.localRdfDeltaWriteGraphIris(delta.operations, localRdfAuthorityIris);
|
|
244
|
-
const graphStates = await this.loadLocalRdfDeltaGraphs(delta.operations, writableGraphIris, localRdfAuthorityIris);
|
|
245
|
-
const graphQuads = new Map([...graphStates].map(([graphIri, state]) => [graphIri, state.quads]));
|
|
246
|
-
const nextQuadsByGraph = this.applyLocalRdfDelta(graphQuads, delta.operations, writableGraphIris, accessScope);
|
|
247
|
-
const patches = writableGraphIris.map((graphIri) => {
|
|
248
|
-
const previous = graphStates.get(graphIri);
|
|
249
|
-
return {
|
|
250
|
-
identifier: { path: graphIri },
|
|
251
|
-
previousQuads: previous?.quads ?? [],
|
|
252
|
-
previousExists: previous?.existed ?? false,
|
|
253
|
-
nextQuads: nextQuadsByGraph.get(graphIri) ?? [],
|
|
254
|
-
};
|
|
255
|
-
});
|
|
256
|
-
await this.writeLocalRdfAuthorityPatches(patches);
|
|
257
|
-
return patches.map((patch) => patch.identifier);
|
|
258
|
-
}
|
|
259
|
-
applyLocalRdfDelta(graphQuads, operations, writableGraphIris, accessScope) {
|
|
260
|
-
const writableGraphs = new Set(writableGraphIris);
|
|
261
|
-
const byGraph = new Map();
|
|
262
|
-
for (const [graphIri, quads] of graphQuads) {
|
|
263
|
-
byGraph.set(graphIri, new Map(quads.map((quad) => [this.quadKey(quad), quad])));
|
|
264
|
-
}
|
|
265
|
-
const currentQuads = () => [...byGraph.entries()]
|
|
266
|
-
.filter(([graphIri]) => !accessScope || (0, RdfAccessScope_1.rdfAccessGraphAllowed)(graphIri, accessScope))
|
|
267
|
-
.flatMap(([, quads]) => [...quads.values()]);
|
|
268
|
-
const writableQuads = (graphIri) => {
|
|
269
|
-
let quads = byGraph.get(graphIri);
|
|
270
|
-
if (!quads) {
|
|
271
|
-
quads = new Map();
|
|
272
|
-
byGraph.set(graphIri, quads);
|
|
225
|
+
async executePreparedRdfSparqlUpdate(delta, baseIri, accessScope) {
|
|
226
|
+
const patches = [];
|
|
227
|
+
for (const graphDelta of delta.graphs) {
|
|
228
|
+
if (graphDelta.graphIri !== graphDelta.sourceUri) {
|
|
229
|
+
throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Native prepared update v1 requires the graph IRI to equal its local RDF source URI');
|
|
273
230
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
for (const quad of quads) {
|
|
278
|
-
const target = writableQuads(this.localRdfWriteGraphIri(quad.graph, writableGraphs));
|
|
279
|
-
target.delete(this.quadKey(quad));
|
|
231
|
+
const serverOwnedBase = accessScope?.basePath ?? this.parentContainer({ path: baseIri }).path;
|
|
232
|
+
if (!graphDelta.graphIri.startsWith(serverOwnedBase)) {
|
|
233
|
+
throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Native prepared update cannot write outside the server-owned Pod scope');
|
|
280
234
|
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
for (const quad of quads) {
|
|
284
|
-
const target = writableQuads(this.localRdfWriteGraphIri(quad.graph, writableGraphs));
|
|
285
|
-
target.set(this.quadKey(quad), quad);
|
|
286
|
-
}
|
|
287
|
-
};
|
|
288
|
-
for (const operation of operations) {
|
|
289
|
-
if (operation.type === 'insert') {
|
|
290
|
-
insertQuads(operation.quads);
|
|
291
|
-
continue;
|
|
235
|
+
if (accessScope && !(0, RdfAccessScope_1.rdfAccessGraphAllowed)(graphDelta.graphIri, accessScope)) {
|
|
236
|
+
throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Native prepared update cannot write an RDF graph denied by the current access scope');
|
|
292
237
|
}
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
238
|
+
const identifier = { path: graphDelta.sourceUri };
|
|
239
|
+
if (!this.isByLineRdfIdentifier(identifier)) {
|
|
240
|
+
throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Native prepared update only supports by-line local RDF graph documents');
|
|
296
241
|
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
}
|
|
303
|
-
if (operation.type === 'insertWhere') {
|
|
304
|
-
const rows = this.queryLocalUpdateBindings(currentQuads(), operation.query);
|
|
305
|
-
insertQuads(this.rdfSparqlAdapter.materializeDeleteWhere(operation.inserts, rows));
|
|
306
|
-
continue;
|
|
307
|
-
}
|
|
308
|
-
const rows = this.queryLocalUpdateBindings(currentQuads(), operation.query);
|
|
309
|
-
deleteQuads(this.rdfSparqlAdapter.materializeDeleteWhere(operation.template, rows));
|
|
310
|
-
}
|
|
311
|
-
return new Map(writableGraphIris.map((graphIri) => [graphIri, [...(byGraph.get(graphIri)?.values() ?? [])]]));
|
|
312
|
-
}
|
|
313
|
-
async loadLocalRdfDeltaGraphs(operations, writableGraphIris, localRdfAuthorityIris) {
|
|
314
|
-
const graphIris = this.localRdfDeltaGraphIris(operations, writableGraphIris);
|
|
315
|
-
const graphStates = new Map();
|
|
316
|
-
for (const graphIri of graphIris) {
|
|
317
|
-
const graphIdentifier = { path: graphIri };
|
|
318
|
-
if (!this.isLocalRdfAuthorityIdentifier(graphIdentifier, localRdfAuthorityIris)) {
|
|
319
|
-
throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update only supports by-line local RDF graph documents');
|
|
320
|
-
}
|
|
321
|
-
const existing = await this.readLocalRdfState(graphIdentifier);
|
|
322
|
-
const graph = n3_1.DataFactory.namedNode(graphIri);
|
|
323
|
-
const quads = existing.text.length > 0
|
|
324
|
-
? await this.parseLocalRdf(graphIdentifier, existing.text, this.localRdfContentType(graphIdentifier))
|
|
325
|
-
.then((items) => items.map((quad) => this.toGraphQuad(quad, graph)))
|
|
242
|
+
const previous = await this.readLocalRdfState(identifier);
|
|
243
|
+
const graph = n3_1.DataFactory.namedNode(graphDelta.graphIri);
|
|
244
|
+
const previousQuads = previous.text.length > 0
|
|
245
|
+
? await this.parseLocalRdf(identifier, previous.text, this.localRdfContentType(identifier))
|
|
246
|
+
.then((items) => items.map((item) => this.toGraphQuad(item, graph)))
|
|
326
247
|
: [];
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
:
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
...operation.inserts.map((item) => item.graph),
|
|
343
|
-
...this.queryGraphTerms(operation.query),
|
|
344
|
-
]
|
|
345
|
-
: operation.type === 'insertWhere'
|
|
346
|
-
? [
|
|
347
|
-
...operation.inserts.map((item) => item.graph),
|
|
348
|
-
...this.queryGraphTerms(operation.query),
|
|
349
|
-
]
|
|
350
|
-
: operation.quads.map((quad) => quad.graph);
|
|
351
|
-
for (const graph of graphTerms) {
|
|
352
|
-
this.addNamedGraphIris(graph, graphIris);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
return [...graphIris];
|
|
356
|
-
}
|
|
357
|
-
localRdfDeltaWriteGraphIris(operations, localRdfAuthorityIris) {
|
|
358
|
-
const graphIris = new Set();
|
|
359
|
-
for (const operation of operations) {
|
|
360
|
-
if (operation.type === 'deleteWhere') {
|
|
361
|
-
this.addWritableTemplateGraphIris(operation.template.map((item) => item.graph), operation.query, graphIris, localRdfAuthorityIris);
|
|
362
|
-
continue;
|
|
363
|
-
}
|
|
364
|
-
if (operation.type === 'insertDeleteWhere') {
|
|
365
|
-
this.addWritableTemplateGraphIris([
|
|
366
|
-
...operation.deletes.map((item) => item.graph),
|
|
367
|
-
...operation.inserts.map((item) => item.graph),
|
|
368
|
-
], operation.query, graphIris, localRdfAuthorityIris);
|
|
369
|
-
continue;
|
|
370
|
-
}
|
|
371
|
-
if (operation.type === 'insertWhere') {
|
|
372
|
-
this.addWritableTemplateGraphIris(operation.inserts.map((item) => item.graph), operation.query, graphIris, localRdfAuthorityIris);
|
|
373
|
-
continue;
|
|
374
|
-
}
|
|
375
|
-
const graphTerms = operation.quads.map((quad) => quad.graph);
|
|
376
|
-
for (const graph of graphTerms) {
|
|
377
|
-
this.addWritableNamedGraphIri(graph, graphIris, localRdfAuthorityIris);
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
if (graphIris.size === 0) {
|
|
381
|
-
throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update requires explicit local RDF graph write targets');
|
|
382
|
-
}
|
|
383
|
-
return [...graphIris];
|
|
384
|
-
}
|
|
385
|
-
addWritableTemplateGraphIris(graphs, query, graphIris, localRdfAuthorityIris) {
|
|
386
|
-
for (const graph of graphs) {
|
|
387
|
-
if (this.isQueryVariable(graph)) {
|
|
388
|
-
this.addWritableGraphVariableIris(query, graph.variable, graphIris, localRdfAuthorityIris);
|
|
389
|
-
continue;
|
|
390
|
-
}
|
|
391
|
-
this.addWritableNamedGraphIri(graph, graphIris, localRdfAuthorityIris);
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
addWritableGraphVariableIris(query, variable, graphIris, localRdfAuthorityIris) {
|
|
395
|
-
const values = new Set();
|
|
396
|
-
this.collectGraphVariableFilterIris(query, variable, values);
|
|
397
|
-
if (values.size === 0) {
|
|
398
|
-
throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update only supports finite GRAPH variable write targets');
|
|
399
|
-
}
|
|
400
|
-
for (const value of values) {
|
|
401
|
-
this.addWritableNamedGraphIri(n3_1.DataFactory.namedNode(value), graphIris, localRdfAuthorityIris);
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
localRdfWriteGraphIri(graph, writableGraphs) {
|
|
405
|
-
if (graph.termType !== 'NamedNode' || !writableGraphs.has(graph.value)) {
|
|
406
|
-
throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update can only write declared local RDF graph documents');
|
|
407
|
-
}
|
|
408
|
-
return graph.value;
|
|
409
|
-
}
|
|
410
|
-
queryLocalUpdateBindings(quads, query) {
|
|
411
|
-
const index = new RdfQuadIndex_1.RdfQuadIndex({ path: ':memory:' });
|
|
412
|
-
index.open();
|
|
413
|
-
try {
|
|
414
|
-
const engine = new SolidRdfEngine_1.SolidRdfEngine({ index });
|
|
415
|
-
engine.put(quads);
|
|
416
|
-
return engine.query(query).bindings;
|
|
417
|
-
}
|
|
418
|
-
finally {
|
|
419
|
-
index.close();
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
queryGraphTerms(query) {
|
|
423
|
-
const graphTerms = [];
|
|
424
|
-
const graphVariables = new Set();
|
|
425
|
-
this.collectQueryGraphTerms(query, graphTerms, graphVariables);
|
|
426
|
-
this.collectGraphVariableFilterTerms(query, graphVariables, graphTerms);
|
|
427
|
-
return graphTerms;
|
|
428
|
-
}
|
|
429
|
-
collectQueryGraphTerms(query, graphTerms, graphVariables) {
|
|
430
|
-
for (const pattern of query.patterns) {
|
|
431
|
-
if (!pattern.graph) {
|
|
432
|
-
continue;
|
|
433
|
-
}
|
|
434
|
-
graphTerms.push(pattern.graph);
|
|
435
|
-
if (this.isQueryVariable(pattern.graph)) {
|
|
436
|
-
graphVariables.add(pattern.graph.variable);
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
for (const optional of query.optional ?? []) {
|
|
440
|
-
this.collectQueryGraphTerms(Array.isArray(optional) ? { patterns: optional } : optional, graphTerms, graphVariables);
|
|
441
|
-
}
|
|
442
|
-
for (const union of query.unions ?? []) {
|
|
443
|
-
for (const branch of union.branches) {
|
|
444
|
-
this.collectQueryGraphTerms(branch, graphTerms, graphVariables);
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
for (const minus of query.minus ?? []) {
|
|
448
|
-
this.collectQueryGraphTerms(minus, graphTerms, graphVariables);
|
|
449
|
-
}
|
|
450
|
-
for (const exists of query.exists ?? []) {
|
|
451
|
-
this.collectQueryGraphTerms(exists, graphTerms, graphVariables);
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
collectGraphVariableFilterTerms(query, graphVariables, graphTerms) {
|
|
455
|
-
for (const filter of query.filters ?? []) {
|
|
456
|
-
if (!graphVariables.has(filter.variable)) {
|
|
457
|
-
continue;
|
|
458
|
-
}
|
|
459
|
-
if (filter.value && this.isRdfTerm(filter.value)) {
|
|
460
|
-
graphTerms.push(filter.value);
|
|
461
|
-
}
|
|
462
|
-
for (const value of filter.values ?? []) {
|
|
463
|
-
if (this.isRdfTerm(value)) {
|
|
464
|
-
graphTerms.push(value);
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
this.collectGraphVariableValueTerms(query.values ?? [], graphVariables, graphTerms);
|
|
469
|
-
for (const optional of query.optional ?? []) {
|
|
470
|
-
if (!Array.isArray(optional)) {
|
|
471
|
-
this.collectGraphVariableFilterTerms(optional, graphVariables, graphTerms);
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
for (const union of query.unions ?? []) {
|
|
475
|
-
for (const branch of union.branches) {
|
|
476
|
-
this.collectGraphVariableFilterTerms(branch, graphVariables, graphTerms);
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
for (const minus of query.minus ?? []) {
|
|
480
|
-
this.collectGraphVariableFilterTerms(minus, graphVariables, graphTerms);
|
|
481
|
-
}
|
|
482
|
-
for (const exists of query.exists ?? []) {
|
|
483
|
-
this.collectGraphVariableFilterTerms(exists, graphVariables, graphTerms);
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
collectGraphVariableFilterIris(query, variable, values) {
|
|
487
|
-
for (const filter of query.filters ?? []) {
|
|
488
|
-
if (filter.variable !== variable) {
|
|
489
|
-
continue;
|
|
490
|
-
}
|
|
491
|
-
if ((filter.operator === '$eq' || filter.operator === '$sameTerm') && filter.value && this.isRdfTerm(filter.value)) {
|
|
492
|
-
this.addGraphFilterValueIri(filter.value, values);
|
|
493
|
-
}
|
|
494
|
-
if (filter.operator === '$in') {
|
|
495
|
-
for (const value of filter.values ?? []) {
|
|
496
|
-
if (this.isRdfTerm(value)) {
|
|
497
|
-
this.addGraphFilterValueIri(value, values);
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
this.collectGraphVariableValueIris(query.values ?? [], variable, values);
|
|
503
|
-
for (const optional of query.optional ?? []) {
|
|
504
|
-
if (!Array.isArray(optional)) {
|
|
505
|
-
this.collectGraphVariableFilterIris(optional, variable, values);
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
for (const union of query.unions ?? []) {
|
|
509
|
-
for (const branch of union.branches) {
|
|
510
|
-
this.collectGraphVariableFilterIris(branch, variable, values);
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
for (const minus of query.minus ?? []) {
|
|
514
|
-
this.collectGraphVariableFilterIris(minus, variable, values);
|
|
515
|
-
}
|
|
516
|
-
for (const exists of query.exists ?? []) {
|
|
517
|
-
this.collectGraphVariableFilterIris(exists, variable, values);
|
|
518
|
-
}
|
|
519
|
-
}
|
|
520
|
-
collectGraphVariableValueTerms(sources, graphVariables, graphTerms) {
|
|
521
|
-
for (const source of sources) {
|
|
522
|
-
for (const variable of source.variables) {
|
|
523
|
-
if (!graphVariables.has(variable)) {
|
|
524
|
-
continue;
|
|
525
|
-
}
|
|
526
|
-
for (const row of source.rows) {
|
|
527
|
-
const value = row[variable];
|
|
528
|
-
if (value) {
|
|
529
|
-
graphTerms.push(value);
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
collectGraphVariableValueIris(sources, variable, values) {
|
|
536
|
-
for (const source of sources) {
|
|
537
|
-
if (!source.variables.includes(variable)) {
|
|
538
|
-
continue;
|
|
539
|
-
}
|
|
540
|
-
for (const row of source.rows) {
|
|
541
|
-
const value = row[variable];
|
|
542
|
-
if (value) {
|
|
543
|
-
this.addGraphFilterValueIri(value, values);
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
addGraphFilterValueIri(value, values) {
|
|
549
|
-
if (value.termType !== 'NamedNode') {
|
|
550
|
-
throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update GRAPH variable write targets must be named graph documents');
|
|
551
|
-
}
|
|
552
|
-
values.add(value.value);
|
|
553
|
-
}
|
|
554
|
-
addNamedGraphIris(graph, graphIris) {
|
|
555
|
-
if (this.isRdfTerm(graph)) {
|
|
556
|
-
if (graph.termType !== 'NamedNode') {
|
|
557
|
-
throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update only supports named graph documents');
|
|
558
|
-
}
|
|
559
|
-
graphIris.add(graph.value);
|
|
560
|
-
return;
|
|
561
|
-
}
|
|
562
|
-
const values = graph.$in;
|
|
563
|
-
if (Array.isArray(values) && values.every((value) => this.isRdfTerm(value))) {
|
|
564
|
-
for (const value of values) {
|
|
565
|
-
if (value.termType !== 'NamedNode') {
|
|
566
|
-
throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update only supports named graph documents');
|
|
567
|
-
}
|
|
568
|
-
graphIris.add(value.value);
|
|
569
|
-
}
|
|
570
|
-
return;
|
|
571
|
-
}
|
|
572
|
-
if (this.isQueryVariable(graph)) {
|
|
573
|
-
return;
|
|
248
|
+
const next = new Map(previousQuads.map((item) => [this.quadKey(item), item]));
|
|
249
|
+
for (const item of graphDelta.deletes) {
|
|
250
|
+
this.assertPreparedDeltaQuadGraph(item, graphDelta.graphIri);
|
|
251
|
+
next.delete(this.quadKey(item));
|
|
252
|
+
}
|
|
253
|
+
for (const item of graphDelta.inserts) {
|
|
254
|
+
this.assertPreparedDeltaQuadGraph(item, graphDelta.graphIri);
|
|
255
|
+
next.set(this.quadKey(item), item);
|
|
256
|
+
}
|
|
257
|
+
patches.push({
|
|
258
|
+
identifier,
|
|
259
|
+
previousQuads,
|
|
260
|
+
previousExists: previous.existed,
|
|
261
|
+
nextQuads: [...next.values()],
|
|
262
|
+
});
|
|
574
263
|
}
|
|
575
|
-
|
|
264
|
+
await this.writeLocalRdfAuthorityPatches(patches);
|
|
265
|
+
return patches.map((patch) => patch.identifier);
|
|
576
266
|
}
|
|
577
|
-
|
|
578
|
-
if (
|
|
579
|
-
throw new
|
|
267
|
+
assertPreparedDeltaQuadGraph(quad, graphIri) {
|
|
268
|
+
if (quad.graph.termType !== 'NamedNode' || quad.graph.value !== graphIri) {
|
|
269
|
+
throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Native prepared update contains a quad outside its declared writable graph');
|
|
580
270
|
}
|
|
581
|
-
if (!this.isLocalRdfAuthorityIdentifier({ path: graph.value }, localRdfAuthorityIris)) {
|
|
582
|
-
throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update only supports by-line local RDF graph write targets');
|
|
583
|
-
}
|
|
584
|
-
graphIris.add(graph.value);
|
|
585
|
-
}
|
|
586
|
-
isLocalRdfAuthorityIdentifier(identifier, localRdfAuthorityIris) {
|
|
587
|
-
return this.isByLineRdfIdentifier(identifier) || localRdfAuthorityIris.has(identifier.path);
|
|
588
|
-
}
|
|
589
|
-
isQueryVariable(value) {
|
|
590
|
-
return Boolean(value && typeof value === 'object' && 'variable' in value);
|
|
591
|
-
}
|
|
592
|
-
isRdfTerm(value) {
|
|
593
|
-
return Boolean(value && typeof value === 'object' && 'termType' in value);
|
|
594
271
|
}
|
|
595
272
|
async readLocalRdfState(identifier) {
|
|
596
273
|
try {
|
|
@@ -648,7 +325,10 @@ class MixDataAccessor {
|
|
|
648
325
|
}
|
|
649
326
|
catch (error) {
|
|
650
327
|
await this.markLocalRdfAuthorityJournalFailure(journalPatches, error);
|
|
651
|
-
await this.rollbackLocalRdfAuthorityPatches(applied);
|
|
328
|
+
const rollbackFailures = await this.rollbackLocalRdfAuthorityPatches(applied);
|
|
329
|
+
if (rollbackFailures.length === 0) {
|
|
330
|
+
await this.markLocalRdfAuthorityRollbackComplete(journalPatches, error);
|
|
331
|
+
}
|
|
652
332
|
throw error;
|
|
653
333
|
}
|
|
654
334
|
}
|
|
@@ -703,6 +383,20 @@ class MixDataAccessor {
|
|
|
703
383
|
}
|
|
704
384
|
}
|
|
705
385
|
}
|
|
386
|
+
async markLocalRdfAuthorityRollbackComplete(journalPatches, error) {
|
|
387
|
+
if (!this.localRdfAuthorityJournal || journalPatches.length === 0) {
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
const message = `Local RDF authority patch failed and was rolled back: ${error instanceof Error ? error.message : String(error)}`;
|
|
391
|
+
for (const journalPatch of journalPatches) {
|
|
392
|
+
try {
|
|
393
|
+
await this.localRdfAuthorityJournal.markFailedPermanent(journalPatch.operation.id, message);
|
|
394
|
+
}
|
|
395
|
+
catch (journalError) {
|
|
396
|
+
this.logger.warn(`Failed to finalize rolled-back local RDF authority journal for ${journalPatch.patch.identifier.path}: ${journalError instanceof Error ? journalError.message : String(journalError)}`);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
706
400
|
localRdfPatchWorkspace(resourcePaths, filePaths) {
|
|
707
401
|
const workspace = commonHttpContainer(resourcePaths) ?? this.parentContainer({ path: resourcePaths[0] }).path;
|
|
708
402
|
const cwd = commonDirectory(filePaths);
|
|
@@ -742,6 +436,7 @@ class MixDataAccessor {
|
|
|
742
436
|
if (failures.length > 0) {
|
|
743
437
|
this.logger.warn(`Failed to fully roll back local RDF authority patch: ${failures.join('; ')}`);
|
|
744
438
|
}
|
|
439
|
+
return failures;
|
|
745
440
|
}
|
|
746
441
|
toDefaultGraphQuad(quad) {
|
|
747
442
|
return n3_1.DataFactory.quad(quad.subject, quad.predicate, quad.object);
|
|
@@ -808,6 +503,7 @@ class MixDataAccessor {
|
|
|
808
503
|
}
|
|
809
504
|
const moved = await sourceScopedAccessor.moveRdfSourceDocument(options.previousSource ?? previousIdentifier.path, this.rdfSourceInput(nextIdentifier, options));
|
|
810
505
|
if (moved > 0) {
|
|
506
|
+
await this.moveSearchIndexes(previousIdentifier, nextIdentifier, options, sourceScopedAccessor);
|
|
811
507
|
this.invalidateMetadataCache(previousIdentifier);
|
|
812
508
|
this.invalidateMetadataCache(nextIdentifier);
|
|
813
509
|
}
|
|
@@ -916,15 +612,72 @@ class MixDataAccessor {
|
|
|
916
612
|
if (!accessor?.indexTextSource) {
|
|
917
613
|
return;
|
|
918
614
|
}
|
|
919
|
-
|
|
615
|
+
await this.deleteVectorIndexIfPresent(accessor, identifier);
|
|
616
|
+
const source = this.rdfTextSourceInput(identifier, text, options);
|
|
920
617
|
await accessor.indexTextSource(source, text, quads ? (0, RdfTextProjection_1.createRdfEntityTextChunks)(source, quads) : undefined);
|
|
618
|
+
await this.rdfSearchIntentSink?.recordTextCommitted(source);
|
|
619
|
+
}
|
|
620
|
+
async syncUnstructuredTextSearchIndex(identifier, text, metadata) {
|
|
621
|
+
if (!this.textSearchIndexingEnabled || !this.isSearchableUnstructuredText(identifier, metadata)) {
|
|
622
|
+
return;
|
|
623
|
+
}
|
|
624
|
+
const accessor = this.sourceScopedStructuredAccessor();
|
|
625
|
+
if (!accessor?.indexTextSource) {
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
628
|
+
await this.deleteVectorIndexIfPresent(accessor, identifier);
|
|
629
|
+
const source = this.rdfTextSourceInput(identifier, text, { contentType: metadata.contentType });
|
|
630
|
+
await accessor.indexTextSource(source, text);
|
|
631
|
+
await this.rdfSearchIntentSink?.recordTextCommitted(source);
|
|
921
632
|
}
|
|
922
633
|
async deleteSearchIndexes(identifier) {
|
|
923
|
-
if (!this.textSearchIndexingEnabled
|
|
634
|
+
if (!this.textSearchIndexingEnabled) {
|
|
924
635
|
return;
|
|
925
636
|
}
|
|
926
637
|
const accessor = this.sourceScopedStructuredAccessor();
|
|
927
638
|
await accessor?.deleteTextSource?.(identifier.path);
|
|
639
|
+
if (accessor) {
|
|
640
|
+
await this.deleteVectorIndexIfPresent(accessor, identifier);
|
|
641
|
+
}
|
|
642
|
+
await this.rdfSearchIntentSink?.recordSourceDeleted(identifier.path);
|
|
643
|
+
}
|
|
644
|
+
async moveSearchIndexes(previousIdentifier, nextIdentifier, options, accessor) {
|
|
645
|
+
if (!this.textSearchIndexingEnabled || !this.isByLineRdfIdentifier(nextIdentifier)) {
|
|
646
|
+
return;
|
|
647
|
+
}
|
|
648
|
+
const previousSource = options.previousSource ?? previousIdentifier.path;
|
|
649
|
+
const nextSource = this.rdfSourceInput(nextIdentifier, options);
|
|
650
|
+
let movedText = 0;
|
|
651
|
+
if (accessor.moveTextSource) {
|
|
652
|
+
movedText = await accessor.moveTextSource(previousSource, nextSource);
|
|
653
|
+
}
|
|
654
|
+
await this.moveVectorIndexIfPresent(accessor, previousSource, nextSource);
|
|
655
|
+
if (movedText > 0) {
|
|
656
|
+
await this.rdfSearchIntentSink?.recordTextCommitted(nextSource);
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
async moveVectorIndexIfPresent(accessor, previousSource, nextSource) {
|
|
660
|
+
try {
|
|
661
|
+
return await accessor.moveVectorSource?.(previousSource, nextSource) ?? 0;
|
|
662
|
+
}
|
|
663
|
+
catch (error) {
|
|
664
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
665
|
+
if (!/vector index is not configured/i.test(message)) {
|
|
666
|
+
throw error;
|
|
667
|
+
}
|
|
668
|
+
return 0;
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
async deleteVectorIndexIfPresent(accessor, identifier) {
|
|
672
|
+
try {
|
|
673
|
+
await accessor.deleteVectorSource?.(identifier.path);
|
|
674
|
+
}
|
|
675
|
+
catch (error) {
|
|
676
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
677
|
+
if (!/vector index is not configured/i.test(message)) {
|
|
678
|
+
throw error;
|
|
679
|
+
}
|
|
680
|
+
}
|
|
928
681
|
}
|
|
929
682
|
rdfSourceInput(identifier, options) {
|
|
930
683
|
const workspace = options.workspace ?? this.parentContainer(identifier).path;
|
|
@@ -936,6 +689,12 @@ class MixDataAccessor {
|
|
|
936
689
|
sourceVersion: options.sourceVersion,
|
|
937
690
|
};
|
|
938
691
|
}
|
|
692
|
+
rdfTextSourceInput(identifier, text, options) {
|
|
693
|
+
return {
|
|
694
|
+
...this.rdfSourceInput(identifier, options),
|
|
695
|
+
sourceHash: `sha256:${(0, node_crypto_1.createHash)('sha256').update(text).digest('hex')}`,
|
|
696
|
+
};
|
|
697
|
+
}
|
|
939
698
|
relativePathFromWorkspace(identifierPath, workspaceValue) {
|
|
940
699
|
try {
|
|
941
700
|
const resource = new URL(identifierPath);
|
|
@@ -955,6 +714,21 @@ class MixDataAccessor {
|
|
|
955
714
|
isRdfDocumentIdentifier(identifier) {
|
|
956
715
|
return (0, RdfContentTypes_1.isRdfDocumentPath)(identifier.path);
|
|
957
716
|
}
|
|
717
|
+
isSearchableUnstructuredText(identifier, metadata) {
|
|
718
|
+
const contentType = (0, RdfContentTypes_1.normalizeContentType)(metadata.contentType);
|
|
719
|
+
if (contentType === 'text/plain' || contentType === 'text/markdown' || contentType === 'text/x-markdown') {
|
|
720
|
+
return true;
|
|
721
|
+
}
|
|
722
|
+
const pathname = (() => {
|
|
723
|
+
try {
|
|
724
|
+
return new URL(identifier.path).pathname;
|
|
725
|
+
}
|
|
726
|
+
catch {
|
|
727
|
+
return identifier.path;
|
|
728
|
+
}
|
|
729
|
+
})().toLowerCase();
|
|
730
|
+
return pathname.endsWith('.md') || pathname.endsWith('.markdown') || pathname.endsWith('.mdown');
|
|
731
|
+
}
|
|
958
732
|
isLocalMirroredRdf(identifier, metadata) {
|
|
959
733
|
return metadata.contentType === community_server_1.INTERNAL_QUADS || this.isRdfDocumentIdentifier(identifier);
|
|
960
734
|
}
|
|
@@ -1010,9 +784,12 @@ class MixDataAccessor {
|
|
|
1010
784
|
* then save metadata in structured accessor.
|
|
1011
785
|
*/
|
|
1012
786
|
async writeUnstructuredDocument(identifier, data, metadata) {
|
|
1013
|
-
|
|
787
|
+
const indexableText = this.textSearchIndexingEnabled && this.isSearchableUnstructuredText(identifier, metadata)
|
|
788
|
+
? await this.readStreamText(data)
|
|
789
|
+
: undefined;
|
|
790
|
+
const writeData = indexableText === undefined ? data : (0, community_server_1.guardStream)(stream_1.Readable.from([indexableText]));
|
|
1014
791
|
// Write the actual data to unstructured storage
|
|
1015
|
-
await this.unstructuredDataAccessor.writeDocument(identifier,
|
|
792
|
+
await this.unstructuredDataAccessor.writeDocument(identifier, writeData, metadata);
|
|
1016
793
|
let updatedMetadata;
|
|
1017
794
|
if (typeof metadata.contentLength === 'number') {
|
|
1018
795
|
updatedMetadata = new community_server_1.RepresentationMetadata(metadata);
|
|
@@ -1031,11 +808,17 @@ class MixDataAccessor {
|
|
|
1031
808
|
// Save metadata to structured storage
|
|
1032
809
|
try {
|
|
1033
810
|
await this.structuredDataAccessor.writeMetadata(identifier, updatedMetadata);
|
|
811
|
+
if (indexableText !== undefined) {
|
|
812
|
+
await this.syncUnstructuredTextSearchIndex(identifier, indexableText, updatedMetadata);
|
|
813
|
+
}
|
|
1034
814
|
}
|
|
1035
815
|
catch (error) {
|
|
1036
816
|
this.logger.error(`Error writing metadata for ${identifier.path}: ${error}`);
|
|
1037
817
|
// Rollback: delete the unstructured data
|
|
1038
818
|
await this.unstructuredDataAccessor.deleteResource(identifier);
|
|
819
|
+
if (indexableText !== undefined) {
|
|
820
|
+
await this.deleteSearchIndexes(identifier);
|
|
821
|
+
}
|
|
1039
822
|
throw error;
|
|
1040
823
|
}
|
|
1041
824
|
}
|