@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,412 @@
1
+ /* eslint-disable multiline-comment-style */
2
+ /* eslint-disable capitalized-comments */
3
+ /* eslint-disable indent */
4
+ /* eslint-disable @typescript-eslint/naming-convention */
5
+ import DataFactory from '@rdfjs/data-model';
6
+ import type { Literal, Quad, Quad_Object, Quad_Subject, Variable } from '@rdfjs/types';
7
+ import type { ContextDefinition, GraphObject, NodeObject, ValueObject } from 'jsonld';
8
+ import * as jsonld from 'jsonld';
9
+ import type { Frame } from 'jsonld/jsonld-spec';
10
+ import { FindOperator } from '../storage/FindOperator';
11
+ import type { FindOptionsRelations, FindOptionsWhere } from '../storage/FindOptionsTypes';
12
+ import type { InverseRelationOperatorValue } from '../storage/operator/InverseRelation';
13
+ import type { JSONArray, JSONObject, OrArray } from './Types';
14
+ import { ensureArray } from './Util';
15
+ import { RDF, XSD } from './Vocabularies';
16
+
17
+ const BLANK_NODE_PREFIX = '_:';
18
+
19
+ export function toJSValueFromDataType(value: string, dataType: string): number | boolean | string {
20
+ switch (dataType) {
21
+ case XSD.int:
22
+ case XSD.positiveInteger:
23
+ case XSD.negativeInteger:
24
+ case XSD.integer: {
25
+ return Number.parseInt(value, 10);
26
+ }
27
+ case XSD.boolean: {
28
+ if (value === 'true') {
29
+ return true;
30
+ }
31
+ if (value === 'false') {
32
+ return false;
33
+ }
34
+ return value;
35
+ }
36
+ case XSD.double:
37
+ case XSD.decimal:
38
+ case XSD.float: {
39
+ return Number.parseFloat(value);
40
+ }
41
+ case RDF.JSON:
42
+ return JSON.parse(value);
43
+ default: {
44
+ return value;
45
+ }
46
+ }
47
+ }
48
+
49
+ function toJsonLdObject(object: Quad_Object): NodeObject | ValueObject {
50
+ if (object.termType === 'Literal') {
51
+ if (object.language && object.language.length > 0) {
52
+ return {
53
+ '@value': object.value,
54
+ '@language': object.language
55
+ };
56
+ }
57
+ return {
58
+ '@value': toJSValueFromDataType(object.value, object.datatype.value),
59
+ '@type': object.datatype.value === RDF.JSON ? '@json' : object.datatype.value
60
+ };
61
+ }
62
+ if (object.termType === 'BlankNode') {
63
+ return { '@id': `_:${object.value}` };
64
+ }
65
+ return { '@id': object.value };
66
+ }
67
+
68
+ function toJsonLdSubject(object: Quad_Subject): string {
69
+ if (object.termType === 'BlankNode') {
70
+ return `_:${object.value}`;
71
+ }
72
+ return object.value;
73
+ }
74
+
75
+ function relationsToFrame(relations: FindOptionsRelations): NodeObject {
76
+ return Object.entries(relations).reduce((obj: NodeObject, [ field, value ]): NodeObject => {
77
+ const fieldFrame: Frame = {
78
+ '@explicit': false
79
+ };
80
+ let contextAddition: ContextDefinition | undefined;
81
+ if (typeof value === 'object' && value.type === 'operator') {
82
+ const { resolvedName, relations: subRelations } = value.value as InverseRelationOperatorValue;
83
+ contextAddition = { [resolvedName]: { '@reverse': field }};
84
+ if (subRelations) {
85
+ fieldFrame[resolvedName] = relationsToFrame(subRelations);
86
+ } else {
87
+ fieldFrame[resolvedName] = {};
88
+ }
89
+ } else if (typeof value === 'boolean') {
90
+ fieldFrame[field] = {};
91
+ } else {
92
+ fieldFrame[field] = relationsToFrame(value as FindOptionsRelations);
93
+ }
94
+ if (contextAddition) {
95
+ return {
96
+ ...obj,
97
+ '@context': {
98
+ ...(obj['@context'] as ContextDefinition),
99
+ ...contextAddition
100
+ },
101
+ ...fieldFrame
102
+ };
103
+ }
104
+ return {
105
+ ...obj,
106
+ ...fieldFrame
107
+ };
108
+ }, {});
109
+ }
110
+
111
+ function whereToFrame(where: FindOptionsWhere): NodeObject {
112
+ if (where.id && typeof where.id === 'string') {
113
+ return { '@id': where.id };
114
+ }
115
+ if (where.id && FindOperator.isFindOperator(where.id)) {
116
+ const operator = where.id as FindOperator<any, any>;
117
+ if (operator.operator === 'in') {
118
+ return { '@id': operator.value };
119
+ }
120
+ if (operator.operator === 'equal') {
121
+ return { '@id': operator.value };
122
+ }
123
+ }
124
+ if (where.type && typeof where.type === 'string') {
125
+ return { '@type': where.type };
126
+ }
127
+ if (where.type && typeof where.type === 'object' && 'value' in where.type && typeof where.type.value === 'string') {
128
+ return { '@type': where.type.value };
129
+ }
130
+
131
+ // Handle arbitrary property constraints
132
+ const frame: NodeObject = {};
133
+ Object.entries(where).forEach(([ key, value ]) => {
134
+ if (key !== 'id' && key !== 'type') {
135
+ if (typeof value === 'string') {
136
+ frame[key] = { '@id': value };
137
+ } else if (FindOperator.isFindOperator(value)) {
138
+ const operator = value as FindOperator<any, any>;
139
+ if (operator.operator === 'equal' || operator.operator === 'in') {
140
+ frame[key] = { '@id': operator.value };
141
+ }
142
+ }
143
+ }
144
+ });
145
+
146
+ return frame;
147
+ }
148
+
149
+ function triplesToNodes(triples: Quad[]): {
150
+ nodesById: Record<string, NodeObject>;
151
+ nodeIdOrder: string[];
152
+ } {
153
+ const nodeIdOrder: string[] = [];
154
+ const nodesById = triples.reduce((obj: Record<string, NodeObject>, triple): Record<string, NodeObject> => {
155
+ const subject = toJsonLdSubject(triple.subject);
156
+ const isTypePredicate = triple.predicate.value === RDF.type;
157
+ const predicate = isTypePredicate ? '@type' : triple.predicate.value;
158
+ const object = isTypePredicate ? triple.object.value : toJsonLdObject(triple.object);
159
+ if (obj[subject]) {
160
+ if (obj[subject][predicate]) {
161
+ if (Array.isArray(obj[subject][predicate])) {
162
+ (obj[subject][predicate]! as any[]).push(object);
163
+ } else {
164
+ obj[subject][predicate] = [ obj[subject][predicate]!, object ] as any;
165
+ }
166
+ } else {
167
+ obj[subject][predicate] = object;
168
+ }
169
+ } else {
170
+ obj[subject] = {
171
+ '@id': subject,
172
+ [predicate]: object
173
+ };
174
+ if (!subject.startsWith(BLANK_NODE_PREFIX)) {
175
+ nodeIdOrder.push(subject);
176
+ }
177
+ }
178
+ return obj;
179
+ }, {});
180
+ return { nodesById, nodeIdOrder };
181
+ }
182
+
183
+ async function frameWithRelationsOrNonBlankNodes(
184
+ nodesById: Record<string, NodeObject>,
185
+ frame?: Frame,
186
+ relations?: FindOptionsRelations,
187
+ where?: FindOptionsWhere,
188
+ queriedType?: string,
189
+ orderedNodeIds?: string[],
190
+ rdfTypes?: string[]
191
+ ): Promise<NodeObject> {
192
+ if (!frame) {
193
+ const relationsFrame = relations ? relationsToFrame(relations) : {};
194
+ const whereFrame = where ? whereToFrame(where) : {};
195
+ frame = { ...relationsFrame, ...whereFrame };
196
+ const nodesValue = Object.values(nodesById);
197
+ /* // eslint-disable-next-line no-console
198
+ console.log('nodesValue', JSON.stringify(nodesValue, null, 2));
199
+ // eslint-disable-next-line no-console
200
+ console.log('whereFrame', JSON.stringify(whereFrame, null, 2));
201
+ // eslint-disable-next-line no-console
202
+ console.log('relationsFrame', JSON.stringify(relationsFrame, null, 2)); */
203
+ /* Add all the @types in the nodes to the frame */
204
+ const typeSet = new Set<string>();
205
+ const hasTypeConstraint = whereFrame['@type'];
206
+ const hasIriTypeConstraint = where?.id;
207
+
208
+ if (Object.keys(frame).length === 0) {
209
+ // Only add all types when there's no where constraint (no filtering)
210
+ nodesValue.forEach((node: NodeObject): void => {
211
+ const isBlankNode = node['@id']?.startsWith(BLANK_NODE_PREFIX);
212
+ if (isBlankNode) {
213
+ return;
214
+ }
215
+ if (node['@type'] && frame && typeof frame === 'object') {
216
+ ensureArray(node['@type']).forEach((type: string): void => {
217
+ typeSet.add(type);
218
+ });
219
+ }
220
+ });
221
+ frame['@type'] ??= [];
222
+ frame['@type'] = [ ...typeSet ];
223
+ } else if (hasTypeConstraint) {
224
+ // For type-based queries, include the constraint type and types from entities that matched the WHERE clause
225
+ const constraintType = hasTypeConstraint as string;
226
+
227
+ // Always include the queried/constraint type
228
+ typeSet.add(constraintType);
229
+ if (rdfTypes && Array.isArray(rdfTypes)) {
230
+ rdfTypes.forEach((rdfType: string): void => {
231
+ typeSet.add(rdfType);
232
+ });
233
+ }
234
+
235
+ // If we have orderedNodeIds (entities that matched the WHERE clause), only include types from those
236
+ // This prevents over-matching related entities while still supporting subclass matching
237
+ if (orderedNodeIds && orderedNodeIds.length > 0) {
238
+ const orderedNodeIdSet = new Set(orderedNodeIds);
239
+ nodesValue.forEach((node: NodeObject): void => {
240
+ const nodeId = node['@id'];
241
+ if (!nodeId || node['@id']?.startsWith(BLANK_NODE_PREFIX)) {
242
+ return;
243
+ }
244
+ // Only include types from entities that matched the WHERE clause (in orderedNodeIds)
245
+ if (orderedNodeIdSet.has(nodeId) && node['@type'] && frame && typeof frame === 'object') {
246
+ const nodeTypes = ensureArray(node['@type']);
247
+ nodeTypes.forEach((type: string | undefined): void => {
248
+ if (type) {
249
+ typeSet.add(type);
250
+ }
251
+ });
252
+ }
253
+ });
254
+ } else {
255
+ // Fallback: if no orderedNodeIds, only add types from entities with the constraint type
256
+ nodesValue.forEach((node: NodeObject): void => {
257
+ const isBlankNode = node['@id']?.startsWith(BLANK_NODE_PREFIX);
258
+ if (isBlankNode) {
259
+ return;
260
+ }
261
+ if (node['@type'] && frame && typeof frame === 'object') {
262
+ const nodeTypes = ensureArray(node['@type']);
263
+ if (nodeTypes.includes(constraintType)) {
264
+ nodeTypes.forEach((type: string): void => {
265
+ typeSet.add(type);
266
+ });
267
+ }
268
+ }
269
+ });
270
+ }
271
+
272
+ frame['@type'] ??= [];
273
+ frame['@type'] = [ ...typeSet ];
274
+
275
+ // When we have orderedNodeIds, restrict root-level results to only those IDs
276
+ // This prevents related entities with the same type from appearing at the root level
277
+ // Only apply this constraint if we have non-blank node IDs, since blank nodes
278
+ // will be filtered out anyway and we need them during framing
279
+ if (orderedNodeIds && orderedNodeIds.length > 0) {
280
+ const nonBlankNodeIds = orderedNodeIds.filter((id: string): boolean => !id.startsWith('_:'));
281
+ if (nonBlankNodeIds.length > 0) {
282
+ frame['@id'] = nonBlankNodeIds as any;
283
+ }
284
+ }
285
+ }
286
+ else if (hasIriTypeConstraint && !frame['@id']) {
287
+ frame['@id'] = Object.keys(nodesById).map((nodeId: string): string | undefined => {
288
+ if (!nodeId.startsWith(BLANK_NODE_PREFIX)) {
289
+ return nodeId;
290
+ }
291
+ return undefined;
292
+ }).filter(Boolean) as any;
293
+ }
294
+ if (Object.keys(frame).length > 0) {
295
+ const results = await jsonld.frame({ '@graph': nodesValue }, frame);
296
+ if (Array.isArray(results['@graph'])) {
297
+ results['@graph'] = results['@graph'].filter(
298
+ (node: NodeObject): boolean => !node['@id']?.startsWith(BLANK_NODE_PREFIX)
299
+ );
300
+ }
301
+ if (typeof frame === 'object' && '@context' in frame && Object.keys(frame['@context']!).length > 0) {
302
+ let resultsList;
303
+ if (Array.isArray(results)) {
304
+ resultsList = results;
305
+ } else if ('@graph' in results) {
306
+ resultsList = ensureArray(results['@graph']);
307
+ } else {
308
+ const { '@context': unusedContext, ...entityResult } = results;
309
+ resultsList = [ entityResult ];
310
+ }
311
+ /* return {
312
+ '@graph': resultsList.filter((result): boolean =>
313
+ Object.keys((frame as NodeObject)['@context']!).some((relationField): boolean => relationField in result))
314
+ }; */
315
+ return resultsList as NodeObject;
316
+ }
317
+ return results;
318
+ }
319
+ const nonBlankNodes = Object.keys(nodesById).filter(
320
+ (nodeId: string): boolean => !nodeId.startsWith(BLANK_NODE_PREFIX)
321
+ );
322
+ return await jsonld.frame({ '@graph': Object.values(nodesById) }, { '@id': nonBlankNodes as any });
323
+ }
324
+ return await jsonld.frame({ '@graph': Object.values(nodesById) }, frame);
325
+ }
326
+
327
+ function sortNodesByOrder(nodes: NodeObject[], nodeIdOrder: string[]): NodeObject[] {
328
+ return nodes.sort(
329
+ (aNode: NodeObject, bNode: NodeObject): number =>
330
+ nodeIdOrder.indexOf(aNode['@id']!) - nodeIdOrder.indexOf(bNode['@id']!)
331
+ );
332
+ }
333
+
334
+ function sortGraphOfNodeObject(graphObject: GraphObject, nodeIdOrder: string[]): GraphObject {
335
+ return {
336
+ ...graphObject,
337
+ '@graph': sortNodesByOrder(graphObject['@graph'] as NodeObject[], nodeIdOrder)
338
+ };
339
+ }
340
+
341
+ export async function triplesToJsonld(
342
+ triples: Quad[],
343
+ skipFraming?: boolean,
344
+ relations?: FindOptionsRelations,
345
+ where?: FindOptionsWhere,
346
+ orderedNodeIds?: string[],
347
+ rdfTypes?: string[]
348
+ ): Promise<OrArray<NodeObject>> {
349
+ if (triples.length === 0) {
350
+ return [];
351
+ }
352
+ const { nodeIdOrder, nodesById } = triplesToNodes(triples);
353
+ if (skipFraming) {
354
+ return Object.values(nodesById);
355
+ }
356
+
357
+ // Extract the queried type from where clause for subclass handling
358
+ const queriedType = where?.type && typeof where.type === 'string' ? where.type : undefined;
359
+
360
+ const framed = await frameWithRelationsOrNonBlankNodes(
361
+ nodesById, undefined, relations, where, queriedType, orderedNodeIds, rdfTypes
362
+ );
363
+ if ('@graph' in framed) {
364
+ return sortNodesByOrder(framed['@graph'] as NodeObject[], orderedNodeIds ?? nodeIdOrder);
365
+ }
366
+ return framed;
367
+ }
368
+
369
+ export async function triplesToJsonldWithFrame(triples: Quad[], frame?: Frame): Promise<GraphObject> {
370
+ const { nodeIdOrder, nodesById } = triplesToNodes(triples);
371
+ const framed = await frameWithRelationsOrNonBlankNodes(nodesById, frame);
372
+ if ('@graph' in framed) {
373
+ return sortGraphOfNodeObject(framed as GraphObject, nodeIdOrder);
374
+ }
375
+ const { '@context': context, ...framedWithoutContext } = framed;
376
+ const graphObject: GraphObject = {
377
+ '@graph': [ framedWithoutContext as NodeObject ]
378
+ };
379
+ if (context) {
380
+ graphObject['@context'] = context;
381
+ }
382
+ return graphObject;
383
+ }
384
+
385
+ export function valueToLiteral(
386
+ value: string | boolean | number | Date | JSONObject | JSONArray,
387
+ datatype?: string
388
+ ): Literal | Variable {
389
+ if (datatype) {
390
+ if (datatype === '@json' || datatype === RDF.JSON) {
391
+ return DataFactory.literal(JSON.stringify(value), RDF.JSON);
392
+ }
393
+ return DataFactory.literal((value as string | boolean | number).toString(), datatype);
394
+ }
395
+ if (typeof value === 'number') {
396
+ if (Number.isInteger(value)) {
397
+ return DataFactory.literal(value.toString(), XSD.integer);
398
+ }
399
+ return DataFactory.literal(value.toString(), XSD.decimal);
400
+ }
401
+ if (typeof value === 'boolean') {
402
+ return DataFactory.literal(value.toString(), XSD.boolean);
403
+ }
404
+ if (typeof value === 'string' && value.startsWith('?') && value.length > 1) {
405
+ return DataFactory.variable(value.slice(1));
406
+ }
407
+ if (value instanceof Date) {
408
+ return DataFactory.literal(value.toISOString(), XSD.dateTime);
409
+ }
410
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
411
+ return DataFactory.literal(value.toString());
412
+ }