@undefineds.co/xpod 0.3.75 → 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.
Files changed (362) hide show
  1. package/bin/xpod.js +43 -8
  2. package/config/bun.json +45 -48
  3. package/config/cloud.json +13 -90
  4. package/config/components-ignore.json +0 -1
  5. package/config/local.json +111 -63
  6. package/config/resolver.json +4 -2
  7. package/config/terminal.json +4 -1
  8. package/config/xpod.base.json +16 -8
  9. package/config/xpod.json +51 -54
  10. package/dist/acceptance/PublicCloudSemanticConformance.d.ts +4 -0
  11. package/dist/acceptance/PublicCloudSemanticConformance.js +214 -0
  12. package/dist/acceptance/QleverSearchConformance.d.ts +39 -0
  13. package/dist/acceptance/QleverSearchConformance.js +686 -0
  14. package/dist/acceptance/QleverSemanticConformance.d.ts +3 -0
  15. package/dist/acceptance/QleverSemanticConformance.js +178 -0
  16. package/dist/acceptance/RdfSemanticConformance.d.ts +114 -0
  17. package/dist/acceptance/RdfSemanticConformance.js +307 -0
  18. package/dist/acceptance/run-installed-qlever-conformance.d.ts +12 -0
  19. package/dist/acceptance/run-installed-qlever-conformance.js +87 -0
  20. package/dist/acceptance/run-installed-rdf-conformance.d.ts +12 -0
  21. package/dist/acceptance/run-installed-rdf-conformance.js +88 -0
  22. package/dist/ai/service/EmbeddingProviderError.d.ts +7 -0
  23. package/dist/ai/service/EmbeddingProviderError.js +42 -0
  24. package/dist/api/ai-gateway/connect/index.js +5 -2
  25. package/dist/api/auth/AuthContext.d.ts +5 -0
  26. package/dist/api/auth/AuthContext.js +10 -0
  27. package/dist/api/container/common.js +20 -1
  28. package/dist/api/container/rdf.d.ts +1 -0
  29. package/dist/api/container/rdf.js +43 -4
  30. package/dist/api/container/types.d.ts +4 -0
  31. package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
  32. package/dist/api/runs/PiAgentRuntimeDriver.d.ts +2 -0
  33. package/dist/api/runs/PiAgentRuntimeDriver.js +1 -0
  34. package/dist/api/runs/RdfRunContextRetriever.d.ts +8 -0
  35. package/dist/api/runs/RdfRunContextRetriever.js +23 -1
  36. package/dist/api/runtime.js +20 -6
  37. package/dist/api/service/RdfSearchIndexingService.d.ts +37 -3
  38. package/dist/api/service/RdfSearchIndexingService.js +130 -18
  39. package/dist/api/service/RdfSearchIndexingSolidFsSyncer.d.ts +8 -0
  40. package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js +102 -15
  41. package/dist/api/service/RdfSearchReconciliationWorker.d.ts +76 -0
  42. package/dist/api/service/RdfSearchReconciliationWorker.js +294 -0
  43. package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
  44. package/dist/components/components.jsonld +9 -12
  45. package/dist/components/context.jsonld +227 -348
  46. package/dist/document/MarkdownRetrievalPointProjector.d.ts +33 -0
  47. package/dist/document/MarkdownRetrievalPointProjector.js +196 -0
  48. package/dist/document/MarkdownRetrievalPointProjector.jsonld +135 -0
  49. package/dist/document/ReaderMaterialization.d.ts +34 -0
  50. package/dist/document/ReaderMaterialization.js +3 -0
  51. package/dist/document/ReaderMaterialization.jsonld +151 -0
  52. package/dist/document/ReaderMaterializationRepository.d.ts +27 -0
  53. package/dist/document/ReaderMaterializationRepository.js +400 -0
  54. package/dist/document/ReaderMaterializationRepository.jsonld +84 -0
  55. package/dist/document/index.d.ts +3 -1
  56. package/dist/document/index.js +3 -1
  57. package/dist/http/SubgraphSparqlHttpHandler.js +34 -54
  58. package/dist/http/search/SearchHttpHandler.js +14 -12
  59. package/dist/http/terminal/TerminalHttpHandler.d.ts +3 -0
  60. package/dist/http/terminal/TerminalHttpHandler.js +1 -0
  61. package/dist/http/terminal/TerminalHttpHandler.jsonld +11 -0
  62. package/dist/identity/drizzle/DrizzleIndexedStorage.js +19 -39
  63. package/dist/identity/drizzle/db.d.ts +1 -0
  64. package/dist/identity/drizzle/db.js +35 -0
  65. package/dist/index.d.ts +9 -17
  66. package/dist/index.js +14 -22
  67. package/dist/provision/ProvisionPodCreator.d.ts +1 -1
  68. package/dist/provision/ProvisionPodCreator.js +4 -3
  69. package/dist/search/RdfSearchIntentSink.d.ts +17 -0
  70. package/dist/search/RdfSearchIntentSink.js +46 -0
  71. package/dist/search/RdfSearchIntentSink.jsonld +47 -0
  72. package/dist/search/RdfSearchReconciliationRepository.d.ts +81 -0
  73. package/dist/search/RdfSearchReconciliationRepository.js +771 -0
  74. package/dist/solidfs/LocalRdfAuthorityRecoveryInitializer.d.ts +15 -0
  75. package/dist/solidfs/LocalRdfAuthorityRecoveryInitializer.js +48 -0
  76. package/dist/solidfs/LocalRdfAuthorityRecoveryInitializer.jsonld +99 -0
  77. package/dist/solidfs/RdfIndexSolidFsSyncer.js +22 -4
  78. package/dist/solidfs/SolidFsSyncJournal.d.ts +7 -1
  79. package/dist/solidfs/SolidFsSyncJournal.js +20 -5
  80. package/dist/solidfs/SolidFsSyncJournal.jsonld +43 -0
  81. package/dist/solidfs/index.d.ts +1 -0
  82. package/dist/solidfs/index.js +1 -0
  83. package/dist/storage/SparqlUpdateResourceStore.js +3 -3
  84. package/dist/storage/accessors/MixDataAccessor.d.ts +21 -29
  85. package/dist/storage/accessors/MixDataAccessor.js +182 -399
  86. package/dist/storage/accessors/MixDataAccessor.jsonld +109 -87
  87. package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +12 -8
  88. package/dist/storage/accessors/SolidRdfDataAccessor.js +189 -59
  89. package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +14 -29
  90. package/dist/storage/rdf/LocalQleverNativeSparqlClient.d.ts +55 -0
  91. package/dist/storage/rdf/LocalQleverNativeSparqlClient.js +519 -0
  92. package/dist/storage/rdf/LocalQleverNativeSparqlClient.jsonld +314 -0
  93. package/dist/storage/rdf/PostgresRdfEngine.d.ts +3 -1
  94. package/dist/storage/rdf/PostgresRdfEngine.js +111 -74
  95. package/dist/storage/rdf/PostgresRdfEngine.jsonld +12 -22
  96. package/dist/storage/rdf/PostgresRdfSchemaValidation.d.ts +8 -0
  97. package/dist/storage/rdf/PostgresRdfSchemaValidation.js +82 -0
  98. package/dist/storage/rdf/PostgresRdfTextIndex.d.ts +6 -3
  99. package/dist/storage/rdf/PostgresRdfTextIndex.js +158 -80
  100. package/dist/storage/rdf/PostgresRdfTextIndex.jsonld +16 -4
  101. package/dist/storage/rdf/PostgresRdfVectorIndex.d.ts +4 -5
  102. package/dist/storage/rdf/PostgresRdfVectorIndex.js +124 -120
  103. package/dist/storage/rdf/PostgresRdfVectorIndex.jsonld +14 -18
  104. package/dist/storage/rdf/QleverSparqlEngine.d.ts +35 -0
  105. package/dist/storage/rdf/QleverSparqlEngine.js +185 -0
  106. package/dist/storage/rdf/QleverSparqlEngine.jsonld +70 -0
  107. package/dist/storage/rdf/Rdf3xIndex.js +20 -16
  108. package/dist/storage/rdf/RdfAccessScope.d.ts +4 -0
  109. package/dist/storage/rdf/RdfAccessScope.js +74 -9
  110. package/dist/storage/rdf/RdfAccessScope.jsonld +16 -0
  111. package/dist/storage/rdf/RdfEngineRdfJsSource.d.ts +14 -0
  112. package/dist/storage/rdf/RdfEngineRdfJsSource.js +179 -0
  113. package/dist/storage/rdf/RdfQuadIndex.d.ts +13 -14
  114. package/dist/storage/rdf/RdfQuadIndex.js +286 -99
  115. package/dist/storage/rdf/RdfQuadIndex.jsonld +10 -22
  116. package/dist/storage/rdf/RdfQueryExecutor.js +10 -4
  117. package/dist/storage/rdf/RdfQuerySparqlEngine.d.ts +33 -0
  118. package/dist/storage/rdf/RdfQuerySparqlEngine.js +215 -0
  119. package/dist/storage/rdf/RdfQuerySparqlEngine.jsonld +78 -0
  120. package/dist/storage/rdf/RdfSparqlAdapter.d.ts +0 -4
  121. package/dist/storage/rdf/RdfSparqlAdapter.js +75 -173
  122. package/dist/storage/rdf/RdfSparqlBoundary.d.ts +37 -0
  123. package/dist/storage/rdf/RdfSparqlBoundary.js +247 -0
  124. package/dist/storage/rdf/RdfSparqlSerialization.d.ts +3 -0
  125. package/dist/storage/rdf/RdfSparqlSerialization.js +19 -0
  126. package/dist/storage/rdf/RdfSqliteConnection.d.ts +7 -0
  127. package/dist/storage/rdf/RdfSqliteConnection.js +23 -0
  128. package/dist/storage/rdf/RdfTermDictionary.d.ts +0 -8
  129. package/dist/storage/rdf/RdfTermDictionary.js +0 -136
  130. package/dist/storage/rdf/RdfTermDictionary.jsonld +0 -32
  131. package/dist/storage/rdf/RdfTermSemantics.d.ts +6 -0
  132. package/dist/storage/rdf/RdfTermSemantics.js +29 -0
  133. package/dist/storage/rdf/RdfTextIndex.d.ts +5 -6
  134. package/dist/storage/rdf/RdfTextIndex.js +187 -115
  135. package/dist/storage/rdf/RdfTextIndex.jsonld +10 -14
  136. package/dist/storage/rdf/RdfVectorIndex.d.ts +4 -4
  137. package/dist/storage/rdf/RdfVectorIndex.js +156 -233
  138. package/dist/storage/rdf/RdfVectorIndex.jsonld +10 -14
  139. package/dist/storage/rdf/SolidRdfEngine.d.ts +16 -21
  140. package/dist/storage/rdf/SolidRdfEngine.js +28 -308
  141. package/dist/storage/rdf/SolidRdfEngine.jsonld +26 -148
  142. package/dist/storage/rdf/XpodComunicaQueryEngine.d.ts +10 -0
  143. package/dist/storage/rdf/XpodComunicaQueryEngine.js +72 -0
  144. package/dist/storage/rdf/index.d.ts +7 -6
  145. package/dist/storage/rdf/index.js +17 -12
  146. package/dist/storage/rdf/models-benchmark.d.ts +5 -1
  147. package/dist/storage/rdf/models-benchmark.js +17 -19
  148. package/dist/storage/rdf/types.d.ts +68 -6
  149. package/dist/storage/rdf/types.jsonld +69 -0
  150. package/dist/storage/sparql/SubgraphQueryEngine.d.ts +13 -7
  151. package/dist/storage/sparql/SubgraphQueryEngine.js +6 -6
  152. package/dist/storage/vector/index.d.ts +0 -1
  153. package/dist/storage/vector/index.js +0 -1
  154. package/dist/terminal/AclPermissionService.d.ts +4 -5
  155. package/dist/terminal/AclPermissionService.js +55 -75
  156. package/dist/terminal/TerminalSessionManager.d.ts +3 -2
  157. package/dist/terminal/TerminalSessionManager.js +3 -3
  158. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.d.ts +1 -0
  159. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.d.ts.map +1 -1
  160. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js +29 -26
  161. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js.map +1 -1
  162. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.d.ts.map +1 -1
  163. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.js +9 -4
  164. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.js.map +1 -1
  165. package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.d.ts +1 -0
  166. package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.d.ts.map +1 -1
  167. package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.js +6 -3
  168. package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.js.map +1 -1
  169. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js +3 -3
  170. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js.map +1 -1
  171. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts +6 -0
  172. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts.map +1 -1
  173. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js +13 -3
  174. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js.map +1 -1
  175. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.d.ts +1 -0
  176. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.d.ts.map +1 -1
  177. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.js +31 -0
  178. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.js.map +1 -1
  179. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql/builder/expression-builder.d.ts.map +1 -1
  180. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql/builder/expression-builder.js +5 -0
  181. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql/builder/expression-builder.js.map +1 -1
  182. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.d.ts +1 -0
  183. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.d.ts.map +1 -1
  184. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.js +45 -0
  185. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.js.map +1 -1
  186. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.d.ts +1 -0
  187. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.d.ts.map +1 -1
  188. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js +29 -26
  189. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js.map +1 -1
  190. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.d.ts.map +1 -1
  191. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.js +9 -4
  192. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.js.map +1 -1
  193. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.d.ts +1 -0
  194. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.d.ts.map +1 -1
  195. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.js +6 -3
  196. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.js.map +1 -1
  197. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js +3 -3
  198. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js.map +1 -1
  199. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts +6 -0
  200. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts.map +1 -1
  201. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js +14 -4
  202. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js.map +1 -1
  203. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.d.ts +1 -0
  204. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.d.ts.map +1 -1
  205. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.js +30 -0
  206. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.js.map +1 -1
  207. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql/builder/expression-builder.d.ts.map +1 -1
  208. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql/builder/expression-builder.js +5 -0
  209. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql/builder/expression-builder.js.map +1 -1
  210. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.d.ts +1 -0
  211. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.d.ts.map +1 -1
  212. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.js +45 -0
  213. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.js.map +1 -1
  214. package/node_modules/@undefineds.co/drizzle-solid/package.json +5 -4
  215. package/package.json +19 -8
  216. package/static/app/assets/{index-36TJKN-3.js → index-BikOyGPu.js} +34 -34
  217. package/static/app/assets/inrupt-smoke.js +2 -2
  218. package/static/app/assets/main.css +1 -1
  219. package/static/app/assets/main.js +11 -11
  220. package/static/auth-callback/assets/{AiConfigContext-BvBdu_A3.js → AiConfigContext-iQ74JmRZ.js} +1 -1
  221. package/static/auth-callback/assets/{AiConfigPage-BpDw4jco.js → AiConfigPage-BBDKE1gJ.js} +1 -1
  222. package/static/auth-callback/assets/{DocumentProcessingPanel-BmZ_jzRr.js → DocumentProcessingPanel-D9NntIEK.js} +1 -1
  223. package/static/auth-callback/assets/{IndexLifecyclePanel-BfQBjN4z.js → IndexLifecyclePanel-BG07yBdA.js} +1 -1
  224. package/static/auth-callback/assets/{IndexSubjectPanel-BlsnatPt.js → IndexSubjectPanel-B-bUnU3G.js} +1 -1
  225. package/static/auth-callback/assets/{ModelAssignmentsPanel-KA6Mdndz.js → ModelAssignmentsPanel-C7I-Nqy-.js} +1 -1
  226. package/static/auth-callback/assets/{ModelsPage-C7jymyIY.js → ModelsPage-C2hxyrmI.js} +1 -1
  227. package/static/auth-callback/assets/{NetworkPage-k2ShktNm.js → NetworkPage-IGIc2q1Y.js} +1 -1
  228. package/static/auth-callback/assets/{PaneListHeader-mLMe_dvU.js → PaneListHeader-CebuPl_g.js} +1 -1
  229. package/static/auth-callback/assets/{SearchIndexingPanel-CqV9um_t.js → SearchIndexingPanel-6HnZSg00.js} +1 -1
  230. package/static/auth-callback/assets/{StatusSubjectPanel-BgMBTbr2.js → StatusSubjectPanel-votxBkr5.js} +1 -1
  231. package/static/auth-callback/assets/{StatusWorkspace-zbSyhdG2.js → StatusWorkspace-Cksl61zX.js} +1 -1
  232. package/static/auth-callback/assets/{SystemSettingsPage-CtW79nW6.js → SystemSettingsPage-CKZFUaZT.js} +1 -1
  233. package/static/auth-callback/assets/{SystemSettingsSubjectPanel-ZOPKYUtZ.js → SystemSettingsSubjectPanel-pzfUcCf4.js} +1 -1
  234. package/static/auth-callback/assets/{activity-BQ-CQE3O.js → activity-DQL6kZHZ.js} +1 -1
  235. package/static/auth-callback/assets/auth-callback-B_s8Ye5Z.css +1 -0
  236. package/static/auth-callback/assets/{auth-callback-Htr_CB_g.js → auth-callback-BxQMd_Mc.js} +39 -39
  237. package/static/auth-callback/assets/{badge-D5SGTJeO.js → badge-DvW4LUHH.js} +1 -1
  238. package/static/auth-callback/assets/{download-DK183Ldo.js → download-Cx_uaCR1.js} +1 -1
  239. package/static/auth-callback/assets/{external-link-LDHy_4bn.js → external-link-D6L6ExH1.js} +1 -1
  240. package/static/auth-callback/assets/{index-BWrvgHqK.js → index-BAS_hxGu.js} +1 -1
  241. package/static/auth-callback/assets/{index-2WmlePQ9.js → index-BmBjpCoD.js} +1 -1
  242. package/static/auth-callback/assets/{index-browser-DUd4E4-x.js → index-browser-pdn4D3M4.js} +1 -1
  243. package/static/auth-callback/assets/{key-round-ibX79Kr-.js → key-round-BTBzOggq.js} +1 -1
  244. package/static/auth-callback/assets/{rotate-ccw-B2_VMaiX.js → rotate-ccw-eV7Cx8sB.js} +1 -1
  245. package/static/auth-callback/assets/{skeleton-F4nrpycc.js → skeleton-Bg4GYgBM.js} +1 -1
  246. package/static/auth-callback/assets/{waypoints-DImIq93f.js → waypoints-CJbydf0B.js} +1 -1
  247. package/static/auth-callback/assets/{workspace-layout-IVCSYU21.js → workspace-layout-C6Hh8Xf-.js} +1 -1
  248. package/static/auth-callback/auth-callback.html +2 -2
  249. package/static/dashboard/assets/{AiConfigContext-cjjfYTo9.js → AiConfigContext-BkJj28vK.js} +1 -1
  250. package/static/dashboard/assets/{AiConfigPage-CO0DSD_j.js → AiConfigPage-Cs9B4uyp.js} +1 -1
  251. package/static/dashboard/assets/{DocumentProcessingPanel-DMGnH8Oj.js → DocumentProcessingPanel-BBWmM7mS.js} +1 -1
  252. package/static/dashboard/assets/{IndexLifecyclePanel-DSkIOCL5.js → IndexLifecyclePanel-D5xGTT_i.js} +1 -1
  253. package/static/dashboard/assets/{IndexSubjectPanel-qWN_DbAp.js → IndexSubjectPanel-d-mjDthn.js} +1 -1
  254. package/static/dashboard/assets/{ModelAssignmentsPanel-DCf83uM3.js → ModelAssignmentsPanel-C-OLNbqf.js} +1 -1
  255. package/static/dashboard/assets/{ModelsPage-CMnvSrl5.js → ModelsPage-CBrLjuUn.js} +1 -1
  256. package/static/dashboard/assets/{NetworkPage-C8Gkwclb.js → NetworkPage-BlYk8L1z.js} +1 -1
  257. package/static/dashboard/assets/{PaneListHeader-BtU_8cDK.js → PaneListHeader-A5oZJQC0.js} +1 -1
  258. package/static/dashboard/assets/{SearchIndexingPanel-DEn12pNU.js → SearchIndexingPanel-Bs1j8ZP2.js} +1 -1
  259. package/static/dashboard/assets/{StatusSubjectPanel-B1_ILg2d.js → StatusSubjectPanel-Qao3orvi.js} +1 -1
  260. package/static/dashboard/assets/{StatusWorkspace-BG6nMNCo.js → StatusWorkspace-rDM0yDtk.js} +1 -1
  261. package/static/dashboard/assets/{SystemSettingsPage-BnWYIXaM.js → SystemSettingsPage-FPRPkKaR.js} +1 -1
  262. package/static/dashboard/assets/{SystemSettingsSubjectPanel-C_mYVPWb.js → SystemSettingsSubjectPanel-CjlJAxnX.js} +1 -1
  263. package/static/dashboard/assets/{activity-DYJ7PdRl.js → activity-CJ5K6hYC.js} +1 -1
  264. package/static/dashboard/assets/{badge-BIaZco1P.js → badge-L-NMOi1P.js} +1 -1
  265. package/static/dashboard/assets/dashboard-B_s8Ye5Z.css +1 -0
  266. package/static/dashboard/assets/{dashboard-Dl40_MEa.js → dashboard-DyjAyYxx.js} +34 -34
  267. package/static/dashboard/assets/{download-By16k9VK.js → download-Bi4u5K5B.js} +1 -1
  268. package/static/dashboard/assets/{external-link-B92xOG_d.js → external-link-jmhLDfvT.js} +1 -1
  269. package/static/dashboard/assets/{index-BajZpJ48.js → index-BoaGJBxf.js} +1 -1
  270. package/static/dashboard/assets/{index-wsVPom_x.js → index-C22TAEi4.js} +1 -1
  271. package/static/dashboard/assets/{key-round-Clo5FOwA.js → key-round-Dk1VmMrn.js} +1 -1
  272. package/static/dashboard/assets/{rotate-ccw-smWSfi1L.js → rotate-ccw-DIfLsSwi.js} +1 -1
  273. package/static/dashboard/assets/{skeleton-BrTaGeJw.js → skeleton-BGPJMHb-.js} +1 -1
  274. package/static/dashboard/assets/{waypoints-DGPQInE7.js → waypoints-CY53egpu.js} +1 -1
  275. package/static/dashboard/assets/{workspace-layout-CPU4XRmb.js → workspace-layout-CoHkcx70.js} +1 -1
  276. package/static/dashboard/dashboard.html +2 -2
  277. package/static/settings/assets/{AiConfigContext-CT29_OyW.js → AiConfigContext-BcEPlEJe.js} +1 -1
  278. package/static/settings/assets/{AiConfigPage-WIE95S28.js → AiConfigPage-D-t3ZUhg.js} +1 -1
  279. package/static/settings/assets/{DocumentProcessingPanel-KG8Sq999.js → DocumentProcessingPanel-m2SasiMO.js} +1 -1
  280. package/static/settings/assets/{IndexLifecyclePanel-iKvtHDXY.js → IndexLifecyclePanel-BNmAvx8V.js} +1 -1
  281. package/static/settings/assets/{IndexSubjectPanel-BQdSCkk4.js → IndexSubjectPanel-C5-L2AcW.js} +1 -1
  282. package/static/settings/assets/{ModelAssignmentsPanel-P8QcVB0F.js → ModelAssignmentsPanel-Cfpkf02Y.js} +1 -1
  283. package/static/settings/assets/{ModelsPage-UZkZGqor.js → ModelsPage-DZrACwVN.js} +1 -1
  284. package/static/settings/assets/{NetworkPage-Dcpcvg15.js → NetworkPage-BlrGGfqL.js} +1 -1
  285. package/static/settings/assets/{PaneListHeader--gHtZws5.js → PaneListHeader-C3TCs1RI.js} +1 -1
  286. package/static/settings/assets/{SearchIndexingPanel-DdgJSJYQ.js → SearchIndexingPanel-Cyp3CUzX.js} +1 -1
  287. package/static/settings/assets/{StatusSubjectPanel-UOxp_XVL.js → StatusSubjectPanel-gRkb8WEX.js} +1 -1
  288. package/static/settings/assets/{StatusWorkspace-CPNXuD12.js → StatusWorkspace-Dptx4Ec2.js} +1 -1
  289. package/static/settings/assets/{SystemSettingsPage-B6ySeVPw.js → SystemSettingsPage-BWgGUQbs.js} +1 -1
  290. package/static/settings/assets/{SystemSettingsSubjectPanel-I7zWmpiI.js → SystemSettingsSubjectPanel-VflUvpgC.js} +1 -1
  291. package/static/settings/assets/{activity-CFhmzahP.js → activity-D7iNhTkQ.js} +1 -1
  292. package/static/settings/assets/{badge-BBdUc5B-.js → badge-DO0r_RT4.js} +1 -1
  293. package/static/settings/assets/{download-WJE9-yxQ.js → download-CsJlNSbd.js} +1 -1
  294. package/static/settings/assets/{external-link-RKoYyCp_.js → external-link-BCR7SHme.js} +1 -1
  295. package/static/settings/assets/{index-Bq2o0Bif.js → index-Cgq16ekN.js} +1 -1
  296. package/static/settings/assets/{index-DvxneI5O.js → index-SrhQvcrU.js} +1 -1
  297. package/static/settings/assets/{index-browser-Qmo6EsFT.js → index-browser-THpcMCnz.js} +1 -1
  298. package/static/settings/assets/{key-round-r-D9sQUK.js → key-round-Dd3jk1BT.js} +1 -1
  299. package/static/settings/assets/{rotate-ccw-D3IIhbPH.js → rotate-ccw-tiL14i1d.js} +1 -1
  300. package/static/settings/assets/settings-B_s8Ye5Z.css +1 -0
  301. package/static/settings/assets/{settings-D8oDBXWg.js → settings-CVLDPejo.js} +34 -34
  302. package/static/settings/assets/{skeleton-DrL4RQuw.js → skeleton-DBxLuNgU.js} +1 -1
  303. package/static/settings/assets/{waypoints-C5sRhpJw.js → waypoints-DS3e3hv7.js} +1 -1
  304. package/static/settings/assets/{workspace-layout-B4ALmWsM.js → workspace-layout-mucrxyTK.js} +1 -1
  305. package/static/settings/settings.html +2 -2
  306. package/config/search.json +0 -66
  307. package/dist/document/HeadingChunker.jsonld +0 -41
  308. package/dist/security/secret-cell/DeploymentRootKeyProvider.jsonld +0 -124
  309. package/dist/security/secret-cell/SecretCellVault.jsonld +0 -207
  310. package/dist/storage/PostgresDerivedIndexJournal.d.ts +0 -47
  311. package/dist/storage/PostgresDerivedIndexJournal.js +0 -408
  312. package/dist/storage/PostgresDerivedIndexJournal.jsonld +0 -303
  313. package/dist/storage/RdfDerivedIndexingListener.d.ts +0 -32
  314. package/dist/storage/RdfDerivedIndexingListener.js +0 -135
  315. package/dist/storage/RdfDerivedIndexingListener.jsonld +0 -228
  316. package/dist/storage/accessors/QuadstoreSparqlDataAccessor.d.ts +0 -148
  317. package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js +0 -436
  318. package/dist/storage/accessors/QuadstoreSparqlDataAccessor.jsonld +0 -172
  319. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.d.ts +0 -102
  320. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +0 -474
  321. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld +0 -192
  322. package/dist/storage/rdf/RdfSparqlAdapter.jsonld +0 -486
  323. package/dist/storage/rdf/ShadowRdfQuintStore.d.ts +0 -59
  324. package/dist/storage/rdf/ShadowRdfQuintStore.js +0 -216
  325. package/dist/storage/rdf/ShadowRdfQuintStore.jsonld +0 -312
  326. package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +0 -107
  327. package/dist/storage/rdf/SolidRdfSparqlEngine.js +0 -1117
  328. package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +0 -312
  329. package/dist/storage/sparql/AlgebraUtils.d.ts +0 -48
  330. package/dist/storage/sparql/AlgebraUtils.js +0 -118
  331. package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +0 -37
  332. package/dist/storage/sparql/CompatibilitySparqlEngine.js +0 -96
  333. package/dist/storage/sparql/CompatibilitySparqlEngine.jsonld +0 -123
  334. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +0 -36
  335. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +0 -124
  336. package/dist/storage/sparql/ComunicaOptimizedEngine.d.ts +0 -59
  337. package/dist/storage/sparql/ComunicaOptimizedEngine.js +0 -254
  338. package/dist/storage/sparql/ComunicaQuintEngine.d.ts +0 -143
  339. package/dist/storage/sparql/ComunicaQuintEngine.js +0 -781
  340. package/dist/storage/sparql/ExpressionEvaluator.d.ts +0 -54
  341. package/dist/storage/sparql/ExpressionEvaluator.js +0 -340
  342. package/dist/storage/sparql/FilterPushdownExtractor.d.ts +0 -74
  343. package/dist/storage/sparql/FilterPushdownExtractor.js +0 -421
  344. package/dist/storage/sparql/OptimizedQuadstoreEngine.d.ts +0 -65
  345. package/dist/storage/sparql/OptimizedQuadstoreEngine.js +0 -327
  346. package/dist/storage/sparql/OptimizedQuadstoreSource.d.ts +0 -46
  347. package/dist/storage/sparql/OptimizedQuadstoreSource.js +0 -118
  348. package/dist/storage/sparql/PatternBuilder.d.ts +0 -41
  349. package/dist/storage/sparql/PatternBuilder.js +0 -118
  350. package/dist/storage/sparql/QueryOptimizer.d.ts +0 -125
  351. package/dist/storage/sparql/QueryOptimizer.js +0 -375
  352. package/dist/storage/sparql/QuintEngine.d.ts +0 -92
  353. package/dist/storage/sparql/QuintEngine.js +0 -150
  354. package/dist/storage/sparql/QuintQuerySource.d.ts +0 -241
  355. package/dist/storage/sparql/QuintQuerySource.js +0 -1069
  356. package/dist/storage/sparql/SimpleSparqlExecutor.d.ts +0 -40
  357. package/dist/storage/sparql/SimpleSparqlExecutor.js +0 -131
  358. package/dist/storage/vector/VectorIndexingListener.d.ts +0 -114
  359. package/dist/storage/vector/VectorIndexingListener.js +0 -346
  360. package/static/auth-callback/assets/auth-callback-rWdEQY5f.css +0 -1
  361. package/static/dashboard/assets/dashboard-rWdEQY5f.css +0 -1
  362. package/static/settings/assets/settings-rWdEQY5f.css +0 -1
