@comake/skl-js-engine 1.3.9 → 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 (296) 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 +16 -3
  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 -22
  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.map +1 -1
  201. package/dist/util/Types.d.ts +1 -0
  202. package/dist/util/Types.d.ts.map +1 -0
  203. package/dist/util/Types.js.map +1 -1
  204. package/dist/util/Util.d.ts +1 -0
  205. package/dist/util/Util.d.ts.map +1 -0
  206. package/dist/util/Util.js.map +1 -1
  207. package/dist/util/Vocabularies/Shared.d.ts +1 -0
  208. package/dist/util/Vocabularies/Shared.d.ts.map +1 -0
  209. package/dist/util/Vocabularies/Shared.js.map +1 -1
  210. package/dist/util/Vocabularies/helper.d.ts +1 -0
  211. package/dist/util/Vocabularies/helper.d.ts.map +1 -0
  212. package/dist/util/Vocabularies/helper.js.map +1 -1
  213. package/dist/util/Vocabularies/index.d.ts +1 -0
  214. package/dist/util/Vocabularies/index.d.ts.map +1 -0
  215. package/dist/util/Vocabularies/index.js.map +1 -1
  216. package/dist/util/safeJsonStringify.d.ts +1 -0
  217. package/dist/util/safeJsonStringify.d.ts.map +1 -0
  218. package/dist/util/safeJsonStringify.js.map +1 -1
  219. package/package.json +6 -3
  220. package/src/JsExecutor/PermissionBuilder.ts +60 -0
  221. package/src/JsExecutor/constants.ts +27 -0
  222. package/src/JsExecutor/denoUtils.ts +20 -0
  223. package/src/JsExecutor/errors.ts +63 -0
  224. package/src/JsExecutor/examples/basic/index.ts +54 -0
  225. package/src/JsExecutor/examples/basic/process.ts +39 -0
  226. package/src/JsExecutor/examples/jsExecutor/README.md +3 -0
  227. package/src/JsExecutor/examples/jsExecutor/index.ts +50 -0
  228. package/src/JsExecutor/examples/jsExecutor/process.ts +79 -0
  229. package/src/JsExecutor/index.ts +19 -0
  230. package/src/JsExecutor/jsExecutor.ts +194 -0
  231. package/src/JsExecutor/jsonRpc/JsonRpcClient.ts +422 -0
  232. package/src/JsExecutor/jsonRpc/JsonRpcServer.ts +454 -0
  233. package/src/JsExecutor/jsonRpc/index.ts +4 -0
  234. package/src/JsExecutor/jsonRpc/types.ts +231 -0
  235. package/src/JsExecutor/transport/README.md +67 -0
  236. package/src/JsExecutor/transport/Transport.ts +106 -0
  237. package/src/JsExecutor/transport/base/BaseTransport.ts +83 -0
  238. package/src/JsExecutor/transport/index.ts +56 -0
  239. package/src/JsExecutor/transport/process/ProcessManager.ts +281 -0
  240. package/src/JsExecutor/transport/stdio/ChildStdioTransport.ts +251 -0
  241. package/src/JsExecutor/transport/stdio/ParentStdioTransport.ts +308 -0
  242. package/src/JsExecutor/transport/utils/MessageUtils.ts +139 -0
  243. package/src/JsExecutor/transport/utils/PollingUtils.ts +114 -0
  244. package/src/JsExecutor/types.ts +130 -0
  245. package/src/SklEngine.ts +1828 -0
  246. package/src/SklEngineOptions.ts +28 -0
  247. package/src/constants.ts +120 -0
  248. package/src/customCapabilities.ts +65 -0
  249. package/src/examples/customCapabilitiesExample.ts +77 -0
  250. package/src/hooks/globalHooks.ts +238 -0
  251. package/src/hooks/types.ts +7 -0
  252. package/src/index.ts +45 -0
  253. package/src/logger.ts +144 -0
  254. package/src/mapping/Mapper.ts +52 -0
  255. package/src/storage/FindOperator.ts +55 -0
  256. package/src/storage/FindOptionsTypes.ts +107 -0
  257. package/src/storage/GroupOptionTypes.ts +32 -0
  258. package/src/storage/operator/And.ts +10 -0
  259. package/src/storage/operator/Contains.ts +9 -0
  260. package/src/storage/operator/Equal.ts +13 -0
  261. package/src/storage/operator/Exists.ts +6 -0
  262. package/src/storage/operator/GreaterThan.ts +12 -0
  263. package/src/storage/operator/GreaterThanOrEqual.ts +12 -0
  264. package/src/storage/operator/In.ts +12 -0
  265. package/src/storage/operator/Inverse.ts +11 -0
  266. package/src/storage/operator/InversePath.ts +17 -0
  267. package/src/storage/operator/InverseRelation.ts +18 -0
  268. package/src/storage/operator/InverseRelationOrder.ts +17 -0
  269. package/src/storage/operator/LessThan.ts +12 -0
  270. package/src/storage/operator/LessThanOrEqual.ts +12 -0
  271. package/src/storage/operator/Not.ts +11 -0
  272. package/src/storage/operator/OneOrMorePath.ts +17 -0
  273. package/src/storage/operator/Sequence.ts +11 -0
  274. package/src/storage/operator/SequencePath.ts +17 -0
  275. package/src/storage/operator/ZeroOrMorePath.ts +17 -0
  276. package/src/storage/query-adapter/QueryAdapter.ts +110 -0
  277. package/src/storage/query-adapter/sparql/SparqlQueryAdapter.ts +400 -0
  278. package/src/storage/query-adapter/sparql/SparqlQueryAdapterOptions.ts +38 -0
  279. package/src/storage/query-adapter/sparql/SparqlQueryBuilder.ts +1524 -0
  280. package/src/storage/query-adapter/sparql/SparqlUpdateBuilder.ts +347 -0
  281. package/src/storage/query-adapter/sparql/VariableGenerator.ts +8 -0
  282. package/src/storage/query-adapter/sparql/query-executor/InMemorySparqlQueryExecutor.ts +135 -0
  283. package/src/storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor.ts +146 -0
  284. package/src/storage/query-adapter/sparql/query-executor/SparqlQueryExecutor.ts +51 -0
  285. package/src/util/PerformanceLogger.ts +286 -0
  286. package/src/util/SparqlUtil.ts +516 -0
  287. package/src/util/TripleUtil.ts +412 -0
  288. package/src/util/Types.ts +399 -0
  289. package/src/util/Util.ts +116 -0
  290. package/src/util/Vocabularies/Shared.ts +99 -0
  291. package/src/util/Vocabularies/helper.ts +14 -0
  292. package/src/util/Vocabularies/index.ts +108 -0
  293. package/src/util/safeJsonStringify.ts +19 -0
  294. package/dist/JsExecutor/transport/StdioTransport.d.ts +0 -0
  295. package/dist/JsExecutor/transport/StdioTransport.js +0 -641
  296. package/dist/JsExecutor/transport/StdioTransport.js.map +0 -1
