@grafema/util 0.3.0-beta

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 (324) hide show
  1. package/LICENSE +190 -0
  2. package/dist/api/GraphAPI.d.ts +87 -0
  3. package/dist/api/GraphAPI.d.ts.map +1 -0
  4. package/dist/api/GraphAPI.js +212 -0
  5. package/dist/api/GraphAPI.js.map +1 -0
  6. package/dist/api/GuaranteeAPI.d.ts +147 -0
  7. package/dist/api/GuaranteeAPI.d.ts.map +1 -0
  8. package/dist/api/GuaranteeAPI.js +290 -0
  9. package/dist/api/GuaranteeAPI.js.map +1 -0
  10. package/dist/config/ConfigLoader.d.ts +214 -0
  11. package/dist/config/ConfigLoader.d.ts.map +1 -0
  12. package/dist/config/ConfigLoader.js +441 -0
  13. package/dist/config/ConfigLoader.js.map +1 -0
  14. package/dist/config/index.d.ts +6 -0
  15. package/dist/config/index.d.ts.map +1 -0
  16. package/dist/config/index.js +5 -0
  17. package/dist/config/index.js.map +1 -0
  18. package/dist/core/CoverageAnalyzer.d.ts +65 -0
  19. package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
  20. package/dist/core/CoverageAnalyzer.js +199 -0
  21. package/dist/core/CoverageAnalyzer.js.map +1 -0
  22. package/dist/core/FileExplainer.d.ts +101 -0
  23. package/dist/core/FileExplainer.d.ts.map +1 -0
  24. package/dist/core/FileExplainer.js +140 -0
  25. package/dist/core/FileExplainer.js.map +1 -0
  26. package/dist/core/FileOverview.d.ts +124 -0
  27. package/dist/core/FileOverview.d.ts.map +1 -0
  28. package/dist/core/FileOverview.js +279 -0
  29. package/dist/core/FileOverview.js.map +1 -0
  30. package/dist/core/GrafemaUri.d.ts +66 -0
  31. package/dist/core/GrafemaUri.d.ts.map +1 -0
  32. package/dist/core/GrafemaUri.js +191 -0
  33. package/dist/core/GrafemaUri.js.map +1 -0
  34. package/dist/core/GraphBackend.d.ts +158 -0
  35. package/dist/core/GraphBackend.d.ts.map +1 -0
  36. package/dist/core/GraphBackend.js +85 -0
  37. package/dist/core/GraphBackend.js.map +1 -0
  38. package/dist/core/GraphFreshnessChecker.d.ts +33 -0
  39. package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
  40. package/dist/core/GraphFreshnessChecker.js +104 -0
  41. package/dist/core/GraphFreshnessChecker.js.map +1 -0
  42. package/dist/core/GuaranteeManager.d.ts +254 -0
  43. package/dist/core/GuaranteeManager.d.ts.map +1 -0
  44. package/dist/core/GuaranteeManager.js +447 -0
  45. package/dist/core/GuaranteeManager.js.map +1 -0
  46. package/dist/core/HashUtils.d.ts +24 -0
  47. package/dist/core/HashUtils.d.ts.map +1 -0
  48. package/dist/core/HashUtils.js +46 -0
  49. package/dist/core/HashUtils.js.map +1 -0
  50. package/dist/core/IncrementalReanalyzer.d.ts +33 -0
  51. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
  52. package/dist/core/IncrementalReanalyzer.js +67 -0
  53. package/dist/core/IncrementalReanalyzer.js.map +1 -0
  54. package/dist/core/ResourceRegistry.d.ts +17 -0
  55. package/dist/core/ResourceRegistry.d.ts.map +1 -0
  56. package/dist/core/ResourceRegistry.js +32 -0
  57. package/dist/core/ResourceRegistry.js.map +1 -0
  58. package/dist/core/SemanticId.d.ts +159 -0
  59. package/dist/core/SemanticId.d.ts.map +1 -0
  60. package/dist/core/SemanticId.js +291 -0
  61. package/dist/core/SemanticId.js.map +1 -0
  62. package/dist/core/VersionManager.d.ts +166 -0
  63. package/dist/core/VersionManager.d.ts.map +1 -0
  64. package/dist/core/VersionManager.js +239 -0
  65. package/dist/core/VersionManager.js.map +1 -0
  66. package/dist/core/brandNodeInternal.d.ts +14 -0
  67. package/dist/core/brandNodeInternal.d.ts.map +1 -0
  68. package/dist/core/brandNodeInternal.js +4 -0
  69. package/dist/core/brandNodeInternal.js.map +1 -0
  70. package/dist/core/nodes/GuaranteeNode.d.ts +76 -0
  71. package/dist/core/nodes/GuaranteeNode.d.ts.map +1 -0
  72. package/dist/core/nodes/GuaranteeNode.js +118 -0
  73. package/dist/core/nodes/GuaranteeNode.js.map +1 -0
  74. package/dist/core/nodes/IssueNode.d.ts +73 -0
  75. package/dist/core/nodes/IssueNode.d.ts.map +1 -0
  76. package/dist/core/nodes/IssueNode.js +130 -0
  77. package/dist/core/nodes/IssueNode.js.map +1 -0
  78. package/dist/core/nodes/NodeKind.d.ts +104 -0
  79. package/dist/core/nodes/NodeKind.d.ts.map +1 -0
  80. package/dist/core/nodes/NodeKind.js +166 -0
  81. package/dist/core/nodes/NodeKind.js.map +1 -0
  82. package/dist/diagnostics/DiagnosticCollector.d.ts +103 -0
  83. package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
  84. package/dist/diagnostics/DiagnosticCollector.js +133 -0
  85. package/dist/diagnostics/DiagnosticCollector.js.map +1 -0
  86. package/dist/diagnostics/DiagnosticReporter.d.ts +122 -0
  87. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
  88. package/dist/diagnostics/DiagnosticReporter.js +300 -0
  89. package/dist/diagnostics/DiagnosticReporter.js.map +1 -0
  90. package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
  91. package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
  92. package/dist/diagnostics/DiagnosticWriter.js +44 -0
  93. package/dist/diagnostics/DiagnosticWriter.js.map +1 -0
  94. package/dist/diagnostics/categories.d.ts +57 -0
  95. package/dist/diagnostics/categories.d.ts.map +1 -0
  96. package/dist/diagnostics/categories.js +71 -0
  97. package/dist/diagnostics/categories.js.map +1 -0
  98. package/dist/diagnostics/index.d.ts +17 -0
  99. package/dist/diagnostics/index.d.ts.map +1 -0
  100. package/dist/diagnostics/index.js +15 -0
  101. package/dist/diagnostics/index.js.map +1 -0
  102. package/dist/errors/GrafemaError.d.ts +200 -0
  103. package/dist/errors/GrafemaError.d.ts.map +1 -0
  104. package/dist/errors/GrafemaError.js +209 -0
  105. package/dist/errors/GrafemaError.js.map +1 -0
  106. package/dist/index.d.ts +75 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +76 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/instructions/index.d.ts +8 -0
  111. package/dist/instructions/index.d.ts.map +1 -0
  112. package/dist/instructions/index.js +20 -0
  113. package/dist/instructions/index.js.map +1 -0
  114. package/dist/instructions/onboarding.md +133 -0
  115. package/dist/knowledge/KnowledgeBase.d.ts +113 -0
  116. package/dist/knowledge/KnowledgeBase.d.ts.map +1 -0
  117. package/dist/knowledge/KnowledgeBase.js +420 -0
  118. package/dist/knowledge/KnowledgeBase.js.map +1 -0
  119. package/dist/knowledge/SemanticAddressResolver.d.ts +59 -0
  120. package/dist/knowledge/SemanticAddressResolver.d.ts.map +1 -0
  121. package/dist/knowledge/SemanticAddressResolver.js +160 -0
  122. package/dist/knowledge/SemanticAddressResolver.js.map +1 -0
  123. package/dist/knowledge/git-ingest.d.ts +58 -0
  124. package/dist/knowledge/git-ingest.d.ts.map +1 -0
  125. package/dist/knowledge/git-ingest.js +301 -0
  126. package/dist/knowledge/git-ingest.js.map +1 -0
  127. package/dist/knowledge/git-queries.d.ts +86 -0
  128. package/dist/knowledge/git-queries.d.ts.map +1 -0
  129. package/dist/knowledge/git-queries.js +177 -0
  130. package/dist/knowledge/git-queries.js.map +1 -0
  131. package/dist/knowledge/index.d.ts +14 -0
  132. package/dist/knowledge/index.d.ts.map +1 -0
  133. package/dist/knowledge/index.js +10 -0
  134. package/dist/knowledge/index.js.map +1 -0
  135. package/dist/knowledge/parser.d.ts +39 -0
  136. package/dist/knowledge/parser.d.ts.map +1 -0
  137. package/dist/knowledge/parser.js +292 -0
  138. package/dist/knowledge/parser.js.map +1 -0
  139. package/dist/knowledge/types.d.ts +133 -0
  140. package/dist/knowledge/types.d.ts.map +1 -0
  141. package/dist/knowledge/types.js +8 -0
  142. package/dist/knowledge/types.js.map +1 -0
  143. package/dist/logging/Logger.d.ts +98 -0
  144. package/dist/logging/Logger.d.ts.map +1 -0
  145. package/dist/logging/Logger.js +274 -0
  146. package/dist/logging/Logger.js.map +1 -0
  147. package/dist/notation/archetypes.d.ts +36 -0
  148. package/dist/notation/archetypes.d.ts.map +1 -0
  149. package/dist/notation/archetypes.js +173 -0
  150. package/dist/notation/archetypes.js.map +1 -0
  151. package/dist/notation/fold.d.ts +25 -0
  152. package/dist/notation/fold.d.ts.map +1 -0
  153. package/dist/notation/fold.js +598 -0
  154. package/dist/notation/fold.js.map +1 -0
  155. package/dist/notation/index.d.ts +18 -0
  156. package/dist/notation/index.d.ts.map +1 -0
  157. package/dist/notation/index.js +16 -0
  158. package/dist/notation/index.js.map +1 -0
  159. package/dist/notation/lodExtractor.d.ts +32 -0
  160. package/dist/notation/lodExtractor.d.ts.map +1 -0
  161. package/dist/notation/lodExtractor.js +149 -0
  162. package/dist/notation/lodExtractor.js.map +1 -0
  163. package/dist/notation/nameShortener.d.ts +22 -0
  164. package/dist/notation/nameShortener.d.ts.map +1 -0
  165. package/dist/notation/nameShortener.js +24 -0
  166. package/dist/notation/nameShortener.js.map +1 -0
  167. package/dist/notation/perspectives.d.ts +11 -0
  168. package/dist/notation/perspectives.d.ts.map +1 -0
  169. package/dist/notation/perspectives.js +16 -0
  170. package/dist/notation/perspectives.js.map +1 -0
  171. package/dist/notation/renderer.d.ts +31 -0
  172. package/dist/notation/renderer.d.ts.map +1 -0
  173. package/dist/notation/renderer.js +315 -0
  174. package/dist/notation/renderer.js.map +1 -0
  175. package/dist/notation/traceRenderer.d.ts +39 -0
  176. package/dist/notation/traceRenderer.d.ts.map +1 -0
  177. package/dist/notation/traceRenderer.js +358 -0
  178. package/dist/notation/traceRenderer.js.map +1 -0
  179. package/dist/notation/types.d.ts +66 -0
  180. package/dist/notation/types.d.ts.map +1 -0
  181. package/dist/notation/types.js +10 -0
  182. package/dist/notation/types.js.map +1 -0
  183. package/dist/queries/NodeContext.d.ts +81 -0
  184. package/dist/queries/NodeContext.d.ts.map +1 -0
  185. package/dist/queries/NodeContext.js +196 -0
  186. package/dist/queries/NodeContext.js.map +1 -0
  187. package/dist/queries/findCallsInFunction.d.ts +62 -0
  188. package/dist/queries/findCallsInFunction.d.ts.map +1 -0
  189. package/dist/queries/findCallsInFunction.js +169 -0
  190. package/dist/queries/findCallsInFunction.js.map +1 -0
  191. package/dist/queries/findContainingFunction.d.ts +57 -0
  192. package/dist/queries/findContainingFunction.d.ts.map +1 -0
  193. package/dist/queries/findContainingFunction.js +91 -0
  194. package/dist/queries/findContainingFunction.js.map +1 -0
  195. package/dist/queries/index.d.ts +18 -0
  196. package/dist/queries/index.d.ts.map +1 -0
  197. package/dist/queries/index.js +14 -0
  198. package/dist/queries/index.js.map +1 -0
  199. package/dist/queries/traceDataflow.d.ts +65 -0
  200. package/dist/queries/traceDataflow.d.ts.map +1 -0
  201. package/dist/queries/traceDataflow.js +754 -0
  202. package/dist/queries/traceDataflow.js.map +1 -0
  203. package/dist/queries/traceValues.d.ts +70 -0
  204. package/dist/queries/traceValues.d.ts.map +1 -0
  205. package/dist/queries/traceValues.js +373 -0
  206. package/dist/queries/traceValues.js.map +1 -0
  207. package/dist/queries/types.d.ts +166 -0
  208. package/dist/queries/types.d.ts.map +1 -0
  209. package/dist/queries/types.js +10 -0
  210. package/dist/queries/types.js.map +1 -0
  211. package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
  212. package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
  213. package/dist/schema/GraphSchemaExtractor.js +125 -0
  214. package/dist/schema/GraphSchemaExtractor.js.map +1 -0
  215. package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
  216. package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
  217. package/dist/schema/InterfaceSchemaExtractor.js +113 -0
  218. package/dist/schema/InterfaceSchemaExtractor.js.map +1 -0
  219. package/dist/schema/index.d.ts +5 -0
  220. package/dist/schema/index.d.ts.map +1 -0
  221. package/dist/schema/index.js +3 -0
  222. package/dist/schema/index.js.map +1 -0
  223. package/dist/storage/backends/RFDBServerBackend.d.ts +356 -0
  224. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -0
  225. package/dist/storage/backends/RFDBServerBackend.js +748 -0
  226. package/dist/storage/backends/RFDBServerBackend.js.map +1 -0
  227. package/dist/storage/backends/typeValidation.d.ts +47 -0
  228. package/dist/storage/backends/typeValidation.d.ts.map +1 -0
  229. package/dist/storage/backends/typeValidation.js +141 -0
  230. package/dist/storage/backends/typeValidation.js.map +1 -0
  231. package/dist/utils/findRfdbBinary.d.ts +67 -0
  232. package/dist/utils/findRfdbBinary.d.ts.map +1 -0
  233. package/dist/utils/findRfdbBinary.js +261 -0
  234. package/dist/utils/findRfdbBinary.js.map +1 -0
  235. package/dist/utils/lazyDownload.d.ts +43 -0
  236. package/dist/utils/lazyDownload.d.ts.map +1 -0
  237. package/dist/utils/lazyDownload.js +175 -0
  238. package/dist/utils/lazyDownload.js.map +1 -0
  239. package/dist/utils/moduleResolution.d.ts +134 -0
  240. package/dist/utils/moduleResolution.d.ts.map +1 -0
  241. package/dist/utils/moduleResolution.js +189 -0
  242. package/dist/utils/moduleResolution.js.map +1 -0
  243. package/dist/utils/resolveNodeFile.d.ts +13 -0
  244. package/dist/utils/resolveNodeFile.d.ts.map +1 -0
  245. package/dist/utils/resolveNodeFile.js +18 -0
  246. package/dist/utils/resolveNodeFile.js.map +1 -0
  247. package/dist/utils/startRfdbServer.d.ts +63 -0
  248. package/dist/utils/startRfdbServer.d.ts.map +1 -0
  249. package/dist/utils/startRfdbServer.js +142 -0
  250. package/dist/utils/startRfdbServer.js.map +1 -0
  251. package/dist/validation/PathValidator.d.ts +80 -0
  252. package/dist/validation/PathValidator.d.ts.map +1 -0
  253. package/dist/validation/PathValidator.js +252 -0
  254. package/dist/validation/PathValidator.js.map +1 -0
  255. package/dist/version.d.ts +11 -0
  256. package/dist/version.d.ts.map +1 -0
  257. package/dist/version.js +26 -0
  258. package/dist/version.js.map +1 -0
  259. package/package.json +50 -0
  260. package/src/api/GraphAPI.ts +307 -0
  261. package/src/api/GuaranteeAPI.ts +402 -0
  262. package/src/config/ConfigLoader.ts +653 -0
  263. package/src/config/index.ts +13 -0
  264. package/src/core/CoverageAnalyzer.ts +243 -0
  265. package/src/core/FileExplainer.ts +179 -0
  266. package/src/core/FileOverview.ts +397 -0
  267. package/src/core/GrafemaUri.ts +216 -0
  268. package/src/core/GraphBackend.ts +266 -0
  269. package/src/core/GraphFreshnessChecker.ts +145 -0
  270. package/src/core/GuaranteeManager.ts +684 -0
  271. package/src/core/HashUtils.ts +48 -0
  272. package/src/core/IncrementalReanalyzer.ts +106 -0
  273. package/src/core/ResourceRegistry.ts +39 -0
  274. package/src/core/SemanticId.ts +423 -0
  275. package/src/core/VersionManager.ts +405 -0
  276. package/src/core/brandNodeInternal.ts +16 -0
  277. package/src/core/nodes/GuaranteeNode.ts +162 -0
  278. package/src/core/nodes/IssueNode.ts +177 -0
  279. package/src/core/nodes/NodeKind.ts +192 -0
  280. package/src/diagnostics/DiagnosticCollector.ts +170 -0
  281. package/src/diagnostics/DiagnosticReporter.ts +395 -0
  282. package/src/diagnostics/DiagnosticWriter.ts +50 -0
  283. package/src/diagnostics/categories.ts +104 -0
  284. package/src/diagnostics/index.ts +30 -0
  285. package/src/errors/GrafemaError.ts +297 -0
  286. package/src/index.ts +261 -0
  287. package/src/instructions/index.ts +21 -0
  288. package/src/instructions/onboarding.md +133 -0
  289. package/src/knowledge/KnowledgeBase.ts +486 -0
  290. package/src/knowledge/SemanticAddressResolver.ts +191 -0
  291. package/src/knowledge/git-ingest.ts +402 -0
  292. package/src/knowledge/git-queries.ts +269 -0
  293. package/src/knowledge/index.ts +29 -0
  294. package/src/knowledge/parser.ts +294 -0
  295. package/src/knowledge/types.ts +146 -0
  296. package/src/logging/Logger.ts +303 -0
  297. package/src/notation/archetypes.ts +189 -0
  298. package/src/notation/fold.ts +696 -0
  299. package/src/notation/index.ts +27 -0
  300. package/src/notation/lodExtractor.ts +177 -0
  301. package/src/notation/nameShortener.ts +24 -0
  302. package/src/notation/perspectives.ts +18 -0
  303. package/src/notation/renderer.ts +394 -0
  304. package/src/notation/traceRenderer.ts +458 -0
  305. package/src/notation/types.ts +79 -0
  306. package/src/queries/NodeContext.ts +280 -0
  307. package/src/queries/findCallsInFunction.ts +249 -0
  308. package/src/queries/findContainingFunction.ts +124 -0
  309. package/src/queries/index.ts +44 -0
  310. package/src/queries/traceDataflow.ts +838 -0
  311. package/src/queries/traceValues.ts +531 -0
  312. package/src/queries/types.ts +191 -0
  313. package/src/schema/GraphSchemaExtractor.ts +177 -0
  314. package/src/schema/InterfaceSchemaExtractor.ts +173 -0
  315. package/src/schema/index.ts +5 -0
  316. package/src/storage/backends/RFDBServerBackend.ts +895 -0
  317. package/src/storage/backends/typeValidation.ts +154 -0
  318. package/src/utils/findRfdbBinary.ts +288 -0
  319. package/src/utils/lazyDownload.ts +206 -0
  320. package/src/utils/moduleResolution.ts +271 -0
  321. package/src/utils/resolveNodeFile.ts +18 -0
  322. package/src/utils/startRfdbServer.ts +197 -0
  323. package/src/validation/PathValidator.ts +334 -0
  324. package/src/version.ts +28 -0
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Shared Types for Graph Query Utilities
3
+ *
4
+ * These types are used by findCallsInFunction, findContainingFunction,
5
+ * and other query utilities.
6
+ *
7
+ * @module queries/types
8
+ */
9
+ /**
10
+ * Information about a function/method call found in code
11
+ */
12
+ export interface CallInfo {
13
+ /** Node ID of the call site */
14
+ id: string;
15
+ /** Called function/method name */
16
+ name: string;
17
+ /** Node type: 'CALL' or 'METHOD_CALL' */
18
+ type: 'CALL' | 'METHOD_CALL';
19
+ /** Object name for method calls (e.g., 'response' for response.json()) */
20
+ object?: string;
21
+ /** Whether the call target was resolved (has CALLS edge) */
22
+ resolved: boolean;
23
+ /** Target function info if resolved */
24
+ target?: {
25
+ id: string;
26
+ name: string;
27
+ file?: string;
28
+ line?: number;
29
+ };
30
+ /** File where call occurs */
31
+ file?: string;
32
+ /** Line number of call */
33
+ line?: number;
34
+ /** Depth in transitive call chain (0 = direct call) */
35
+ depth?: number;
36
+ }
37
+ /**
38
+ * Information about a function that calls another function
39
+ */
40
+ export interface CallerInfo {
41
+ /** Caller function ID */
42
+ id: string;
43
+ /** Caller function name */
44
+ name: string;
45
+ /** Caller function type (FUNCTION, CLASS, MODULE) */
46
+ type: string;
47
+ /** File containing the caller */
48
+ file?: string;
49
+ /** Line of the call site */
50
+ line?: number;
51
+ }
52
+ /**
53
+ * Options for finding calls in a function
54
+ */
55
+ export interface FindCallsOptions {
56
+ /** Maximum depth for scope traversal (default: 10) */
57
+ maxDepth?: number;
58
+ /** Follow transitive calls (default: false) */
59
+ transitive?: boolean;
60
+ /** Maximum depth for transitive traversal (default: 5) */
61
+ transitiveDepth?: number;
62
+ }
63
+ /**
64
+ * Location of a value source in the graph
65
+ */
66
+ export interface ValueSource {
67
+ /** Node ID in the graph */
68
+ id: string;
69
+ /** File path */
70
+ file: string;
71
+ /** Line number (1-based) */
72
+ line: number;
73
+ }
74
+ /**
75
+ * Reason why a value could not be determined statically.
76
+ * Used for debugging and user-facing messages.
77
+ */
78
+ export type UnknownReason = 'parameter' | 'call_result' | 'implicit_return' | 'constructor_call' | 'nondeterministic' | 'max_depth' | 'no_sources';
79
+ /**
80
+ * A single traced value from the graph.
81
+ * Represents either a concrete value (from LITERAL) or an unknown value
82
+ * (from PARAMETER, CALL, nondeterministic source, etc.)
83
+ */
84
+ export interface TracedValue {
85
+ /** The literal value (undefined if unknown) */
86
+ value: unknown;
87
+ /** Source location in the codebase */
88
+ source: ValueSource;
89
+ /** Whether value could not be determined statically */
90
+ isUnknown: boolean;
91
+ /** Why the value is unknown (for debugging/display) */
92
+ reason?: UnknownReason;
93
+ }
94
+ /**
95
+ * Options for traceValues()
96
+ */
97
+ export interface TraceValuesOptions {
98
+ /** Maximum traversal depth (default: 10) */
99
+ maxDepth?: number;
100
+ /** Follow DERIVES_FROM edges in addition to ASSIGNED_FROM (default: true) */
101
+ followDerivesFrom?: boolean;
102
+ /** Detect nondeterministic patterns like process.env (default: true) */
103
+ detectNondeterministic?: boolean;
104
+ /** Follow CALL_RETURNS edges to trace through function calls (default: true) */
105
+ followCallReturns?: boolean;
106
+ }
107
+ /**
108
+ * Aggregated result from tracing.
109
+ * Convenience type for consumers who don't need individual sources.
110
+ */
111
+ export interface ValueSetResult {
112
+ /** All unique concrete values found */
113
+ values: unknown[];
114
+ /** Whether any path led to unknown value */
115
+ hasUnknown: boolean;
116
+ }
117
+ /**
118
+ * Edge record for traceValues
119
+ */
120
+ export interface TraceValuesEdge {
121
+ src: string;
122
+ dst: string;
123
+ type: string;
124
+ metadata?: {
125
+ argIndex?: number;
126
+ isReject?: boolean;
127
+ };
128
+ }
129
+ /**
130
+ * Node record for traceValues
131
+ */
132
+ export interface TraceValuesNode {
133
+ id: string;
134
+ type?: string;
135
+ nodeType?: string;
136
+ value?: unknown;
137
+ file?: string;
138
+ line?: number;
139
+ expressionType?: string;
140
+ object?: string;
141
+ property?: string;
142
+ className?: string;
143
+ name?: string;
144
+ }
145
+ /**
146
+ * Minimal graph backend interface for traceValues().
147
+ * Works with both RFDBServerBackend and internal Graph interface.
148
+ */
149
+ export interface TraceValuesGraphBackend {
150
+ getNode(id: string): Promise<TraceValuesNode | null>;
151
+ getOutgoingEdges(nodeId: string, edgeTypes: string[] | null): Promise<TraceValuesEdge[]>;
152
+ /**
153
+ * Get incoming edges to a node (REG-334: needed for RESOLVES_TO)
154
+ * Required for Promise tracing - must be implemented by all backends
155
+ */
156
+ getIncomingEdges(nodeId: string, edgeTypes: string[] | null): Promise<TraceValuesEdge[]>;
157
+ }
158
+ /**
159
+ * Nondeterministic MemberExpression pattern.
160
+ * object.property combinations that represent external/user input.
161
+ */
162
+ export interface NondeterministicPattern {
163
+ object: string;
164
+ property: string;
165
+ }
166
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/queries/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Shared Types for Graph Query Utilities
3
+ *
4
+ * These types are used by findCallsInFunction, findContainingFunction,
5
+ * and other query utilities.
6
+ *
7
+ * @module queries/types
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/queries/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * GraphSchemaExtractor - Extracts graph node/edge type schemas
3
+ *
4
+ * Usage:
5
+ * const extractor = new GraphSchemaExtractor(backend);
6
+ * const schema = await extractor.extract();
7
+ *
8
+ * When to use:
9
+ * - Export graph schema for contract tracking
10
+ * - Track node/edge type changes via checksum
11
+ * - Generate graph documentation
12
+ */
13
+ import type { RFDBServerBackend } from '../storage/backends/RFDBServerBackend.js';
14
+ export interface NodeTypeSchema {
15
+ category: 'base' | 'namespaced';
16
+ namespace?: string;
17
+ count: number;
18
+ }
19
+ export interface EdgeTypeSchema {
20
+ count: number;
21
+ }
22
+ export interface GraphSchema {
23
+ $schema: 'grafema-graph-v1';
24
+ extractedAt: string;
25
+ nodeTypes: Record<string, NodeTypeSchema>;
26
+ edgeTypes: Record<string, EdgeTypeSchema>;
27
+ statistics: {
28
+ totalNodes: number;
29
+ totalEdges: number;
30
+ nodeTypeCount: number;
31
+ edgeTypeCount: number;
32
+ };
33
+ checksum: string;
34
+ }
35
+ export interface GraphExtractOptions {
36
+ /** Include all defined types, not just used ones (default: false) */
37
+ includeAll?: boolean;
38
+ }
39
+ export declare class GraphSchemaExtractor {
40
+ private backend;
41
+ constructor(backend: RFDBServerBackend);
42
+ /**
43
+ * Extract graph schema from current database
44
+ *
45
+ * @param options.includeAll - If true, include all defined types even with count=0
46
+ */
47
+ extract(options?: GraphExtractOptions): Promise<GraphSchema>;
48
+ /**
49
+ * Sort object keys alphabetically for deterministic output
50
+ */
51
+ private sortObject;
52
+ }
53
+ //# sourceMappingURL=GraphSchemaExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphSchemaExtractor.d.ts","sourceRoot":"","sources":["../../src/schema/GraphSchemaExtractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAMlF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,GAAG,YAAY,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,UAAU,EAAE;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,oBAAoB;IACnB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,iBAAiB;IAE9C;;;;OAIG;IACG,OAAO,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAuGlE;;OAEG;IACH,OAAO,CAAC,UAAU;CAQnB"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * GraphSchemaExtractor - Extracts graph node/edge type schemas
3
+ *
4
+ * Usage:
5
+ * const extractor = new GraphSchemaExtractor(backend);
6
+ * const schema = await extractor.extract();
7
+ *
8
+ * When to use:
9
+ * - Export graph schema for contract tracking
10
+ * - Track node/edge type changes via checksum
11
+ * - Generate graph documentation
12
+ */
13
+ import { createHash } from 'crypto';
14
+ import { NODE_TYPE, NAMESPACED_TYPE, EDGE_TYPE } from '@grafema/types';
15
+ export class GraphSchemaExtractor {
16
+ backend;
17
+ constructor(backend) {
18
+ this.backend = backend;
19
+ }
20
+ /**
21
+ * Extract graph schema from current database
22
+ *
23
+ * @param options.includeAll - If true, include all defined types even with count=0
24
+ */
25
+ async extract(options) {
26
+ const includeAll = options?.includeAll ?? false;
27
+ // Get actual counts from graph
28
+ const nodeCounts = await this.backend.countNodesByType();
29
+ const edgeCounts = await this.backend.countEdgesByType();
30
+ // Build node types from definitions + counts
31
+ const nodeTypes = {};
32
+ // Base node types
33
+ for (const [_key, value] of Object.entries(NODE_TYPE)) {
34
+ nodeTypes[value] = {
35
+ category: 'base',
36
+ count: nodeCounts[value] || 0,
37
+ };
38
+ }
39
+ // Namespaced node types
40
+ for (const [_key, value] of Object.entries(NAMESPACED_TYPE)) {
41
+ const namespace = value.split(':')[0];
42
+ nodeTypes[value] = {
43
+ category: 'namespaced',
44
+ namespace,
45
+ count: nodeCounts[value] || 0,
46
+ };
47
+ }
48
+ // Add any additional types found in the graph but not in definitions
49
+ for (const [type, count] of Object.entries(nodeCounts)) {
50
+ if (!nodeTypes[type]) {
51
+ const namespace = type.includes(':') ? type.split(':')[0] : undefined;
52
+ nodeTypes[type] = {
53
+ category: namespace ? 'namespaced' : 'base',
54
+ namespace,
55
+ count,
56
+ };
57
+ }
58
+ }
59
+ // Build edge types from definitions + counts
60
+ const edgeTypes = {};
61
+ for (const [_key, value] of Object.entries(EDGE_TYPE)) {
62
+ edgeTypes[value] = {
63
+ count: edgeCounts[value] || 0,
64
+ };
65
+ }
66
+ // Add any additional edge types found in the graph
67
+ for (const [type, count] of Object.entries(edgeCounts)) {
68
+ if (!edgeTypes[type]) {
69
+ edgeTypes[type] = { count };
70
+ }
71
+ }
72
+ // Calculate totals
73
+ const totalNodes = Object.values(nodeCounts).reduce((sum, n) => sum + n, 0);
74
+ const totalEdges = Object.values(edgeCounts).reduce((sum, n) => sum + n, 0);
75
+ // Filter out types with count=0 unless includeAll is true
76
+ const filteredNodeTypes = {};
77
+ for (const [type, info] of Object.entries(nodeTypes)) {
78
+ if (includeAll || info.count > 0) {
79
+ filteredNodeTypes[type] = info;
80
+ }
81
+ }
82
+ const filteredEdgeTypes = {};
83
+ for (const [type, info] of Object.entries(edgeTypes)) {
84
+ if (includeAll || info.count > 0) {
85
+ filteredEdgeTypes[type] = info;
86
+ }
87
+ }
88
+ // Sort for deterministic output
89
+ const sortedNodeTypes = this.sortObject(filteredNodeTypes);
90
+ const sortedEdgeTypes = this.sortObject(filteredEdgeTypes);
91
+ // Compute checksum from normalized content (based on filtered types)
92
+ const checksumContent = {
93
+ nodeTypes: Object.keys(sortedNodeTypes).sort(),
94
+ edgeTypes: Object.keys(sortedEdgeTypes).sort(),
95
+ };
96
+ const checksum = createHash('sha256')
97
+ .update(JSON.stringify(checksumContent))
98
+ .digest('hex');
99
+ return {
100
+ $schema: 'grafema-graph-v1',
101
+ extractedAt: new Date().toISOString(),
102
+ nodeTypes: sortedNodeTypes,
103
+ edgeTypes: sortedEdgeTypes,
104
+ statistics: {
105
+ totalNodes,
106
+ totalEdges,
107
+ nodeTypeCount: Object.keys(sortedNodeTypes).length,
108
+ edgeTypeCount: Object.keys(sortedEdgeTypes).length,
109
+ },
110
+ checksum: `sha256:${checksum}`,
111
+ };
112
+ }
113
+ /**
114
+ * Sort object keys alphabetically for deterministic output
115
+ */
116
+ sortObject(obj) {
117
+ const sorted = {};
118
+ const keys = Object.keys(obj).sort();
119
+ for (const key of keys) {
120
+ sorted[key] = obj[key];
121
+ }
122
+ return sorted;
123
+ }
124
+ }
125
+ //# sourceMappingURL=GraphSchemaExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphSchemaExtractor.js","sourceRoot":"","sources":["../../src/schema/GraphSchemaExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * InterfaceSchemaExtractor - Extracts interface schemas from graph
3
+ *
4
+ * Usage:
5
+ * const extractor = new InterfaceSchemaExtractor(backend);
6
+ * const schema = await extractor.extract('ConfigSchema');
7
+ *
8
+ * When to use:
9
+ * - Export interface contracts for documentation
10
+ * - Track interface changes via checksum
11
+ * - Generate API documentation from graph
12
+ */
13
+ import type { RFDBServerBackend } from '../storage/backends/RFDBServerBackend.js';
14
+ export interface PropertySchema {
15
+ type: string;
16
+ required: boolean;
17
+ readonly: boolean;
18
+ }
19
+ export interface InterfaceSchema {
20
+ $schema: 'grafema-interface-v1';
21
+ name: string;
22
+ source: {
23
+ file: string;
24
+ line: number;
25
+ column: number;
26
+ };
27
+ typeParameters?: string[];
28
+ properties: Record<string, PropertySchema>;
29
+ extends: string[];
30
+ checksum: string;
31
+ }
32
+ export interface ExtractOptions {
33
+ /** Specific file path if multiple interfaces have same name */
34
+ file?: string;
35
+ }
36
+ export interface InterfaceNodeRecord {
37
+ id: string;
38
+ type: 'INTERFACE';
39
+ name: string;
40
+ file: string;
41
+ line: number;
42
+ column: number;
43
+ extends: string[];
44
+ properties: Array<{
45
+ name: string;
46
+ type?: string;
47
+ optional?: boolean;
48
+ readonly?: boolean;
49
+ }>;
50
+ typeParameters?: string[];
51
+ }
52
+ export declare class InterfaceSchemaExtractor {
53
+ private backend;
54
+ constructor(backend: RFDBServerBackend);
55
+ /**
56
+ * Extract schema for interface by name
57
+ *
58
+ * @param interfaceName - Name of the interface (e.g., 'ConfigSchema')
59
+ * @param options - Optional filters
60
+ * @returns InterfaceSchema or null if not found
61
+ * @throws Error if multiple interfaces match and no file specified
62
+ */
63
+ extract(interfaceName: string, options?: ExtractOptions): Promise<InterfaceSchema | null>;
64
+ /**
65
+ * Find all interfaces with given name
66
+ */
67
+ findInterfaces(name: string): Promise<InterfaceNodeRecord[]>;
68
+ /**
69
+ * Build InterfaceSchema from node record
70
+ */
71
+ private buildSchema;
72
+ }
73
+ //# sourceMappingURL=InterfaceSchemaExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InterfaceSchemaExtractor.d.ts","sourceRoot":"","sources":["../../src/schema/InterfaceSchemaExtractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAMlF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,sBAAsB,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC3C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAMD,qBAAa,wBAAwB;IACvB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,iBAAiB;IAE9C;;;;;;;OAOG;IACG,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IA6B/F;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAYlE;;OAEG;IACH,OAAO,CAAC,WAAW;CAgDpB"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * InterfaceSchemaExtractor - Extracts interface schemas from graph
3
+ *
4
+ * Usage:
5
+ * const extractor = new InterfaceSchemaExtractor(backend);
6
+ * const schema = await extractor.extract('ConfigSchema');
7
+ *
8
+ * When to use:
9
+ * - Export interface contracts for documentation
10
+ * - Track interface changes via checksum
11
+ * - Generate API documentation from graph
12
+ */
13
+ import { createHash } from 'crypto';
14
+ // ============================================================================
15
+ // Extractor
16
+ // ============================================================================
17
+ export class InterfaceSchemaExtractor {
18
+ backend;
19
+ constructor(backend) {
20
+ this.backend = backend;
21
+ }
22
+ /**
23
+ * Extract schema for interface by name
24
+ *
25
+ * @param interfaceName - Name of the interface (e.g., 'ConfigSchema')
26
+ * @param options - Optional filters
27
+ * @returns InterfaceSchema or null if not found
28
+ * @throws Error if multiple interfaces match and no file specified
29
+ */
30
+ async extract(interfaceName, options) {
31
+ const interfaces = await this.findInterfaces(interfaceName);
32
+ if (interfaces.length === 0) {
33
+ return null;
34
+ }
35
+ // Filter by file if specified
36
+ let match;
37
+ if (options?.file) {
38
+ const fileFilter = options.file;
39
+ const filtered = interfaces.filter(i => i.file === fileFilter || i.file.endsWith(fileFilter));
40
+ if (filtered.length === 0) {
41
+ return null;
42
+ }
43
+ match = filtered[0];
44
+ }
45
+ else if (interfaces.length > 1) {
46
+ const locations = interfaces.map(i => ` - ${i.file}:${i.line}`).join('\n');
47
+ throw new Error(`Multiple interfaces named "${interfaceName}" found:\n${locations}\n` +
48
+ `Use --file option to specify which one.`);
49
+ }
50
+ else {
51
+ match = interfaces[0];
52
+ }
53
+ return this.buildSchema(match);
54
+ }
55
+ /**
56
+ * Find all interfaces with given name
57
+ */
58
+ async findInterfaces(name) {
59
+ const result = [];
60
+ for await (const node of this.backend.queryNodes({ nodeType: 'INTERFACE' })) {
61
+ if (node.name === name) {
62
+ result.push(node);
63
+ }
64
+ }
65
+ return result;
66
+ }
67
+ /**
68
+ * Build InterfaceSchema from node record
69
+ */
70
+ buildSchema(node) {
71
+ // Sort properties alphabetically for deterministic output
72
+ const sortedProperties = [...(node.properties || [])].sort((a, b) => a.name.localeCompare(b.name));
73
+ const properties = {};
74
+ for (const prop of sortedProperties) {
75
+ properties[prop.name] = {
76
+ type: prop.type || 'unknown',
77
+ required: !prop.optional,
78
+ readonly: prop.readonly || false
79
+ };
80
+ }
81
+ // Compute checksum from normalized content
82
+ const checksumContent = {
83
+ name: node.name,
84
+ properties: sortedProperties.map(p => ({
85
+ name: p.name,
86
+ type: p.type,
87
+ optional: p.optional,
88
+ readonly: p.readonly
89
+ })),
90
+ extends: [...(node.extends || [])].sort(),
91
+ typeParameters: node.typeParameters
92
+ };
93
+ const checksum = createHash('sha256')
94
+ .update(JSON.stringify(checksumContent))
95
+ .digest('hex');
96
+ return {
97
+ $schema: 'grafema-interface-v1',
98
+ name: node.name,
99
+ source: {
100
+ file: node.file,
101
+ line: node.line,
102
+ column: node.column
103
+ },
104
+ ...(node.typeParameters && node.typeParameters.length > 0 && {
105
+ typeParameters: node.typeParameters
106
+ }),
107
+ properties,
108
+ extends: node.extends || [],
109
+ checksum: `sha256:${checksum}`
110
+ };
111
+ }
112
+ }
113
+ //# sourceMappingURL=InterfaceSchemaExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InterfaceSchemaExtractor.js","sourceRoot":"","sources":["../../src/schema/InterfaceSchemaExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { InterfaceSchemaExtractor } from './InterfaceSchemaExtractor.js';
2
+ export type { InterfaceSchema, PropertySchema, ExtractOptions } from './InterfaceSchemaExtractor.js';
3
+ export { GraphSchemaExtractor } from './GraphSchemaExtractor.js';
4
+ export type { GraphSchema, NodeTypeSchema, EdgeTypeSchema, GraphExtractOptions } from './GraphSchemaExtractor.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAErG,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { InterfaceSchemaExtractor } from './InterfaceSchemaExtractor.js';
2
+ export { GraphSchemaExtractor } from './GraphSchemaExtractor.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}