@@ -1,781 +0,0 @@
1
- "use strict";
2
- /**
3
- * ComunicaQuintEngine - Comunica SPARQL engine backed by QuintStore
4
- *
5
- * Features:
6
- * 1. Query pushdown optimization (LIMIT/ORDER BY)
7
- * 2. FILTER pushdown via IQuerySource interface
8
- * 3. External filters for security boundaries (ACL)
9
- * 4. OPTIONAL optimization via QueryOptimizer
10
- *
11
- * Architecture:
12
- * - Uses QuintQuerySource (IQuerySource) for proper FILTER pushdown
13
- * - Uses QueryOptimizer for OPTIONAL and Compound Query optimization
14
- * - Comunica pushes FILTER operations down to sources that declare support
15
- * - QuintQuerySource extracts filters from algebra and applies them to QuintStore
16
- */
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.ComunicaQuintEngine = void 0;
19
- const events_1 = require("events");
20
- const query_sparql_rdfjs_1 = require("@comunica/query-sparql-rdfjs");
21
- const utils_bindings_factory_1 = require("@comunica/utils-bindings-factory");
22
- const sparqlalgebrajs_1 = require("sparqlalgebrajs");
23
- const asynciterator_1 = require("asynciterator");
24
- const rdf_data_factory_1 = require("rdf-data-factory");
25
- const QuintQuerySource_1 = require("./QuintQuerySource");
26
- const QueryOptimizer_1 = require("./QueryOptimizer");
27
- // Context key names - must match Comunica's internal keys
28
- const CONTEXT_KEY_QUERY_SOURCES = '@comunica/bus-query-operation:querySources';
29
- const dataFactory = new rdf_data_factory_1.DataFactory();
30
- /**
31
- * Custom RDF/JS Store backed by QuintStore
32
- * Used for UPDATE operations (INSERT/DELETE) which don't need FILTER pushdown
33
- */
34
- class QuintRdfStore {
35
- constructor(store, getSecurityFilters, debug) {
36
- this.store = store;
37
- this.getSecurityFilters = getSecurityFilters;
38
- this.debug = debug;
39
- }
40
- match(subject, predicate, object, graph) {
41
- // Build QuintPattern
42
- const pattern = {};
43
- if (subject && subject.termType !== 'Variable') {
44
- pattern.subject = subject;
45
- }
46
- if (predicate && predicate.termType !== 'Variable') {
47
- pattern.predicate = predicate;
48
- }
49
- if (object && object.termType !== 'Variable') {
50
- pattern.object = object;
51
- }
52
- if (graph && graph.termType !== 'Variable' && graph.termType !== 'DefaultGraph') {
53
- pattern.graph = graph;
54
- }
55
- // Apply security filters (from upstream, e.g., ACL)
56
- const securityFilters = this.getSecurityFilters();
57
- if (securityFilters) {
58
- if (securityFilters.subject && !pattern.subject) {
59
- pattern.subject = securityFilters.subject;
60
- }
61
- if (securityFilters.predicate && !pattern.predicate) {
62
- pattern.predicate = securityFilters.predicate;
63
- }
64
- if (securityFilters.object && !pattern.object) {
65
- pattern.object = securityFilters.object;
66
- }
67
- if (securityFilters.graph && !pattern.graph) {
68
- pattern.graph = securityFilters.graph;
69
- }
70
- }
71
- if (this.debug) {
72
- console.log(`[QuintRdfStore] match() called`);
73
- console.log(` pattern:`, pattern);
74
- }
75
- // Use wrap to convert Promise<Array> to AsyncIterator
76
- const promiseIterator = (0, asynciterator_1.wrap)(this.store.get(pattern));
77
- return promiseIterator;
78
- }
79
- /**
80
- * Import quads from a stream (Sink interface)
81
- */
82
- import(stream) {
83
- const emitter = new events_1.EventEmitter();
84
- const quads = [];
85
- let ended = false;
86
- // Handle data events
87
- stream.on('data', (quad) => {
88
- quads.push(quad);
89
- });
90
- const handleEnd = () => {
91
- if (ended)
92
- return;
93
- ended = true;
94
- if (quads.length > 0) {
95
- this.store.multiPut(quads)
96
- .then(() => emitter.emit('end'))
97
- .catch((err) => emitter.emit('error', err));
98
- }
99
- else {
100
- emitter.emit('end');
101
- }
102
- };
103
- stream.on('end', handleEnd);
104
- stream.on('error', (err) => {
105
- emitter.emit('error', err);
106
- });
107
- // Handle already-ended streams (synchronous streams)
108
- // Use setImmediate to ensure we check after all synchronous data events
109
- setImmediate(() => {
110
- if (stream.readableEnded || stream.closed) {
111
- handleEnd();
112
- }
113
- });
114
- return emitter;
115
- }
116
- /**
117
- * Remove quads from a stream (Store interface)
118
- */
119
- remove(stream) {
120
- const emitter = new events_1.EventEmitter();
121
- const deletePromises = [];
122
- let ended = false;
123
- stream.on('data', (quad) => {
124
- const pattern = {
125
- subject: quad.subject,
126
- predicate: quad.predicate,
127
- object: quad.object,
128
- };
129
- if (quad.graph && quad.graph.termType !== 'DefaultGraph') {
130
- pattern.graph = quad.graph;
131
- }
132
- deletePromises.push(this.store.del(pattern));
133
- });
134
- const handleEnd = () => {
135
- if (ended)
136
- return;
137
- ended = true;
138
- Promise.all(deletePromises)
139
- .then(() => emitter.emit('end'))
140
- .catch((err) => emitter.emit('error', err));
141
- };
142
- stream.on('end', handleEnd);
143
- stream.on('error', (err) => {
144
- emitter.emit('error', err);
145
- });
146
- // Handle already-ended streams (synchronous streams)
147
- setImmediate(() => {
148
- if (stream.readableEnded || stream.closed) {
149
- handleEnd();
150
- }
151
- });
152
- return emitter;
153
- }
154
- /**
155
- * Remove all matching quads (Store interface)
156
- */
157
- removeMatches(subject, predicate, object, graph) {
158
- const emitter = new events_1.EventEmitter();
159
- if (this.debug) {
160
- console.log(`[QuintRdfStore] removeMatches()`, { subject, predicate, object, graph });
161
- }
162
- const pattern = {};
163
- if (subject && subject.termType !== 'Variable') {
164
- pattern.subject = subject;
165
- }
166
- if (predicate && predicate.termType !== 'Variable') {
167
- pattern.predicate = predicate;
168
- }
169
- if (object && object.termType !== 'Variable') {
170
- pattern.object = object;
171
- }
172
- if (graph && graph.termType !== 'Variable' && graph.termType !== 'DefaultGraph') {
173
- pattern.graph = graph;
174
- }
175
- this.store.del(pattern)
176
- .then(() => emitter.emit('end'))
177
- .catch((err) => emitter.emit('error', err));
178
- return emitter;
179
- }
180
- /**
181
- * Delete a named graph (Store interface)
182
- */
183
- deleteGraph(graph) {
184
- const emitter = new events_1.EventEmitter();
185
- const graphTerm = typeof graph === 'string'
186
- ? { termType: 'NamedNode', value: graph }
187
- : graph;
188
- const pattern = { graph: graphTerm };
189
- this.store.del(pattern)
190
- .then(() => emitter.emit('end'))
191
- .catch((err) => emitter.emit('error', err));
192
- return emitter;
193
- }
194
- }
195
- class ComunicaQuintEngine {
196
- constructor(store, options) {
197
- // Current query optimization params
198
- this.currentOptimizeParams = null;
199
- // Current query's FILTER expressions for pushdown
200
- this.currentFilterExpressions = new Map();
201
- this.store = store;
202
- this.debug = options?.debug ?? false;
203
- // Create RdfStore for UPDATE operations
204
- this.rdfStore = new QuintRdfStore(store, () => this.currentSecurityFilters, this.debug);
205
- // Create BindingsFactory
206
- this.bindingsFactory = new utils_bindings_factory_1.BindingsFactory(dataFactory);
207
- // Create QuintQuerySource with IQuerySource interface for proper FILTER pushdown
208
- this.querySource = new QuintQuerySource_1.QuintQuerySource(store, {
209
- debug: this.debug,
210
- bindingsFactory: this.bindingsFactory,
211
- getSecurityFilters: () => this.currentSecurityFilters,
212
- getOptimizeParams: () => this.currentOptimizeParams,
213
- getFilterExpression: (varName) => this.currentFilterExpressions.get(varName),
214
- });
215
- // Create QueryOptimizer for OPTIONAL and Compound Query optimization
216
- this.queryOptimizer = new QueryOptimizer_1.QueryOptimizer(store, {
217
- debug: this.debug,
218
- bindingsFactory: this.bindingsFactory,
219
- });
220
- this.engine = new query_sparql_rdfjs_1.QueryEngine();
221
- }
222
- /**
223
- * Analyze a query's pushdown potential (stateless)
224
- * Returns analysis of what can/cannot be pushed down without executing the query
225
- */
226
- analyzeQuery(query) {
227
- const algebra = (0, sparqlalgebrajs_1.translate)(query);
228
- return this.analyzeAlgebra(algebra);
229
- }
230
- /**
231
- * Analyze algebra tree for pushdown potential
232
- */
233
- analyzeAlgebra(op) {
234
- const result = {
235
- hasFilter: false,
236
- filterTypes: [],
237
- pushdownable: [],
238
- nonPushdownable: [],
239
- estimatedPushdownRate: 1.0,
240
- };
241
- this.walkAlgebra(op, result);
242
- // Calculate pushdown rate
243
- const total = result.pushdownable.length + result.nonPushdownable.length;
244
- if (total > 0) {
245
- result.estimatedPushdownRate = result.pushdownable.length / total;
246
- }
247
- return result;
248
- }
249
- /**
250
- * Walk algebra tree and collect filter info
251
- */
252
- walkAlgebra(op, result) {
253
- if (op.type === 'filter') {
254
- result.hasFilter = true;
255
- const filterOp = op;
256
- this.analyzeExpression(filterOp.expression, result);
257
- this.walkAlgebra(filterOp.input, result);
258
- }
259
- else if ('input' in op && op.input) {
260
- this.walkAlgebra(op.input, result);
261
- }
262
- if ('left' in op && op.left) {
263
- this.walkAlgebra(op.left, result);
264
- }
265
- if ('right' in op && op.right) {
266
- this.walkAlgebra(op.right, result);
267
- }
268
- }
269
- /**
270
- * Analyze a filter expression
271
- */
272
- analyzeExpression(expr, result) {
273
- if (expr.expressionType === 'operator') {
274
- const opExpr = expr;
275
- const op = opExpr.operator.toLowerCase();
276
- // Classify the operator
277
- if (['=', '!='].includes(op)) {
278
- result.filterTypes.push('equality');
279
- result.pushdownable.push(op);
280
- }
281
- else if (['<', '>', '<=', '>='].includes(op)) {
282
- result.filterTypes.push('range');
283
- result.pushdownable.push(op);
284
- }
285
- else if (['in', 'notin'].includes(op)) {
286
- result.filterTypes.push('equality');
287
- result.pushdownable.push(op);
288
- }
289
- else if (['strstarts', 'strends', 'contains', 'regex'].includes(op)) {
290
- result.filterTypes.push('string');
291
- result.pushdownable.push(op);
292
- }
293
- else if (op === 'bound') {
294
- result.filterTypes.push('bound');
295
- result.pushdownable.push(op);
296
- }
297
- else if (['isiri', 'isuri', 'isblank', 'isliteral', 'isnumeric'].includes(op)) {
298
- // Type checking functions - can be pushed down
299
- result.filterTypes.push('typecheck');
300
- result.pushdownable.push(op);
301
- }
302
- else if (op === 'langmatches') {
303
- // LANGMATCHES can be pushed down using $endsWith on serialized format
304
- result.filterTypes.push('language');
305
- result.pushdownable.push(op);
306
- }
307
- else if (['&&', '||', '!'].includes(op)) {
308
- result.filterTypes.push('logical');
309
- // Recurse into logical operators
310
- for (const arg of opExpr.args) {
311
- this.analyzeExpression(arg, result);
312
- }
313
- }
314
- else {
315
- // Non-pushdownable functions
316
- result.filterTypes.push('function');
317
- result.nonPushdownable.push(op);
318
- }
319
- }
320
- else if (expr.expressionType === 'existence') {
321
- result.filterTypes.push('exists');
322
- result.pushdownable.push('exists');
323
- }
324
- }
325
- /**
326
- * Execute SELECT query
327
- * Uses IQuerySource for proper FILTER pushdown
328
- *
329
- * OPTIONAL 优化:
330
- * 如果查询包含多个 OPTIONAL 且只是获取属性(不参与过滤),
331
- * 则先执行核心条件获取 subjects,再批量获取属性
332
- */
333
- async queryBindings(query, context) {
334
- const params = this.extractOptimizeParams(query);
335
- this.currentOptimizeParams = params;
336
- this.currentSecurityFilters = context?.filters;
337
- // Extract FILTER expressions from the query for pushdown
338
- // Note: We don't clear these in finally because the stream is lazy-evaluated
339
- // and sub-queries may need access to filters after this function returns
340
- this.extractAndStoreFilters(query);
341
- if (this.debug) {
342
- console.log(`[ComunicaQuintEngine] Query optimization:`, this.currentOptimizeParams);
343
- console.log(`[ComunicaQuintEngine] Security filters:`, this.currentSecurityFilters);
344
- console.log(`[ComunicaQuintEngine] Filter expressions for pushdown:`, this.currentFilterExpressions.size);
345
- }
346
- // 尝试 OPTIONAL 优化(使用 QueryOptimizer)
347
- try {
348
- const algebra = (0, sparqlalgebrajs_1.translate)(query, { quads: true });
349
- const optResult = this.queryOptimizer.analyzeQuery(algebra);
350
- if (optResult.type === 'optional' && optResult.analysis) {
351
- const optionalAnalysis = optResult.analysis;
352
- if (this.debug) {
353
- console.log(`[ComunicaQuintEngine] OPTIONAL optimization available:`, {
354
- subjectVar: optionalAnalysis.subjectVar,
355
- predicates: optionalAnalysis.optionalPredicates?.length,
356
- });
357
- }
358
- // 执行核心查询获取 subjects
359
- const coreBindings = await this.executeCoreQuery(optionalAnalysis.coreOperation, context);
360
- // 使用 QueryOptimizer 执行优化查询(排序也在 QueryOptimizer 中处理)
361
- const orderOptions = params?.orderVarName
362
- ? { varName: params.orderVarName, reverse: params.reverse }
363
- : undefined;
364
- let results = await this.queryOptimizer.executeOptionalOptimized(optionalAnalysis, coreBindings, orderOptions);
365
- // 应用 LIMIT 和 OFFSET
366
- if (params?.offset || params?.limit) {
367
- const start = params.offset ?? 0;
368
- const end = params.limit ? start + params.limit : undefined;
369
- results = results.slice(start, end);
370
- }
371
- if (this.debug) {
372
- console.log(`[ComunicaQuintEngine] OPTIONAL optimized: ${results.length} results`);
373
- }
374
- const resultStream = (0, asynciterator_1.wrap)(Promise.resolve(results));
375
- return resultStream;
376
- }
377
- }
378
- catch (error) {
379
- if (this.debug) {
380
- console.log(`[ComunicaQuintEngine] OPTIONAL optimization failed, falling back:`, error);
381
- }
382
- }
383
- // Create context with pre-identified source to bypass source identification
384
- // This allows us to use our IQuerySource directly
385
- // IMPORTANT: Use plain object instead of ActionContext to avoid version mismatch
386
- // between the root @comunica/core and the one bundled with @comunica/query-sparql-rdfjs
387
- // The engine will convert it to ActionContext using its internal @comunica/core
388
- const { sources: _ignored, filters: _filters, ...restContext } = context || {};
389
- const queryContext = {
390
- ...restContext,
391
- // Set the identified sources directly - this skips ActorContextPreprocessQuerySourceIdentify
392
- [CONTEXT_KEY_QUERY_SOURCES]: [{ source: this.querySource }],
393
- };
394
- return await this.engine.queryBindings(query, queryContext);
395
- }
396
- /**
397
- * 执行核心查询(不含 OPTIONAL)
398
- */
399
- async executeCoreQuery(coreOperation, _context) {
400
- const bindings = [];
401
- const savedOptimizeParams = this.currentOptimizeParams;
402
- const mockContext = {
403
- get: () => undefined,
404
- getSafe: () => { throw new Error('Not implemented'); },
405
- has: () => false,
406
- };
407
- try {
408
- if (savedOptimizeParams) {
409
- this.currentOptimizeParams = {
410
- ...savedOptimizeParams,
411
- limit: undefined,
412
- offset: undefined,
413
- };
414
- }
415
- const stream = this.querySource.queryBindings(coreOperation, mockContext, undefined);
416
- for await (const binding of stream) {
417
- bindings.push(binding);
418
- }
419
- }
420
- finally {
421
- this.currentOptimizeParams = savedOptimizeParams;
422
- }
423
- return bindings;
424
- }
425
- /**
426
- * Extract FILTER expressions from query and store them for later pushdown
427
- * Maps variable names to their filter expressions
428
- */
429
- extractAndStoreFilters(query) {
430
- this.currentFilterExpressions.clear();
431
- try {
432
- const algebra = (0, sparqlalgebrajs_1.translate)(query, { quads: true });
433
- this.collectFilterExpressions(algebra);
434
- }
435
- catch (error) {
436
- if (this.debug) {
437
- console.log(`[ComunicaQuintEngine] Failed to extract filters:`, error);
438
- }
439
- }
440
- }
441
- /**
442
- * Recursively collect FILTER expressions and their variable bindings
443
- */
444
- collectFilterExpressions(op) {
445
- if (op.type === 'filter') {
446
- const filterOp = op;
447
- const expression = filterOp.expression;
448
- // Extract variables from the expression
449
- const variables = this.getExpressionVariables(expression);
450
- // Store the expression for each variable
451
- for (const varName of variables) {
452
- // Merge with existing expressions for this variable
453
- const existing = this.currentFilterExpressions.get(varName);
454
- if (existing) {
455
- // Combine with AND
456
- this.currentFilterExpressions.set(varName, {
457
- type: 'expression',
458
- expressionType: 'operator',
459
- operator: '&&',
460
- args: [existing, expression],
461
- });
462
- }
463
- else {
464
- this.currentFilterExpressions.set(varName, expression);
465
- }
466
- }
467
- // Continue to nested operations
468
- this.collectFilterExpressions(filterOp.input);
469
- }
470
- else if ('input' in op && op.input) {
471
- if (Array.isArray(op.input)) {
472
- for (const child of op.input) {
473
- this.collectFilterExpressions(child);
474
- }
475
- }
476
- else {
477
- this.collectFilterExpressions(op.input);
478
- }
479
- }
480
- if ('left' in op && op.left) {
481
- this.collectFilterExpressions(op.left);
482
- }
483
- if ('right' in op && op.right) {
484
- this.collectFilterExpressions(op.right);
485
- }
486
- }
487
- /**
488
- * Get variable names from an expression
489
- */
490
- getExpressionVariables(expr) {
491
- const variables = [];
492
- const collectVars = (e) => {
493
- if (e.expressionType === 'term') {
494
- const term = e.term;
495
- if (term.termType === 'Variable') {
496
- variables.push(term.value);
497
- }
498
- }
499
- else if (e.expressionType === 'operator') {
500
- const opExpr = e;
501
- for (const arg of opExpr.args) {
502
- collectVars(arg);
503
- }
504
- }
505
- };
506
- collectVars(expr);
507
- return variables;
508
- }
509
- /**
510
- * Get the current filter expression for a variable (used by QuintQuerySource)
511
- */
512
- getFilterExpressionForVariable(varName) {
513
- return this.currentFilterExpressions.get(varName);
514
- }
515
- /**
516
- * Execute ASK query
517
- */
518
- async queryBoolean(query, context) {
519
- const params = this.extractOptimizeParams(query);
520
- this.currentOptimizeParams = params;
521
- this.currentSecurityFilters = context?.filters;
522
- // Optimize ASK with limit=1
523
- if (!this.currentOptimizeParams) {
524
- this.currentOptimizeParams = { limit: 1 };
525
- }
526
- else if (this.currentOptimizeParams.limit === undefined) {
527
- this.currentOptimizeParams.limit = 1;
528
- }
529
- try {
530
- const { sources: _ignored, filters: _filters, ...restContext } = context || {};
531
- const queryContext = {
532
- ...restContext,
533
- [CONTEXT_KEY_QUERY_SOURCES]: [{ source: this.querySource }],
534
- };
535
- return await this.engine.queryBoolean(query, queryContext);
536
- }
537
- finally {
538
- this.currentOptimizeParams = null;
539
- this.currentSecurityFilters = undefined;
540
- }
541
- }
542
- /**
543
- * Execute CONSTRUCT/DESCRIBE query
544
- */
545
- async queryQuads(query, context) {
546
- console.log(`[ComunicaQuintEngine.queryQuads] Starting: ${query.slice(0, 100)}...`);
547
- const params = this.extractOptimizeParams(query);
548
- this.currentOptimizeParams = params;
549
- this.currentSecurityFilters = context?.filters;
550
- try {
551
- const start = Date.now();
552
- const { sources: _ignored, filters: _filters, ...restContext } = context || {};
553
- const queryContext = {
554
- ...restContext,
555
- [CONTEXT_KEY_QUERY_SOURCES]: [{ source: this.querySource }],
556
- };
557
- const result = await this.engine.queryQuads(query, queryContext);
558
- console.log(`[ComunicaQuintEngine.queryQuads] Completed in ${Date.now() - start}ms`);
559
- return result;
560
- }
561
- catch (err) {
562
- console.error(`[ComunicaQuintEngine.queryQuads] Failed:`, err);
563
- throw err;
564
- }
565
- finally {
566
- this.currentOptimizeParams = null;
567
- this.currentSecurityFilters = undefined;
568
- }
569
- }
570
- /**
571
- * Execute UPDATE query (INSERT/DELETE)
572
- * Uses RDF.Store interface since UPDATE doesn't need FILTER pushdown
573
- */
574
- async queryVoid(query, context) {
575
- this.currentSecurityFilters = context?.filters;
576
- try {
577
- // Comunica does not properly await the RDF.Store remove() EventEmitter
578
- // before proceeding to the next operation. This causes DELETE WHERE to
579
- // complete after INSERT DATA, deleting newly inserted triples.
580
- // Fix: split compound updates and handle DELETE WHERE directly via QuintStore.
581
- const statements = this.splitUpdateStatements(query);
582
- for (const stmt of statements) {
583
- const deleteGraphUri = this.parseDeleteWhereGraph(stmt);
584
- if (deleteGraphUri) {
585
- // Execute DELETE WHERE directly via QuintStore.del()
586
- await this.store.del({ graph: { termType: 'NamedNode', value: deleteGraphUri } });
587
- }
588
- else {
589
- await this.engine.queryVoid(stmt, {
590
- sources: [this.rdfStore],
591
- ...context,
592
- });
593
- }
594
- }
595
- }
596
- catch (err) {
597
- throw err;
598
- }
599
- finally {
600
- this.currentSecurityFilters = undefined;
601
- }
602
- }
603
- /**
604
- * Parse "DELETE WHERE { GRAPH <uri> { ?s ?p ?o. } }" and return the graph URI.
605
- * Returns null if the statement doesn't match this pattern.
606
- */
607
- parseDeleteWhereGraph(stmt) {
608
- const m = stmt.match(/^\s*DELETE\s+WHERE\s*\{\s*GRAPH\s*<([^>]+)>\s*\{\s*\?(\w+)\s+\?(\w+)\s+\?(\w+)\s*\.?\s*\}\s*\}\s*$/i);
609
- return m ? m[1] : null;
610
- }
611
- /**
612
- * Split a compound SPARQL UPDATE into individual statements.
613
- */
614
- splitUpdateStatements(query) {
615
- const statements = [];
616
- let depth = 0;
617
- let start = 0;
618
- for (let i = 0; i < query.length; i++) {
619
- if (query[i] === '{')
620
- depth++;
621
- else if (query[i] === '}')
622
- depth--;
623
- else if (query[i] === ';' && depth === 0) {
624
- const stmt = query.slice(start, i).trim();
625
- if (stmt)
626
- statements.push(stmt);
627
- start = i + 1;
628
- }
629
- }
630
- const last = query.slice(start).trim();
631
- if (last)
632
- statements.push(last);
633
- return statements;
634
- }
635
- /**
636
- * Extract optimization params from SPARQL query
637
- */
638
- extractOptimizeParams(query) {
639
- try {
640
- const algebra = (0, sparqlalgebrajs_1.translate)(query, { quads: true });
641
- return this.extractOptimizeParamsFromAlgebra(algebra);
642
- }
643
- catch (error) {
644
- if (this.debug) {
645
- console.log(`[ComunicaQuintEngine] Failed to analyze query:`, error);
646
- }
647
- return null;
648
- }
649
- }
650
- /**
651
- * Extract optimization params from SPARQL algebra
652
- */
653
- extractOptimizeParamsFromAlgebra(algebra) {
654
- let limit;
655
- let offset;
656
- let order;
657
- let orderVarName;
658
- let reverse;
659
- let currentOp = algebra;
660
- let canPushLimit = true;
661
- while (currentOp) {
662
- switch (currentOp.type) {
663
- case 'slice': {
664
- const slice = currentOp;
665
- if (slice.length !== undefined) {
666
- limit = slice.length;
667
- }
668
- if (slice.start !== undefined) {
669
- offset = slice.start;
670
- }
671
- currentOp = slice.input;
672
- break;
673
- }
674
- case 'orderby': {
675
- const orderBy = currentOp;
676
- if (orderBy.expressions.length === 1) {
677
- const expr = orderBy.expressions[0];
678
- // 提取变量名和排序方向
679
- // ORDER BY ?name: { expressionType: "term", term: { value: "name" } }
680
- // ORDER BY DESC(?name): { expressionType: "operator", operator: "desc", args: [{ expressionType: "term", term: {...} }] }
681
- let varName;
682
- reverse = false;
683
- if (expr.expressionType === 'term') {
684
- const termExpr = expr;
685
- if (termExpr.term?.termType === 'Variable') {
686
- varName = termExpr.term.value;
687
- }
688
- }
689
- else if (expr.expressionType === 'operator') {
690
- const opExpr = expr;
691
- if (opExpr.operator === 'desc' && opExpr.args.length === 1) {
692
- reverse = true;
693
- const innerExpr = opExpr.args[0];
694
- if (innerExpr.expressionType === 'term') {
695
- const termExpr = innerExpr;
696
- if (termExpr.term?.termType === 'Variable') {
697
- varName = termExpr.term.value;
698
- }
699
- }
700
- }
701
- else if (opExpr.operator === 'asc' && opExpr.args.length === 1) {
702
- const innerExpr = opExpr.args[0];
703
- if (innerExpr.expressionType === 'term') {
704
- const termExpr = innerExpr;
705
- if (termExpr.term?.termType === 'Variable') {
706
- varName = termExpr.term.value;
707
- }
708
- }
709
- }
710
- }
711
- if (varName) {
712
- orderVarName = varName; // 保存原始变量名
713
- // 尝试直接映射(s/p/o/g)
714
- const termName = this.variableToTermName(varName);
715
- if (termName) {
716
- order = [termName];
717
- }
718
- // 如果直接映射失败,QuintQuerySource 会通过 pattern 分析来确定
719
- }
720
- }
721
- currentOp = orderBy.input;
722
- break;
723
- }
724
- case 'project':
725
- case 'distinct':
726
- case 'reduced': {
727
- currentOp = currentOp.input;
728
- break;
729
- }
730
- case 'bgp': {
731
- const bgp = currentOp;
732
- if (bgp.patterns.length === 1) {
733
- return { limit, offset, order, orderVarName, reverse };
734
- }
735
- canPushLimit = false;
736
- return canPushLimit ? { limit, offset, order, orderVarName, reverse } : null;
737
- }
738
- case 'join':
739
- case 'leftjoin':
740
- case 'union':
741
- case 'minus':
742
- // 虽然不能下推 LIMIT,但仍然返回 ORDER BY 参数
743
- // 因为 OPTIONAL 优化路径会自己处理排序
744
- canPushLimit = false;
745
- if (orderVarName) {
746
- return { limit, offset, order, orderVarName, reverse };
747
- }
748
- return null;
749
- case 'filter':
750
- case 'extend':
751
- case 'group':
752
- // 同样,返回 ORDER BY 参数供 OPTIONAL 优化路径使用
753
- if (orderVarName) {
754
- return { limit, offset, order, orderVarName, reverse };
755
- }
756
- return null;
757
- default:
758
- return null;
759
- }
760
- }
761
- return null;
762
- }
763
- /**
764
- * Map SPARQL variable name to TermName
765
- */
766
- variableToTermName(varName) {
767
- const mapping = {
768
- 's': 'subject',
769
- 'subject': 'subject',
770
- 'p': 'predicate',
771
- 'predicate': 'predicate',
772
- 'o': 'object',
773
- 'object': 'object',
774
- 'g': 'graph',
775
- 'graph': 'graph',
776
- };
777
- return mapping[varName.toLowerCase()] ?? null;
778
- }
779
- }
780
- exports.ComunicaQuintEngine = ComunicaQuintEngine;
781
- //# sourceMappingURL=ComunicaQuintEngine.js.map