@@ -0,0 +1,286 @@
1
+ /* eslint-disable require-unicode-regexp */
2
+ /* eslint-disable @typescript-eslint/naming-convention */
3
+ import { performance } from 'perf_hooks';
4
+
5
+ export interface Span {
6
+ id: string;
7
+ parentId?: string;
8
+ name: string;
9
+ startTime: number;
10
+ endTime?: number;
11
+ duration?: number;
12
+ attributes: Record<string, any>;
13
+ children: Span[];
14
+ }
15
+
16
+ let AsyncLocalStorage: any;
17
+ try {
18
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, prefer-destructuring, global-require, @typescript-eslint/no-var-requires
19
+ AsyncLocalStorage = require('async_hooks').AsyncLocalStorage;
20
+ } catch {
21
+ // AsyncLocalStorage not available
22
+ }
23
+
24
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
25
+ export class PerformanceLogger {
26
+ private static asyncLocalStorage?: any;
27
+ private static enabled: boolean;
28
+ private static initialized = false;
29
+ private static spanCounter = 0;
30
+
31
+ private static initialize(): void {
32
+ if (this.initialized) {
33
+ return;
34
+ }
35
+ this.initialized = true;
36
+ // eslint-disable-next-line no-process-env
37
+ this.enabled = process.env.SKL_ENGINE_DEBUG_QUERIES === 'true' ||
38
+ // eslint-disable-next-line no-process-env
39
+ process.env.SKL_ENGINE_DEBUG_QUERIES === '1';
40
+
41
+ if (this.enabled && AsyncLocalStorage) {
42
+ this.asyncLocalStorage = new AsyncLocalStorage();
43
+ }
44
+ }
45
+
46
+ private static generateSpanId(): string {
47
+ // eslint-disable-next-line no-plusplus
48
+ return `span-${++this.spanCounter}-${Date.now()}`;
49
+ }
50
+
51
+ public static startSpan(name: string, attributes?: Record<string, any>): Span {
52
+ this.initialize();
53
+
54
+ if (!this.enabled) {
55
+ return null as any;
56
+ }
57
+
58
+ const parent = this.asyncLocalStorage?.getStore();
59
+
60
+ const span: Span = {
61
+ id: this.generateSpanId(),
62
+ parentId: parent?.id,
63
+ name,
64
+ startTime: performance.now(),
65
+ attributes: attributes ?? {},
66
+ children: []
67
+ };
68
+
69
+ if (parent) {
70
+ parent.children.push(span);
71
+ }
72
+
73
+ return span;
74
+ }
75
+
76
+ public static endSpan(span: Span, additionalAttributes?: Record<string, any>): void {
77
+ if (!this.enabled || !span) {
78
+ return;
79
+ }
80
+
81
+ span.endTime = performance.now();
82
+ span.duration = span.endTime - span.startTime;
83
+
84
+ if (additionalAttributes) {
85
+ span.attributes = { ...span.attributes, ...additionalAttributes };
86
+ }
87
+ }
88
+
89
+ public static async withSpan<T>(
90
+ name: string,
91
+ fn: () => Promise<T> | T,
92
+ attributes?: Record<string, any>
93
+ ): Promise<T> {
94
+ this.initialize();
95
+
96
+ if (!this.enabled) {
97
+ return fn() as any;
98
+ }
99
+
100
+ const span = this.startSpan(name, attributes);
101
+
102
+ if (this.asyncLocalStorage) {
103
+ return this.asyncLocalStorage.run(span, async() => {
104
+ try {
105
+ const result = await fn();
106
+ this.endSpan(span);
107
+ return result;
108
+ } catch (error) {
109
+ this.endSpan(span, { error: true, errorMessage: error instanceof Error ? error.message : String(error) });
110
+ throw error;
111
+ }
112
+ });
113
+ }
114
+
115
+ // Fallback without AsyncLocalStorage
116
+ try {
117
+ const result = await fn();
118
+ this.endSpan(span);
119
+ return result;
120
+ } catch (error) {
121
+ this.endSpan(span, { error: true, errorMessage: error instanceof Error ? error.message : String(error) });
122
+ throw error;
123
+ }
124
+ }
125
+
126
+ public static async withSpanRoot<T>(
127
+ name: string,
128
+ fn: () => Promise<T> | T,
129
+ attributes?: Record<string, any>
130
+ ): Promise<T> {
131
+ this.initialize();
132
+
133
+ if (!this.enabled) {
134
+ return fn() as any;
135
+ }
136
+
137
+ const span = this.startSpan(name, attributes);
138
+
139
+ if (this.asyncLocalStorage) {
140
+ return this.asyncLocalStorage.run(span, async() => {
141
+ try {
142
+ const result = await fn();
143
+ this.endSpan(span);
144
+ this.logSpanTree(span);
145
+ return result;
146
+ } catch (error) {
147
+ this.endSpan(span, { error: true, errorMessage: error instanceof Error ? error.message : String(error) });
148
+ this.logSpanTree(span);
149
+ throw error;
150
+ }
151
+ });
152
+ }
153
+
154
+ // Fallback without AsyncLocalStorage
155
+ try {
156
+ const result = await fn();
157
+ this.endSpan(span);
158
+ this.logSpanTree(span);
159
+ return result;
160
+ } catch (error) {
161
+ this.endSpan(span, { error: true, errorMessage: error instanceof Error ? error.message : String(error) });
162
+ this.logSpanTree(span);
163
+ throw error;
164
+ }
165
+ }
166
+
167
+ public static getCurrentSpan(): Span | undefined {
168
+ this.initialize();
169
+
170
+ if (!this.enabled || !this.asyncLocalStorage) {
171
+ return undefined;
172
+ }
173
+
174
+ return this.asyncLocalStorage.getStore();
175
+ }
176
+
177
+ public static logSpanTree(rootSpan: Span): void {
178
+ if (!this.enabled || !rootSpan) {
179
+ return;
180
+ }
181
+
182
+ const timestamp = new Date().toISOString();
183
+ const lines: string[] = [];
184
+
185
+ lines.push('');
186
+ lines.push('╔══════════════════════════════════════════════════════════════╗');
187
+ lines.push(`║ SKL Engine Performance Trace ║`);
188
+ lines.push(`║ Started: ${timestamp} ║`);
189
+ lines.push('╚══════════════════════════════════════════════════════════════╝');
190
+ lines.push('');
191
+
192
+ this.buildSpanTreeLines(rootSpan, lines, '', true);
193
+
194
+ lines.push('');
195
+ lines.push('═══════════════════════════════════════════════════════════════');
196
+ lines.push('');
197
+
198
+ // eslint-disable-next-line no-console
199
+ console.log(lines.join('\n'));
200
+ }
201
+
202
+ private static buildSpanTreeLines(
203
+ span: Span,
204
+ lines: string[],
205
+ prefix: string,
206
+ isRoot: boolean
207
+ ): void {
208
+ const duration = span.duration !== undefined ? `${span.duration.toFixed(2)}ms` : 'running...';
209
+ const status = span.attributes.error ? '✗' : '✓';
210
+
211
+ lines.push(`${prefix}${span.name} [${duration}] ${status}`);
212
+
213
+ // Show important attributes
214
+ this.addAttributeLines(span, lines, prefix);
215
+
216
+ // Process children
217
+ const childCount = span.children.length;
218
+ span.children.forEach((child, index) => {
219
+ const isLast = index === childCount - 1;
220
+ const childPrefix = prefix + (isRoot ? '' : '│ ');
221
+ const connector = isLast ? '└─ ' : '├─ ';
222
+ const nextPrefix = prefix + (isRoot ? '' : (isLast ? ' ' : '│ '));
223
+
224
+ this.buildSpanTreeLines(child, lines, childPrefix + connector, false);
225
+ });
226
+ }
227
+
228
+ private static addAttributeLines(span: Span, lines: string[], prefix: string): void {
229
+ const { query, resultCount, options, error, errorMessage, ...otherAttrs } = span.attributes;
230
+
231
+ // Show query if present (and format it) - but make it easy to copy
232
+ if (query && typeof query === 'string') {
233
+ lines.push(`${prefix}│ Query:`);
234
+ // Empty line before query
235
+ lines.push('');
236
+ const formattedQuery = this.formatQuery(query);
237
+ formattedQuery.split('\n').forEach(line => {
238
+ // Simple indentation without tree chars
239
+ lines.push(` ${line}`);
240
+ });
241
+ // Empty line after query
242
+ lines.push('');
243
+ }
244
+
245
+ // Show result count
246
+ if (resultCount !== undefined) {
247
+ lines.push(`${prefix}│ Result: ${resultCount} ${resultCount === 1 ? 'row' : 'rows'}`);
248
+ }
249
+
250
+ // Show error if present
251
+ if (error && errorMessage) {
252
+ lines.push(`${prefix}│ Error: ${errorMessage}`);
253
+ }
254
+
255
+ // Show other important attributes
256
+ if (Object.keys(otherAttrs).length > 0) {
257
+ const attrStr = JSON.stringify(otherAttrs);
258
+ if (attrStr.length < 100) {
259
+ lines.push(`${prefix}│ Attributes: ${attrStr}`);
260
+ }
261
+ }
262
+ }
263
+
264
+ private static formatQuery(query: string): string {
265
+ // Simple query formatting with proper indentation
266
+ let formatted = query.trim();
267
+
268
+ // Add line breaks after key SPARQL keywords for readability
269
+ formatted = formatted
270
+ .replace(/\s+/g, ' ')
271
+ .replace(/\s*{\s*/g, ' {\n ')
272
+ .replace(/\s*}\s*/g, '\n}')
273
+ .replace(/\s*\.\s*(?=[?A-Z])/g, ' .\n ')
274
+ .replace(/\bWHERE\b/g, '\nWHERE')
275
+ .replace(/\bFILTER\b/g, '\n FILTER')
276
+ .replace(/\bOPTIONAL\b/g, '\n OPTIONAL')
277
+ .replace(/\bUNION\b/g, '\nUNION')
278
+ .replace(/\bGRAPH\b/g, '\n GRAPH')
279
+ .replace(/\bORDER BY\b/g, '\nORDER BY')
280
+ .replace(/\bLIMIT\b/g, '\nLIMIT')
281
+ .replace(/\bOFFSET\b/g, '\nOFFSET');
282
+
283
+ return formatted;
284
+ }
285
+ }
286
+