@comake/skl-js-engine 1.3.8 → 1.3.10

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 (297) hide show
  1. package/dist/JsExecutor/PermissionBuilder.d.ts +1 -0
  2. package/dist/JsExecutor/PermissionBuilder.d.ts.map +1 -0
  3. package/dist/JsExecutor/PermissionBuilder.js.map +1 -1
  4. package/dist/JsExecutor/constants.d.ts +1 -0
  5. package/dist/JsExecutor/constants.d.ts.map +1 -0
  6. package/dist/JsExecutor/constants.js.map +1 -1
  7. package/dist/JsExecutor/denoUtils.d.ts +1 -0
  8. package/dist/JsExecutor/denoUtils.d.ts.map +1 -0
  9. package/dist/JsExecutor/denoUtils.js.map +1 -1
  10. package/dist/JsExecutor/errors.d.ts +1 -0
  11. package/dist/JsExecutor/errors.d.ts.map +1 -0
  12. package/dist/JsExecutor/errors.js.map +1 -1
  13. package/dist/JsExecutor/examples/basic/index.d.ts +1 -0
  14. package/dist/JsExecutor/examples/basic/index.d.ts.map +1 -0
  15. package/dist/JsExecutor/examples/basic/index.js.map +1 -1
  16. package/dist/JsExecutor/examples/basic/process.d.ts +1 -0
  17. package/dist/JsExecutor/examples/basic/process.d.ts.map +1 -0
  18. package/dist/JsExecutor/examples/basic/process.js.map +1 -1
  19. package/dist/JsExecutor/examples/jsExecutor/index.d.ts +1 -0
  20. package/dist/JsExecutor/examples/jsExecutor/index.d.ts.map +1 -0
  21. package/dist/JsExecutor/examples/jsExecutor/index.js.map +1 -1
  22. package/dist/JsExecutor/examples/jsExecutor/process.d.ts +1 -0
  23. package/dist/JsExecutor/examples/jsExecutor/process.d.ts.map +1 -0
  24. package/dist/JsExecutor/examples/jsExecutor/process.js.map +1 -1
  25. package/dist/JsExecutor/index.d.ts +1 -0
  26. package/dist/JsExecutor/index.d.ts.map +1 -0
  27. package/dist/JsExecutor/index.js.map +1 -1
  28. package/dist/JsExecutor/jsExecutor.d.ts +1 -0
  29. package/dist/JsExecutor/jsExecutor.d.ts.map +1 -0
  30. package/dist/JsExecutor/jsExecutor.js.map +1 -1
  31. package/dist/JsExecutor/jsonRpc/JsonRpcClient.d.ts +1 -0
  32. package/dist/JsExecutor/jsonRpc/JsonRpcClient.d.ts.map +1 -0
  33. package/dist/JsExecutor/jsonRpc/JsonRpcClient.js.map +1 -1
  34. package/dist/JsExecutor/jsonRpc/JsonRpcServer.d.ts +1 -0
  35. package/dist/JsExecutor/jsonRpc/JsonRpcServer.d.ts.map +1 -0
  36. package/dist/JsExecutor/jsonRpc/JsonRpcServer.js.map +1 -1
  37. package/dist/JsExecutor/jsonRpc/index.d.ts +1 -0
  38. package/dist/JsExecutor/jsonRpc/index.d.ts.map +1 -0
  39. package/dist/JsExecutor/jsonRpc/index.js.map +1 -1
  40. package/dist/JsExecutor/jsonRpc/types.d.ts +1 -0
  41. package/dist/JsExecutor/jsonRpc/types.d.ts.map +1 -0
  42. package/dist/JsExecutor/jsonRpc/types.js.map +1 -1
  43. package/dist/JsExecutor/transport/Transport.d.ts +1 -0
  44. package/dist/JsExecutor/transport/Transport.d.ts.map +1 -0
  45. package/dist/JsExecutor/transport/Transport.js.map +1 -1
  46. package/dist/JsExecutor/transport/base/BaseTransport.d.ts +1 -0
  47. package/dist/JsExecutor/transport/base/BaseTransport.d.ts.map +1 -0
  48. package/dist/JsExecutor/transport/base/BaseTransport.js.map +1 -1
  49. package/dist/JsExecutor/transport/index.d.ts +1 -0
  50. package/dist/JsExecutor/transport/index.d.ts.map +1 -0
  51. package/dist/JsExecutor/transport/index.js.map +1 -1
  52. package/dist/JsExecutor/transport/process/ProcessManager.d.ts +1 -0
  53. package/dist/JsExecutor/transport/process/ProcessManager.d.ts.map +1 -0
  54. package/dist/JsExecutor/transport/process/ProcessManager.js.map +1 -1
  55. package/dist/JsExecutor/transport/stdio/ChildStdioTransport.d.ts +1 -0
  56. package/dist/JsExecutor/transport/stdio/ChildStdioTransport.d.ts.map +1 -0
  57. package/dist/JsExecutor/transport/stdio/ChildStdioTransport.js.map +1 -1
  58. package/dist/JsExecutor/transport/stdio/ParentStdioTransport.d.ts +1 -0
  59. package/dist/JsExecutor/transport/stdio/ParentStdioTransport.d.ts.map +1 -0
  60. package/dist/JsExecutor/transport/stdio/ParentStdioTransport.js.map +1 -1
  61. package/dist/JsExecutor/transport/utils/MessageUtils.d.ts +1 -0
  62. package/dist/JsExecutor/transport/utils/MessageUtils.d.ts.map +1 -0
  63. package/dist/JsExecutor/transport/utils/MessageUtils.js.map +1 -1
  64. package/dist/JsExecutor/transport/utils/PollingUtils.d.ts +1 -0
  65. package/dist/JsExecutor/transport/utils/PollingUtils.d.ts.map +1 -0
  66. package/dist/JsExecutor/transport/utils/PollingUtils.js.map +1 -1
  67. package/dist/JsExecutor/types.d.ts +1 -0
  68. package/dist/JsExecutor/types.d.ts.map +1 -0
  69. package/dist/JsExecutor/types.js.map +1 -1
  70. package/dist/SklEngine.d.ts +1 -0
  71. package/dist/SklEngine.d.ts.map +1 -0
  72. package/dist/SklEngine.js.map +1 -1
  73. package/dist/SklEngineOptions.d.ts +1 -0
  74. package/dist/SklEngineOptions.d.ts.map +1 -0
  75. package/dist/SklEngineOptions.js.map +1 -1
  76. package/dist/constants.d.ts +1 -0
  77. package/dist/constants.d.ts.map +1 -0
  78. package/dist/constants.js.map +1 -1
  79. package/dist/customCapabilities.d.ts +1 -0
  80. package/dist/customCapabilities.d.ts.map +1 -0
  81. package/dist/customCapabilities.js.map +1 -1
  82. package/dist/examples/customCapabilitiesExample.d.ts +1 -0
  83. package/dist/examples/customCapabilitiesExample.d.ts.map +1 -0
  84. package/dist/examples/customCapabilitiesExample.js.map +1 -1
  85. package/dist/hooks/globalHooks.d.ts +1 -0
  86. package/dist/hooks/globalHooks.d.ts.map +1 -0
  87. package/dist/hooks/globalHooks.js.map +1 -1
  88. package/dist/hooks/types.d.ts +1 -0
  89. package/dist/hooks/types.d.ts.map +1 -0
  90. package/dist/hooks/types.js.map +1 -1
  91. package/dist/index.d.ts +1 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js.map +1 -1
  94. package/dist/logger.d.ts +1 -0
  95. package/dist/logger.d.ts.map +1 -0
  96. package/dist/logger.js.map +1 -1
  97. package/dist/mapping/Mapper.d.ts +1 -0
  98. package/dist/mapping/Mapper.d.ts.map +1 -0
  99. package/dist/mapping/Mapper.js.map +1 -1
  100. package/dist/storage/FindOperator.d.ts +1 -0
  101. package/dist/storage/FindOperator.d.ts.map +1 -0
  102. package/dist/storage/FindOperator.js.map +1 -1
  103. package/dist/storage/FindOptionsTypes.d.ts +1 -0
  104. package/dist/storage/FindOptionsTypes.d.ts.map +1 -0
  105. package/dist/storage/FindOptionsTypes.js.map +1 -1
  106. package/dist/storage/GroupOptionTypes.d.ts +1 -0
  107. package/dist/storage/GroupOptionTypes.d.ts.map +1 -0
  108. package/dist/storage/GroupOptionTypes.js.map +1 -1
  109. package/dist/storage/operator/And.d.ts +1 -0
  110. package/dist/storage/operator/And.d.ts.map +1 -0
  111. package/dist/storage/operator/And.js.map +1 -1
  112. package/dist/storage/operator/Contains.d.ts +1 -0
  113. package/dist/storage/operator/Contains.d.ts.map +1 -0
  114. package/dist/storage/operator/Contains.js.map +1 -1
  115. package/dist/storage/operator/Equal.d.ts +1 -0
  116. package/dist/storage/operator/Equal.d.ts.map +1 -0
  117. package/dist/storage/operator/Equal.js.map +1 -1
  118. package/dist/storage/operator/Exists.d.ts +1 -0
  119. package/dist/storage/operator/Exists.d.ts.map +1 -0
  120. package/dist/storage/operator/Exists.js.map +1 -1
  121. package/dist/storage/operator/GreaterThan.d.ts +1 -0
  122. package/dist/storage/operator/GreaterThan.d.ts.map +1 -0
  123. package/dist/storage/operator/GreaterThan.js.map +1 -1
  124. package/dist/storage/operator/GreaterThanOrEqual.d.ts +1 -0
  125. package/dist/storage/operator/GreaterThanOrEqual.d.ts.map +1 -0
  126. package/dist/storage/operator/GreaterThanOrEqual.js.map +1 -1
  127. package/dist/storage/operator/In.d.ts +1 -0
  128. package/dist/storage/operator/In.d.ts.map +1 -0
  129. package/dist/storage/operator/In.js.map +1 -1
  130. package/dist/storage/operator/Inverse.d.ts +1 -0
  131. package/dist/storage/operator/Inverse.d.ts.map +1 -0
  132. package/dist/storage/operator/Inverse.js.map +1 -1
  133. package/dist/storage/operator/InversePath.d.ts +1 -0
  134. package/dist/storage/operator/InversePath.d.ts.map +1 -0
  135. package/dist/storage/operator/InversePath.js.map +1 -1
  136. package/dist/storage/operator/InverseRelation.d.ts +1 -0
  137. package/dist/storage/operator/InverseRelation.d.ts.map +1 -0
  138. package/dist/storage/operator/InverseRelation.js.map +1 -1
  139. package/dist/storage/operator/InverseRelationOrder.d.ts +1 -0
  140. package/dist/storage/operator/InverseRelationOrder.d.ts.map +1 -0
  141. package/dist/storage/operator/InverseRelationOrder.js.map +1 -1
  142. package/dist/storage/operator/LessThan.d.ts +1 -0
  143. package/dist/storage/operator/LessThan.d.ts.map +1 -0
  144. package/dist/storage/operator/LessThan.js.map +1 -1
  145. package/dist/storage/operator/LessThanOrEqual.d.ts +1 -0
  146. package/dist/storage/operator/LessThanOrEqual.d.ts.map +1 -0
  147. package/dist/storage/operator/LessThanOrEqual.js.map +1 -1
  148. package/dist/storage/operator/Not.d.ts +1 -0
  149. package/dist/storage/operator/Not.d.ts.map +1 -0
  150. package/dist/storage/operator/Not.js.map +1 -1
  151. package/dist/storage/operator/OneOrMorePath.d.ts +1 -0
  152. package/dist/storage/operator/OneOrMorePath.d.ts.map +1 -0
  153. package/dist/storage/operator/OneOrMorePath.js.map +1 -1
  154. package/dist/storage/operator/Sequence.d.ts +1 -0
  155. package/dist/storage/operator/Sequence.d.ts.map +1 -0
  156. package/dist/storage/operator/Sequence.js.map +1 -1
  157. package/dist/storage/operator/SequencePath.d.ts +1 -0
  158. package/dist/storage/operator/SequencePath.d.ts.map +1 -0
  159. package/dist/storage/operator/SequencePath.js.map +1 -1
  160. package/dist/storage/operator/ZeroOrMorePath.d.ts +1 -0
  161. package/dist/storage/operator/ZeroOrMorePath.d.ts.map +1 -0
  162. package/dist/storage/operator/ZeroOrMorePath.js.map +1 -1
  163. package/dist/storage/query-adapter/QueryAdapter.d.ts +1 -0
  164. package/dist/storage/query-adapter/QueryAdapter.d.ts.map +1 -0
  165. package/dist/storage/query-adapter/QueryAdapter.js.map +1 -1
  166. package/dist/storage/query-adapter/sparql/SparqlQueryAdapter.d.ts +1 -0
  167. package/dist/storage/query-adapter/sparql/SparqlQueryAdapter.d.ts.map +1 -0
  168. package/dist/storage/query-adapter/sparql/SparqlQueryAdapter.js +28 -4
  169. package/dist/storage/query-adapter/sparql/SparqlQueryAdapter.js.map +1 -1
  170. package/dist/storage/query-adapter/sparql/SparqlQueryAdapterOptions.d.ts +1 -0
  171. package/dist/storage/query-adapter/sparql/SparqlQueryAdapterOptions.d.ts.map +1 -0
  172. package/dist/storage/query-adapter/sparql/SparqlQueryAdapterOptions.js.map +1 -1
  173. package/dist/storage/query-adapter/sparql/SparqlQueryBuilder.d.ts +1 -0
  174. package/dist/storage/query-adapter/sparql/SparqlQueryBuilder.d.ts.map +1 -0
  175. package/dist/storage/query-adapter/sparql/SparqlQueryBuilder.js +7 -21
  176. package/dist/storage/query-adapter/sparql/SparqlQueryBuilder.js.map +1 -1
  177. package/dist/storage/query-adapter/sparql/SparqlUpdateBuilder.d.ts +1 -0
  178. package/dist/storage/query-adapter/sparql/SparqlUpdateBuilder.d.ts.map +1 -0
  179. package/dist/storage/query-adapter/sparql/SparqlUpdateBuilder.js.map +1 -1
  180. package/dist/storage/query-adapter/sparql/VariableGenerator.d.ts +1 -0
  181. package/dist/storage/query-adapter/sparql/VariableGenerator.d.ts.map +1 -0
  182. package/dist/storage/query-adapter/sparql/VariableGenerator.js.map +1 -1
  183. package/dist/storage/query-adapter/sparql/query-executor/InMemorySparqlQueryExecutor.d.ts +1 -0
  184. package/dist/storage/query-adapter/sparql/query-executor/InMemorySparqlQueryExecutor.d.ts.map +1 -0
  185. package/dist/storage/query-adapter/sparql/query-executor/InMemorySparqlQueryExecutor.js.map +1 -1
  186. package/dist/storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor.d.ts +1 -0
  187. package/dist/storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor.d.ts.map +1 -0
  188. package/dist/storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor.js.map +1 -1
  189. package/dist/storage/query-adapter/sparql/query-executor/SparqlQueryExecutor.d.ts +1 -0
  190. package/dist/storage/query-adapter/sparql/query-executor/SparqlQueryExecutor.d.ts.map +1 -0
  191. package/dist/storage/query-adapter/sparql/query-executor/SparqlQueryExecutor.js.map +1 -1
  192. package/dist/util/PerformanceLogger.d.ts +1 -0
  193. package/dist/util/PerformanceLogger.d.ts.map +1 -0
  194. package/dist/util/PerformanceLogger.js.map +1 -1
  195. package/dist/util/SparqlUtil.d.ts +1 -0
  196. package/dist/util/SparqlUtil.d.ts.map +1 -0
  197. package/dist/util/SparqlUtil.js.map +1 -1
  198. package/dist/util/TripleUtil.d.ts +1 -0
  199. package/dist/util/TripleUtil.d.ts.map +1 -0
  200. package/dist/util/TripleUtil.js +10 -0
  201. package/dist/util/TripleUtil.js.map +1 -1
  202. package/dist/util/Types.d.ts +1 -0
  203. package/dist/util/Types.d.ts.map +1 -0
  204. package/dist/util/Types.js.map +1 -1
  205. package/dist/util/Util.d.ts +1 -0
  206. package/dist/util/Util.d.ts.map +1 -0
  207. package/dist/util/Util.js.map +1 -1
  208. package/dist/util/Vocabularies/Shared.d.ts +1 -0
  209. package/dist/util/Vocabularies/Shared.d.ts.map +1 -0
  210. package/dist/util/Vocabularies/Shared.js.map +1 -1
  211. package/dist/util/Vocabularies/helper.d.ts +1 -0
  212. package/dist/util/Vocabularies/helper.d.ts.map +1 -0
  213. package/dist/util/Vocabularies/helper.js.map +1 -1
  214. package/dist/util/Vocabularies/index.d.ts +1 -0
  215. package/dist/util/Vocabularies/index.d.ts.map +1 -0
  216. package/dist/util/Vocabularies/index.js.map +1 -1
  217. package/dist/util/safeJsonStringify.d.ts +1 -0
  218. package/dist/util/safeJsonStringify.d.ts.map +1 -0
  219. package/dist/util/safeJsonStringify.js.map +1 -1
  220. package/package.json +6 -3
  221. package/src/JsExecutor/PermissionBuilder.ts +60 -0
  222. package/src/JsExecutor/constants.ts +27 -0
  223. package/src/JsExecutor/denoUtils.ts +20 -0
  224. package/src/JsExecutor/errors.ts +63 -0
  225. package/src/JsExecutor/examples/basic/index.ts +54 -0
  226. package/src/JsExecutor/examples/basic/process.ts +39 -0
  227. package/src/JsExecutor/examples/jsExecutor/README.md +3 -0
  228. package/src/JsExecutor/examples/jsExecutor/index.ts +50 -0
  229. package/src/JsExecutor/examples/jsExecutor/process.ts +79 -0
  230. package/src/JsExecutor/index.ts +19 -0
  231. package/src/JsExecutor/jsExecutor.ts +194 -0
  232. package/src/JsExecutor/jsonRpc/JsonRpcClient.ts +422 -0
  233. package/src/JsExecutor/jsonRpc/JsonRpcServer.ts +454 -0
  234. package/src/JsExecutor/jsonRpc/index.ts +4 -0
  235. package/src/JsExecutor/jsonRpc/types.ts +231 -0
  236. package/src/JsExecutor/transport/README.md +67 -0
  237. package/src/JsExecutor/transport/Transport.ts +106 -0
  238. package/src/JsExecutor/transport/base/BaseTransport.ts +83 -0
  239. package/src/JsExecutor/transport/index.ts +56 -0
  240. package/src/JsExecutor/transport/process/ProcessManager.ts +281 -0
  241. package/src/JsExecutor/transport/stdio/ChildStdioTransport.ts +251 -0
  242. package/src/JsExecutor/transport/stdio/ParentStdioTransport.ts +308 -0
  243. package/src/JsExecutor/transport/utils/MessageUtils.ts +139 -0
  244. package/src/JsExecutor/transport/utils/PollingUtils.ts +114 -0
  245. package/src/JsExecutor/types.ts +130 -0
  246. package/src/SklEngine.ts +1828 -0
  247. package/src/SklEngineOptions.ts +28 -0
  248. package/src/constants.ts +120 -0
  249. package/src/customCapabilities.ts +65 -0
  250. package/src/examples/customCapabilitiesExample.ts +77 -0
  251. package/src/hooks/globalHooks.ts +238 -0
  252. package/src/hooks/types.ts +7 -0
  253. package/src/index.ts +45 -0
  254. package/src/logger.ts +144 -0
  255. package/src/mapping/Mapper.ts +52 -0
  256. package/src/storage/FindOperator.ts +55 -0
  257. package/src/storage/FindOptionsTypes.ts +107 -0
  258. package/src/storage/GroupOptionTypes.ts +32 -0
  259. package/src/storage/operator/And.ts +10 -0
  260. package/src/storage/operator/Contains.ts +9 -0
  261. package/src/storage/operator/Equal.ts +13 -0
  262. package/src/storage/operator/Exists.ts +6 -0
  263. package/src/storage/operator/GreaterThan.ts +12 -0
  264. package/src/storage/operator/GreaterThanOrEqual.ts +12 -0
  265. package/src/storage/operator/In.ts +12 -0
  266. package/src/storage/operator/Inverse.ts +11 -0
  267. package/src/storage/operator/InversePath.ts +17 -0
  268. package/src/storage/operator/InverseRelation.ts +18 -0
  269. package/src/storage/operator/InverseRelationOrder.ts +17 -0
  270. package/src/storage/operator/LessThan.ts +12 -0
  271. package/src/storage/operator/LessThanOrEqual.ts +12 -0
  272. package/src/storage/operator/Not.ts +11 -0
  273. package/src/storage/operator/OneOrMorePath.ts +17 -0
  274. package/src/storage/operator/Sequence.ts +11 -0
  275. package/src/storage/operator/SequencePath.ts +17 -0
  276. package/src/storage/operator/ZeroOrMorePath.ts +17 -0
  277. package/src/storage/query-adapter/QueryAdapter.ts +110 -0
  278. package/src/storage/query-adapter/sparql/SparqlQueryAdapter.ts +400 -0
  279. package/src/storage/query-adapter/sparql/SparqlQueryAdapterOptions.ts +38 -0
  280. package/src/storage/query-adapter/sparql/SparqlQueryBuilder.ts +1524 -0
  281. package/src/storage/query-adapter/sparql/SparqlUpdateBuilder.ts +347 -0
  282. package/src/storage/query-adapter/sparql/VariableGenerator.ts +8 -0
  283. package/src/storage/query-adapter/sparql/query-executor/InMemorySparqlQueryExecutor.ts +135 -0
  284. package/src/storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor.ts +146 -0
  285. package/src/storage/query-adapter/sparql/query-executor/SparqlQueryExecutor.ts +51 -0
  286. package/src/util/PerformanceLogger.ts +286 -0
  287. package/src/util/SparqlUtil.ts +516 -0
  288. package/src/util/TripleUtil.ts +412 -0
  289. package/src/util/Types.ts +399 -0
  290. package/src/util/Util.ts +116 -0
  291. package/src/util/Vocabularies/Shared.ts +99 -0
  292. package/src/util/Vocabularies/helper.ts +14 -0
  293. package/src/util/Vocabularies/index.ts +108 -0
  294. package/src/util/safeJsonStringify.ts +19 -0
  295. package/dist/JsExecutor/transport/StdioTransport.d.ts +0 -0
  296. package/dist/JsExecutor/transport/StdioTransport.js +0 -641
  297. package/dist/JsExecutor/transport/StdioTransport.js.map +0 -1
