@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.
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 +22 -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,19 +1,66 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RdfQuadIndex = void 0;
4
- const node_fs_1 = require("node:fs");
5
- const node_path_1 = require("node:path");
4
+ exports.assertRdfFactsSchemaCompatible = assertRdfFactsSchemaCompatible;
6
5
  const n3_1 = require("n3");
7
6
  const SqliteRuntime_1 = require("../SqliteRuntime");
8
7
  const types_1 = require("../quint/types");
9
8
  const RdfTermDictionary_1 = require("./RdfTermDictionary");
10
- const Rdf3xSchema_1 = require("./Rdf3xSchema");
11
9
  const RdfJoinShape_1 = require("./RdfJoinShape");
10
+ const RdfSqliteConnection_1 = require("./RdfSqliteConnection");
12
11
  const RdfTermSemantics_1 = require("./RdfTermSemantics");
13
12
  const XSD_INTEGER = 'http://www.w3.org/2001/XMLSchema#integer';
14
13
  const XSD_DECIMAL = 'http://www.w3.org/2001/XMLSchema#decimal';
15
14
  const XSD_STRING = 'http://www.w3.org/2001/XMLSchema#string';
16
15
  const RDF_QUAD_INDEX_SCHEMA_VERSION = 1;
16
+ const RDF_QUAD_REQUIRED_COLUMNS = {
17
+ rdf_terms: [
18
+ 'id',
19
+ 'kind',
20
+ 'value',
21
+ 'value_head',
22
+ 'datatype_id',
23
+ 'lang',
24
+ 'hash',
25
+ 'normalized_text',
26
+ 'numeric_value',
27
+ 'created_at',
28
+ ],
29
+ rdf_sources: [
30
+ 'id',
31
+ 'source',
32
+ 'workspace',
33
+ 'local_path',
34
+ 'content_type',
35
+ 'last_indexed_at',
36
+ 'source_version',
37
+ ],
38
+ rdf_quads: [
39
+ 'graph_id',
40
+ 'subject_id',
41
+ 'predicate_id',
42
+ 'object_id',
43
+ 'source_file_id',
44
+ 'source_line_no',
45
+ ],
46
+ rdf_index_metadata: ['key', 'value'],
47
+ };
48
+ const RDF_QUAD_REQUIRED_INDEXES = {
49
+ rdf_terms_identity_hash: { table: 'rdf_terms', columns: ['hash'], unique: true },
50
+ rdf_terms_kind_value_head: { table: 'rdf_terms', columns: ['kind', 'value_head'], unique: false },
51
+ rdf_terms_kind_datatype: { table: 'rdf_terms', columns: ['kind', 'datatype_id'], unique: false },
52
+ rdf_terms_kind_lang: { table: 'rdf_terms', columns: ['kind', 'lang'], unique: false },
53
+ rdf_terms_kind_numeric_value: { table: 'rdf_terms', columns: ['kind', 'numeric_value'], unique: false },
54
+ rdf_quads_spog: { table: 'rdf_quads', columns: ['subject_id', 'predicate_id', 'object_id', 'graph_id'], unique: false },
55
+ rdf_quads_sopg: { table: 'rdf_quads', columns: ['subject_id', 'object_id', 'predicate_id', 'graph_id'], unique: false },
56
+ rdf_quads_psog: { table: 'rdf_quads', columns: ['predicate_id', 'subject_id', 'object_id', 'graph_id'], unique: false },
57
+ rdf_quads_posg: { table: 'rdf_quads', columns: ['predicate_id', 'object_id', 'subject_id', 'graph_id'], unique: false },
58
+ rdf_quads_ospg: { table: 'rdf_quads', columns: ['object_id', 'subject_id', 'predicate_id', 'graph_id'], unique: false },
59
+ rdf_quads_opsg: { table: 'rdf_quads', columns: ['object_id', 'predicate_id', 'subject_id', 'graph_id'], unique: false },
60
+ rdf_quads_gspo: { table: 'rdf_quads', columns: ['graph_id', 'subject_id', 'predicate_id', 'object_id'], unique: false },
61
+ rdf_quads_gpos: { table: 'rdf_quads', columns: ['graph_id', 'predicate_id', 'object_id', 'subject_id'], unique: false },
62
+ rdf_quads_source: { table: 'rdf_quads', columns: ['source_file_id'], unique: false },
63
+ };
17
64
  const TERM_COLUMN = {
18
65
  graph: 'graph_id',
19
66
  subject: 'subject_id',
@@ -31,6 +78,108 @@ function emptyTermRewriteResult() {
31
78
  affectedQuads: 0,
32
79
  };
33
80
  }
