@undefineds.co/xpod 0.3.75 → 0.4.0-rc.140
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 +20 -1
- 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/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 +22 -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-BvBdu_A3.js → AiConfigContext-iQ74JmRZ.js} +1 -1
- package/static/auth-callback/assets/{AiConfigPage-BpDw4jco.js → AiConfigPage-BBDKE1gJ.js} +1 -1
- package/static/auth-callback/assets/{DocumentProcessingPanel-BmZ_jzRr.js → DocumentProcessingPanel-D9NntIEK.js} +1 -1
- package/static/auth-callback/assets/{IndexLifecyclePanel-BfQBjN4z.js → IndexLifecyclePanel-BG07yBdA.js} +1 -1
- package/static/auth-callback/assets/{IndexSubjectPanel-BlsnatPt.js → IndexSubjectPanel-B-bUnU3G.js} +1 -1
- package/static/auth-callback/assets/{ModelAssignmentsPanel-KA6Mdndz.js → ModelAssignmentsPanel-C7I-Nqy-.js} +1 -1
- package/static/auth-callback/assets/{ModelsPage-C7jymyIY.js → ModelsPage-C2hxyrmI.js} +1 -1
- package/static/auth-callback/assets/{NetworkPage-k2ShktNm.js → NetworkPage-IGIc2q1Y.js} +1 -1
- package/static/auth-callback/assets/{PaneListHeader-mLMe_dvU.js → PaneListHeader-CebuPl_g.js} +1 -1
- package/static/auth-callback/assets/{SearchIndexingPanel-CqV9um_t.js → SearchIndexingPanel-6HnZSg00.js} +1 -1
- package/static/auth-callback/assets/{StatusSubjectPanel-BgMBTbr2.js → StatusSubjectPanel-votxBkr5.js} +1 -1
- package/static/auth-callback/assets/{StatusWorkspace-zbSyhdG2.js → StatusWorkspace-Cksl61zX.js} +1 -1
- package/static/auth-callback/assets/{SystemSettingsPage-CtW79nW6.js → SystemSettingsPage-CKZFUaZT.js} +1 -1
- package/static/auth-callback/assets/{SystemSettingsSubjectPanel-ZOPKYUtZ.js → SystemSettingsSubjectPanel-pzfUcCf4.js} +1 -1
- package/static/auth-callback/assets/{activity-BQ-CQE3O.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-Htr_CB_g.js → auth-callback-BxQMd_Mc.js} +39 -39
- package/static/auth-callback/assets/{badge-D5SGTJeO.js → badge-DvW4LUHH.js} +1 -1
- package/static/auth-callback/assets/{download-DK183Ldo.js → download-Cx_uaCR1.js} +1 -1
- package/static/auth-callback/assets/{external-link-LDHy_4bn.js → external-link-D6L6ExH1.js} +1 -1
- package/static/auth-callback/assets/{index-BWrvgHqK.js → index-BAS_hxGu.js} +1 -1
- package/static/auth-callback/assets/{index-2WmlePQ9.js → index-BmBjpCoD.js} +1 -1
- package/static/auth-callback/assets/{index-browser-DUd4E4-x.js → index-browser-pdn4D3M4.js} +1 -1
- package/static/auth-callback/assets/{key-round-ibX79Kr-.js → key-round-BTBzOggq.js} +1 -1
- package/static/auth-callback/assets/{rotate-ccw-B2_VMaiX.js → rotate-ccw-eV7Cx8sB.js} +1 -1
- package/static/auth-callback/assets/{skeleton-F4nrpycc.js → skeleton-Bg4GYgBM.js} +1 -1
- package/static/auth-callback/assets/{waypoints-DImIq93f.js → waypoints-CJbydf0B.js} +1 -1
- package/static/auth-callback/assets/{workspace-layout-IVCSYU21.js → workspace-layout-C6Hh8Xf-.js} +1 -1
- package/static/auth-callback/auth-callback.html +2 -2
- package/static/dashboard/assets/{AiConfigContext-cjjfYTo9.js → AiConfigContext-BkJj28vK.js} +1 -1
- package/static/dashboard/assets/{AiConfigPage-CO0DSD_j.js → AiConfigPage-Cs9B4uyp.js} +1 -1
- package/static/dashboard/assets/{DocumentProcessingPanel-DMGnH8Oj.js → DocumentProcessingPanel-BBWmM7mS.js} +1 -1
- package/static/dashboard/assets/{IndexLifecyclePanel-DSkIOCL5.js → IndexLifecyclePanel-D5xGTT_i.js} +1 -1
- package/static/dashboard/assets/{IndexSubjectPanel-qWN_DbAp.js → IndexSubjectPanel-d-mjDthn.js} +1 -1
- package/static/dashboard/assets/{ModelAssignmentsPanel-DCf83uM3.js → ModelAssignmentsPanel-C-OLNbqf.js} +1 -1
- package/static/dashboard/assets/{ModelsPage-CMnvSrl5.js → ModelsPage-CBrLjuUn.js} +1 -1
- package/static/dashboard/assets/{NetworkPage-C8Gkwclb.js → NetworkPage-BlYk8L1z.js} +1 -1
- package/static/dashboard/assets/{PaneListHeader-BtU_8cDK.js → PaneListHeader-A5oZJQC0.js} +1 -1
- package/static/dashboard/assets/{SearchIndexingPanel-DEn12pNU.js → SearchIndexingPanel-Bs1j8ZP2.js} +1 -1
- package/static/dashboard/assets/{StatusSubjectPanel-B1_ILg2d.js → StatusSubjectPanel-Qao3orvi.js} +1 -1
- package/static/dashboard/assets/{StatusWorkspace-BG6nMNCo.js → StatusWorkspace-rDM0yDtk.js} +1 -1
- package/static/dashboard/assets/{SystemSettingsPage-BnWYIXaM.js → SystemSettingsPage-FPRPkKaR.js} +1 -1
- package/static/dashboard/assets/{SystemSettingsSubjectPanel-C_mYVPWb.js → SystemSettingsSubjectPanel-CjlJAxnX.js} +1 -1
- package/static/dashboard/assets/{activity-DYJ7PdRl.js → activity-CJ5K6hYC.js} +1 -1
- package/static/dashboard/assets/{badge-BIaZco1P.js → badge-L-NMOi1P.js} +1 -1
- package/static/dashboard/assets/dashboard-B_s8Ye5Z.css +1 -0
- package/static/dashboard/assets/{dashboard-Dl40_MEa.js → dashboard-DyjAyYxx.js} +34 -34
- package/static/dashboard/assets/{download-By16k9VK.js → download-Bi4u5K5B.js} +1 -1
- package/static/dashboard/assets/{external-link-B92xOG_d.js → external-link-jmhLDfvT.js} +1 -1
- package/static/dashboard/assets/{index-BajZpJ48.js → index-BoaGJBxf.js} +1 -1
- package/static/dashboard/assets/{index-wsVPom_x.js → index-C22TAEi4.js} +1 -1
- package/static/dashboard/assets/{key-round-Clo5FOwA.js → key-round-Dk1VmMrn.js} +1 -1
- package/static/dashboard/assets/{rotate-ccw-smWSfi1L.js → rotate-ccw-DIfLsSwi.js} +1 -1
- package/static/dashboard/assets/{skeleton-BrTaGeJw.js → skeleton-BGPJMHb-.js} +1 -1
- package/static/dashboard/assets/{waypoints-DGPQInE7.js → waypoints-CY53egpu.js} +1 -1
- package/static/dashboard/assets/{workspace-layout-CPU4XRmb.js → workspace-layout-CoHkcx70.js} +1 -1
- package/static/dashboard/dashboard.html +2 -2
- package/static/settings/assets/{AiConfigContext-CT29_OyW.js → AiConfigContext-BcEPlEJe.js} +1 -1
- package/static/settings/assets/{AiConfigPage-WIE95S28.js → AiConfigPage-D-t3ZUhg.js} +1 -1
- package/static/settings/assets/{DocumentProcessingPanel-KG8Sq999.js → DocumentProcessingPanel-m2SasiMO.js} +1 -1
- package/static/settings/assets/{IndexLifecyclePanel-iKvtHDXY.js → IndexLifecyclePanel-BNmAvx8V.js} +1 -1
- package/static/settings/assets/{IndexSubjectPanel-BQdSCkk4.js → IndexSubjectPanel-C5-L2AcW.js} +1 -1
- package/static/settings/assets/{ModelAssignmentsPanel-P8QcVB0F.js → ModelAssignmentsPanel-Cfpkf02Y.js} +1 -1
- package/static/settings/assets/{ModelsPage-UZkZGqor.js → ModelsPage-DZrACwVN.js} +1 -1
- package/static/settings/assets/{NetworkPage-Dcpcvg15.js → NetworkPage-BlrGGfqL.js} +1 -1
- package/static/settings/assets/{PaneListHeader--gHtZws5.js → PaneListHeader-C3TCs1RI.js} +1 -1
- package/static/settings/assets/{SearchIndexingPanel-DdgJSJYQ.js → SearchIndexingPanel-Cyp3CUzX.js} +1 -1
- package/static/settings/assets/{StatusSubjectPanel-UOxp_XVL.js → StatusSubjectPanel-gRkb8WEX.js} +1 -1
- package/static/settings/assets/{StatusWorkspace-CPNXuD12.js → StatusWorkspace-Dptx4Ec2.js} +1 -1
- package/static/settings/assets/{SystemSettingsPage-B6ySeVPw.js → SystemSettingsPage-BWgGUQbs.js} +1 -1
- package/static/settings/assets/{SystemSettingsSubjectPanel-I7zWmpiI.js → SystemSettingsSubjectPanel-VflUvpgC.js} +1 -1
- package/static/settings/assets/{activity-CFhmzahP.js → activity-D7iNhTkQ.js} +1 -1
- package/static/settings/assets/{badge-BBdUc5B-.js → badge-DO0r_RT4.js} +1 -1
- package/static/settings/assets/{download-WJE9-yxQ.js → download-CsJlNSbd.js} +1 -1
- package/static/settings/assets/{external-link-RKoYyCp_.js → external-link-BCR7SHme.js} +1 -1
- package/static/settings/assets/{index-Bq2o0Bif.js → index-Cgq16ekN.js} +1 -1
- package/static/settings/assets/{index-DvxneI5O.js → index-SrhQvcrU.js} +1 -1
- package/static/settings/assets/{index-browser-Qmo6EsFT.js → index-browser-THpcMCnz.js} +1 -1
- package/static/settings/assets/{key-round-r-D9sQUK.js → key-round-Dd3jk1BT.js} +1 -1
- package/static/settings/assets/{rotate-ccw-D3IIhbPH.js → rotate-ccw-tiL14i1d.js} +1 -1
- package/static/settings/assets/settings-B_s8Ye5Z.css +1 -0
- package/static/settings/assets/{settings-D8oDBXWg.js → settings-CVLDPejo.js} +34 -34
- package/static/settings/assets/{skeleton-DrL4RQuw.js → skeleton-DBxLuNgU.js} +1 -1
- package/static/settings/assets/{waypoints-C5sRhpJw.js → waypoints-DS3e3hv7.js} +1 -1
- package/static/settings/assets/{workspace-layout-B4ALmWsM.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
|
@@ -18,18 +18,6 @@
|
|
|
18
18
|
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor_rdfEngine",
|
|
19
19
|
"range": "undefineds:dist/storage/rdf/types.jsonld#RdfEngineLike"
|
|
20
20
|
},
|
|
21
|
-
{
|
|
22
|
-
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor_legacyIndex",
|
|
23
|
-
"range": {
|
|
24
|
-
"@type": "ParameterRangeUnion",
|
|
25
|
-
"parameterRangeElements": [
|
|
26
|
-
"undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore",
|
|
27
|
-
{
|
|
28
|
-
"@type": "ParameterRangeUndefined"
|
|
29
|
-
}
|
|
30
|
-
]
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
21
|
{
|
|
34
22
|
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor_identifierStrategy",
|
|
35
23
|
"range": "css:dist/util/identifiers/IdentifierStrategy.jsonld#IdentifierStrategy"
|
|
@@ -44,10 +32,6 @@
|
|
|
44
32
|
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_identifierStrategy",
|
|
45
33
|
"memberFieldName": "identifierStrategy"
|
|
46
34
|
},
|
|
47
|
-
{
|
|
48
|
-
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_legacyIndex",
|
|
49
|
-
"memberFieldName": "legacyIndex"
|
|
50
|
-
},
|
|
51
35
|
{
|
|
52
36
|
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_logger",
|
|
53
37
|
"memberFieldName": "logger",
|
|
@@ -56,8 +40,8 @@
|
|
|
56
40
|
}
|
|
57
41
|
},
|
|
58
42
|
{
|
|
59
|
-
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#
|
|
60
|
-
"memberFieldName": "
|
|
43
|
+
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_sparqlAdapter",
|
|
44
|
+
"memberFieldName": "sparqlAdapter"
|
|
61
45
|
},
|
|
62
46
|
{
|
|
63
47
|
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_initialized",
|
|
@@ -115,6 +99,10 @@
|
|
|
115
99
|
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_deleteTextSource",
|
|
116
100
|
"memberFieldName": "deleteTextSource"
|
|
117
101
|
},
|
|
102
|
+
{
|
|
103
|
+
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_moveTextSource",
|
|
104
|
+
"memberFieldName": "moveTextSource"
|
|
105
|
+
},
|
|
118
106
|
{
|
|
119
107
|
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_moveRdfSourceDocument",
|
|
120
108
|
"memberFieldName": "moveRdfSourceDocument"
|
|
@@ -127,6 +115,10 @@
|
|
|
127
115
|
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_deleteVectorSource",
|
|
128
116
|
"memberFieldName": "deleteVectorSource"
|
|
129
117
|
},
|
|
118
|
+
{
|
|
119
|
+
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_moveVectorSource",
|
|
120
|
+
"memberFieldName": "moveVectorSource"
|
|
121
|
+
},
|
|
130
122
|
{
|
|
131
123
|
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_deleteRdfSourceDocument",
|
|
132
124
|
"memberFieldName": "deleteRdfSourceDocument"
|
|
@@ -144,16 +136,12 @@
|
|
|
144
136
|
"memberFieldName": "getDataByGraphPrefix"
|
|
145
137
|
},
|
|
146
138
|
{
|
|
147
|
-
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#
|
|
148
|
-
"memberFieldName": "
|
|
139
|
+
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_prepareSparqlUpdate",
|
|
140
|
+
"memberFieldName": "prepareSparqlUpdate"
|
|
149
141
|
},
|
|
150
142
|
{
|
|
151
|
-
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#
|
|
152
|
-
"memberFieldName": "
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_deleteMaterialized",
|
|
156
|
-
"memberFieldName": "deleteMaterialized"
|
|
143
|
+
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_prepareEmbeddedSparqlUpdate",
|
|
144
|
+
"memberFieldName": "prepareEmbeddedSparqlUpdate"
|
|
157
145
|
},
|
|
158
146
|
{
|
|
159
147
|
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor__member_getRelatedNames",
|
|
@@ -190,9 +178,6 @@
|
|
|
190
178
|
},
|
|
191
179
|
{
|
|
192
180
|
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor_identifierStrategy"
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor_legacyIndex"
|
|
196
181
|
}
|
|
197
182
|
]
|
|
198
183
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { RdfNativeSparqlQueryOptions, RdfNativeSparqlResult } from './types';
|
|
2
|
+
export type LocalQleverRuntimeErrorCode = 'qlever_runtime_unavailable' | 'qlever_runtime_protocol_error' | 'qlever_runtime_closed' | 'qlever_request_timeout' | 'qlever_request_aborted' | 'qlever_remote_error';
|
|
3
|
+
export declare class LocalQleverRuntimeError extends Error {
|
|
4
|
+
readonly code: LocalQleverRuntimeErrorCode | string;
|
|
5
|
+
readonly cause?: unknown;
|
|
6
|
+
constructor(code: LocalQleverRuntimeErrorCode | string, message: string, cause?: unknown);
|
|
7
|
+
}
|
|
8
|
+
export interface LocalQleverNativeSparqlClientOptions {
|
|
9
|
+
command?: string;
|
|
10
|
+
args?: string[];
|
|
11
|
+
cwd?: string;
|
|
12
|
+
env?: Record<string, string | undefined>;
|
|
13
|
+
expectedNativeSparqlAbiVersion?: number;
|
|
14
|
+
expectedPhysicalBackendAbiVersion?: number;
|
|
15
|
+
startupTimeoutMs?: number;
|
|
16
|
+
requestTimeoutMs?: number;
|
|
17
|
+
maxStderrBytes?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function resolveLocalQleverRuntimeCommand(env?: NodeJS.ProcessEnv): string;
|
|
20
|
+
export declare function requiresWindowsCommandShell(command: string, platform?: NodeJS.Platform): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Persistent JSONL transport for the packaged Local QLever runtime.
|
|
23
|
+
*
|
|
24
|
+
* The runtime owns QLever and the SQLite physical provider. This client owns
|
|
25
|
+
* only process lifecycle, request correlation, cancellation, and native result
|
|
26
|
+
* envelope validation. It never parses or evaluates SPARQL.
|
|
27
|
+
*/
|
|
28
|
+
export declare class LocalQleverNativeSparqlClient {
|
|
29
|
+
private readonly options;
|
|
30
|
+
private child?;
|
|
31
|
+
private reader?;
|
|
32
|
+
private startup?;
|
|
33
|
+
private startPromise?;
|
|
34
|
+
private readonly pending;
|
|
35
|
+
private nextRequestId;
|
|
36
|
+
private stderrTail;
|
|
37
|
+
private ready;
|
|
38
|
+
private closed;
|
|
39
|
+
private failedProcessCleanup?;
|
|
40
|
+
constructor(options?: LocalQleverNativeSparqlClientOptions);
|
|
41
|
+
start(): Promise<void>;
|
|
42
|
+
query(sparql: string, options: RdfNativeSparqlQueryOptions): Promise<RdfNativeSparqlResult>;
|
|
43
|
+
close(): Promise<void>;
|
|
44
|
+
private waitForStart;
|
|
45
|
+
private handleLine;
|
|
46
|
+
private failProcess;
|
|
47
|
+
private awaitFailedProcessCleanup;
|
|
48
|
+
private cleanupPending;
|
|
49
|
+
private writeMessage;
|
|
50
|
+
private cancelRequest;
|
|
51
|
+
private appendStderr;
|
|
52
|
+
private runtimeUnavailable;
|
|
53
|
+
private startupTimeoutMs;
|
|
54
|
+
private requestTimeoutMs;
|
|
55
|
+
}
|
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LocalQleverNativeSparqlClient = exports.LocalQleverRuntimeError = void 0;
|
|
4
|
+
exports.resolveLocalQleverRuntimeCommand = resolveLocalQleverRuntimeCommand;
|
|
5
|
+
exports.requiresWindowsCommandShell = requiresWindowsCommandShell;
|
|
6
|
+
const node_child_process_1 = require("node:child_process");
|
|
7
|
+
const node_readline_1 = require("node:readline");
|
|
8
|
+
class LocalQleverRuntimeError extends Error {
|
|
9
|
+
constructor(code, message, cause) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = 'LocalQleverRuntimeError';
|
|
12
|
+
this.code = code;
|
|
13
|
+
this.cause = cause;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.LocalQleverRuntimeError = LocalQleverRuntimeError;
|
|
17
|
+
const DEFAULT_STARTUP_TIMEOUT_MS = 10_000;
|
|
18
|
+
const DEFAULT_REQUEST_TIMEOUT_MS = 60_000;
|
|
19
|
+
const DEFAULT_MAX_STDERR_BYTES = 64 * 1024;
|
|
20
|
+
const GRACEFUL_SHUTDOWN_TIMEOUT_MS = 5_000;
|
|
21
|
+
const FORCED_SHUTDOWN_TIMEOUT_MS = 5_000;
|
|
22
|
+
const NATIVE_SPARQL_ABI_VERSION = 1;
|
|
23
|
+
const PHYSICAL_BACKEND_ABI_VERSION = 7;
|
|
24
|
+
const DEFAULT_LOCAL_QLEVER_RUNTIME_COMMAND = '/opt/xpod/qlever/bin/xpod_qlever_local_runtime';
|
|
25
|
+
function resolveLocalQleverRuntimeCommand(env = process.env) {
|
|
26
|
+
const configured = env.XPOD_QLEVER_LOCAL_RUNTIME_COMMAND?.trim();
|
|
27
|
+
return configured || DEFAULT_LOCAL_QLEVER_RUNTIME_COMMAND;
|
|
28
|
+
}
|
|
29
|
+
function requiresWindowsCommandShell(command, platform = process.platform) {
|
|
30
|
+
return platform === 'win32' && /\.(?:cmd|bat)$/iu.test(command);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Persistent JSONL transport for the packaged Local QLever runtime.
|
|
34
|
+
*
|
|
35
|
+
* The runtime owns QLever and the SQLite physical provider. This client owns
|
|
36
|
+
* only process lifecycle, request correlation, cancellation, and native result
|
|
37
|
+
* envelope validation. It never parses or evaluates SPARQL.
|
|
38
|
+
*/
|
|
39
|
+
class LocalQleverNativeSparqlClient {
|
|
40
|
+
constructor(options = {}) {
|
|
41
|
+
this.pending = new Map();
|
|
42
|
+
this.nextRequestId = 1;
|
|
43
|
+
this.stderrTail = '';
|
|
44
|
+
this.ready = false;
|
|
45
|
+
this.closed = false;
|
|
46
|
+
this.options = {
|
|
47
|
+
...options,
|
|
48
|
+
command: options.command?.trim() || resolveLocalQleverRuntimeCommand({
|
|
49
|
+
...process.env,
|
|
50
|
+
...options.env,
|
|
51
|
+
}),
|
|
52
|
+
};
|
|
53
|
+
if (!isPositiveInteger(options.expectedNativeSparqlAbiVersion ?? NATIVE_SPARQL_ABI_VERSION)) {
|
|
54
|
+
throw new TypeError('Local QLever native SPARQL ABI version must be a positive integer');
|
|
55
|
+
}
|
|
56
|
+
if (!isPositiveInteger(options.expectedPhysicalBackendAbiVersion ?? PHYSICAL_BACKEND_ABI_VERSION)) {
|
|
57
|
+
throw new TypeError('Local QLever physical backend ABI version must be a positive integer');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
start() {
|
|
61
|
+
if (this.closed) {
|
|
62
|
+
return Promise.reject(new LocalQleverRuntimeError('qlever_runtime_closed', 'Local QLever runtime client is closed'));
|
|
63
|
+
}
|
|
64
|
+
if (this.ready && this.child) {
|
|
65
|
+
return Promise.resolve();
|
|
66
|
+
}
|
|
67
|
+
if (this.startPromise) {
|
|
68
|
+
return this.startPromise;
|
|
69
|
+
}
|
|
70
|
+
this.stderrTail = '';
|
|
71
|
+
this.startPromise = new Promise((resolve, reject) => {
|
|
72
|
+
let child;
|
|
73
|
+
try {
|
|
74
|
+
child = (0, node_child_process_1.spawn)(this.options.command, this.options.args ?? [], {
|
|
75
|
+
cwd: this.options.cwd,
|
|
76
|
+
env: this.options.env ? { ...process.env, ...this.options.env } : process.env,
|
|
77
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
78
|
+
windowsHide: true,
|
|
79
|
+
shell: requiresWindowsCommandShell(this.options.command),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
this.startPromise = undefined;
|
|
84
|
+
reject(this.runtimeUnavailable('Failed to start Local QLever runtime', error));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
this.child = child;
|
|
88
|
+
this.reader = (0, node_readline_1.createInterface)({ input: child.stdout });
|
|
89
|
+
const timeout = setTimeout(() => {
|
|
90
|
+
this.failProcess(child, this.runtimeUnavailable(`Local QLever runtime did not become ready within ${this.startupTimeoutMs()}ms`));
|
|
91
|
+
}, this.startupTimeoutMs());
|
|
92
|
+
this.startup = { child, resolve, reject, timeout };
|
|
93
|
+
this.reader.on('line', (line) => this.handleLine(child, line));
|
|
94
|
+
child.stderr.setEncoding('utf8');
|
|
95
|
+
child.stderr.on('data', (chunk) => this.appendStderr(chunk));
|
|
96
|
+
child.stdin.on('error', (error) => {
|
|
97
|
+
this.failProcess(child, this.runtimeUnavailable('Local QLever runtime stdin failed', error));
|
|
98
|
+
});
|
|
99
|
+
child.once('error', (error) => {
|
|
100
|
+
this.failProcess(child, this.runtimeUnavailable('Local QLever runtime process failed', error));
|
|
101
|
+
});
|
|
102
|
+
// `close` fires after stdio has drained. Waiting for it preserves the
|
|
103
|
+
// runtime's final stderr diagnostics in the error returned to callers.
|
|
104
|
+
child.once('close', (code, signal) => {
|
|
105
|
+
const detail = signal ? `signal ${signal}` : `code ${String(code)}`;
|
|
106
|
+
this.failProcess(child, this.runtimeUnavailable(`Local QLever runtime exited with ${detail}`));
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
return this.startPromise;
|
|
110
|
+
}
|
|
111
|
+
async query(sparql, options) {
|
|
112
|
+
if (options.signal?.aborted) {
|
|
113
|
+
throw abortError(options.signal);
|
|
114
|
+
}
|
|
115
|
+
validateNativeSparqlQueryOptions(options);
|
|
116
|
+
await this.waitForStart(options.signal);
|
|
117
|
+
if (options.signal?.aborted) {
|
|
118
|
+
throw abortError(options.signal);
|
|
119
|
+
}
|
|
120
|
+
const child = this.child;
|
|
121
|
+
if (!child || !this.ready) {
|
|
122
|
+
throw this.runtimeUnavailable('Local QLever runtime is unavailable');
|
|
123
|
+
}
|
|
124
|
+
const id = String(this.nextRequestId++);
|
|
125
|
+
const timeoutMs = options.timeoutMs ?? this.requestTimeoutMs();
|
|
126
|
+
const wireOptions = {
|
|
127
|
+
basePath: options.basePath,
|
|
128
|
+
...(options.sourceUri === undefined ? {} : { sourceUri: options.sourceUri }),
|
|
129
|
+
...(options.defaultDataset === undefined ? {} : { defaultDataset: options.defaultDataset }),
|
|
130
|
+
...(options.operation === undefined ? {} : { operation: options.operation }),
|
|
131
|
+
...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),
|
|
132
|
+
...(options.acceptMediaType === undefined ? {} : { acceptMediaType: options.acceptMediaType }),
|
|
133
|
+
...(options.loadDocument === undefined ? {} : { loadDocument: options.loadDocument }),
|
|
134
|
+
...(options.accessScope === undefined ? {} : { accessScope: options.accessScope }),
|
|
135
|
+
...(options.vectorQuery === undefined ? {} : { vectorQuery: options.vectorQuery }),
|
|
136
|
+
};
|
|
137
|
+
return new Promise((resolve, reject) => {
|
|
138
|
+
const pending = { resolve, reject };
|
|
139
|
+
if (timeoutMs > 0) {
|
|
140
|
+
pending.timeout = setTimeout(() => {
|
|
141
|
+
if (!this.pending.delete(id)) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
this.cleanupPending(pending);
|
|
145
|
+
this.cancelRequest(child, id);
|
|
146
|
+
reject(new LocalQleverRuntimeError('qlever_request_timeout', `Local QLever request ${id} timed out after ${timeoutMs}ms`));
|
|
147
|
+
}, timeoutMs);
|
|
148
|
+
}
|
|
149
|
+
if (options.signal) {
|
|
150
|
+
pending.signal = options.signal;
|
|
151
|
+
pending.abortHandler = () => {
|
|
152
|
+
if (!this.pending.delete(id)) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
this.cleanupPending(pending);
|
|
156
|
+
this.cancelRequest(child, id);
|
|
157
|
+
reject(abortError(options.signal));
|
|
158
|
+
};
|
|
159
|
+
options.signal.addEventListener('abort', pending.abortHandler, { once: true });
|
|
160
|
+
}
|
|
161
|
+
this.pending.set(id, pending);
|
|
162
|
+
try {
|
|
163
|
+
this.writeMessage(child, {
|
|
164
|
+
id,
|
|
165
|
+
type: 'query',
|
|
166
|
+
sparql,
|
|
167
|
+
options: wireOptions,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
this.pending.delete(id);
|
|
172
|
+
this.cleanupPending(pending);
|
|
173
|
+
reject(this.runtimeUnavailable('Failed to write Local QLever request', error));
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
async close() {
|
|
178
|
+
if (this.closed) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
this.closed = true;
|
|
182
|
+
const child = this.child;
|
|
183
|
+
if (!child) {
|
|
184
|
+
await this.awaitFailedProcessCleanup();
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
this.writeMessage(child, { type: 'shutdown' });
|
|
189
|
+
child.stdin.end();
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
// Closing is best-effort; failProcess below owns deterministic cleanup.
|
|
193
|
+
}
|
|
194
|
+
const closed = waitForChildClose(child);
|
|
195
|
+
this.failProcess(child, new LocalQleverRuntimeError('qlever_runtime_closed', 'Local QLever runtime client closed'), false);
|
|
196
|
+
if (await waitForCloseOrTimeout(closed, GRACEFUL_SHUTDOWN_TIMEOUT_MS)) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (child.exitCode === null && child.signalCode === null) {
|
|
200
|
+
child.kill('SIGTERM');
|
|
201
|
+
}
|
|
202
|
+
if (await waitForCloseOrTimeout(closed, FORCED_SHUTDOWN_TIMEOUT_MS)) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
await forceCloseChild(child, closed);
|
|
206
|
+
}
|
|
207
|
+
async waitForStart(signal) {
|
|
208
|
+
const started = this.start();
|
|
209
|
+
if (!signal) {
|
|
210
|
+
return started;
|
|
211
|
+
}
|
|
212
|
+
if (signal.aborted) {
|
|
213
|
+
throw abortError(signal);
|
|
214
|
+
}
|
|
215
|
+
return new Promise((resolve, reject) => {
|
|
216
|
+
const onAbort = () => {
|
|
217
|
+
cleanup();
|
|
218
|
+
reject(abortError(signal));
|
|
219
|
+
};
|
|
220
|
+
const cleanup = () => signal.removeEventListener('abort', onAbort);
|
|
221
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
222
|
+
started.then(() => {
|
|
223
|
+
cleanup();
|
|
224
|
+
resolve();
|
|
225
|
+
}, (error) => {
|
|
226
|
+
cleanup();
|
|
227
|
+
reject(error);
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
handleLine(child, line) {
|
|
232
|
+
if (child !== this.child) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
let message;
|
|
236
|
+
try {
|
|
237
|
+
message = JSON.parse(line);
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
this.failProcess(child, new LocalQleverRuntimeError('qlever_runtime_protocol_error', `Local QLever runtime emitted malformed JSON: ${formatOffendingStdoutLine(line)}`, error));
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (!this.ready) {
|
|
244
|
+
const expectedNativeAbi = this.options.expectedNativeSparqlAbiVersion ?? NATIVE_SPARQL_ABI_VERSION;
|
|
245
|
+
const expectedBackendAbi = this.options.expectedPhysicalBackendAbiVersion ?? PHYSICAL_BACKEND_ABI_VERSION;
|
|
246
|
+
if (!isReadyMessage(message)
|
|
247
|
+
|| message.abiVersion !== expectedNativeAbi
|
|
248
|
+
|| message.physicalBackendAbiVersion !== expectedBackendAbi) {
|
|
249
|
+
this.failProcess(child, new LocalQleverRuntimeError('qlever_runtime_protocol_error', `Local QLever runtime ready contract mismatch; expected native SPARQL ABI ${expectedNativeAbi} and physical backend ABI ${expectedBackendAbi}`));
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
this.ready = true;
|
|
253
|
+
const startup = this.startup;
|
|
254
|
+
if (startup?.child === child) {
|
|
255
|
+
clearTimeout(startup.timeout);
|
|
256
|
+
this.startup = undefined;
|
|
257
|
+
startup.resolve();
|
|
258
|
+
}
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
if (isResultMessage(message)) {
|
|
262
|
+
const pending = this.pending.get(message.id);
|
|
263
|
+
if (!pending) {
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
this.pending.delete(message.id);
|
|
267
|
+
this.cleanupPending(pending);
|
|
268
|
+
pending.resolve(message.result);
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
if (isErrorMessage(message)) {
|
|
272
|
+
const pending = this.pending.get(message.id);
|
|
273
|
+
if (!pending) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
this.pending.delete(message.id);
|
|
277
|
+
this.cleanupPending(pending);
|
|
278
|
+
pending.reject(new LocalQleverRuntimeError(message.code || 'qlever_remote_error', message.message || 'Local QLever runtime rejected the request'));
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
this.failProcess(child, new LocalQleverRuntimeError('qlever_runtime_protocol_error', `Local QLever runtime emitted an invalid protocol message: ${formatOffendingStdoutLine(line)}`));
|
|
282
|
+
}
|
|
283
|
+
failProcess(child, error, terminate = true) {
|
|
284
|
+
if (child !== this.child) {
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
this.child = undefined;
|
|
288
|
+
const closed = reapChild(child);
|
|
289
|
+
this.failedProcessCleanup = terminate ? terminateChild(child, closed) : closed;
|
|
290
|
+
this.ready = false;
|
|
291
|
+
this.startPromise = undefined;
|
|
292
|
+
this.reader?.close();
|
|
293
|
+
this.reader = undefined;
|
|
294
|
+
const startup = this.startup;
|
|
295
|
+
if (startup?.child === child) {
|
|
296
|
+
clearTimeout(startup.timeout);
|
|
297
|
+
this.startup = undefined;
|
|
298
|
+
startup.reject(error);
|
|
299
|
+
}
|
|
300
|
+
for (const [id, pending] of this.pending) {
|
|
301
|
+
this.pending.delete(id);
|
|
302
|
+
this.cleanupPending(pending);
|
|
303
|
+
pending.reject(error);
|
|
304
|
+
}
|
|
305
|
+
void this.failedProcessCleanup;
|
|
306
|
+
}
|
|
307
|
+
async awaitFailedProcessCleanup() {
|
|
308
|
+
const failedProcessCleanup = this.failedProcessCleanup;
|
|
309
|
+
if (!failedProcessCleanup) {
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
try {
|
|
313
|
+
await failedProcessCleanup;
|
|
314
|
+
}
|
|
315
|
+
finally {
|
|
316
|
+
if (this.failedProcessCleanup === failedProcessCleanup) {
|
|
317
|
+
this.failedProcessCleanup = undefined;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
cleanupPending(pending) {
|
|
322
|
+
if (pending.timeout) {
|
|
323
|
+
clearTimeout(pending.timeout);
|
|
324
|
+
}
|
|
325
|
+
if (pending.signal && pending.abortHandler) {
|
|
326
|
+
pending.signal.removeEventListener('abort', pending.abortHandler);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
writeMessage(child, value) {
|
|
330
|
+
if (child !== this.child || child.stdin.destroyed || !child.stdin.writable) {
|
|
331
|
+
throw this.runtimeUnavailable('Local QLever runtime stdin is unavailable');
|
|
332
|
+
}
|
|
333
|
+
child.stdin.write(`${JSON.stringify(value)}\n`, 'utf8');
|
|
334
|
+
}
|
|
335
|
+
cancelRequest(child, id) {
|
|
336
|
+
try {
|
|
337
|
+
this.writeMessage(child, { type: 'cancel', id });
|
|
338
|
+
}
|
|
339
|
+
catch {
|
|
340
|
+
// The process lifecycle handler rejects every remaining request when the
|
|
341
|
+
// runtime is gone. Cancellation must not mask the caller's own outcome.
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
appendStderr(chunk) {
|
|
345
|
+
this.stderrTail += chunk;
|
|
346
|
+
const maxBytes = this.options.maxStderrBytes ?? DEFAULT_MAX_STDERR_BYTES;
|
|
347
|
+
while (Buffer.byteLength(this.stderrTail, 'utf8') > maxBytes && this.stderrTail.length > 0) {
|
|
348
|
+
this.stderrTail = this.stderrTail.slice(Math.max(1, Math.floor(this.stderrTail.length / 8)));
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
runtimeUnavailable(message, cause) {
|
|
352
|
+
const stderr = this.stderrTail.trim();
|
|
353
|
+
return new LocalQleverRuntimeError('qlever_runtime_unavailable', stderr ? `${message}: ${stderr}` : message, cause);
|
|
354
|
+
}
|
|
355
|
+
startupTimeoutMs() {
|
|
356
|
+
return this.options.startupTimeoutMs ?? DEFAULT_STARTUP_TIMEOUT_MS;
|
|
357
|
+
}
|
|
358
|
+
requestTimeoutMs() {
|
|
359
|
+
return this.options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
exports.LocalQleverNativeSparqlClient = LocalQleverNativeSparqlClient;
|
|
363
|
+
function reapChild(child) {
|
|
364
|
+
const closed = waitForChildClose(child);
|
|
365
|
+
closed.then(undefined, () => undefined);
|
|
366
|
+
return closed;
|
|
367
|
+
}
|
|
368
|
+
async function terminateChild(child, closed) {
|
|
369
|
+
if (child.exitCode === null && child.signalCode === null) {
|
|
370
|
+
child.kill('SIGTERM');
|
|
371
|
+
}
|
|
372
|
+
if (await waitForCloseOrTimeout(closed, GRACEFUL_SHUTDOWN_TIMEOUT_MS)) {
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
await forceCloseChild(child, closed);
|
|
376
|
+
}
|
|
377
|
+
async function forceCloseChild(child, closed) {
|
|
378
|
+
if (child.exitCode === null && child.signalCode === null) {
|
|
379
|
+
child.kill('SIGKILL');
|
|
380
|
+
}
|
|
381
|
+
if (await waitForCloseOrTimeout(closed, FORCED_SHUTDOWN_TIMEOUT_MS)) {
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
child.stdin.destroy();
|
|
385
|
+
child.stdout.destroy();
|
|
386
|
+
child.stderr.destroy();
|
|
387
|
+
}
|
|
388
|
+
function waitForChildClose(child) {
|
|
389
|
+
if (child.exitCode !== null || child.signalCode !== null) {
|
|
390
|
+
return Promise.resolve();
|
|
391
|
+
}
|
|
392
|
+
return new Promise((resolve) => child.once('close', () => resolve()));
|
|
393
|
+
}
|
|
394
|
+
async function waitForCloseOrTimeout(closed, timeoutMs) {
|
|
395
|
+
let timeout;
|
|
396
|
+
const expired = new Promise((resolve) => {
|
|
397
|
+
timeout = setTimeout(() => resolve(false), timeoutMs);
|
|
398
|
+
timeout.unref?.();
|
|
399
|
+
});
|
|
400
|
+
const didClose = await Promise.race([closed.then(() => true), expired]);
|
|
401
|
+
if (timeout) {
|
|
402
|
+
clearTimeout(timeout);
|
|
403
|
+
}
|
|
404
|
+
return didClose;
|
|
405
|
+
}
|
|
406
|
+
function formatOffendingStdoutLine(line) {
|
|
407
|
+
const normalized = line.replace(/[\r\n]/gu, ' ');
|
|
408
|
+
const maxLength = 240;
|
|
409
|
+
return normalized.length <= maxLength
|
|
410
|
+
? JSON.stringify(normalized)
|
|
411
|
+
: JSON.stringify(`${normalized.slice(0, maxLength)}…`);
|
|
412
|
+
}
|
|
413
|
+
function isReadyMessage(value) {
|
|
414
|
+
if (!value || typeof value !== 'object') {
|
|
415
|
+
return false;
|
|
416
|
+
}
|
|
417
|
+
const message = value;
|
|
418
|
+
return message.type === 'ready'
|
|
419
|
+
&& message.backend === 'sqlite'
|
|
420
|
+
&& isPositiveInteger(message.abiVersion)
|
|
421
|
+
&& isPositiveInteger(message.physicalBackendAbiVersion);
|
|
422
|
+
}
|
|
423
|
+
function isResultMessage(value) {
|
|
424
|
+
if (!value || typeof value !== 'object') {
|
|
425
|
+
return false;
|
|
426
|
+
}
|
|
427
|
+
const message = value;
|
|
428
|
+
return typeof message.id === 'string'
|
|
429
|
+
&& message.type === 'result'
|
|
430
|
+
&& isNativeResult(message.result);
|
|
431
|
+
}
|
|
432
|
+
function isErrorMessage(value) {
|
|
433
|
+
if (!value || typeof value !== 'object') {
|
|
434
|
+
return false;
|
|
435
|
+
}
|
|
436
|
+
const message = value;
|
|
437
|
+
return typeof message.id === 'string'
|
|
438
|
+
&& message.type === 'error'
|
|
439
|
+
&& (message.code === undefined || typeof message.code === 'string')
|
|
440
|
+
&& (message.message === undefined || typeof message.message === 'string');
|
|
441
|
+
}
|
|
442
|
+
function isNativeResult(value) {
|
|
443
|
+
if (!value || typeof value !== 'object') {
|
|
444
|
+
return false;
|
|
445
|
+
}
|
|
446
|
+
const result = value;
|
|
447
|
+
return (result.status === 'ok' || result.status === 'unsupported' || result.status === 'error')
|
|
448
|
+
&& typeof result.mediaType === 'string'
|
|
449
|
+
&& typeof result.body === 'string'
|
|
450
|
+
&& (result.error === undefined || typeof result.error === 'string');
|
|
451
|
+
}
|
|
452
|
+
function abortError(signal) {
|
|
453
|
+
return signal.reason ?? new LocalQleverRuntimeError('qlever_request_aborted', 'Local QLever request was aborted');
|
|
454
|
+
}
|
|
455
|
+
function isPositiveInteger(value) {
|
|
456
|
+
return Number.isInteger(value) && value > 0;
|
|
457
|
+
}
|
|
458
|
+
function validateNativeSparqlQueryOptions(options) {
|
|
459
|
+
if (options.sourceUri !== undefined && !nonEmptyString(options.sourceUri)) {
|
|
460
|
+
throw new TypeError('Native SPARQL sourceUri must be a non-empty string when provided');
|
|
461
|
+
}
|
|
462
|
+
if (options.defaultDataset !== undefined &&
|
|
463
|
+
options.defaultDataset !== 'physical' &&
|
|
464
|
+
options.defaultDataset !== 'exactSource' &&
|
|
465
|
+
options.defaultDataset !== 'scopedUnion') {
|
|
466
|
+
throw new TypeError('Native SPARQL defaultDataset must be physical, exactSource, or scopedUnion');
|
|
467
|
+
}
|
|
468
|
+
if (options.defaultDataset === 'exactSource' && options.sourceUri === undefined) {
|
|
469
|
+
throw new TypeError('Native SPARQL exactSource defaultDataset requires sourceUri');
|
|
470
|
+
}
|
|
471
|
+
if (options.defaultDataset === 'scopedUnion' && options.sourceUri !== undefined) {
|
|
472
|
+
throw new TypeError('Native SPARQL scopedUnion defaultDataset cannot use sourceUri');
|
|
473
|
+
}
|
|
474
|
+
if (options.vectorQuery !== undefined) {
|
|
475
|
+
validateVectorQuery(options.vectorQuery);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
function validateVectorQuery(vectorQuery) {
|
|
479
|
+
if (!Array.isArray(vectorQuery.embedding) || vectorQuery.embedding.length === 0) {
|
|
480
|
+
throw new TypeError('Native SPARQL vectorQuery.embedding must be a non-empty finite number array');
|
|
481
|
+
}
|
|
482
|
+
if (!vectorQuery.embedding.every((value) => typeof value === 'number' && Number.isFinite(value))) {
|
|
483
|
+
throw new TypeError('Native SPARQL vectorQuery.embedding must contain only finite numbers');
|
|
484
|
+
}
|
|
485
|
+
if (!isVectorMetric(vectorQuery.metric)) {
|
|
486
|
+
throw new TypeError('Native SPARQL vectorQuery.metric must be cosine, dot, or euclidean');
|
|
487
|
+
}
|
|
488
|
+
for (const field of ['provider', 'model', 'modelVersion', 'inputKind', 'projectionPolicyVersion']) {
|
|
489
|
+
if (!nonEmptyString(vectorQuery[field])) {
|
|
490
|
+
throw new TypeError(`Native SPARQL vectorQuery.${field} is required`);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
if (!isPositiveInteger(vectorQuery.limit)) {
|
|
494
|
+
throw new TypeError('Native SPARQL vectorQuery.limit must be a positive integer');
|
|
495
|
+
}
|
|
496
|
+
if (vectorQuery.threshold !== undefined &&
|
|
497
|
+
(typeof vectorQuery.threshold !== 'number' || !Number.isFinite(vectorQuery.threshold))) {
|
|
498
|
+
throw new TypeError('Native SPARQL vectorQuery.threshold must be finite when provided');
|
|
499
|
+
}
|
|
500
|
+
if (vectorQuery.retrievalPointVariable !== undefined &&
|
|
501
|
+
!nonEmptyString(vectorQuery.retrievalPointVariable)) {
|
|
502
|
+
throw new TypeError('Native SPARQL vectorQuery.retrievalPointVariable must be non-empty when provided');
|
|
503
|
+
}
|
|
504
|
+
if (vectorQuery.resourceVariable !== undefined &&
|
|
505
|
+
!nonEmptyString(vectorQuery.resourceVariable)) {
|
|
506
|
+
throw new TypeError('Native SPARQL vectorQuery.resourceVariable must be non-empty when provided');
|
|
507
|
+
}
|
|
508
|
+
if (vectorQuery.retrievalPointVariable === undefined &&
|
|
509
|
+
vectorQuery.resourceVariable === undefined) {
|
|
510
|
+
throw new TypeError('Native SPARQL vectorQuery requires retrievalPointVariable or resourceVariable');
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
function isVectorMetric(value) {
|
|
514
|
+
return value === 'cosine' || value === 'dot' || value === 'euclidean';
|
|
515
|
+
}
|
|
516
|
+
function nonEmptyString(value) {
|
|
517
|
+
return typeof value === 'string' && value.length > 0;
|
|
518
|
+
}
|
|
519
|
+
//# sourceMappingURL=LocalQleverNativeSparqlClient.js.map
|