@_linked/core 2.11.1 → 2.12.0-next.20260706124103

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 (267) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +3 -3
  3. package/lib/cjs/expressions/Expr.d.ts +22 -51
  4. package/lib/cjs/expressions/Expr.js +24 -176
  5. package/lib/cjs/expressions/Expr.js.map +1 -1
  6. package/lib/cjs/expressions/ExpressionMethods.d.ts +4 -0
  7. package/lib/cjs/expressions/ExpressionNode.d.ts +4 -0
  8. package/lib/cjs/expressions/ExpressionNode.js +13 -0
  9. package/lib/cjs/expressions/ExpressionNode.js.map +1 -1
  10. package/lib/cjs/index.d.ts +2 -2
  11. package/lib/cjs/index.js +6 -138
  12. package/lib/cjs/index.js.map +1 -1
  13. package/lib/cjs/interfaces/ICoreIterable.d.ts +1 -1
  14. package/lib/cjs/package.d.ts +2 -2
  15. package/lib/cjs/queries/ContextRef.d.ts +15 -4
  16. package/lib/cjs/queries/ContextRef.js +15 -4
  17. package/lib/cjs/queries/ContextRef.js.map +1 -1
  18. package/lib/cjs/queries/CreateBuilder.d.ts +3 -5
  19. package/lib/cjs/queries/CreateBuilder.js +4 -16
  20. package/lib/cjs/queries/CreateBuilder.js.map +1 -1
  21. package/lib/cjs/queries/DeleteBuilder.d.ts +3 -5
  22. package/lib/cjs/queries/DeleteBuilder.js +8 -20
  23. package/lib/cjs/queries/DeleteBuilder.js.map +1 -1
  24. package/lib/cjs/queries/DslJsonExpression.d.ts +8 -8
  25. package/lib/cjs/queries/DslJsonExpression.js +84 -26
  26. package/lib/cjs/queries/DslJsonExpression.js.map +1 -1
  27. package/lib/cjs/queries/FieldSet.d.ts +43 -14
  28. package/lib/cjs/queries/FieldSet.js +142 -77
  29. package/lib/cjs/queries/FieldSet.js.map +1 -1
  30. package/lib/cjs/queries/IRCanonicalize.d.ts +5 -9
  31. package/lib/cjs/queries/IRCanonicalize.js +7 -23
  32. package/lib/cjs/queries/IRCanonicalize.js.map +1 -1
  33. package/lib/cjs/queries/IRDesugar.d.ts +2 -1
  34. package/lib/cjs/queries/IRDesugar.js +1 -1
  35. package/lib/cjs/queries/IRDesugar.js.map +1 -1
  36. package/lib/cjs/queries/IRLower.js +7 -7
  37. package/lib/cjs/queries/IRLower.js.map +1 -1
  38. package/lib/cjs/queries/IntermediateRepresentation.d.ts +16 -2
  39. package/lib/cjs/queries/MutationQuery.d.ts +18 -1
  40. package/lib/cjs/queries/MutationQuery.js +83 -3
  41. package/lib/cjs/queries/MutationQuery.js.map +1 -1
  42. package/lib/cjs/queries/MutationSerialization.d.ts +11 -11
  43. package/lib/cjs/queries/MutationSerialization.js +51 -31
  44. package/lib/cjs/queries/MutationSerialization.js.map +1 -1
  45. package/lib/cjs/queries/MutationThenable.d.ts +18 -0
  46. package/lib/cjs/queries/MutationThenable.js +32 -0
  47. package/lib/cjs/queries/MutationThenable.js.map +1 -0
  48. package/lib/cjs/queries/QueryBuilder.d.ts +1 -1
  49. package/lib/cjs/queries/QueryBuilder.js +3 -3
  50. package/lib/cjs/queries/QueryBuilder.js.map +1 -1
  51. package/lib/cjs/queries/QueryBuilderSerialization.js +3 -4
  52. package/lib/cjs/queries/QueryBuilderSerialization.js.map +1 -1
  53. package/lib/cjs/queries/QueryContext.d.ts +1 -1
  54. package/lib/cjs/queries/QueryContext.js +7 -5
  55. package/lib/cjs/queries/QueryContext.js.map +1 -1
  56. package/lib/cjs/queries/QueryFactory.d.ts +0 -7
  57. package/lib/cjs/queries/QueryFactory.js +1 -20
  58. package/lib/cjs/queries/QueryFactory.js.map +1 -1
  59. package/lib/cjs/queries/SelectQuery.d.ts +19 -41
  60. package/lib/cjs/queries/SelectQuery.js +69 -118
  61. package/lib/cjs/queries/SelectQuery.js.map +1 -1
  62. package/lib/cjs/queries/UpdateBuilder.d.ts +3 -5
  63. package/lib/cjs/queries/UpdateBuilder.js +5 -17
  64. package/lib/cjs/queries/UpdateBuilder.js.map +1 -1
  65. package/lib/cjs/queries/lower.js +3 -4
  66. package/lib/cjs/queries/lower.js.map +1 -1
  67. package/lib/cjs/queries/lowerMutationJSON.js +39 -23
  68. package/lib/cjs/queries/lowerMutationJSON.js.map +1 -1
  69. package/lib/cjs/shapes/List.js +2 -9
  70. package/lib/cjs/shapes/List.js.map +1 -1
  71. package/lib/cjs/shapes/PathNode.js +5 -18
  72. package/lib/cjs/shapes/PathNode.js.map +1 -1
  73. package/lib/cjs/shapes/SHACL.d.ts +10 -0
  74. package/lib/cjs/shapes/SHACL.js +41 -0
  75. package/lib/cjs/shapes/SHACL.js.map +1 -1
  76. package/lib/cjs/shapes/Shape.d.ts +1 -1
  77. package/lib/cjs/shapes/Shape.js.map +1 -1
  78. package/lib/cjs/shapes/serializePathToNodeData.js +16 -0
  79. package/lib/cjs/shapes/serializePathToNodeData.js.map +1 -1
  80. package/lib/cjs/shapes/syncShapes.js +15 -0
  81. package/lib/cjs/shapes/syncShapes.js.map +1 -1
  82. package/lib/cjs/sparql/SparqlAlgebra.d.ts +8 -1
  83. package/lib/cjs/sparql/algebraToString.js +57 -11
  84. package/lib/cjs/sparql/algebraToString.js.map +1 -1
  85. package/lib/cjs/sparql/irToAlgebra.js +89 -31
  86. package/lib/cjs/sparql/irToAlgebra.js.map +1 -1
  87. package/lib/cjs/sparql/resultMapping.js +0 -11
  88. package/lib/cjs/sparql/resultMapping.js.map +1 -1
  89. package/lib/cjs/sparql/sparqlUtils.d.ts +21 -0
  90. package/lib/cjs/sparql/sparqlUtils.js +65 -0
  91. package/lib/cjs/sparql/sparqlUtils.js.map +1 -1
  92. package/lib/cjs/utils/LinkedStorage.d.ts +1 -2
  93. package/lib/cjs/utils/LinkedStorage.js +1 -2
  94. package/lib/cjs/utils/LinkedStorage.js.map +1 -1
  95. package/lib/cjs/utils/Package.js +11 -4
  96. package/lib/cjs/utils/Package.js.map +1 -1
  97. package/lib/cjs/utils/Prefix.d.ts +4 -5
  98. package/lib/cjs/utils/Prefix.js +13 -7
  99. package/lib/cjs/utils/Prefix.js.map +1 -1
  100. package/lib/cjs/utils/ShapeClass.d.ts +0 -11
  101. package/lib/cjs/utils/ShapeClass.js +0 -83
  102. package/lib/cjs/utils/ShapeClass.js.map +1 -1
  103. package/lib/cjs/utils/cached.d.ts +3 -0
  104. package/lib/cjs/utils/cached.js +26 -16
  105. package/lib/cjs/utils/cached.js.map +1 -1
  106. package/lib/cjs/utils/loadStores.js +4 -0
  107. package/lib/cjs/utils/loadStores.js.map +1 -1
  108. package/lib/esm/expressions/Expr.d.ts +22 -51
  109. package/lib/esm/expressions/Expr.js +24 -176
  110. package/lib/esm/expressions/Expr.js.map +1 -1
  111. package/lib/esm/expressions/ExpressionMethods.d.ts +4 -0
  112. package/lib/esm/expressions/ExpressionNode.d.ts +4 -0
  113. package/lib/esm/expressions/ExpressionNode.js +13 -0
  114. package/lib/esm/expressions/ExpressionNode.js.map +1 -1
  115. package/lib/esm/index.d.ts +2 -2
  116. package/lib/esm/index.js +3 -103
  117. package/lib/esm/index.js.map +1 -1
  118. package/lib/esm/interfaces/ICoreIterable.d.ts +1 -1
  119. package/lib/esm/package.d.ts +2 -2
  120. package/lib/esm/queries/ContextRef.d.ts +15 -4
  121. package/lib/esm/queries/ContextRef.js +15 -4
  122. package/lib/esm/queries/ContextRef.js.map +1 -1
  123. package/lib/esm/queries/CreateBuilder.d.ts +3 -5
  124. package/lib/esm/queries/CreateBuilder.js +4 -16
  125. package/lib/esm/queries/CreateBuilder.js.map +1 -1
  126. package/lib/esm/queries/DeleteBuilder.d.ts +3 -5
  127. package/lib/esm/queries/DeleteBuilder.js +8 -20
  128. package/lib/esm/queries/DeleteBuilder.js.map +1 -1
  129. package/lib/esm/queries/DslJsonExpression.d.ts +8 -8
  130. package/lib/esm/queries/DslJsonExpression.js +84 -26
  131. package/lib/esm/queries/DslJsonExpression.js.map +1 -1
  132. package/lib/esm/queries/FieldSet.d.ts +43 -14
  133. package/lib/esm/queries/FieldSet.js +142 -77
  134. package/lib/esm/queries/FieldSet.js.map +1 -1
  135. package/lib/esm/queries/IRCanonicalize.d.ts +5 -9
  136. package/lib/esm/queries/IRCanonicalize.js +6 -21
  137. package/lib/esm/queries/IRCanonicalize.js.map +1 -1
  138. package/lib/esm/queries/IRDesugar.d.ts +2 -1
  139. package/lib/esm/queries/IRDesugar.js +1 -1
  140. package/lib/esm/queries/IRDesugar.js.map +1 -1
  141. package/lib/esm/queries/IRLower.js +7 -7
  142. package/lib/esm/queries/IRLower.js.map +1 -1
  143. package/lib/esm/queries/IntermediateRepresentation.d.ts +16 -2
  144. package/lib/esm/queries/MutationQuery.d.ts +18 -1
  145. package/lib/esm/queries/MutationQuery.js +83 -3
  146. package/lib/esm/queries/MutationQuery.js.map +1 -1
  147. package/lib/esm/queries/MutationSerialization.d.ts +11 -11
  148. package/lib/esm/queries/MutationSerialization.js +51 -31
  149. package/lib/esm/queries/MutationSerialization.js.map +1 -1
  150. package/lib/esm/queries/MutationThenable.d.ts +18 -0
  151. package/lib/esm/queries/MutationThenable.js +28 -0
  152. package/lib/esm/queries/MutationThenable.js.map +1 -0
  153. package/lib/esm/queries/QueryBuilder.d.ts +1 -1
  154. package/lib/esm/queries/QueryBuilder.js +3 -3
  155. package/lib/esm/queries/QueryBuilder.js.map +1 -1
  156. package/lib/esm/queries/QueryBuilderSerialization.js +3 -4
  157. package/lib/esm/queries/QueryBuilderSerialization.js.map +1 -1
  158. package/lib/esm/queries/QueryContext.d.ts +1 -1
  159. package/lib/esm/queries/QueryContext.js +7 -5
  160. package/lib/esm/queries/QueryContext.js.map +1 -1
  161. package/lib/esm/queries/QueryFactory.d.ts +0 -7
  162. package/lib/esm/queries/QueryFactory.js +1 -19
  163. package/lib/esm/queries/QueryFactory.js.map +1 -1
  164. package/lib/esm/queries/SelectQuery.d.ts +19 -41
  165. package/lib/esm/queries/SelectQuery.js +69 -118
  166. package/lib/esm/queries/SelectQuery.js.map +1 -1
  167. package/lib/esm/queries/UpdateBuilder.d.ts +3 -5
  168. package/lib/esm/queries/UpdateBuilder.js +5 -17
  169. package/lib/esm/queries/UpdateBuilder.js.map +1 -1
  170. package/lib/esm/queries/lower.js +3 -4
  171. package/lib/esm/queries/lower.js.map +1 -1
  172. package/lib/esm/queries/lowerMutationJSON.js +39 -23
  173. package/lib/esm/queries/lowerMutationJSON.js.map +1 -1
  174. package/lib/esm/shapes/List.js +2 -9
  175. package/lib/esm/shapes/List.js.map +1 -1
  176. package/lib/esm/shapes/PathNode.js +5 -18
  177. package/lib/esm/shapes/PathNode.js.map +1 -1
  178. package/lib/esm/shapes/SHACL.d.ts +10 -0
  179. package/lib/esm/shapes/SHACL.js +41 -0
  180. package/lib/esm/shapes/SHACL.js.map +1 -1
  181. package/lib/esm/shapes/Shape.d.ts +1 -1
  182. package/lib/esm/shapes/Shape.js.map +1 -1
  183. package/lib/esm/shapes/serializePathToNodeData.js +16 -0
  184. package/lib/esm/shapes/serializePathToNodeData.js.map +1 -1
  185. package/lib/esm/shapes/syncShapes.js +15 -0
  186. package/lib/esm/shapes/syncShapes.js.map +1 -1
  187. package/lib/esm/sparql/SparqlAlgebra.d.ts +8 -1
  188. package/lib/esm/sparql/algebraToString.js +58 -12
  189. package/lib/esm/sparql/algebraToString.js.map +1 -1
  190. package/lib/esm/sparql/irToAlgebra.js +89 -31
  191. package/lib/esm/sparql/irToAlgebra.js.map +1 -1
  192. package/lib/esm/sparql/resultMapping.js +0 -11
  193. package/lib/esm/sparql/resultMapping.js.map +1 -1
  194. package/lib/esm/sparql/sparqlUtils.d.ts +21 -0
  195. package/lib/esm/sparql/sparqlUtils.js +62 -0
  196. package/lib/esm/sparql/sparqlUtils.js.map +1 -1
  197. package/lib/esm/utils/LinkedStorage.d.ts +1 -2
  198. package/lib/esm/utils/LinkedStorage.js +1 -2
  199. package/lib/esm/utils/LinkedStorage.js.map +1 -1
  200. package/lib/esm/utils/Package.js +11 -4
  201. package/lib/esm/utils/Package.js.map +1 -1
  202. package/lib/esm/utils/Prefix.d.ts +4 -5
  203. package/lib/esm/utils/Prefix.js +13 -7
  204. package/lib/esm/utils/Prefix.js.map +1 -1
  205. package/lib/esm/utils/ShapeClass.d.ts +0 -11
  206. package/lib/esm/utils/ShapeClass.js +0 -79
  207. package/lib/esm/utils/ShapeClass.js.map +1 -1
  208. package/lib/esm/utils/cached.d.ts +3 -0
  209. package/lib/esm/utils/cached.js +26 -16
  210. package/lib/esm/utils/cached.js.map +1 -1
  211. package/lib/esm/utils/loadStores.js +4 -0
  212. package/lib/esm/utils/loadStores.js.map +1 -1
  213. package/package.json +9 -3
  214. package/lib/cjs/collections/CoreMap.d.ts +0 -37
  215. package/lib/cjs/collections/CoreMap.js +0 -101
  216. package/lib/cjs/collections/CoreMap.js.map +0 -1
  217. package/lib/cjs/paths/serializePathToSHACL.d.ts +0 -22
  218. package/lib/cjs/paths/serializePathToSHACL.js +0 -126
  219. package/lib/cjs/paths/serializePathToSHACL.js.map +0 -1
  220. package/lib/cjs/queries/WhereCondition.d.ts +0 -18
  221. package/lib/cjs/queries/WhereCondition.js +0 -3
  222. package/lib/cjs/queries/WhereCondition.js.map +0 -1
  223. package/lib/cjs/test-helpers/FusekiStore.d.ts +0 -29
  224. package/lib/cjs/test-helpers/FusekiStore.js +0 -85
  225. package/lib/cjs/test-helpers/FusekiStore.js.map +0 -1
  226. package/lib/cjs/test-helpers/fuseki-test-store.d.ts +0 -46
  227. package/lib/cjs/test-helpers/fuseki-test-store.js +0 -244
  228. package/lib/cjs/test-helpers/fuseki-test-store.js.map +0 -1
  229. package/lib/cjs/test-helpers/query-capture-store.d.ts +0 -11
  230. package/lib/cjs/test-helpers/query-capture-store.js +0 -109
  231. package/lib/cjs/test-helpers/query-capture-store.js.map +0 -1
  232. package/lib/cjs/test-helpers/query-fixtures.d.ts +0 -819
  233. package/lib/cjs/test-helpers/query-fixtures.js +0 -605
  234. package/lib/cjs/test-helpers/query-fixtures.js.map +0 -1
  235. package/lib/cjs/test-helpers/test-utils.d.ts +0 -18
  236. package/lib/cjs/test-helpers/test-utils.js +0 -47
  237. package/lib/cjs/test-helpers/test-utils.js.map +0 -1
  238. package/lib/cjs/utils/Types.d.ts +0 -11
  239. package/lib/cjs/utils/Types.js +0 -3
  240. package/lib/cjs/utils/Types.js.map +0 -1
  241. package/lib/esm/collections/CoreMap.d.ts +0 -37
  242. package/lib/esm/collections/CoreMap.js +0 -97
  243. package/lib/esm/collections/CoreMap.js.map +0 -1
  244. package/lib/esm/paths/serializePathToSHACL.d.ts +0 -22
  245. package/lib/esm/paths/serializePathToSHACL.js +0 -122
  246. package/lib/esm/paths/serializePathToSHACL.js.map +0 -1
  247. package/lib/esm/queries/WhereCondition.d.ts +0 -18
  248. package/lib/esm/queries/WhereCondition.js +0 -2
  249. package/lib/esm/queries/WhereCondition.js.map +0 -1
  250. package/lib/esm/test-helpers/FusekiStore.d.ts +0 -29
  251. package/lib/esm/test-helpers/FusekiStore.js +0 -81
  252. package/lib/esm/test-helpers/FusekiStore.js.map +0 -1
  253. package/lib/esm/test-helpers/fuseki-test-store.d.ts +0 -46
  254. package/lib/esm/test-helpers/fuseki-test-store.js +0 -232
  255. package/lib/esm/test-helpers/fuseki-test-store.js.map +0 -1
  256. package/lib/esm/test-helpers/query-capture-store.d.ts +0 -11
  257. package/lib/esm/test-helpers/query-capture-store.js +0 -71
  258. package/lib/esm/test-helpers/query-capture-store.js.map +0 -1
  259. package/lib/esm/test-helpers/query-fixtures.d.ts +0 -819
  260. package/lib/esm/test-helpers/query-fixtures.js +0 -602
  261. package/lib/esm/test-helpers/query-fixtures.js.map +0 -1
  262. package/lib/esm/test-helpers/test-utils.d.ts +0 -18
  263. package/lib/esm/test-helpers/test-utils.js +0 -41
  264. package/lib/esm/test-helpers/test-utils.js.map +0 -1
  265. package/lib/esm/utils/Types.d.ts +0 -11
  266. package/lib/esm/utils/Types.js +0 -2
  267. package/lib/esm/utils/Types.js.map +0 -1
