@linklabjs/core 0.1.0 → 0.1.2

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 (206) hide show
  1. package/dist/api/DomainNode.d.ts +154 -0
  2. package/dist/api/DomainNode.d.ts.map +1 -0
  3. package/dist/api/DomainNode.js +1157 -0
  4. package/dist/api/DomainNode.js.map +1 -0
  5. package/dist/api/Graph.d.ts +117 -0
  6. package/dist/api/Graph.d.ts.map +1 -0
  7. package/dist/api/Graph.js +212 -0
  8. package/dist/api/Graph.js.map +1 -0
  9. package/dist/api/PathBuilder.d.ts +76 -0
  10. package/dist/api/PathBuilder.d.ts.map +1 -0
  11. package/dist/api/PathBuilder.js +182 -0
  12. package/dist/api/PathBuilder.js.map +1 -0
  13. package/dist/api/index.d.ts +8 -0
  14. package/dist/api/index.d.ts.map +1 -0
  15. package/dist/api/index.js +7 -0
  16. package/dist/api/index.js.map +1 -0
  17. package/dist/api/loadGraph.d.ts +57 -0
  18. package/dist/api/loadGraph.d.ts.map +1 -0
  19. package/dist/api/loadGraph.js +153 -0
  20. package/dist/api/loadGraph.js.map +1 -0
  21. package/dist/api/test-api.d.ts +9 -0
  22. package/dist/api/test-api.d.ts.map +1 -0
  23. package/dist/api/test-api.js +133 -0
  24. package/dist/api/test-api.js.map +1 -0
  25. package/dist/api/test-domain.d.ts +13 -0
  26. package/dist/api/test-domain.d.ts.map +1 -0
  27. package/dist/api/test-domain.js +105 -0
  28. package/dist/api/test-domain.js.map +1 -0
  29. package/dist/api/types.d.ts +69 -0
  30. package/dist/api/types.d.ts.map +1 -0
  31. package/dist/api/types.js +22 -0
  32. package/dist/api/types.js.map +1 -0
  33. package/dist/config/synonyms.json +25 -0
  34. package/dist/core/EventBus.d.ts +56 -0
  35. package/dist/core/EventBus.d.ts.map +1 -0
  36. package/dist/core/EventBus.js +147 -0
  37. package/dist/core/EventBus.js.map +1 -0
  38. package/dist/core/GraphEvents.d.ts +118 -0
  39. package/dist/core/GraphEvents.d.ts.map +1 -0
  40. package/dist/core/GraphEvents.js +23 -0
  41. package/dist/core/GraphEvents.js.map +1 -0
  42. package/dist/core/PathFinder.d.ts +43 -0
  43. package/dist/core/PathFinder.d.ts.map +1 -0
  44. package/dist/core/PathFinder.js +264 -0
  45. package/dist/core/PathFinder.js.map +1 -0
  46. package/dist/formatters/BaseFormatter.d.ts +15 -0
  47. package/dist/formatters/BaseFormatter.d.ts.map +1 -0
  48. package/dist/formatters/BaseFormatter.js +9 -0
  49. package/dist/formatters/BaseFormatter.js.map +1 -0
  50. package/dist/graph/GraphAssembler.d.ts +14 -0
  51. package/dist/graph/GraphAssembler.d.ts.map +1 -0
  52. package/dist/graph/GraphAssembler.js +44 -0
  53. package/dist/graph/GraphAssembler.js.map +1 -0
  54. package/dist/graph/GraphCompiler.d.ts +37 -0
  55. package/dist/graph/GraphCompiler.d.ts.map +1 -0
  56. package/dist/graph/GraphCompiler.js +355 -0
  57. package/dist/graph/GraphCompiler.js.map +1 -0
  58. package/dist/graph/GraphExtractor.d.ts +21 -0
  59. package/dist/graph/GraphExtractor.d.ts.map +1 -0
  60. package/dist/graph/GraphExtractor.js +145 -0
  61. package/dist/graph/GraphExtractor.js.map +1 -0
  62. package/dist/graph/GraphOptimizer.d.ts +104 -0
  63. package/dist/graph/GraphOptimizer.d.ts.map +1 -0
  64. package/dist/graph/GraphOptimizer.js +306 -0
  65. package/dist/graph/GraphOptimizer.js.map +1 -0
  66. package/dist/graph/GraphTrainer.d.ts +52 -0
  67. package/dist/graph/GraphTrainer.d.ts.map +1 -0
  68. package/dist/graph/GraphTrainer.js +188 -0
  69. package/dist/graph/GraphTrainer.js.map +1 -0
  70. package/dist/http/LinkBuilder.d.ts +82 -0
  71. package/dist/http/LinkBuilder.d.ts.map +1 -0
  72. package/dist/http/LinkBuilder.js +190 -0
  73. package/dist/http/LinkBuilder.js.map +1 -0
  74. package/dist/http/TrailRequest.d.ts +39 -0
  75. package/dist/http/TrailRequest.d.ts.map +1 -0
  76. package/dist/http/TrailRequest.js +22 -0
  77. package/dist/http/TrailRequest.js.map +1 -0
  78. package/dist/http/example-netflix.d.ts +6 -0
  79. package/dist/http/example-netflix.d.ts.map +1 -0
  80. package/dist/http/example-netflix.js +52 -0
  81. package/dist/http/example-netflix.js.map +1 -0
  82. package/dist/http/index.d.ts +32 -0
  83. package/dist/http/index.d.ts.map +1 -0
  84. package/dist/http/index.js +27 -0
  85. package/dist/http/index.js.map +1 -0
  86. package/dist/http/plugin.d.ts +110 -0
  87. package/dist/http/plugin.d.ts.map +1 -0
  88. package/dist/http/plugin.js +217 -0
  89. package/dist/http/plugin.js.map +1 -0
  90. package/dist/index.d.ts +55 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +71 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/instrumentation/TelemetryShim.d.ts +114 -0
  95. package/dist/instrumentation/TelemetryShim.d.ts.map +1 -0
  96. package/dist/instrumentation/TelemetryShim.js +107 -0
  97. package/dist/instrumentation/TelemetryShim.js.map +1 -0
  98. package/dist/navigation/NavigationEngine.d.ts +69 -0
  99. package/dist/navigation/NavigationEngine.d.ts.map +1 -0
  100. package/dist/navigation/NavigationEngine.js +361 -0
  101. package/dist/navigation/NavigationEngine.js.map +1 -0
  102. package/dist/navigation/Resolver.d.ts +35 -0
  103. package/dist/navigation/Resolver.d.ts.map +1 -0
  104. package/dist/navigation/Resolver.js +113 -0
  105. package/dist/navigation/Resolver.js.map +1 -0
  106. package/dist/navigation/Scheduler.d.ts +36 -0
  107. package/dist/navigation/Scheduler.d.ts.map +1 -0
  108. package/dist/navigation/Scheduler.js +107 -0
  109. package/dist/navigation/Scheduler.js.map +1 -0
  110. package/dist/navigation/Trail.d.ts +129 -0
  111. package/dist/navigation/Trail.d.ts.map +1 -0
  112. package/dist/navigation/Trail.js +202 -0
  113. package/dist/navigation/Trail.js.map +1 -0
  114. package/dist/navigation/TrailParser.d.ts +96 -0
  115. package/dist/navigation/TrailParser.d.ts.map +1 -0
  116. package/dist/navigation/TrailParser.js +180 -0
  117. package/dist/navigation/TrailParser.js.map +1 -0
  118. package/dist/navigation/index.d.ts +10 -0
  119. package/dist/navigation/index.d.ts.map +1 -0
  120. package/dist/navigation/index.js +9 -0
  121. package/dist/navigation/index.js.map +1 -0
  122. package/dist/providers/MockProvider.d.ts +29 -0
  123. package/dist/providers/MockProvider.d.ts.map +1 -0
  124. package/dist/providers/MockProvider.js +55 -0
  125. package/dist/providers/MockProvider.js.map +1 -0
  126. package/dist/providers/PostgresProvider.d.ts +46 -0
  127. package/dist/providers/PostgresProvider.d.ts.map +1 -0
  128. package/dist/providers/PostgresProvider.js +152 -0
  129. package/dist/providers/PostgresProvider.js.map +1 -0
  130. package/dist/runtime/CompiledGraphEngine.d.ts +74 -0
  131. package/dist/runtime/CompiledGraphEngine.d.ts.map +1 -0
  132. package/dist/runtime/CompiledGraphEngine.js +211 -0
  133. package/dist/runtime/CompiledGraphEngine.js.map +1 -0
  134. package/dist/runtime/DataLoader.d.ts +90 -0
  135. package/dist/runtime/DataLoader.d.ts.map +1 -0
  136. package/dist/runtime/DataLoader.js +178 -0
  137. package/dist/runtime/DataLoader.js.map +1 -0
  138. package/dist/runtime/Engine.d.ts +36 -0
  139. package/dist/runtime/Engine.d.ts.map +1 -0
  140. package/dist/runtime/Engine.js +128 -0
  141. package/dist/runtime/Engine.js.map +1 -0
  142. package/dist/runtime/QueryEngine.d.ts +80 -0
  143. package/dist/runtime/QueryEngine.d.ts.map +1 -0
  144. package/dist/runtime/QueryEngine.js +188 -0
  145. package/dist/runtime/QueryEngine.js.map +1 -0
  146. package/dist/scenarios/test-metro-paris/config.json +6 -0
  147. package/dist/scenarios/test-metro-paris/graph.json +16325 -0
  148. package/dist/scenarios/test-metro-paris/queries.d.ts +22 -0
  149. package/dist/scenarios/test-metro-paris/queries.d.ts.map +1 -0
  150. package/dist/scenarios/test-metro-paris/queries.js +128 -0
  151. package/dist/scenarios/test-metro-paris/queries.js.map +1 -0
  152. package/dist/scenarios/test-metro-paris/stack.json +1 -0
  153. package/dist/scenarios/test-musicians/config.json +10 -0
  154. package/dist/scenarios/test-musicians/graph.json +20 -0
  155. package/dist/scenarios/test-musicians/stack.json +1 -0
  156. package/dist/scenarios/test-netflix/actions.d.ts +14 -0
  157. package/dist/scenarios/test-netflix/actions.d.ts.map +1 -0
  158. package/dist/scenarios/test-netflix/actions.js +86 -0
  159. package/dist/scenarios/test-netflix/actions.js.map +1 -0
  160. package/dist/scenarios/test-netflix/config.json +6 -0
  161. package/dist/scenarios/test-netflix/data/categories.json +1 -0
  162. package/dist/scenarios/test-netflix/data/companies.json +1 -0
  163. package/dist/scenarios/test-netflix/data/credits.json +19797 -0
  164. package/dist/scenarios/test-netflix/data/departments.json +18 -0
  165. package/dist/scenarios/test-netflix/data/jobs.json +142 -0
  166. package/dist/scenarios/test-netflix/data/movies.json +3497 -0
  167. package/dist/scenarios/test-netflix/data/people.json +1 -0
  168. package/dist/scenarios/test-netflix/data/synonyms.json +7 -0
  169. package/dist/scenarios/test-netflix/data/users.json +70 -0
  170. package/dist/scenarios/test-netflix/graph.json +1017 -0
  171. package/dist/scenarios/test-netflix/queries.d.ts +29 -0
  172. package/dist/scenarios/test-netflix/queries.d.ts.map +1 -0
  173. package/dist/scenarios/test-netflix/queries.js +134 -0
  174. package/dist/scenarios/test-netflix/queries.js.map +1 -0
  175. package/dist/scenarios/test-netflix/stack.json +14 -0
  176. package/dist/schema/GraphBuilder.d.ts +9 -0
  177. package/dist/schema/GraphBuilder.d.ts.map +1 -0
  178. package/dist/schema/GraphBuilder.js +90 -0
  179. package/dist/schema/GraphBuilder.js.map +1 -0
  180. package/dist/schema/JsonSchemaExtractor.d.ts +21 -0
  181. package/dist/schema/JsonSchemaExtractor.d.ts.map +1 -0
  182. package/dist/schema/JsonSchemaExtractor.js +88 -0
  183. package/dist/schema/JsonSchemaExtractor.js.map +1 -0
  184. package/dist/schema/SchemaAnalyzer.d.ts +41 -0
  185. package/dist/schema/SchemaAnalyzer.d.ts.map +1 -0
  186. package/dist/schema/SchemaAnalyzer.js +144 -0
  187. package/dist/schema/SchemaAnalyzer.js.map +1 -0
  188. package/dist/schema/SchemaExtractor.d.ts +10 -0
  189. package/dist/schema/SchemaExtractor.d.ts.map +1 -0
  190. package/dist/schema/SchemaExtractor.js +90 -0
  191. package/dist/schema/SchemaExtractor.js.map +1 -0
  192. package/dist/schema/SynonymResolver.d.ts +55 -0
  193. package/dist/schema/SynonymResolver.d.ts.map +1 -0
  194. package/dist/schema/SynonymResolver.js +121 -0
  195. package/dist/schema/SynonymResolver.js.map +1 -0
  196. package/dist/scripts/dictionary.json +796 -0
  197. package/dist/scripts/graph.json +664 -0
  198. package/dist/scripts/regenerate.d.ts +23 -0
  199. package/dist/scripts/regenerate.d.ts.map +1 -0
  200. package/dist/scripts/regenerate.js +206 -0
  201. package/dist/scripts/regenerate.js.map +1 -0
  202. package/dist/types/index.d.ts +394 -0
  203. package/dist/types/index.d.ts.map +1 -0
  204. package/dist/types/index.js +21 -0
  205. package/dist/types/index.js.map +1 -0
  206. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Engine.js","sourceRoot":"","sources":["../../src/runtime/Engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * QueryEngine — patch generateSQL pour les routes sémantiques