@@ -0,0 +1,110 @@
1
+ /* eslint-disable @typescript-eslint/method-signature-style */
2
+ import type { GraphObject } from 'jsonld';
3
+ import type { Frame } from 'jsonld/jsonld-spec';
4
+ import type { Entity } from '../../util/Types';
5
+ import type {
6
+ FindAllOptions,
7
+ FindCountOptions,
8
+ FindExistsOptions,
9
+ FindOneOptions,
10
+ FindOptionsWhere
11
+ } from '../FindOptionsTypes';
12
+ import type { GroupByOptions, GroupByResponse } from '../GroupOptionTypes';
13
+
14
+ export type RawQueryResult = Record<string, number | boolean | string>;
15
+
16
+ export interface UpdateOptions {
17
+ validate?: boolean;
18
+ }
19
+
20
+ /**
21
+ * Adapts CRUD operations to a specific persistence layer.
22
+ */
23
+
24
+ export interface QueryAdapter {
25
+ /**
26
+ * Performs a raw query for data matching the query.
27
+ */
28
+ executeRawQuery<T extends RawQueryResult>(query: string): Promise<T[]>;
29
+ /**
30
+ * Performs a raw query for entities matching the query. The query must be a CONSTRUCT query.
31
+ */
32
+ executeRawConstructQuery(query: string, frame?: Frame): Promise<GraphObject>;
33
+ /**
34
+ * Performs a raw query for data matching the query.
35
+ */
36
+ executeRawUpdate(query: string): Promise<void>;
37
+ /**
38
+ * Finds the first entity by a given find options.
39
+ * If entity was not found in the database it returns null.
40
+ */
41
+ find(options?: FindOneOptions): Promise<Entity | null>;
42
+ /**
43
+ * Finds the first entity that matches given where condition.
44
+ * If entity was not found in the database it returns null.
45
+ */
46
+ findBy(where: FindOptionsWhere): Promise<Entity | null>;
47
+ /**
48
+ * Finds entities that match given find options.
49
+ */
50
+ findAll(options?: FindAllOptions): Promise<Entity[]>;
51
+ /**
52
+ * Finds entities that match given where condition.
53
+ */
54
+ findAllBy(where: FindOptionsWhere): Promise<Entity[]>;
55
+ /**
56
+ * Determines if an entity matching the given where condition exists in the database.
57
+ */
58
+ exists(options?: FindExistsOptions): Promise<boolean>;
59
+ /**
60
+ * Returns a count of entities matching the given where condition in the database.
61
+ */
62
+ count(options?: FindCountOptions): Promise<number>;
63
+ /**
64
+ * Saves a given entity in the database.
65
+ * If entity does not exist in the database then inserts, otherwise updates.
66
+ */
67
+ save(entity: Entity): Promise<Entity>;
68
+ /**
69
+ * Saves all given entities in the database.
70
+ * If entities do not exist in the database then inserts, otherwise updates.
71
+ */
72
+ save(entities: Entity[]): Promise<Entity[]>;
73
+ /**
74
+ * Updates an entity partially.
75
+ */
76
+ update(id: string, attributes: Partial<Entity>): Promise<void>;
77
+ /**
78
+ * Updates multiple entities partially.
79
+ */
80
+ update(ids: string[], attributes: Partial<Entity>): Promise<void>;
81
+ /**
82
+ * Removes an entity from the database by id.
83
+ */
84
+ delete(id: string): Promise<void>;
85
+ /**
86
+ * Removes multiple entities from the database by id.
87
+ */
88
+ delete(ids: string[]): Promise<void>;
89
+ /**
90
+ * Removes a given entity from the database.
91
+ */
92
+ destroy(entity: Entity): Promise<Entity>;
93
+ /**
94
+ * Removes given entities from the database.
95
+ */
96
+ destroy(entities: Entity[]): Promise<Entity[]>;
97
+ /**
98
+ * Deletes entities by a given criteria.
99
+ * Unlike destroy method executes a primitive operation without cascades, relations and other operations included.
100
+ */
101
+ // delete(criteria: UpdateOrDeleteCriteria): Promise<void>;
102
+ /**
103
+ * Removes all entities from the database.
104
+ */
105
+ destroyAll(): Promise<void>;
106
+ /**
107
+ * Groups entities by a given options.
108
+ */
109
+ groupBy(options: GroupByOptions): Promise<GroupByResponse>;
110
+ }
@@ -0,0 +1,400 @@
1
+ /* eslint-disable capitalized-comments */
2
+
3
+ /* eslint-disable @typescript-eslint/prefer-nullish-coalescing */
4
+ /* eslint-disable indent */
5
+ /* eslint-disable @typescript-eslint/naming-convention */
6
+ import type { OrArray } from '@comake/rmlmapper-js';
7
+ import type { GraphObject, NodeObject } from 'jsonld';
8
+ import type { Frame } from 'jsonld/jsonld-spec';
9
+ import type {
10
+ ConstructQuery,
11
+ Pattern,
12
+ Triple
13
+ } from 'sparqljs';
14
+ import { Logger } from '../../../logger';
15
+ import { PerformanceLogger } from '../../../util/PerformanceLogger';
16
+ import {
17
+ createSparqlBasicGraphPattern, createSparqlCountSelectQuery, createSparqlGraphPattern,
18
+ createSparqlSelectGroup,
19
+ createSparqlSelectQuery,
20
+ createValuesPatternsForVariables,
21
+ creteSparqlAskQuery, entityGraphTriple, entityVariable, getEntityVariableValuesFromVariables,
22
+ getRdfTypeVariableValuesFromVariables,
23
+ groupSelectQueryResultsByKey,
24
+ rdfTypeNamedNode,
25
+ rdfTypeVariable,
26
+ selectQueryResultsAsJSValues
27
+ } from '../../../util/SparqlUtil';
28
+ import {
29
+ triplesToJsonld,
30
+ triplesToJsonldWithFrame
31
+ } from '../../../util/TripleUtil';
32
+ import type { Entity } from '../../../util/Types';
33
+ import type {
34
+ FindAllOptions, FindCountOptions,
35
+ FindExistsOptions, FindOneOptions, FindOptionsWhere
36
+ } from '../../FindOptionsTypes';
37
+ import type { GroupByOptions, GroupByResponse, GroupResult } from '../../GroupOptionTypes';
38
+ import type { QueryAdapter, RawQueryResult } from '../QueryAdapter';
39
+ import { InMemorySparqlQueryExecutor } from './query-executor/InMemorySparqlQueryExecutor';
40
+ import { SparqlEndpointQueryExecutor } from './query-executor/SparqlEndpointQueryExecutor';
41
+ import type { QueryExecutor } from './query-executor/SparqlQueryExecutor';
42
+ import type { SparqlQueryAdapterOptions } from './SparqlQueryAdapterOptions';
43
+ import { SparqlQueryBuilder } from './SparqlQueryBuilder';
44
+ import { SparqlUpdateBuilder } from './SparqlUpdateBuilder';
45
+
46
+ /**
47
+ * A {@link QueryAdapter} that stores data in a database through a sparql endpoint.
48
+ */
49
+ export class SparqlQueryAdapter implements QueryAdapter {
50
+ protected readonly queryExecutor: QueryExecutor;
51
+ private readonly setTimestamps: boolean;
52
+ private readonly logger: Logger;
53
+
54
+ public constructor(options: SparqlQueryAdapterOptions) {
55
+ this.setTimestamps = options.setTimestamps ?? false;
56
+ switch (options.type) {
57
+ case 'memory':
58
+ this.queryExecutor = new InMemorySparqlQueryExecutor();
59
+ break;
60
+ case 'sparql':
61
+ this.queryExecutor = new SparqlEndpointQueryExecutor(options);
62
+ break;
63
+ default:
64
+ throw new Error('No schema source found in setSchema args.');
65
+ }
66
+ this.logger = Logger.getInstance();
67
+ }
68
+
69
+ public async executeRawQuery<T extends RawQueryResult>(query: string): Promise<T[]> {
70
+ const response =
71
+ await this.queryExecutor.executeSparqlSelectAndGetDataRaw(query);
72
+ if (response.length === 0) {
73
+ return [] as T[];
74
+ }
75
+ return selectQueryResultsAsJSValues<T>(response);
76
+ }
77
+
78
+ public async executeRawConstructQuery(query: string, frame?: Frame): Promise<GraphObject> {
79
+ const response = await this.queryExecutor.executeSparqlConstructAndGetDataRaw(query);
80
+ if (response.length === 0) {
81
+ return { '@graph': []};
82
+ }
83
+ return await triplesToJsonldWithFrame(response, frame);
84
+ }
85
+
86
+ public async executeRawUpdate(
87
+ query: string
88
+ ): Promise<void> {
89
+ await this.queryExecutor.executeRawSparqlUpdate(query);
90
+ }
91
+
92
+ public async find(options?: FindOneOptions): Promise<Entity | null> {
93
+ return PerformanceLogger.withSpan('Adapter.find', async() => {
94
+ const jsonld = await this.findAllAsJsonLd({ ...options, limit: 1 });
95
+ if (Array.isArray(jsonld) && !options?.skipFraming) {
96
+ if (jsonld.length === 0) {
97
+ return null;
98
+ }
99
+ if (jsonld.length === 1) {
100
+ return jsonld[0] as Entity;
101
+ }
102
+ }
103
+ return jsonld as Entity;
104
+ }, { options });
105
+ }
106
+
107
+ public async findBy(where: FindOptionsWhere): Promise<Entity | null> {
108
+ return PerformanceLogger.withSpan('Adapter.findBy', async() => this.find({ where }), { where });
109
+ }
110
+
111
+ public async findAll(options?: FindAllOptions): Promise<Entity[]> {
112
+ return PerformanceLogger.withSpan('Adapter.findAll', async() => {
113
+ const jsonld = await this.findAllAsJsonLd(options);
114
+ if (Array.isArray(jsonld)) {
115
+ return jsonld as Entity[];
116
+ }
117
+ return [ jsonld ] as Entity[];
118
+ }, { options });
119
+ }
120
+
121
+ private async findAllAsJsonLd(options?: FindAllOptions): Promise<OrArray<NodeObject>> {
122
+ const queryBuilder = new SparqlQueryBuilder();
123
+ const { where, selectionTriples, entityOrder, rdfTypes } = await this.buildFindAllQueryData(queryBuilder, options);
124
+ if (entityOrder && entityOrder.length === 0) {
125
+ return [];
126
+ }
127
+ const queryData = queryBuilder.buildEntitySelectPatternsFromOptions(entityVariable, options);
128
+ const query = queryBuilder.buildConstructFromEntitySelectQuery(
129
+ where,
130
+ selectionTriples,
131
+ options?.select,
132
+ queryData.selectVariables
133
+ );
134
+ return await this.executeEntitySelectQuery(query, options, entityOrder, rdfTypes);
135
+ }
136
+
137
+ private async buildFindAllQueryData(
138
+ queryBuilder: SparqlQueryBuilder,
139
+ options?: FindAllOptions
140
+ ): Promise<{ where: Pattern[]; selectionTriples: Triple[]; entityOrder?: string[], rdfTypes?: string[] }> {
141
+ const queryData = queryBuilder.buildEntitySelectPatternsFromOptions(entityVariable, options);
142
+ const selectQueryData = queryBuilder.buildEntitySelectPatternsFromOptions(entityVariable, {
143
+ ...options,
144
+ relations: undefined
145
+ });
146
+ let rdfTypes: string[] | undefined;
147
+ const wherePatterns: Pattern[] = [ ...selectQueryData.where, ...selectQueryData.graphWhere ];
148
+ wherePatterns.push({
149
+ type: 'bgp',
150
+ triples: [
151
+ {
152
+ subject: entityVariable,
153
+ predicate: rdfTypeNamedNode,
154
+ object: rdfTypeVariable
155
+ }
156
+ ]
157
+ });
158
+ const entitySelectQuery = selectQueryData.where.length > 0
159
+ ? createSparqlSelectQuery(
160
+ [
161
+ options?.entitySelectVariable ?? entityVariable,
162
+ rdfTypeVariable,
163
+ ...selectQueryData.selectVariables?.map(({ variable, expression }) => {
164
+ if (!expression) return variable;
165
+ return {
166
+ variable,
167
+ expression
168
+ };
169
+ }) ?? []
170
+ ],
171
+ wherePatterns,
172
+ selectQueryData.orders,
173
+ selectQueryData.group ?? options?.group,
174
+ options?.limit,
175
+ options?.offset
176
+ )
177
+ : undefined;
178
+ let entityOrder: string[] | undefined;
179
+ /* If relations are present add them to where */
180
+ if ((queryData?.relationsQueryData?.unionPatterns ?? []).length > 0) {
181
+ queryData?.relationsQueryData?.unionPatterns.push(
182
+ createSparqlGraphPattern(entityVariable, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])
183
+ );
184
+ }
185
+ if (queryData.orders.length > 0 && options?.limit !== 1 && entitySelectQuery) {
186
+ const entitySelectResponse =
187
+ await this.queryExecutor.executeSparqlSelectAndGetData(entitySelectQuery);
188
+ const valuesByVariable = groupSelectQueryResultsByKey(entitySelectResponse);
189
+ entityOrder = getEntityVariableValuesFromVariables(valuesByVariable);
190
+ if (entityOrder.length === 0) {
191
+ return {
192
+ where: queryData.where,
193
+ selectionTriples: queryData.graphSelectionTriples,
194
+ entityOrder: []
195
+ };
196
+ }
197
+ const variableValueFilters = createValuesPatternsForVariables({
198
+ [entityVariable.value]: valuesByVariable[entityVariable.value]
199
+ });
200
+ queryData.graphWhere = [ ...variableValueFilters, ...queryData.graphWhere ];
201
+ } else if (entitySelectQuery) {
202
+ // We need entity IDs for framing when:
203
+ // 1. There are relations (to distinguish root entities from related entities)
204
+ // 2. There's a type constraint (to handle subclass matching where SPARQL finds subclasses but JSON-LD needs exact types)
205
+ const hasRelations = (queryData?.relationsQueryData?.unionPatterns ?? []).length > 0;
206
+ const hasTypeConstraint = options?.where?.type !== undefined;
207
+
208
+ if ((hasRelations || hasTypeConstraint) && queryData.orders.length > 0) {
209
+ const entitySelectResponse =
210
+ await this.queryExecutor.executeSparqlSelectAndGetData(entitySelectQuery);
211
+ const valuesByVariable = groupSelectQueryResultsByKey(entitySelectResponse);
212
+ entityOrder = queryData.orders.length > 0 ? getEntityVariableValuesFromVariables(valuesByVariable) : [];
213
+ if (entityOrder.length === 0) {
214
+ return {
215
+ where: queryData.where,
216
+ selectionTriples: queryData.graphSelectionTriples,
217
+ entityOrder: []
218
+ };
219
+ }
220
+ }
221
+ else if (hasRelations || hasTypeConstraint) {
222
+ const entitySelectResponse = await this.queryExecutor.executeSparqlSelectAndGetData(entitySelectQuery);
223
+ const groupedResults = groupSelectQueryResultsByKey(entitySelectResponse);
224
+ const valuesByVariable = getRdfTypeVariableValuesFromVariables(groupedResults);
225
+ rdfTypes = [...new Set(valuesByVariable)];
226
+ // Also get entity IDs for framing to distinguish root entities from related ones
227
+ // entityOrder = getEntityVariableValuesFromVariables(groupedResults);
228
+ // if (entityOrder.length === 0) {
229
+ // return {
230
+ // where: queryData.where,
231
+ // selectionTriples: queryData.graphSelectionTriples,
232
+ // entityOrder: [],
233
+ // rdfTypes
234
+ // };
235
+ // }
236
+ }
237
+
238
+ // Always add the select group query to the CONSTRUCT
239
+ const entitySelectGroupQuery = createSparqlSelectGroup([ entitySelectQuery ]);
240
+ queryData.graphWhere.unshift(entitySelectGroupQuery);
241
+ // queryData.graphWhere = [ ...queryData.where, ...queryData.graphWhere ];
242
+ }
243
+ return {
244
+ where: queryData.graphWhere,
245
+ selectionTriples: queryData.graphSelectionTriples,
246
+ entityOrder,
247
+ rdfTypes
248
+ };
249
+ }
250
+
251
+ private async executeEntitySelectQuery(
252
+ query: ConstructQuery,
253
+ options?: FindAllOptions,
254
+ entityOrder?: string[],
255
+ rdfTypes?: string[]
256
+ ): Promise<OrArray<NodeObject>> {
257
+ const responseTriples = await this.queryExecutor.executeSparqlSelectAndGetData(query);
258
+ return await triplesToJsonld(
259
+ responseTriples,
260
+ options?.skipFraming,
261
+ options?.relations,
262
+ options?.where,
263
+ entityOrder,
264
+ rdfTypes
265
+ );
266
+ }
267
+
268
+ public async findAllBy(where: FindOptionsWhere): Promise<Entity[]> {
269
+ return PerformanceLogger.withSpan('Adapter.findAllBy', async() => this.findAll({ where }), { where });
270
+ }
271
+
272
+ public async exists(options: FindExistsOptions): Promise<boolean> {
273
+ return PerformanceLogger.withSpan('Adapter.exists', async() => {
274
+ const queryBuilder = new SparqlQueryBuilder();
275
+ const queryData = queryBuilder.buildEntitySelectPatternsFromOptions(entityVariable, options);
276
+ const values = queryData.graphWhere.filter((pattern): boolean => pattern.type === 'values');
277
+ const query = creteSparqlAskQuery([ ...values, ...queryData.where ]);
278
+ return await this.queryExecutor.executeAskQueryAndGetResponse(query);
279
+ }, { options });
280
+ }
281
+
282
+ public async count(options: FindCountOptions): Promise<number> {
283
+ return PerformanceLogger.withSpan('Adapter.count', async() => {
284
+ const queryBuilder = new SparqlQueryBuilder();
285
+ const queryData = queryBuilder.buildEntitySelectPatternsFromOptions(entityVariable, options);
286
+ const values = queryData.graphWhere.filter((pattern): boolean => pattern.type === 'values');
287
+ const query = createSparqlCountSelectQuery(
288
+ entityVariable,
289
+ [ ...values, ...queryData.where ],
290
+ queryData.orders,
291
+ options?.offset
292
+ );
293
+ return await this.queryExecutor.executeSelectCountAndGetResponse(query);
294
+ }, { options });
295
+ }
296
+
297
+ public async save(entity: Entity): Promise<Entity>;
298
+ public async save(entities: Entity[]): Promise<Entity[]>;
299
+ public async save(entityOrEntities: Entity | Entity[]): Promise<Entity | Entity[]> {
300
+ return PerformanceLogger.withSpan('Adapter.save', async() => {
301
+ const queryBuilder = new SparqlUpdateBuilder({ setTimestamps: this.setTimestamps });
302
+ const query = queryBuilder.buildUpdate(entityOrEntities);
303
+ await this.queryExecutor.executeSparqlUpdate(query);
304
+ return entityOrEntities;
305
+ }, { entityCount: Array.isArray(entityOrEntities) ? entityOrEntities.length : 1 });
306
+ }
307
+
308
+ public async groupBy(options: GroupByOptions): Promise<GroupByResponse> {
309
+ return PerformanceLogger.withSpan('Adapter.groupBy', async() => {
310
+ const queryBuilder = new SparqlQueryBuilder();
311
+ const { query: selectQuery, variableMapping } = await queryBuilder.buildGroupByQuery(options);
312
+ const results = await this.queryExecutor.executeSparqlSelectAndGetData(
313
+ selectQuery
314
+ );
315
+
316
+ // Create reverse mapping from path to variable name
317
+ const reverseMapping = Object.entries(variableMapping).reduce<Record<string, string>>((acc, [ varName, path ]) => {
318
+ acc[path] = varName;
319
+ return acc;
320
+ }, {});
321
+
322
+ // Transform results
323
+ const groupResults: GroupResult[] = results.map(result => {
324
+ const group: Record<string, string | number> = {};
325
+
326
+ options.groupBy?.forEach(path => {
327
+ const varName = reverseMapping[path];
328
+ if (!varName) {
329
+ throw new Error(`No variable mapping found for path: ${path}`);
330
+ }
331
+ const { value } = result[varName];
332
+ // Try to convert to number if possible
333
+ group[path] = Number.isNaN(Number(value)) ? value : Number(value);
334
+ });
335
+
336
+ if (options.dateGrouping) {
337
+ const dateGroupVarName = reverseMapping.dateGroup;
338
+ group.dateGroup = result[dateGroupVarName].value;
339
+ }
340
+
341
+ const countVarName = reverseMapping.count;
342
+ const entityIdsVarName = reverseMapping.entityIds;
343
+
344
+ return {
345
+ group,
346
+ count: Number.parseInt(result[countVarName].value, 10),
347
+ entityIds: result[entityIdsVarName].value.split(' ')
348
+ };
349
+ });
350
+
351
+ return {
352
+ results: groupResults,
353
+ meta: {
354
+ totalCount: groupResults.reduce((sum, curr) => sum + curr.count, 0),
355
+ dateRange: options.dateRange,
356
+ groupings: options.groupBy || []
357
+ }
358
+ };
359
+ }, { options });
360
+ }
361
+
362
+ public async update(id: string, attributes: Partial<Entity>): Promise<void>;
363
+ public async update(ids: string[], attributes: Partial<Entity>): Promise<void>;
364
+ public async update(idOrIds: string | string[], attributes: Partial<Entity>): Promise<void> {
365
+ return PerformanceLogger.withSpan('Adapter.update', async() => {
366
+ const queryBuilder = new SparqlUpdateBuilder({ setTimestamps: this.setTimestamps });
367
+ const query = queryBuilder.buildPartialUpdate(idOrIds, attributes);
368
+ await this.queryExecutor.executeSparqlUpdate(query);
369
+ }, { idCount: Array.isArray(idOrIds) ? idOrIds.length : 1 });
370
+ }
371
+
372
+ public async delete(id: string): Promise<void>;
373
+ public async delete(ids: string[]): Promise<void>;
374
+ public async delete(idOrIds: string | string[]): Promise<void> {
375
+ return PerformanceLogger.withSpan('Adapter.delete', async() => {
376
+ const queryBuilder = new SparqlUpdateBuilder();
377
+ const query = queryBuilder.buildDeleteById(idOrIds);
378
+ await this.queryExecutor.executeSparqlUpdate(query);
379
+ }, { idCount: Array.isArray(idOrIds) ? idOrIds.length : 1 });
380
+ }
381
+
382
+ public async destroy(entity: Entity): Promise<Entity>;
383
+ public async destroy(entities: Entity[]): Promise<Entity[]>;
384
+ public async destroy(entityOrEntities: Entity | Entity[]): Promise<Entity | Entity[]> {
385
+ return PerformanceLogger.withSpan('Adapter.destroy', async() => {
386
+ const queryBuilder = new SparqlUpdateBuilder();
387
+ const query = queryBuilder.buildDelete(entityOrEntities);
388
+ await this.queryExecutor.executeSparqlUpdate(query);
389
+ return entityOrEntities;
390
+ }, { entityCount: Array.isArray(entityOrEntities) ? entityOrEntities.length : 1 });
391
+ }
392
+
393
+ public async destroyAll(): Promise<void> {
394
+ return PerformanceLogger.withSpan('Adapter.destroyAll', async() => {
395
+ const queryBuilder = new SparqlUpdateBuilder();
396
+ const query = queryBuilder.buildDeleteAll();
397
+ await this.queryExecutor.executeSparqlUpdate(query);
398
+ });
399
+ }
400
+ }
@@ -0,0 +1,38 @@
1
+ export type QueryAdapterType = 'memory' | 'sparql';
2
+
3
+ interface BaseQueryAdapterOptions {
4
+ /**
5
+ * Query Adapter type. This value is required.
6
+ */
7
+ readonly type: QueryAdapterType;
8
+ /**
9
+ * Whether to set Dublic Core created and modified timestamps on saved entities. Defaults to false.
10
+ */
11
+ readonly setTimestamps?: boolean;
12
+ }
13
+
14
+ interface SparqlEndpointQueryAdapterOptions extends BaseQueryAdapterOptions {
15
+ /**
16
+ * Query Adapter type.
17
+ */
18
+ readonly type: 'sparql';
19
+ /**
20
+ * The location of the SPARQL endpoint. This value is required.
21
+ */
22
+ readonly endpointUrl: string;
23
+ /**
24
+ * The location of the SPARQL update endpoint. Defaults to the value of endpointUrl if not set.
25
+ */
26
+ readonly updateUrl?: string;
27
+ }
28
+
29
+ interface MemorySparqlQueryAdapterOptions extends BaseQueryAdapterOptions {
30
+ /**
31
+ * Query Adapter type.
32
+ */
33
+ readonly type: 'memory';
34
+ }
35
+
36
+ export type SparqlQueryAdapterOptions =
37
+ | MemorySparqlQueryAdapterOptions
38
+ | SparqlEndpointQueryAdapterOptions;