@@ -1,244 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.FUSEKI_BASE_URL = void 0;
13
- exports.isFusekiAvailable = isFusekiAvailable;
14
- exports.ensureFuseki = ensureFuseki;
15
- exports.stopFuseki = stopFuseki;
16
- exports.createTestDataset = createTestDataset;
17
- exports.deleteTestDataset = deleteTestDataset;
18
- exports.loadTestData = loadTestData;
19
- exports.executeSparqlQuery = executeSparqlQuery;
20
- exports.executeSparqlUpdate = executeSparqlUpdate;
21
- exports.clearAllData = clearAllData;
22
- /**
23
- * Test helper module for Apache Jena Fuseki integration tests.
24
- *
25
- * Provides utilities to:
26
- * - Ensure a Fuseki instance is running (auto-starts via Docker if needed)
27
- * - Check if a Fuseki instance is available
28
- * - Create / delete an in-memory test dataset
29
- * - Load N-Triples data
30
- * - Execute SPARQL queries and updates
31
- * - Clear all data
32
- *
33
- * Uses native fetch (Node 18+). No external HTTP libraries.
34
- */
35
- const node_child_process_1 = require("node:child_process");
36
- const node_fs_1 = require("node:fs");
37
- const node_path_1 = require("node:path");
38
- exports.FUSEKI_BASE_URL = process.env.FUSEKI_BASE_URL || 'http://localhost:3939';
39
- const FUSEKI_ADMIN_PASSWORD = process.env.FUSEKI_ADMIN_PASSWORD || 'admin';
40
- const DATASET_NAME = 'nashville-test';
41
- /** Whether this process started Fuseki (so we know whether to stop it). */
42
- let startedByUs = false;
43
- const adminAuth = `Basic ${Buffer.from(`admin:${FUSEKI_ADMIN_PASSWORD}`).toString('base64')}`;
44
- /**
45
- * Check whether a Fuseki server is reachable.
46
- * Returns true if a HEAD request to the base URL succeeds with status 200.
47
- */
48
- function isFusekiAvailable() {
49
- return __awaiter(this, void 0, void 0, function* () {
50
- try {
51
- const controller = new AbortController();
52
- const timer = setTimeout(() => controller.abort(), 2000);
53
- const response = yield fetch(exports.FUSEKI_BASE_URL, {
54
- method: 'HEAD',
55
- signal: controller.signal,
56
- });
57
- clearTimeout(timer);
58
- return response.status === 200;
59
- }
60
- catch (_a) {
61
- return false;
62
- }
63
- });
64
- }
65
- /**
66
- * Locate the docker-compose.test.yml for Fuseki.
67
- * Works from both source (src/) and compiled (lib/esm/) paths.
68
- */
69
- function findComposeFile() {
70
- // __dirname works in both CJS and ts-jest; for ESM builds the lincd
71
- // toolchain injects a __dirname shim.
72
- const candidates = [
73
- (0, node_path_1.resolve)(__dirname, '../tests/docker-compose.test.yml'),
74
- (0, node_path_1.resolve)(__dirname, '../../src/tests/docker-compose.test.yml'),
75
- // Built helpers live under lib/{cjs,esm}/test-helpers, so we need to
76
- // climb back to the package root before looking in src/tests.
77
- (0, node_path_1.resolve)(__dirname, '../../../src/tests/docker-compose.test.yml'),
78
- ];
79
- for (const candidate of candidates) {
80
- if ((0, node_fs_1.existsSync)(candidate))
81
- return candidate;
82
- }
83
- return null;
84
- }
85
- /**
86
- * Ensure a Fuseki instance is running.
87
- * If Fuseki is already reachable, returns immediately.
88
- * Otherwise, starts it via Docker Compose and waits for the healthcheck.
89
- *
90
- * Returns true if Fuseki is available after this call.
91
- * Returns false if Docker is not installed or the compose file can't be found.
92
- */
93
- function ensureFuseki() {
94
- return __awaiter(this, void 0, void 0, function* () {
95
- if (yield isFusekiAvailable())
96
- return true;
97
- const composeFile = findComposeFile();
98
- if (!composeFile) {
99
- console.warn('[ensureFuseki] docker-compose.test.yml not found — cannot auto-start Fuseki');
100
- return false;
101
- }
102
- try {
103
- (0, node_child_process_1.execSync)('docker compose version', { stdio: 'ignore' });
104
- }
105
- catch (_a) {
106
- console.warn('[ensureFuseki] Docker Compose not available — skipping');
107
- return false;
108
- }
109
- console.log('[ensureFuseki] Fuseki not running — starting via Docker...');
110
- try {
111
- (0, node_child_process_1.execSync)(`docker compose -f "${composeFile}" up -d --wait`, {
112
- stdio: 'inherit',
113
- timeout: 60000,
114
- });
115
- startedByUs = true;
116
- // Verify it came up
117
- if (yield isFusekiAvailable()) {
118
- console.log('[ensureFuseki] Fuseki is ready');
119
- return true;
120
- }
121
- console.warn('[ensureFuseki] Fuseki started but not responding');
122
- return false;
123
- }
124
- catch (err) {
125
- console.warn('[ensureFuseki] Failed to start Fuseki:', err.message);
126
- return false;
127
- }
128
- });
129
- }
130
- /**
131
- * Stop the Fuseki container if it was started by `ensureFuseki()`.
132
- * No-op if Fuseki was already running before the tests.
133
- */
134
- function stopFuseki() {
135
- return __awaiter(this, void 0, void 0, function* () {
136
- if (!startedByUs)
137
- return;
138
- const composeFile = findComposeFile();
139
- if (!composeFile)
140
- return;
141
- try {
142
- (0, node_child_process_1.execSync)(`docker compose -f "${composeFile}" down`, {
143
- stdio: 'inherit',
144
- timeout: 30000,
145
- });
146
- }
147
- catch (_a) {
148
- // Best effort — don't fail the test suite on cleanup
149
- }
150
- startedByUs = false;
151
- });
152
- }
153
- /**
154
- * Create the in-memory test dataset on Fuseki.
155
- * Ignores 409 Conflict (dataset already exists).
156
- */
157
- function createTestDataset() {
158
- return __awaiter(this, void 0, void 0, function* () {
159
- const response = yield fetch(`${exports.FUSEKI_BASE_URL}/$/datasets`, {
160
- method: 'POST',
161
- headers: {
162
- 'Content-Type': 'application/x-www-form-urlencoded',
163
- Authorization: adminAuth,
164
- },
165
- body: `dbName=${DATASET_NAME}&dbType=mem`,
166
- });
167
- if (!response.ok && response.status !== 409) {
168
- throw new Error(`Failed to create test dataset: ${response.status} ${response.statusText}`);
169
- }
170
- });
171
- }
172
- /**
173
- * Delete the test dataset from Fuseki.
174
- */
175
- function deleteTestDataset() {
176
- return __awaiter(this, void 0, void 0, function* () {
177
- const response = yield fetch(`${exports.FUSEKI_BASE_URL}/$/datasets/${DATASET_NAME}`, { method: 'DELETE', headers: { Authorization: adminAuth } });
178
- if (!response.ok && response.status !== 404) {
179
- throw new Error(`Failed to delete test dataset: ${response.status} ${response.statusText}`);
180
- }
181
- });
182
- }
183
- /**
184
- * Load N-Triples data into the test dataset.
185
- */
186
- function loadTestData(ntriples) {
187
- return __awaiter(this, void 0, void 0, function* () {
188
- const response = yield fetch(`${exports.FUSEKI_BASE_URL}/${DATASET_NAME}`, {
189
- method: 'POST',
190
- headers: { 'Content-Type': 'application/n-triples' },
191
- body: ntriples,
192
- });
193
- if (!response.ok) {
194
- const body = yield response.text();
195
- throw new Error(`Failed to load test data: ${response.status} ${response.statusText}\n${body}`);
196
- }
197
- });
198
- }
199
- /**
200
- * Execute a SPARQL SELECT/ASK/CONSTRUCT query against the test dataset.
201
- * Returns parsed SPARQL JSON results.
202
- */
203
- function executeSparqlQuery(sparql) {
204
- return __awaiter(this, void 0, void 0, function* () {
205
- const response = yield fetch(`${exports.FUSEKI_BASE_URL}/${DATASET_NAME}/sparql`, {
206
- method: 'POST',
207
- headers: {
208
- 'Content-Type': 'application/sparql-query',
209
- Accept: 'application/sparql-results+json',
210
- },
211
- body: sparql,
212
- });
213
- if (!response.ok) {
214
- const body = yield response.text();
215
- throw new Error(`SPARQL query failed: ${response.status} ${response.statusText}\n${sparql}\n${body}`);
216
- }
217
- return response.json();
218
- });
219
- }
220
- /**
221
- * Execute a SPARQL UPDATE against the test dataset.
222
- */
223
- function executeSparqlUpdate(sparql) {
224
- return __awaiter(this, void 0, void 0, function* () {
225
- const response = yield fetch(`${exports.FUSEKI_BASE_URL}/${DATASET_NAME}/update`, {
226
- method: 'POST',
227
- headers: { 'Content-Type': 'application/sparql-update' },
228
- body: sparql,
229
- });
230
- if (!response.ok) {
231
- const body = yield response.text();
232
- throw new Error(`SPARQL update failed: ${response.status} ${response.statusText}\n${sparql}\n${body}`);
233
- }
234
- });
235
- }
236
- /**
237
- * Remove all triples from the test dataset.
238
- */
239
- function clearAllData() {
240
- return __awaiter(this, void 0, void 0, function* () {
241
- yield executeSparqlUpdate('DELETE WHERE { ?s ?p ?o }');
242
- });
243
- }
244
- //# sourceMappingURL=fuseki-test-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fuseki-test-store.js","sourceRoot":"","sources":["../../../src/test-helpers/fuseki-test-store.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Execute a query-producing callback and return the built IR
3
- * (the same object that would reach ILinkedDataset).
4
- */
5
- export declare const captureQuery: (runner: () => Promise<unknown>) => Promise<any>;
6
- /**
7
- * Execute a query-producing callback and return the raw pipeline
8
- * input (RawSelectInput) — the state before the IR build pipeline runs.
9
- * Only works for select queries.
10
- */
11
- export declare const captureRawQuery: (runner: () => Promise<unknown>) => Promise<any>;
@@ -1,109 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
- return new (P || (P = Promise))(function (resolve, reject) {
38
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
- step((generator = generator.apply(thisArg, _arguments || [])).next());
42
- });
43
- };
44
- Object.defineProperty(exports, "__esModule", { value: true });
45
- exports.captureRawQuery = exports.captureQuery = void 0;
46
- const globals_1 = require("@jest/globals");
47
- const queryDispatch_1 = require("../queries/queryDispatch");
48
- const IRPipeline = __importStar(require("../queries/IRPipeline"));
49
- const lower_1 = require("../queries/lower");
50
- // Datasets now receive the live (closed) query; tests expect the lowered IR, so
51
- // lower() what we capture. Passing an already-IR object through is tolerated.
52
- const toIR = (query) => query && typeof query.__queryKind === 'string' ? (0, lower_1.lower)(query) : query;
53
- /**
54
- * Test utility that intercepts the query dispatch and captures
55
- * the built IR query for inspection by test assertions.
56
- *
57
- * - `captureQuery` captures the built IR (post-pipeline) — use for
58
- * full-pipeline and mutation tests.
59
- * - `captureRawQuery` captures the raw pipeline input (pre-pipeline)
60
- * — use for tests that feed intermediate pipeline stages.
61
- */
62
- let _lastQuery;
63
- let _lastRawInput;
64
- // Spy on buildSelectQuery to capture pre-pipeline raw input
65
- const originalBuildSelectQuery = IRPipeline.buildSelectQuery;
66
- globals_1.jest.spyOn(IRPipeline, 'buildSelectQuery').mockImplementation((raw) => {
67
- _lastRawInput = raw;
68
- return originalBuildSelectQuery(raw);
69
- });
70
- (0, queryDispatch_1.setQueryDispatch)({
71
- selectQuery: (query) => __awaiter(void 0, void 0, void 0, function* () {
72
- _lastQuery = toIR(query);
73
- return [];
74
- }),
75
- createQuery: (query) => __awaiter(void 0, void 0, void 0, function* () {
76
- _lastQuery = toIR(query);
77
- return {};
78
- }),
79
- updateQuery: (query) => __awaiter(void 0, void 0, void 0, function* () {
80
- _lastQuery = toIR(query);
81
- return {};
82
- }),
83
- deleteQuery: (query) => __awaiter(void 0, void 0, void 0, function* () {
84
- _lastQuery = toIR(query);
85
- return { deleted: [], count: 0 };
86
- }),
87
- });
88
- /**
89
- * Execute a query-producing callback and return the built IR
90
- * (the same object that would reach ILinkedDataset).
91
- */
92
- const captureQuery = (runner) => __awaiter(void 0, void 0, void 0, function* () {
93
- _lastQuery = undefined;
94
- yield runner();
95
- return _lastQuery;
96
- });
97
- exports.captureQuery = captureQuery;
98
- /**
99
- * Execute a query-producing callback and return the raw pipeline
100
- * input (RawSelectInput) — the state before the IR build pipeline runs.
101
- * Only works for select queries.
102
- */
103
- const captureRawQuery = (runner) => __awaiter(void 0, void 0, void 0, function* () {
104
- _lastRawInput = undefined;
105
- yield runner();
106
- return _lastRawInput;
107
- });
108
- exports.captureRawQuery = captureRawQuery;
109
- //# sourceMappingURL=query-capture-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query-capture-store.js","sourceRoot":"","sources":["../../../src/test-helpers/query-capture-store.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAmC;AACnC,4DAA0D;AAC1D,kEAAoD;AACpD,4CAAuC;AAEvC,gFAAgF;AAChF,8EAA8E;AAC9E,MAAM,IAAI,GAAG,CAAC,KAAU,EAAE,EAAE,CAC1B,KAAK,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,aAAK,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAExE;;;;;;;;GAQG;AACH,IAAI,UAAe,CAAC;AACpB,IAAI,aAAkB,CAAC;AAEvB,4DAA4D;AAC5D,MAAM,wBAAwB,GAAG,UAAU,CAAC,gBAAgB,CAAC;AAC7D,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAQ,EAAE,EAAE;IACzE,aAAa,GAAG,GAAG,CAAC;IACpB,OAAO,wBAAwB,CAAC,GAAG,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC;AAEH,IAAA,gCAAgB,EAAC;IACf,WAAW,EAAE,CAAO,KAAK,EAAE,EAAE;QAC3B,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,EAAS,CAAC;IACnB,CAAC,CAAA;IACD,WAAW,EAAE,CAAO,KAAK,EAAE,EAAE;QAC3B,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,EAAS,CAAC;IACnB,CAAC,CAAA;IACD,WAAW,EAAE,CAAO,KAAK,EAAE,EAAE;QAC3B,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,EAAS,CAAC;IACnB,CAAC,CAAA;IACD,WAAW,EAAE,CAAO,KAAK,EAAE,EAAE;QAC3B,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,EAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC;IACjC,CAAC,CAAA;CACF,CAAC,CAAC;AAEH;;;GAGG;AACI,MAAM,YAAY,GAAG,CAC1B,MAA8B,EAC9B,EAAE;IACF,UAAU,GAAG,SAAS,CAAC;IACvB,MAAM,MAAM,EAAE,CAAC;IACf,OAAO,UAAU,CAAC;AACpB,CAAC,CAAA,CAAC;AANW,QAAA,YAAY,gBAMvB;AAEF;;;;GAIG;AACI,MAAM,eAAe,GAAG,CAC7B,MAA8B,EAC9B,EAAE;IACF,aAAa,GAAG,SAAS,CAAC;IAC1B,MAAM,MAAM,EAAE,CAAC;IACf,OAAO,aAAa,CAAC;AACvB,CAAC,CAAA,CAAC;AANW,QAAA,eAAe,mBAM1B"}