81
+ function assertRdfFactsSchemaCompatible(db) {
82
+ if (!sqliteTableExists(db, 'rdf_index_metadata')) {
83
+ throw new Error('Unsupported RDF facts schema: missing table rdf_index_metadata');
84
+ }
85
+ const schemaVersion = rdfFactsMetadataValue(db, 'schema_version');
86
+ if (schemaVersion === undefined) {
87
+ throw new Error('Unsupported RDF facts schema: missing schema_version metadata');
88
+ }
89
+ if (schemaVersion !== String(RDF_QUAD_INDEX_SCHEMA_VERSION)) {
90
+ throw new Error(`Unsupported RDF facts schema version: ${schemaVersion}`);
91
+ }
92
+ const dataVersion = rdfFactsMetadataValue(db, 'data_version');
93
+ if (dataVersion === undefined) {
94
+ throw new Error('Unsupported RDF facts schema: missing data_version metadata');
95
+ }
96
+ if (!/^(0|[1-9]\d*)$/.test(dataVersion)) {
97
+ throw new Error(`Unsupported RDF facts data version: ${dataVersion}`);
98
+ }
99
+ for (const [table, columns] of Object.entries(RDF_QUAD_REQUIRED_COLUMNS)) {
100
+ assertRdfFactsTableColumns(db, table, columns);
101
+ }
102
+ for (const [index, definition] of Object.entries(RDF_QUAD_REQUIRED_INDEXES)) {
103
+ assertRdfFactsIndex(db, index, definition);
104
+ }
105
+ const legacyRows = db.prepare(`
106
+ SELECT name
107
+ FROM sqlite_schema
108
+ WHERE name IN ('rdf_terms_hash', 'rdf_terms_kind_value', 'rdf_terms_normalized_text')
109
+ `).all();
110
+ if (legacyRows.length > 0) {
111
+ throw new Error(`Unsupported RDF facts schema: legacy indexes ${legacyRows.map((row) => row.name).join(', ')}`);
112
+ }
113
+ const uniqueTermIndexes = db
114
+ .prepare('PRAGMA index_list(rdf_terms)')
115
+ .all()
116
+ .filter((row) => row.unique === 1);
117
+ for (const index of uniqueTermIndexes) {
118
+ const columns = sqliteIndexColumns(db, index.name);
119
+ if (sameStringList(columns, ['kind', 'value', 'datatype_id', 'lang'])) {
120
+ throw new Error(`Unsupported RDF facts schema: raw-value unique index ${index.name}`);
121
+ }
122
+ }
123
+ }
124
+ function sqliteTableExists(db, table) {
125
+ return Boolean(db
126
+ .prepare("SELECT name FROM sqlite_schema WHERE type = 'table' AND name = ?")
127
+ .get(table));
128
+ }
129
+ function rdfFactsMetadataValue(db, key) {
130
+ return db
131
+ .prepare('SELECT value FROM rdf_index_metadata WHERE key = ?')
132
+ .get(key)?.value;
133
+ }
134
+ function assertRdfFactsTableColumns(db, table, requiredColumns) {
135
+ const rows = db.prepare(`PRAGMA table_info(${table})`).all();
136
+ if (rows.length === 0) {
137
+ throw new Error(`Unsupported RDF facts schema: missing table ${table}`);
138
+ }
139
+ const columns = rows.map((row) => row.name);
140
+ const missing = requiredColumns.filter((column) => !columns.includes(column));
141
+ if (missing.length > 0) {
142
+ throw new Error(`Unsupported RDF facts schema: ${table} missing columns ${missing.join(', ')}`);
143
+ }
144
+ const unexpected = columns.filter((column) => !requiredColumns.includes(column));
145
+ if (unexpected.length > 0) {
146
+ throw new Error(`Unsupported RDF facts schema: ${table} has unexpected columns ${unexpected.join(', ')}`);
147
+ }
148
+ if (!sameStringList(columns, requiredColumns)) {
149
+ throw new Error(`Unsupported RDF facts schema: ${table} column order is not canonical`);
150
+ }
151
+ }
152
+ function assertRdfFactsIndex(db, index, definition) {
153
+ const row = db
154
+ .prepare("SELECT name, tbl_name FROM sqlite_schema WHERE type = 'index' AND name = ?")
155
+ .get(index);
156
+ if (!row) {
157
+ throw new Error(`Unsupported RDF facts schema: missing index ${index}`);
158
+ }
159
+ if (row.tbl_name !== definition.table) {
160
+ throw new Error(`Unsupported RDF facts schema: index ${index} belongs to ${row.tbl_name}`);
161
+ }
162
+ const indexListRow = db
163
+ .prepare(`PRAGMA index_list(${definition.table})`)
164
+ .all()
165
+ .find((candidate) => candidate.name === index);
166
+ if (!indexListRow || (indexListRow.unique === 1) !== definition.unique) {
167
+ throw new Error(`Unsupported RDF facts schema: index ${index} uniqueness is not canonical`);
168
+ }
169
+ const columns = sqliteIndexColumns(db, index);
170
+ if (!sameStringList(columns, definition.columns)) {
171
+ throw new Error(`Unsupported RDF facts schema: index ${index} columns are not canonical`);
172
+ }
173
+ }
174
+ function sqliteIndexColumns(db, index) {
175
+ return db
176
+ .prepare('SELECT name FROM pragma_index_info(?) ORDER BY seqno')
177
+ .all(index)
178
+ .map((row) => row.name);
179
+ }
180
+ function sameStringList(actual, expected) {
181
+ return actual.length === expected.length && actual.every((value, index) => value === expected[index]);
182
+ }
34
183
  class RdfQuadIndex {
35
184
  constructor(options) {
36
185
  this.options = options;
@@ -43,17 +192,16 @@ class RdfQuadIndex {
43
192
  if (this.db) {
44
193
  return;
45
194
  }
46
- if (this.options.path !== ':memory:') {
47
- const dir = (0, node_path_1.dirname)(this.options.path);
48
- if (!(0, node_fs_1.existsSync)(dir)) {
49
- (0, node_fs_1.mkdirSync)(dir, { recursive: true });
50
- }
195
+ this.db = (0, RdfSqliteConnection_1.openRdfSqliteDatabase)(this.sqliteRuntime, this.options.path);
196
+ try {
197
+ this.prepareFactsSchema();
198
+ this.dictionary = new RdfTermDictionary_1.RdfTermDictionary(this.db);
199
+ }
200
+ catch (error) {
201
+ this.db.close();
202
+ this.db = null;
203
+ throw error;
51
204
  }
52
- this.db = this.sqliteRuntime.openDatabase(this.options.path);
53
- this.prepareSchemaVersion();
54
- this.dictionary = new RdfTermDictionary_1.RdfTermDictionary(this.db);
55
- this.dictionary.initialize();
56
- this.initializeSchema();
57
205
  }
58
206
  close() {
59
207
  this.db?.close();
@@ -241,12 +389,6 @@ class RdfQuadIndex {
241
389
  .get();
242
390
  return Number(row?.value ?? 0) || 0;
243
391
  }
244
- migrationState(name) {
245
- return this.requireDb().prepare('SELECT value FROM rdf_index_metadata WHERE key = ?').get(`migration:${name}`)?.value;
246
- }
247
- setMigrationState(name, state) {
248
- this.setMetadataValue(`migration:${name}`, state);
249
- }
250
392
  scan(pattern, options) {
251
393
  if (isRdfPatternQueryInput(pattern)) {
252
394
  return this.scanInternal(pattern.pattern, options ?? pattern.options);
@@ -518,6 +660,7 @@ class RdfQuadIndex {
518
660
  equalityColumns.add(TERM_COLUMN[key]);
519
661
  }
520
662
  }
663
+ this.addSourceScopeConditions(entry.pattern.sourceScope, alias, alias, joins, conditions, params, queryPlan);
521
664
  indexChoices.push(this.chooseIndex(equalityColumns));
522
665
  }
523
666
  const projectVariables = options?.project ?? [...variableColumns.keys()];
@@ -1055,9 +1198,37 @@ class RdfQuadIndex {
1055
1198
  return 4096;
1056
1199
  }
1057
1200
  }
1058
- initializeSchema() {
1059
- this.requireDb().exec(`
1060
- CREATE TABLE IF NOT EXISTS rdf_sources (
1201
+ prepareFactsSchema() {
1202
+ if (this.hasExistingFactsSchema()) {
1203
+ assertRdfFactsSchemaCompatible(this.requireDb());
1204
+ return;
1205
+ }
1206
+ this.createFreshFactsSchema();
1207
+ }
1208
+ createFreshFactsSchema() {
1209
+ const db = this.requireDb();
1210
+ db.transaction(() => {
1211
+ db.exec(`
1212
+ CREATE TABLE rdf_terms (
1213
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
1214
+ kind TEXT NOT NULL,
1215
+ value TEXT NOT NULL,
1216
+ value_head TEXT NOT NULL,
1217
+ datatype_id INTEGER,
1218
+ lang TEXT,
1219
+ hash TEXT NOT NULL,
1220
+ normalized_text TEXT,
1221
+ numeric_value REAL,
1222
+ created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
1223
+ );
1224
+
1225
+ CREATE UNIQUE INDEX rdf_terms_identity_hash ON rdf_terms (hash);
1226
+ CREATE INDEX rdf_terms_kind_value_head ON rdf_terms (kind, value_head);
1227
+ CREATE INDEX rdf_terms_kind_datatype ON rdf_terms (kind, datatype_id);
1228
+ CREATE INDEX rdf_terms_kind_lang ON rdf_terms (kind, lang);
1229
+ CREATE INDEX rdf_terms_kind_numeric_value ON rdf_terms (kind, numeric_value);
1230
+
1231
+ CREATE TABLE rdf_sources (
1061
1232
  id INTEGER PRIMARY KEY AUTOINCREMENT,
1062
1233
  source TEXT NOT NULL UNIQUE,
1063
1234
  workspace TEXT NOT NULL,
@@ -1067,7 +1238,7 @@ class RdfQuadIndex {
1067
1238
  source_version TEXT
1068
1239
  );
1069
1240
 
1070
- CREATE TABLE IF NOT EXISTS rdf_quads (
1241
+ CREATE TABLE rdf_quads (
1071
1242
  graph_id INTEGER NOT NULL,
1072
1243
  subject_id INTEGER NOT NULL,
1073
1244
  predicate_id INTEGER NOT NULL,
@@ -1082,94 +1253,49 @@ class RdfQuadIndex {
1082
1253
  FOREIGN KEY (source_file_id) REFERENCES rdf_sources(id)
1083
1254
  );
1084
1255
 
1085
- CREATE INDEX IF NOT EXISTS rdf_quads_spog ON rdf_quads(subject_id, predicate_id, object_id, graph_id);
1086
- CREATE INDEX IF NOT EXISTS rdf_quads_sopg ON rdf_quads(subject_id, object_id, predicate_id, graph_id);
1087
- CREATE INDEX IF NOT EXISTS rdf_quads_psog ON rdf_quads(predicate_id, subject_id, object_id, graph_id);
1088
- CREATE INDEX IF NOT EXISTS rdf_quads_posg ON rdf_quads(predicate_id, object_id, subject_id, graph_id);
1089
- CREATE INDEX IF NOT EXISTS rdf_quads_ospg ON rdf_quads(object_id, subject_id, predicate_id, graph_id);
1090
- CREATE INDEX IF NOT EXISTS rdf_quads_opsg ON rdf_quads(object_id, predicate_id, subject_id, graph_id);
1091
- CREATE INDEX IF NOT EXISTS rdf_quads_gspo ON rdf_quads(graph_id, subject_id, predicate_id, object_id);
1092
- CREATE INDEX IF NOT EXISTS rdf_quads_gpos ON rdf_quads(graph_id, predicate_id, object_id, subject_id);
1093
- CREATE INDEX IF NOT EXISTS rdf_quads_source ON rdf_quads(source_file_id);
1256
+ CREATE INDEX rdf_quads_spog ON rdf_quads(subject_id, predicate_id, object_id, graph_id);
1257
+ CREATE INDEX rdf_quads_sopg ON rdf_quads(subject_id, object_id, predicate_id, graph_id);
1258
+ CREATE INDEX rdf_quads_psog ON rdf_quads(predicate_id, subject_id, object_id, graph_id);
1259
+ CREATE INDEX rdf_quads_posg ON rdf_quads(predicate_id, object_id, subject_id, graph_id);
1260
+ CREATE INDEX rdf_quads_ospg ON rdf_quads(object_id, subject_id, predicate_id, graph_id);
1261
+ CREATE INDEX rdf_quads_opsg ON rdf_quads(object_id, predicate_id, subject_id, graph_id);
1262
+ CREATE INDEX rdf_quads_gspo ON rdf_quads(graph_id, subject_id, predicate_id, object_id);
1263
+ CREATE INDEX rdf_quads_gpos ON rdf_quads(graph_id, predicate_id, object_id, subject_id);
1264
+ CREATE INDEX rdf_quads_source ON rdf_quads(source_file_id);
1094
1265
 
1095
- CREATE TABLE IF NOT EXISTS rdf_index_metadata (
1266
+ CREATE TABLE rdf_index_metadata (
1096
1267
  key TEXT PRIMARY KEY,
1097
1268
  value TEXT NOT NULL
1098
1269
  );
1099
- `);
1100
- this.requireDb().prepare(`
1101
- INSERT OR IGNORE INTO rdf_index_metadata (key, value)
1102
- SELECT 'data_version', '1'
1103
- WHERE EXISTS (SELECT 1 FROM rdf_quads LIMIT 1)
1104
- `).run();
1105
- }
1106
- prepareSchemaVersion() {
1107
- this.ensureMetadataTable();
1108
- const db = this.requireDb();
1109
- const row = db
1110
- .prepare("SELECT value FROM rdf_index_metadata WHERE key = 'schema_version'")
1111
- .get();
1112
- if (row && row.value !== String(RDF_QUAD_INDEX_SCHEMA_VERSION)) {
1113
- this.dropIndexSchema();
1114
- this.ensureMetadataTable();
1115
- }
1116
- this.setMetadataValue('schema_version', String(RDF_QUAD_INDEX_SCHEMA_VERSION));
1117
- }
1118
- ensureMetadataTable() {
1119
- this.requireDb().exec(`
1120
- CREATE TABLE IF NOT EXISTS rdf_index_metadata (
1121
- key TEXT PRIMARY KEY,
1122
- value TEXT NOT NULL
1123
- );
1124
- `);
1270
+
1271
+ INSERT INTO rdf_index_metadata (key, value) VALUES ('data_version', '0');
1272
+ INSERT INTO rdf_index_metadata (key, value) VALUES ('schema_version', '${RDF_QUAD_INDEX_SCHEMA_VERSION}');
1273
+ `);
1274
+ })();
1125
1275
  }
1126
- dropIndexSchema() {
1276
+ hasExistingFactsSchema() {
1127
1277
  const db = this.requireDb();
1128
- const foreignKeys = db.prepare('PRAGMA foreign_keys').get()?.foreign_keys ?? 0;
1129
- db.exec('PRAGMA foreign_keys = OFF;');
1130
- try {
1131
- db.exec(`
1132
- DROP INDEX IF EXISTS rdf_quads_spog;
1133
- DROP INDEX IF EXISTS rdf_quads_sopg;
1134
- DROP INDEX IF EXISTS rdf_quads_psog;
1135
- DROP INDEX IF EXISTS rdf_quads_posg;
1136
- DROP INDEX IF EXISTS rdf_quads_ospg;
1137
- DROP INDEX IF EXISTS rdf_quads_opsg;
1138
- DROP INDEX IF EXISTS rdf_quads_gspo;
1139
- DROP INDEX IF EXISTS rdf_quads_gpos;
1140
- DROP INDEX IF EXISTS rdf_quads_source;
1141
- DROP TABLE IF EXISTS rdf_quads;
1142
- DROP TABLE IF EXISTS rdf_sources;
1143
- DROP TABLE IF EXISTS rdf_terms;
1144
- DROP TABLE IF EXISTS rdf_index_metadata;
1145
- `);
1146
- (0, Rdf3xSchema_1.dropRdf3xDerivedSchemaObjects)(db);
1147
- }
1148
- finally {
1149
- if (foreignKeys) {
1150
- db.exec('PRAGMA foreign_keys = ON;');
1151
- }
1152
- }
1153
- this.cardinalityCache.clear();
1278
+ const row = db.prepare(`
1279
+ SELECT COUNT(*) AS count
1280
+ FROM sqlite_schema
1281
+ WHERE name IN ('rdf_terms', 'rdf_sources', 'rdf_quads', 'rdf_index_metadata')
1282
+ OR tbl_name IN ('rdf_terms', 'rdf_sources', 'rdf_quads', 'rdf_index_metadata')
1283
+ `).get();
1284
+ return (row?.count ?? 0) > 0;
1154
1285
  }
1155
1286
  bumpDataVersion() {
1156
- this.requireDb().prepare(`
1157
- INSERT INTO rdf_index_metadata (key, value)
1158
- VALUES ('data_version', '1')
1159
- ON CONFLICT (key)
1160
- DO UPDATE SET value = CAST(value AS INTEGER) + 1
1287
+ const result = this.requireDb().prepare(`
1288
+ UPDATE rdf_index_metadata
1289
+ SET value = CAST(value AS INTEGER) + 1
1290
+ WHERE key = 'data_version'
1161
1291
  `).run();
1162
- }
1163
- setMetadataValue(key, value) {
1164
- this.requireDb().prepare(`
1165
- INSERT INTO rdf_index_metadata (key, value)
1166
- VALUES (?, ?)
1167
- ON CONFLICT (key)
1168
- DO UPDATE SET value = excluded.value
1169
- `).run(key, value);
1292
+ if (result.changes !== 1) {
1293
+ throw new Error('Unsupported RDF facts schema: missing data_version metadata');
1294
+ }
1170
1295
  }
1171
1296
  upsertSource(source) {
1172
1297
  const db = this.requireDb();
1298
+ this.requireDictionary().getOrCreate(n3_1.DataFactory.namedNode(source.source));
1173
1299
  db.prepare(`
1174
1300
  INSERT INTO rdf_sources (
1175
1301
  source,
@@ -1195,6 +1321,7 @@ class RdfQuadIndex {
1195
1321
  return row.id;
1196
1322
  }
1197
1323
  updateSourceRow(id, source) {
1324
+ this.requireDictionary().getOrCreate(n3_1.DataFactory.namedNode(source.source));
1198
1325
  this.requireDb().prepare(`
1199
1326
  UPDATE rdf_sources
1200
1327
  SET source = ?,
@@ -1232,6 +1359,7 @@ class RdfQuadIndex {
1232
1359
  equalityColumns.add(column);
1233
1360
  }
1234
1361
  }
1362
+ this.addSourceScopeConditions(pattern.sourceScope, 'rdf_quads', 'source_scope', joins, conditions, params, queryPlan);
1235
1363
  return {
1236
1364
  joins: joins.join(''),
1237
1365
  whereClause: conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '',
@@ -1240,6 +1368,59 @@ class RdfQuadIndex {
1240
1368
  queryPlan,
1241
1369
  };
1242
1370
  }
1371
+ addSourceScopeConditions(scope, quadAlias, aliasPrefix, joins, conditions, params, queryPlan) {
1372
+ if (!scope) {
1373
+ return;
1374
+ }
1375
+ const allowedSources = uniqueStrings(scope.allowedSources ?? []);
1376
+ const deniedSources = uniqueStrings(scope.deniedSources ?? []);
1377
+ const deniedPrefixes = uniqueStrings(scope.deniedSourcePrefixes ?? []);
1378
+ const sourcePrefix = scope.sourcePrefix;
1379
+ const localPathPrefix = scope.localPathPrefix;
1380
+ if (allowedSources.length === 0
1381
+ && !scope.allowedSources
1382
+ && deniedSources.length === 0
1383
+ && deniedPrefixes.length === 0
1384
+ && !sourcePrefix
1385
+ && !localPathPrefix) {
1386
+ return;
1387
+ }
1388
+ if (scope.allowedSources && allowedSources.length === 0) {
1389
+ conditions.push('1 = 0');
1390
+ queryPlan.push('SourceScope(allowed:none)');
1391
+ return;
1392
+ }
1393
+ const sourceAlias = this.scopedSqlName('rdf_sources', { aliasPrefix });
1394
+ const sourceIdColumn = `${quadAlias}.source_file_id`;
1395
+ joins.push(` LEFT JOIN rdf_sources ${sourceAlias} ON ${sourceAlias}.id = ${sourceIdColumn}`);
1396
+ if (allowedSources.length > 0) {
1397
+ conditions.push(`${sourceAlias}.source IN (${allowedSources.map(() => '?').join(', ')})`);
1398
+ params.push(...allowedSources);
1399
+ queryPlan.push(`SourceScope(allowed:${allowedSources.length})`);
1400
+ }
1401
+ if (sourcePrefix) {
1402
+ conditions.push(`${sourceAlias}.source LIKE ? ESCAPE '\\'`);
1403
+ params.push(`${escapeLikePattern(sourcePrefix)}%`);
1404
+ queryPlan.push('SourceScope(prefix)');
1405
+ }
1406
+ if (localPathPrefix) {
1407
+ conditions.push(`${sourceAlias}.local_path LIKE ? ESCAPE '\\'`);
1408
+ params.push(`${escapeLikePattern(localPathPrefix)}%`);
1409
+ queryPlan.push('SourceScope(local-path-prefix)');
1410
+ }
1411
+ if (deniedSources.length > 0) {
1412
+ conditions.push(`(${sourceIdColumn} IS NULL OR ${sourceAlias}.source NOT IN (${deniedSources.map(() => '?').join(', ')}))`);
1413
+ params.push(...deniedSources);
1414
+ queryPlan.push(`SourceScope(denied:${deniedSources.length})`);
1415
+ }
1416
+ for (const deniedPrefix of deniedPrefixes) {
1417
+ conditions.push(`(${sourceIdColumn} IS NULL OR ${sourceAlias}.source NOT LIKE ? ESCAPE '\\')`);
1418
+ params.push(`${escapeLikePattern(deniedPrefix)}%`);
1419
+ }
1420
+ if (deniedPrefixes.length > 0) {
1421
+ queryPlan.push(`SourceScope(denied-prefix:${deniedPrefixes.length})`);
1422
+ }
1423
+ }
1243
1424
  matchToCondition(key, column, match, allowUnresolved, scope) {
1244
1425
  const columnRef = this.scopedQuadColumn(column, scope);
1245
1426
  if ((0, types_1.isTerm)(match)) {
@@ -1794,6 +1975,9 @@ class RdfQuadIndex {
1794
1975
  return 'full-scan';
1795
1976
  }
1796
1977
  exactTermPattern(pattern) {
1978
+ if (pattern.sourceScope) {
1979
+ return undefined;
1980
+ }
1797
1981
  const ids = {};
1798
1982
  const columns = new Set();
1799
1983
  for (const key of TERM_KEYS) {
@@ -2042,6 +2226,9 @@ function escapeLikePattern(value) {
2042
2226
  function uniqueNumbers(values) {
2043
2227
  return [...new Set(values)];
2044
2228
  }
2229
+ function uniqueStrings(values) {
2230
+ return [...new Set(values.filter((value) => value.length > 0))].sort();
2231
+ }
2045
2232
  function uniquePatternKeys(values) {
2046
2233
  return TERM_KEYS.filter((key) => values.includes(key));
2047
2234
  }
@@ -111,14 +111,6 @@
111
111
  "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_dataVersion",
112
112
  "memberFieldName": "dataVersion"
113
113
  },
114
- {
115
- "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_migrationState",
116
- "memberFieldName": "migrationState"
117
- },
118
- {
119
- "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_setMigrationState",
120
- "memberFieldName": "setMigrationState"
121
- },
122
114
  {
123
115
  "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_scan",
124
116
  "memberFieldName": "scan"
@@ -268,29 +260,21 @@
268
260
  "memberFieldName": "estimatePageSize"
269
261
  },
270
262
  {
271
- "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_initializeSchema",
272
- "memberFieldName": "initializeSchema"
273
- },
274
- {
275
- "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_prepareSchemaVersion",
276
- "memberFieldName": "prepareSchemaVersion"
263
+ "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_prepareFactsSchema",
264
+ "memberFieldName": "prepareFactsSchema"
277
265
  },
278
266
  {
279
- "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_ensureMetadataTable",
280
- "memberFieldName": "ensureMetadataTable"
267
+ "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_createFreshFactsSchema",
268
+ "memberFieldName": "createFreshFactsSchema"
281
269
  },
282
270
  {
283
- "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_dropIndexSchema",
284
- "memberFieldName": "dropIndexSchema"
271
+ "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_hasExistingFactsSchema",
272
+ "memberFieldName": "hasExistingFactsSchema"
285
273
  },
286
274
  {
287
275
  "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_bumpDataVersion",
288
276
  "memberFieldName": "bumpDataVersion"
289
277
  },
290
- {
291
- "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_setMetadataValue",
292
- "memberFieldName": "setMetadataValue"
293
- },
294
278
  {
295
279
  "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_upsertSource",
296
280
  "memberFieldName": "upsertSource"
@@ -303,6 +287,10 @@
303
287
  "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_buildWhereClause",
304
288
  "memberFieldName": "buildWhereClause"
305
289
  },
290
+ {
291
+ "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_addSourceScopeConditions",
292
+ "memberFieldName": "addSourceScopeConditions"
293
+ },
306
294
  {
307
295
  "@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex__member_matchToCondition",
308
296
  "memberFieldName": "matchToCondition"
@@ -1058,6 +1058,7 @@ class RdfQueryExecutor {
1058
1058
  }
1059
1059
  canUseRdf3xPrimaryScan(pattern, scanOptions) {
1060
1060
  return Boolean(this.rdf3xPrimaryIndex)
1061
+ && !pattern.sourceScope
1061
1062
  && isRdf3xCompatiblePattern(pattern);
1062
1063
  }
1063
1064
  requiredBgpPushdown(query, requiredPatterns, filters) {
@@ -1216,7 +1217,7 @@ class RdfQueryExecutor {
1216
1217
  canUseRdf3xPrimaryJoin(patterns) {
1217
1218
  return Boolean(this.rdf3xPrimaryIndex)
1218
1219
  && patterns.length > 0
1219
- && patterns.every((entry) => isRdf3xCompatiblePattern(entry.pattern));
1220
+ && patterns.every((entry) => !entry.pattern.sourceScope && isRdf3xCompatiblePattern(entry.pattern));
1220
1221
  }
1221
1222
  tupleValuesForBinding(source, binding) {
1222
1223
  if (!source.tupleValues) {
@@ -1932,6 +1933,7 @@ class RdfQueryExecutor {
1932
1933
  return isConsistentPattern(compiled)
1933
1934
  ? {
1934
1935
  ...compiled,
1936
+ ...(pattern.sourceScope ? { sourceScope: pattern.sourceScope } : {}),
1935
1937
  pushedDownFilters: pushedDownFilterIndexes.size,
1936
1938
  pushedDownFilterIndexes: [...pushedDownFilterIndexes],
1937
1939
  }
@@ -2582,9 +2584,10 @@ function normalizeOptionalGroup(group) {
2582
2584
  return Array.isArray(group) ? { patterns: group } : group;
2583
2585
  }
2584
2586
  function compiledPatternKey(pattern) {
2585
- return TERM_KEYS
2586
- .map((key) => `${key}:${termMatchKey(pattern[key])}`)
2587
- .join('|');
2587
+ return [
2588
+ ...TERM_KEYS.map((key) => `${key}:${termMatchKey(pattern[key])}`),
2589
+ `source:${JSON.stringify(pattern.sourceScope ?? {})}`,
2590
+ ].join('|');
2588
2591
  }
2589
2592
  function termMatchKey(match) {
2590
2593
  if (!match) {
@@ -3212,6 +3215,9 @@ function stripRdf3xNumericAggregateGuards(patterns, aggregates) {
3212
3215
  });
3213
3216
  }
3214
3217
  function isRdf3xCompatiblePattern(pattern) {
3218
+ if (pattern.sourceScope) {
3219
+ return false;
3220
+ }
3215
3221
  return TERM_KEYS.every((key) => {
3216
3222
  const value = pattern[key];
3217
3223
  if (!value || (0, types_1.isTerm)(value)) {
@@ -0,0 +1,33 @@
1
+ import type { AsyncIterator } from 'asynciterator';
2
+ import type { BindingsStream } from '@comunica/types';
3
+ import type { Quad, Variable } from '@rdfjs/types';
4
+ import type { SparqlEngine, SparqlQueryOptions, SparqlVoidOptions } from '../sparql/SubgraphQueryEngine';
5
+ import { type RdfAccessScope } from './RdfAccessScope';
6
+ import type { RdfEngineLike } from './types';
7
+ type RdfBindingsStream = BindingsStream & {
8
+ metadata(): Promise<{
9
+ variables: Variable[];
10
+ }>;
11
+ };
12
+ /**
13
+ * Public Cloud SPARQL authority.
14
+ *
15
+ * Comunica is the sole SPARQL algebra evaluator. Every RDF/JS source match is
16
+ * translated into an access-scoped query against the PostgreSQL RDF facts
17
+ * authority; there is no second evaluator or alternate per-query route.
18
+ */
19
+ export declare class RdfQuerySparqlEngine implements SparqlEngine {
20
+ private readonly rdfEngine;
21
+ private readonly comunica;
22
+ constructor(rdfEngine: RdfEngineLike);
23
+ queryBindings(query: string, basePath: string, accessScope?: RdfAccessScope, options?: SparqlQueryOptions): Promise<RdfBindingsStream>;
24
+ queryBoolean(query: string, basePath: string, accessScope?: RdfAccessScope, options?: SparqlQueryOptions): Promise<boolean>;
25
+ queryQuads(query: string, basePath: string, accessScope?: RdfAccessScope, options?: SparqlQueryOptions): Promise<AsyncIterator<Quad>>;
26
+ queryVoid(_query: string, _basePath: string, _accessScope?: RdfAccessScope, _options?: SparqlVoidOptions): Promise<void>;
27
+ constructGraph(graph: string, basePath: string, accessScope?: RdfAccessScope): Promise<AsyncIterator<Quad>>;
28
+ listGraphs(basePath: string, accessScope?: RdfAccessScope): Promise<Set<string>>;
29
+ close(): Promise<void>;
30
+ private context;
31
+ private assertCloudQuery;
32
+ }
33
+ export {};