3
+ *
4
+ * Ajouter ce patch dans generateSQL() de QueryEngine.ts,
5
+ * dans la boucle qui construit les JOIN :
6
+ *
7
+ * for (let i = 0; i < edges.length; i++) {
8
+ * const curr = path[i]
9
+ * const next = path[i + 1]
10
+ * const edge = edges[i]
11
+ *
12
+ * const fromCol = edge.fromCol === 'id' ? pkOf(curr) : edge.fromCol
13
+ * const toCol = edge.toCol === 'id' ? pkOf(next) : edge.toCol
14
+ *
15
+ * // ── PATCH : condition semantic_view ────────────────────────────────
16
+ * const conditionSQL = edge.condition
17
+ * ? ' AND ' + Object.entries(edge.condition)
18
+ * .map(([k, v]) => `${next}.${k} = ${typeof v === 'string' ? `'${v}'` : v}`)
19
+ * .join(' AND ')
20
+ * : ''
21
+ * // ──────────────────────────────────────────────────────────────────
22
+ *
23
+ * sql += `\n INNER JOIN ${next} ON ${curr}.${fromCol} = ${next}.${toCol}${conditionSQL}`
24
+ * }
25
+ *
26
+ * Résultat pour movies→people[actor] (jobId:1) :
27
+ *
28
+ * SELECT DISTINCT people.*
29
+ * FROM movies
30
+ * INNER JOIN credits ON movies.id = credits.movieId
31
+ * INNER JOIN people ON credits.personId = people.id AND people.jobId = 1
32
+ *
33
+ * Note : la condition est sur la table de jonction (credits), pas sur people.
34
+ * Le patch ci-dessus est une approximation — la condition correcte est :
35
+ *
36
+ * INNER JOIN credits ON movies.id = credits.movieId AND credits.jobId = 1
37
+ * INNER JOIN people ON credits.personId = people.id
38
+ *
39
+ * Voir generateSQLSemantic() ci-dessous pour la version correcte.
40
+ */
41
+ import type { CompiledGraph, RouteInfo } from '../types/index.js';
42
+ export interface QueryOptions {
43
+ from: string;
44
+ to: string;
45
+ filters?: Record<string, any>;
46
+ trail?: string;
47
+ traceId?: string;
48
+ semantic?: string;
49
+ }
50
+ export declare class QueryEngine {
51
+ compiledGraph: CompiledGraph;
52
+ constructor(compiledGraph: CompiledGraph);
53
+ getRoute(from: string, to: string, semantic?: string): RouteInfo;
54
+ generateSQL(options: QueryOptions): string;
55
+ executeInMemory(options: QueryOptions, dataset: Record<string, any[]>): any[];
56
+ private _executeInMemoryCore;
57
+ generateJSONPipeline(options: QueryOptions): {
58
+ metadata: {
59
+ from: string;
60
+ to: string;
61
+ steps: number;
62
+ semantic: string | null;
63
+ };
64
+ executionPlan: {
65
+ step: number;
66
+ action: string;
67
+ table: string;
68
+ config: {
69
+ filters: Record<string, any>;
70
+ joinWith?: undefined;
71
+ on?: undefined;
72
+ } | {
73
+ joinWith: string;
74
+ on: import("../types/index.js").RouteStep;
75
+ filters?: undefined;
76
+ };
77
+ }[];
78
+ };
79
+ }
80
+ //# sourceMappingURL=QueryEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryEngine.d.ts","sourceRoot":"","sources":["../../src/runtime/QueryEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAGjE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAM,MAAM,CAAA;IAChB,EAAE,EAAQ,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,KAAK,CAAC,EAAI,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,WAAW;IAEH,aAAa,EAAE,aAAa;gBAA5B,aAAa,EAAE,aAAa;IAExC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS;IAehE,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;IA4C1C,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;IAgC5E,OAAO,CAAC,oBAAoB;IAuDrB,oBAAoB,CAAC,OAAO,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;CAiBlD"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * QueryEngine — patch generateSQL pour les routes sémantiques
3
+ *
4
+ * Ajouter ce patch dans generateSQL() de QueryEngine.ts,
5
+ * dans la boucle qui construit les JOIN :
6
+ *
7
+ * for (let i = 0; i < edges.length; i++) {
8
+ * const curr = path[i]
9
+ * const next = path[i + 1]
10
+ * const edge = edges[i]
11
+ *
12
+ * const fromCol = edge.fromCol === 'id' ? pkOf(curr) : edge.fromCol
13
+ * const toCol = edge.toCol === 'id' ? pkOf(next) : edge.toCol
14
+ *
15
+ * // ── PATCH : condition semantic_view ────────────────────────────────
16
+ * const conditionSQL = edge.condition
17
+ * ? ' AND ' + Object.entries(edge.condition)
18
+ * .map(([k, v]) => `${next}.${k} = ${typeof v === 'string' ? `'${v}'` : v}`)
19
+ * .join(' AND ')
20
+ * : ''
21
+ * // ──────────────────────────────────────────────────────────────────
22
+ *
23
+ * sql += `\n INNER JOIN ${next} ON ${curr}.${fromCol} = ${next}.${toCol}${conditionSQL}`
24
+ * }
25
+ *
26
+ * Résultat pour movies→people[actor] (jobId:1) :
27
+ *
28
+ * SELECT DISTINCT people.*
29
+ * FROM movies
30
+ * INNER JOIN credits ON movies.id = credits.movieId
31
+ * INNER JOIN people ON credits.personId = people.id AND people.jobId = 1
32
+ *
33
+ * Note : la condition est sur la table de jonction (credits), pas sur people.
34
+ * Le patch ci-dessus est une approximation — la condition correcte est :
35
+ *
36
+ * INNER JOIN credits ON movies.id = credits.movieId AND credits.jobId = 1
37
+ * INNER JOIN people ON credits.personId = people.id
38
+ *
39
+ * Voir generateSQLSemantic() ci-dessous pour la version correcte.
40
+ */
41
+ import { shim } from '../instrumentation/TelemetryShim.js';
42
+ export class QueryEngine {
43
+ compiledGraph;
44
+ // public pour que DataLoader puisse accéder aux nodes (résolution PK)
45
+ constructor(compiledGraph) {
46
+ this.compiledGraph = compiledGraph;
47
+ }
48
+ getRoute(from, to, semantic) {
49
+ // Si semantic fourni → chercher la route sémantique correspondante
50
+ if (semantic) {
51
+ const semRoute = this.compiledGraph.routes.find(r => r.from === from && r.to === to && r.semantic && r.label === semantic);
52
+ if (semRoute)
53
+ return semRoute;
54
+ }
55
+ // Route physique par défaut (première trouvée)
56
+ const route = this.compiledGraph.routes.find(r => r.from === from && r.to === to);
57
+ if (!route)
58
+ throw new Error(`LinkLab: No route found between ${from} and ${to}`);
59
+ return route;
60
+ }
61
+ generateSQL(options) {
62
+ const { from, to, filters = {}, semantic } = options;
63
+ const route = this.getRoute(from, to, semantic);
64
+ const { path, edges } = route.primary;
65
+ const pkOf = (tableId) => {
66
+ const node = this.compiledGraph.nodes.find((n) => n.id === tableId);
67
+ const pk = node?.primaryKey;
68
+ return Array.isArray(pk) ? pk[0] : (pk ?? tableId + '_id');
69
+ };
70
+ let sql = `SELECT DISTINCT ${to}.*\nFROM ${from}`;
71
+ for (let i = 0; i < edges.length; i++) {
72
+ const curr = path[i];
73
+ const next = path[i + 1];
74
+ const edge = edges[i];
75
+ const fromCol = edge.fromCol === 'id' ? pkOf(curr) : edge.fromCol;
76
+ const toCol = edge.toCol === 'id' ? pkOf(next) : edge.toCol;
77
+ // Condition semantic_view — appliquée sur la table de jonction (curr)
78
+ // ex: credits.jobId = 1 (pas sur people)
79
+ const conditionSQL = edge.condition
80
+ ? ' AND ' + Object.entries(edge.condition)
81
+ .map(([k, v]) => `${curr}.${k} = ${typeof v === 'string' ? `'${v}'` : v}`)
82
+ .join(' AND ')
83
+ : '';
84
+ sql += `\n INNER JOIN ${next} ON ${curr}.${fromCol} = ${next}.${toCol}${conditionSQL}`;
85
+ }
86
+ const sourcePK = pkOf(from);
87
+ const whereClauses = Object.entries(filters).map(([key, val]) => {
88
+ const col = key === 'id' ? sourcePK : key;
89
+ const v = val === null ? null : (typeof val === 'string' ? `'${val}'` : val);
90
+ return v === null ? `${from}.${col} IS NULL` : `${from}.${col} = ${v}`;
91
+ });
92
+ if (whereClauses.length > 0)
93
+ sql += `\nWHERE ${whereClauses.join(' AND ')}`;
94
+ return sql;
95
+ }
96
+ executeInMemory(options, dataset) {
97
+ const { from, to, filters = {}, trail, traceId, semantic } = options;
98
+ const spanBuilder = shim.startSpan({ trail: trail ?? `${from}.${to}`, from, to, filters, traceId });
99
+ spanBuilder?.stepStart('QueryEngine');
100
+ try {
101
+ const result = this._executeInMemoryCore(from, to, filters, dataset, semantic);
102
+ spanBuilder?.stepEnd('QueryEngine');
103
+ if (spanBuilder) {
104
+ try {
105
+ const route = this.getRoute(from, to, semantic);
106
+ spanBuilder.withPath?.(route.primary.path);
107
+ }
108
+ catch { }
109
+ const span = spanBuilder.end({ rowCount: result.length });
110
+ shim.emitEnd(span);
111
+ }
112
+ return result;
113
+ }
114
+ catch (err) {
115
+ spanBuilder?.stepEnd('QueryEngine');
116
+ if (spanBuilder) {
117
+ const span = spanBuilder.endWithError(err, {
118
+ compiledGraphHash: this.compiledGraph.version ?? 'unknown',
119
+ weights: {}, cacheState: { l1HitRate: 0, l2HitRate: 0, globalHitRate: 0, yoyoEvents: 0 },
120
+ });
121
+ shim.emitError(span);
122
+ }
123
+ throw err;
124
+ }
125
+ }
126
+ _executeInMemoryCore(from, to, filters, dataset, semantic) {
127
+ const route = this.getRoute(from, to, semantic);
128
+ const { path, edges } = route.primary;
129
+ // Appliquer les filtres sur la table source
130
+ const sourceRows = dataset[from] ?? [];
131
+ const filtered = Object.entries(filters).reduce((rows, [key, val]) => {
132
+ return rows.filter((r) => r[key] === val);
133
+ }, sourceRows);
134
+ // Jointures successives
135
+ let current = filtered;
136
+ for (let i = 0; i < edges.length; i++) {
137
+ const currTable = path[i];
138
+ const nextTable = path[i + 1];
139
+ const edge = edges[i];
140
+ const nextRows = dataset[nextTable] ?? [];
141
+ const fromCol = edge.fromCol === 'id' ? 'id' : edge.fromCol;
142
+ const toCol = edge.toCol === 'id' ? 'id' : edge.toCol;
143
+ // Condition semantic_view (ex: { jobId: 1 })
144
+ const condition = edge.condition ?? {};
145
+ current = current.flatMap(row => {
146
+ const val = row[fromCol];
147
+ return nextRows.filter((next) => {
148
+ if (next[toCol] !== val)
149
+ return false;
150
+ // Condition semantic_view appliquée sur 'next' (table de jonction)
151
+ // ex: credits.jobId = 1 — credits est la table 'next' à ce step
152
+ for (const [k, v] of Object.entries(condition)) {
153
+ if (next[k] !== v)
154
+ return false;
155
+ }
156
+ return true;
157
+ });
158
+ });
159
+ // Dédoublonnage sur id
160
+ const seen = new Set();
161
+ current = current.filter(r => {
162
+ if (seen.has(r.id))
163
+ return false;
164
+ seen.add(r.id);
165
+ return true;
166
+ });
167
+ }
168
+ return current;
169
+ }
170
+ generateJSONPipeline(options) {
171
+ const { from, to, filters = {}, semantic } = options;
172
+ const route = this.getRoute(from, to, semantic);
173
+ const { path, edges } = route.primary;
174
+ return {
175
+ metadata: { from, to, steps: path.length, semantic: semantic ?? null },
176
+ executionPlan: path.map((table, index) => {
177
+ const isSource = index === 0;
178
+ return {
179
+ step: index + 1,
180
+ action: isSource ? 'FETCH_AND_FILTER' : 'JOIN',
181
+ table,
182
+ config: isSource ? { filters } : { joinWith: path[index - 1], on: edges[index - 1] },
183
+ };
184
+ }),
185
+ };
186
+ }
187
+ }
188
+ //# sourceMappingURL=QueryEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryEngine.js","sourceRoot":"","sources":["../../src/runtime/QueryEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ {
2
+ "mode": "PATHFIND",
3
+ "description": "Métro Parisien — 312 stations, 14 lignes, poids en minutes réels RATP",
4
+ "defaultQuery": "chatelet-opera",
5
+ "queriesFile": "./queries.ts"
6
+ }