circle-ir 3.1.0

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 (194) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +200 -0
  3. package/configs/sinks/code_injection.yaml +672 -0
  4. package/configs/sinks/command.yaml +917 -0
  5. package/configs/sinks/deserialization.yaml +105 -0
  6. package/configs/sinks/ldap.yaml +136 -0
  7. package/configs/sinks/nodejs.json +629 -0
  8. package/configs/sinks/path.yaml +715 -0
  9. package/configs/sinks/python.json +501 -0
  10. package/configs/sinks/rust.json +339 -0
  11. package/configs/sinks/sql.yaml +233 -0
  12. package/configs/sinks/ssrf.yaml +160 -0
  13. package/configs/sinks/xpath.yaml +121 -0
  14. package/configs/sinks/xss.yaml +727 -0
  15. package/configs/sources/db_sources.yaml +90 -0
  16. package/configs/sources/env_sources.yaml +94 -0
  17. package/configs/sources/express.json +197 -0
  18. package/configs/sources/file_sources.yaml +164 -0
  19. package/configs/sources/http_sources.yaml +379 -0
  20. package/configs/sources/io_sources.yaml +519 -0
  21. package/configs/sources/network_sources.yaml +99 -0
  22. package/configs/sources/python.json +230 -0
  23. package/configs/sources/rust.json +286 -0
  24. package/configs/sources/spring.yaml +70 -0
  25. package/dist/analysis/advisory-db.d.ts +86 -0
  26. package/dist/analysis/advisory-db.js +104 -0
  27. package/dist/analysis/advisory-db.js.map +1 -0
  28. package/dist/analysis/cargo-parser.d.ts +42 -0
  29. package/dist/analysis/cargo-parser.js +102 -0
  30. package/dist/analysis/cargo-parser.js.map +1 -0
  31. package/dist/analysis/config-loader.d.ts +37 -0
  32. package/dist/analysis/config-loader.js +1561 -0
  33. package/dist/analysis/config-loader.js.map +1 -0
  34. package/dist/analysis/constant-propagation/ast-utils.d.ts +25 -0
  35. package/dist/analysis/constant-propagation/ast-utils.js +34 -0
  36. package/dist/analysis/constant-propagation/ast-utils.js.map +1 -0
  37. package/dist/analysis/constant-propagation/evaluator.d.ts +32 -0
  38. package/dist/analysis/constant-propagation/evaluator.js +296 -0
  39. package/dist/analysis/constant-propagation/evaluator.js.map +1 -0
  40. package/dist/analysis/constant-propagation/index.d.ts +62 -0
  41. package/dist/analysis/constant-propagation/index.js +152 -0
  42. package/dist/analysis/constant-propagation/index.js.map +1 -0
  43. package/dist/analysis/constant-propagation/patterns.d.ts +8 -0
  44. package/dist/analysis/constant-propagation/patterns.js +126 -0
  45. package/dist/analysis/constant-propagation/patterns.js.map +1 -0
  46. package/dist/analysis/constant-propagation/propagator.d.ts +180 -0
  47. package/dist/analysis/constant-propagation/propagator.js +1985 -0
  48. package/dist/analysis/constant-propagation/propagator.js.map +1 -0
  49. package/dist/analysis/constant-propagation/types.d.ts +63 -0
  50. package/dist/analysis/constant-propagation/types.js +5 -0
  51. package/dist/analysis/constant-propagation/types.js.map +1 -0
  52. package/dist/analysis/constant-propagation.d.ts +9 -0
  53. package/dist/analysis/constant-propagation.js +18 -0
  54. package/dist/analysis/constant-propagation.js.map +1 -0
  55. package/dist/analysis/dependency-scanner.d.ts +79 -0
  56. package/dist/analysis/dependency-scanner.js +122 -0
  57. package/dist/analysis/dependency-scanner.js.map +1 -0
  58. package/dist/analysis/dfg-verifier.d.ts +116 -0
  59. package/dist/analysis/dfg-verifier.js +399 -0
  60. package/dist/analysis/dfg-verifier.js.map +1 -0
  61. package/dist/analysis/findings.d.ts +11 -0
  62. package/dist/analysis/findings.js +228 -0
  63. package/dist/analysis/findings.js.map +1 -0
  64. package/dist/analysis/index.d.ts +16 -0
  65. package/dist/analysis/index.js +18 -0
  66. package/dist/analysis/index.js.map +1 -0
  67. package/dist/analysis/interprocedural.d.ts +99 -0
  68. package/dist/analysis/interprocedural.js +526 -0
  69. package/dist/analysis/interprocedural.js.map +1 -0
  70. package/dist/analysis/path-finder.d.ts +133 -0
  71. package/dist/analysis/path-finder.js +354 -0
  72. package/dist/analysis/path-finder.js.map +1 -0
  73. package/dist/analysis/rules.d.ts +75 -0
  74. package/dist/analysis/rules.js +332 -0
  75. package/dist/analysis/rules.js.map +1 -0
  76. package/dist/analysis/semver.d.ts +27 -0
  77. package/dist/analysis/semver.js +127 -0
  78. package/dist/analysis/semver.js.map +1 -0
  79. package/dist/analysis/taint-matcher.d.ts +15 -0
  80. package/dist/analysis/taint-matcher.js +634 -0
  81. package/dist/analysis/taint-matcher.js.map +1 -0
  82. package/dist/analysis/taint-propagation.d.ts +67 -0
  83. package/dist/analysis/taint-propagation.js +298 -0
  84. package/dist/analysis/taint-propagation.js.map +1 -0
  85. package/dist/analysis/unresolved.d.ts +14 -0
  86. package/dist/analysis/unresolved.js +202 -0
  87. package/dist/analysis/unresolved.js.map +1 -0
  88. package/dist/analyzer.d.ts +43 -0
  89. package/dist/analyzer.js +1010 -0
  90. package/dist/analyzer.js.map +1 -0
  91. package/dist/browser/circle-ir.js +16576 -0
  92. package/dist/browser.d.ts +38 -0
  93. package/dist/browser.js +38 -0
  94. package/dist/browser.js.map +1 -0
  95. package/dist/core/circle-ir-core.cjs +13626 -0
  96. package/dist/core/circle-ir-core.d.ts +59 -0
  97. package/dist/core/circle-ir-core.js +13591 -0
  98. package/dist/core/extractors/calls.d.ts +13 -0
  99. package/dist/core/extractors/calls.js +1429 -0
  100. package/dist/core/extractors/calls.js.map +1 -0
  101. package/dist/core/extractors/cfg.d.ts +9 -0
  102. package/dist/core/extractors/cfg.js +519 -0
  103. package/dist/core/extractors/cfg.js.map +1 -0
  104. package/dist/core/extractors/dfg.d.ts +12 -0
  105. package/dist/core/extractors/dfg.js +1081 -0
  106. package/dist/core/extractors/dfg.js.map +1 -0
  107. package/dist/core/extractors/exports.d.ts +14 -0
  108. package/dist/core/extractors/exports.js +80 -0
  109. package/dist/core/extractors/exports.js.map +1 -0
  110. package/dist/core/extractors/imports.d.ts +9 -0
  111. package/dist/core/extractors/imports.js +739 -0
  112. package/dist/core/extractors/imports.js.map +1 -0
  113. package/dist/core/extractors/index.d.ts +10 -0
  114. package/dist/core/extractors/index.js +11 -0
  115. package/dist/core/extractors/index.js.map +1 -0
  116. package/dist/core/extractors/meta.d.ts +10 -0
  117. package/dist/core/extractors/meta.js +109 -0
  118. package/dist/core/extractors/meta.js.map +1 -0
  119. package/dist/core/extractors/types.d.ts +10 -0
  120. package/dist/core/extractors/types.js +1479 -0
  121. package/dist/core/extractors/types.js.map +1 -0
  122. package/dist/core/index.d.ts +5 -0
  123. package/dist/core/index.js +8 -0
  124. package/dist/core/index.js.map +1 -0
  125. package/dist/core/parser.d.ts +84 -0
  126. package/dist/core/parser.js +250 -0
  127. package/dist/core/parser.js.map +1 -0
  128. package/dist/core-lib.d.ts +59 -0
  129. package/dist/core-lib.js +62 -0
  130. package/dist/core-lib.js.map +1 -0
  131. package/dist/index.d.ts +15 -0
  132. package/dist/index.js +20 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/languages/index.d.ts +11 -0
  135. package/dist/languages/index.js +14 -0
  136. package/dist/languages/index.js.map +1 -0
  137. package/dist/languages/plugins/base.d.ts +44 -0
  138. package/dist/languages/plugins/base.js +82 -0
  139. package/dist/languages/plugins/base.js.map +1 -0
  140. package/dist/languages/plugins/index.d.ts +14 -0
  141. package/dist/languages/plugins/index.js +25 -0
  142. package/dist/languages/plugins/index.js.map +1 -0
  143. package/dist/languages/plugins/java.d.ts +49 -0
  144. package/dist/languages/plugins/java.js +402 -0
  145. package/dist/languages/plugins/java.js.map +1 -0
  146. package/dist/languages/plugins/javascript.d.ts +48 -0
  147. package/dist/languages/plugins/javascript.js +445 -0
  148. package/dist/languages/plugins/javascript.js.map +1 -0
  149. package/dist/languages/plugins/python.d.ts +47 -0
  150. package/dist/languages/plugins/python.js +480 -0
  151. package/dist/languages/plugins/python.js.map +1 -0
  152. package/dist/languages/plugins/rust.d.ts +47 -0
  153. package/dist/languages/plugins/rust.js +405 -0
  154. package/dist/languages/plugins/rust.js.map +1 -0
  155. package/dist/languages/registry.d.ts +30 -0
  156. package/dist/languages/registry.js +80 -0
  157. package/dist/languages/registry.js.map +1 -0
  158. package/dist/languages/types.d.ts +184 -0
  159. package/dist/languages/types.js +8 -0
  160. package/dist/languages/types.js.map +1 -0
  161. package/dist/resolution/cross-file.d.ts +146 -0
  162. package/dist/resolution/cross-file.js +439 -0
  163. package/dist/resolution/cross-file.js.map +1 -0
  164. package/dist/resolution/index.d.ts +12 -0
  165. package/dist/resolution/index.js +10 -0
  166. package/dist/resolution/index.js.map +1 -0
  167. package/dist/resolution/symbol-table.d.ts +136 -0
  168. package/dist/resolution/symbol-table.js +336 -0
  169. package/dist/resolution/symbol-table.js.map +1 -0
  170. package/dist/resolution/type-hierarchy.d.ts +124 -0
  171. package/dist/resolution/type-hierarchy.js +515 -0
  172. package/dist/resolution/type-hierarchy.js.map +1 -0
  173. package/dist/types/config.d.ts +45 -0
  174. package/dist/types/config.js +5 -0
  175. package/dist/types/config.js.map +1 -0
  176. package/dist/types/index.d.ts +392 -0
  177. package/dist/types/index.js +7 -0
  178. package/dist/types/index.js.map +1 -0
  179. package/dist/utils/logger.d.ts +85 -0
  180. package/dist/utils/logger.js +198 -0
  181. package/dist/utils/logger.js.map +1 -0
  182. package/dist/wasm/tree-sitter-java.wasm +0 -0
  183. package/dist/wasm/tree-sitter-javascript.wasm +0 -0
  184. package/dist/wasm/tree-sitter-python.wasm +0 -0
  185. package/dist/wasm/tree-sitter-rust.wasm +0 -0
  186. package/dist/wasm/web-tree-sitter.wasm +0 -0
  187. package/docs/SPEC.md +1021 -0
  188. package/examples/browser-example.html +610 -0
  189. package/examples/node-example.ts +215 -0
  190. package/package.json +107 -0
  191. package/wasm/tree-sitter-java.wasm +0 -0
  192. package/wasm/tree-sitter-javascript.wasm +0 -0
  193. package/wasm/tree-sitter-python.wasm +0 -0
  194. package/wasm/tree-sitter-rust.wasm +0 -0
@@ -0,0 +1,392 @@
1
+ /**
2
+ * Circle-IR 3.0 TypeScript Type Definitions
3
+ *
4
+ * These types conform to docs/SPEC.md
5
+ */
6
+ export type SupportedLanguage = "java" | "c" | "cpp" | "javascript" | "typescript" | "python" | "rust";
7
+ export interface Meta {
8
+ circle_ir: "3.0";
9
+ file: string;
10
+ language: SupportedLanguage;
11
+ loc: number;
12
+ hash: string;
13
+ package?: string;
14
+ }
15
+ export interface TypeInfo {
16
+ name: string;
17
+ kind: "class" | "interface" | "enum";
18
+ package: string | null;
19
+ extends: string | null;
20
+ implements: string[];
21
+ annotations: string[];
22
+ methods: MethodInfo[];
23
+ fields: FieldInfo[];
24
+ start_line: number;
25
+ end_line: number;
26
+ }
27
+ export interface MethodInfo {
28
+ name: string;
29
+ return_type: string | null;
30
+ parameters: ParameterInfo[];
31
+ annotations: string[];
32
+ modifiers: string[];
33
+ start_line: number;
34
+ end_line: number;
35
+ }
36
+ export interface ParameterInfo {
37
+ name: string;
38
+ type: string | null;
39
+ annotations: string[];
40
+ line?: number;
41
+ }
42
+ export interface FieldInfo {
43
+ name: string;
44
+ type: string | null;
45
+ modifiers: string[];
46
+ annotations: string[];
47
+ }
48
+ export interface CallInfo {
49
+ method_name: string;
50
+ receiver: string | null;
51
+ receiver_type?: string | null;
52
+ arguments: ArgumentInfo[];
53
+ location: {
54
+ line: number;
55
+ column: number;
56
+ };
57
+ in_method?: string | null;
58
+ is_constructor?: boolean;
59
+ resolved?: boolean;
60
+ resolution?: CallResolution;
61
+ }
62
+ export interface ArgumentInfo {
63
+ position: number;
64
+ expression: string;
65
+ variable?: string | null;
66
+ literal?: string | null;
67
+ value?: string | null;
68
+ }
69
+ export interface CallResolution {
70
+ status: "resolved" | "external_method" | "interface_method" | "reflection";
71
+ target?: string;
72
+ candidates?: string[];
73
+ }
74
+ export interface CFG {
75
+ blocks: CFGBlock[];
76
+ edges: CFGEdge[];
77
+ }
78
+ export interface CFGBlock {
79
+ id: number;
80
+ type: "entry" | "exit" | "normal" | "conditional" | "loop";
81
+ start_line: number;
82
+ end_line: number;
83
+ }
84
+ export interface CFGEdge {
85
+ from: number;
86
+ to: number;
87
+ type: "sequential" | "true" | "false" | "exception" | "back" | "break" | "continue";
88
+ }
89
+ export interface DFG {
90
+ defs: DFGDef[];
91
+ uses: DFGUse[];
92
+ chains?: DFGChain[];
93
+ }
94
+ export interface DFGDef {
95
+ id: number;
96
+ variable: string;
97
+ line: number;
98
+ column?: number;
99
+ kind: "param" | "local" | "field" | "return";
100
+ expression?: string;
101
+ }
102
+ export interface DFGUse {
103
+ id: number;
104
+ variable: string;
105
+ line: number;
106
+ column?: number;
107
+ def_id: number | null;
108
+ }
109
+ export interface DFGChain {
110
+ from_def: number;
111
+ to_def: number;
112
+ via: string;
113
+ }
114
+ export interface Taint {
115
+ sources: TaintSource[];
116
+ sinks: TaintSink[];
117
+ sanitizers?: TaintSanitizer[];
118
+ flows?: TaintFlowInfo[];
119
+ interprocedural?: InterproceduralInfo;
120
+ }
121
+ export interface InterproceduralInfo {
122
+ tainted_methods: string[];
123
+ taint_bridges: string[];
124
+ method_flows: MethodTaintFlow[];
125
+ }
126
+ export interface MethodTaintFlow {
127
+ caller: string;
128
+ callee: string;
129
+ call_line: number;
130
+ tainted_args: number[];
131
+ returns_taint: boolean;
132
+ }
133
+ export interface TaintFlowInfo {
134
+ source_line: number;
135
+ sink_line: number;
136
+ source_type: SourceType;
137
+ sink_type: SinkType;
138
+ path: TaintFlowStep[];
139
+ confidence: number;
140
+ sanitized: boolean;
141
+ }
142
+ export interface TaintFlowStep {
143
+ variable: string;
144
+ line: number;
145
+ type: 'source' | 'assignment' | 'use' | 'return' | 'field' | 'sink';
146
+ }
147
+ export type SourceType = "http_param" | "http_body" | "http_header" | "http_cookie" | "http_path" | "http_query" | "io_input" | "env_input" | "db_input" | "network_input" | "file_input" | "config_param" | "interprocedural_param" | "plugin_param" | "constructor_field";
148
+ export type SinkType = "sql_injection" | "nosql_injection" | "command_injection" | "path_traversal" | "xss" | "xxe" | "deserialization" | "ldap_injection" | "xpath_injection" | "ssrf" | "open_redirect" | "code_injection" | "log_injection" | "weak_random" | "weak_hash" | "weak_crypto" | "insecure_cookie" | "trust_boundary" | "external_taint_escape";
149
+ export type Severity = "critical" | "high" | "medium" | "low";
150
+ export interface TaintSource {
151
+ type: SourceType;
152
+ location: string;
153
+ severity: Severity;
154
+ line: number;
155
+ confidence: number;
156
+ variable?: string;
157
+ method?: string;
158
+ annotation?: string;
159
+ }
160
+ export interface TaintSink {
161
+ type: SinkType;
162
+ cwe: string;
163
+ location: string;
164
+ line: number;
165
+ confidence: number;
166
+ method?: string;
167
+ argPositions?: number[];
168
+ }
169
+ export interface TaintSanitizer {
170
+ type: string;
171
+ method: string;
172
+ line: number;
173
+ sanitizes: SinkType[];
174
+ }
175
+ export interface ImportInfo {
176
+ imported_name: string;
177
+ from_package: string | null;
178
+ alias: string | null;
179
+ is_wildcard: boolean;
180
+ line_number: number | null;
181
+ }
182
+ export interface ExportInfo {
183
+ symbol: string;
184
+ kind: "class" | "interface" | "method" | "field";
185
+ visibility: "public" | "protected" | "package";
186
+ }
187
+ export interface UnresolvedItem {
188
+ type: "virtual_dispatch" | "taint_propagation" | "reflection" | "dynamic_call";
189
+ call_id?: number;
190
+ reason: string;
191
+ context: {
192
+ code: string;
193
+ line: number;
194
+ candidates?: string[];
195
+ };
196
+ llm_question: string;
197
+ }
198
+ export interface Enriched {
199
+ functions?: EnrichedFunction[];
200
+ additional_sources?: TaintSource[];
201
+ additional_sinks?: TaintSink[];
202
+ resolved_calls?: ResolvedCall[];
203
+ llmVerification?: LLMVerificationResult;
204
+ }
205
+ export interface LLMVerificationResult {
206
+ verified: LLMVerifiedVulnerability[];
207
+ stats?: {
208
+ enrichmentTimeMs?: number;
209
+ verificationTimeMs?: number;
210
+ totalTimeMs?: number;
211
+ sourcesFound?: number;
212
+ sinksFound?: number;
213
+ vulnerabilitiesVerified?: number;
214
+ };
215
+ }
216
+ export interface LLMVerifiedVulnerability {
217
+ sourceFile: string;
218
+ sourceLine: number;
219
+ sinkLine: number;
220
+ cwe: string;
221
+ type: string;
222
+ verdict: 'TRUE_POSITIVE' | 'FALSE_POSITIVE' | 'UNCERTAIN';
223
+ confidence: number;
224
+ reasoning: string;
225
+ exploitability: 'high' | 'medium' | 'low' | 'none';
226
+ attackVector?: string;
227
+ prerequisites?: string[];
228
+ }
229
+ export interface EnrichedFunction {
230
+ method_name: string;
231
+ role: "controller" | "service" | "repository" | "utility";
232
+ risk: Severity;
233
+ trust_boundary: "entry_point" | "internal" | "external";
234
+ summary: string;
235
+ }
236
+ export interface ResolvedCall {
237
+ call_id: number;
238
+ resolved_to: string;
239
+ confidence: number;
240
+ reason: string;
241
+ }
242
+ export interface Finding {
243
+ id: string;
244
+ type: SinkType;
245
+ cwe: string;
246
+ severity: Severity;
247
+ confidence: number;
248
+ source: {
249
+ file: string;
250
+ line: number;
251
+ code: string;
252
+ };
253
+ sink: {
254
+ file: string;
255
+ line: number;
256
+ code: string;
257
+ };
258
+ path?: TaintHop[];
259
+ exploitable: boolean;
260
+ explanation: string;
261
+ remediation: string;
262
+ verification: {
263
+ graph_path_exists: boolean;
264
+ llm_verified: boolean;
265
+ llm_confidence: number;
266
+ };
267
+ }
268
+ export interface TaintHop {
269
+ file: string;
270
+ method: string;
271
+ line: number;
272
+ code: string;
273
+ variable: string;
274
+ }
275
+ export interface ProjectMeta {
276
+ name: string;
277
+ root: string;
278
+ language: SupportedLanguage;
279
+ framework?: string;
280
+ framework_version?: string;
281
+ build_tool?: "maven" | "gradle" | "ant" | "unknown";
282
+ total_files: number;
283
+ total_loc: number;
284
+ analyzed_at: string;
285
+ }
286
+ export interface CrossFileCall {
287
+ id: string;
288
+ from: {
289
+ file: string;
290
+ method: string;
291
+ line: number;
292
+ };
293
+ to: {
294
+ file: string;
295
+ method: string;
296
+ line: number;
297
+ };
298
+ args_mapping: ArgMapping[];
299
+ resolved: boolean;
300
+ }
301
+ export interface ArgMapping {
302
+ caller_arg: number;
303
+ callee_param: number;
304
+ taint_propagates: boolean;
305
+ }
306
+ export interface TypeHierarchy {
307
+ classes: Record<string, ClassHierarchyInfo>;
308
+ interfaces: Record<string, InterfaceHierarchyInfo>;
309
+ }
310
+ export interface ClassHierarchyInfo {
311
+ file: string;
312
+ extends: string | null;
313
+ implements: string[];
314
+ subclasses: string[];
315
+ }
316
+ export interface InterfaceHierarchyInfo {
317
+ file: string;
318
+ extends: string[];
319
+ implementations: string[];
320
+ }
321
+ export interface TaintPath {
322
+ id: string;
323
+ source: {
324
+ file: string;
325
+ line: number;
326
+ type: SourceType;
327
+ code: string;
328
+ };
329
+ sink: {
330
+ file: string;
331
+ line: number;
332
+ type: SinkType;
333
+ cwe: string;
334
+ code: string;
335
+ };
336
+ hops: TaintHop[];
337
+ sanitizers_in_path: string[];
338
+ path_exists: boolean;
339
+ confidence: number;
340
+ }
341
+ export interface ProjectAnalysis {
342
+ meta: ProjectMeta;
343
+ files: FileAnalysis[];
344
+ type_hierarchy: TypeHierarchy;
345
+ cross_file_calls: CrossFileCall[];
346
+ taint_paths: TaintPath[];
347
+ findings: Finding[];
348
+ }
349
+ export interface FileAnalysis {
350
+ file: string;
351
+ analysis: CircleIR;
352
+ }
353
+ export interface CircleIR {
354
+ meta: Meta;
355
+ types: TypeInfo[];
356
+ calls: CallInfo[];
357
+ cfg: CFG;
358
+ dfg: DFG;
359
+ taint: Taint;
360
+ imports: ImportInfo[];
361
+ exports: ExportInfo[];
362
+ unresolved: UnresolvedItem[];
363
+ enriched: Enriched;
364
+ }
365
+ export interface AnalysisResponse {
366
+ success: boolean;
367
+ analysis: {
368
+ sources: TaintSource[];
369
+ sinks: TaintSink[];
370
+ vulnerabilities: Vulnerability[];
371
+ };
372
+ meta: {
373
+ parseTimeMs: number;
374
+ analysisTimeMs: number;
375
+ totalTimeMs: number;
376
+ };
377
+ }
378
+ export interface Vulnerability {
379
+ type: SinkType;
380
+ cwe: string;
381
+ severity: Severity;
382
+ source: {
383
+ line: number;
384
+ type: SourceType;
385
+ };
386
+ sink: {
387
+ line: number;
388
+ type: SinkType;
389
+ };
390
+ confidence: number;
391
+ path?: string[];
392
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Circle-IR 3.0 TypeScript Type Definitions
3
+ *
4
+ * These types conform to docs/SPEC.md
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Centralized logging module using pino.
3
+ *
4
+ * Usage:
5
+ * import { logger } from './utils/logger.js';
6
+ * logger.info('Processing file', { file: 'test.java' });
7
+ * logger.error('Failed to parse', { error: err.message });
8
+ *
9
+ * Log Levels (in order of severity):
10
+ * - trace: Very detailed debugging
11
+ * - debug: Debugging information
12
+ * - info: General information (default for CLI)
13
+ * - warn: Warnings
14
+ * - error: Errors
15
+ * - fatal: Fatal errors
16
+ * - silent: No logging
17
+ *
18
+ * Configuration:
19
+ * - Set LOG_LEVEL env var to change level
20
+ * - Set LOG_FORMAT=json for JSON output (default in non-TTY)
21
+ * - Set LOG_FORMAT=pretty for human-readable output
22
+ */
23
+ import pino, { Logger } from 'pino';
24
+ export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal' | 'silent';
25
+ export interface LoggerConfig {
26
+ level?: LogLevel;
27
+ pretty?: boolean;
28
+ name?: string;
29
+ }
30
+ /**
31
+ * Configure the logger. Should be called early in application startup.
32
+ * Subsequent calls will reconfigure the logger.
33
+ */
34
+ export declare function configureLogger(config: Partial<LoggerConfig>): void;
35
+ /**
36
+ * Set the log level dynamically
37
+ */
38
+ export declare function setLogLevel(level: LogLevel): void;
39
+ /**
40
+ * Get the current log level
41
+ */
42
+ export declare function getLogLevel(): LogLevel;
43
+ /**
44
+ * Create a child logger with additional context
45
+ */
46
+ export declare function createChildLogger(bindings: Record<string, unknown>): Logger;
47
+ /**
48
+ * The main logger instance.
49
+ * Use this for all logging throughout the application.
50
+ */
51
+ export declare const logger: {
52
+ /**
53
+ * Log at trace level (most verbose)
54
+ */
55
+ trace: (msg: string, obj?: Record<string, unknown>) => void;
56
+ /**
57
+ * Log at debug level
58
+ */
59
+ debug: (msg: string, obj?: Record<string, unknown>) => void;
60
+ /**
61
+ * Log at info level (default)
62
+ */
63
+ info: (msg: string, obj?: Record<string, unknown>) => void;
64
+ /**
65
+ * Log at warn level
66
+ */
67
+ warn: (msg: string, obj?: Record<string, unknown>) => void;
68
+ /**
69
+ * Log at error level
70
+ */
71
+ error: (msg: string, obj?: Record<string, unknown>) => void;
72
+ /**
73
+ * Log at fatal level (most severe)
74
+ */
75
+ fatal: (msg: string, obj?: Record<string, unknown>) => void;
76
+ /**
77
+ * Create a child logger with additional context
78
+ */
79
+ child: (bindings: Record<string, unknown>) => pino.Logger;
80
+ /**
81
+ * Check if a level is enabled
82
+ */
83
+ isLevelEnabled: (level: LogLevel) => boolean;
84
+ };
85
+ export type { Logger } from 'pino';
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Centralized logging module using pino.
3
+ *
4
+ * Usage:
5
+ * import { logger } from './utils/logger.js';
6
+ * logger.info('Processing file', { file: 'test.java' });
7
+ * logger.error('Failed to parse', { error: err.message });
8
+ *
9
+ * Log Levels (in order of severity):
10
+ * - trace: Very detailed debugging
11
+ * - debug: Debugging information
12
+ * - info: General information (default for CLI)
13
+ * - warn: Warnings
14
+ * - error: Errors
15
+ * - fatal: Fatal errors
16
+ * - silent: No logging
17
+ *
18
+ * Configuration:
19
+ * - Set LOG_LEVEL env var to change level
20
+ * - Set LOG_FORMAT=json for JSON output (default in non-TTY)
21
+ * - Set LOG_FORMAT=pretty for human-readable output
22
+ */
23
+ import pino from 'pino';
24
+ // Default configuration
25
+ const DEFAULT_CONFIG = {
26
+ level: process.env.LOG_LEVEL || 'info',
27
+ pretty: process.env.LOG_FORMAT === 'pretty' || (process.stdout.isTTY && process.env.LOG_FORMAT !== 'json'),
28
+ name: 'circle-ir',
29
+ };
30
+ let currentConfig = { ...DEFAULT_CONFIG };
31
+ let loggerInstance = null;
32
+ /**
33
+ * Create pino logger options from config
34
+ */
35
+ function createLoggerOptions(config) {
36
+ const options = {
37
+ name: config.name,
38
+ level: config.level || 'info',
39
+ };
40
+ // Add pretty printing for TTY or when explicitly requested
41
+ if (config.pretty) {
42
+ options.transport = {
43
+ target: 'pino-pretty',
44
+ options: {
45
+ colorize: true,
46
+ translateTime: 'SYS:standard',
47
+ ignore: 'pid,hostname',
48
+ messageFormat: '{msg}',
49
+ singleLine: true,
50
+ },
51
+ };
52
+ }
53
+ return options;
54
+ }
55
+ /**
56
+ * Get the singleton logger instance
57
+ */
58
+ function getLogger() {
59
+ if (!loggerInstance) {
60
+ const options = createLoggerOptions(currentConfig);
61
+ // Write to stderr to avoid polluting stdout for CLI tools
62
+ if (options.transport) {
63
+ // When using transport (pino-pretty), specify destination in options
64
+ options.transport.options = {
65
+ ...options.transport.options,
66
+ destination: 2, // stderr file descriptor
67
+ };
68
+ loggerInstance = pino(options);
69
+ }
70
+ else {
71
+ loggerInstance = pino(options, process.stderr);
72
+ }
73
+ }
74
+ return loggerInstance;
75
+ }
76
+ /**
77
+ * Configure the logger. Should be called early in application startup.
78
+ * Subsequent calls will reconfigure the logger.
79
+ */
80
+ export function configureLogger(config) {
81
+ currentConfig = { ...currentConfig, ...config };
82
+ const options = createLoggerOptions(currentConfig);
83
+ // Write to stderr to avoid polluting stdout for CLI tools
84
+ if (options.transport) {
85
+ options.transport.options = {
86
+ ...options.transport.options,
87
+ destination: 2, // stderr file descriptor
88
+ };
89
+ loggerInstance = pino(options);
90
+ }
91
+ else {
92
+ loggerInstance = pino(options, process.stderr);
93
+ }
94
+ }
95
+ /**
96
+ * Set the log level dynamically
97
+ */
98
+ export function setLogLevel(level) {
99
+ currentConfig.level = level;
100
+ if (loggerInstance) {
101
+ loggerInstance.level = level;
102
+ }
103
+ }
104
+ /**
105
+ * Get the current log level
106
+ */
107
+ export function getLogLevel() {
108
+ return currentConfig.level || 'info';
109
+ }
110
+ /**
111
+ * Create a child logger with additional context
112
+ */
113
+ export function createChildLogger(bindings) {
114
+ return getLogger().child(bindings);
115
+ }
116
+ /**
117
+ * The main logger instance.
118
+ * Use this for all logging throughout the application.
119
+ */
120
+ export const logger = {
121
+ /**
122
+ * Log at trace level (most verbose)
123
+ */
124
+ trace: (msg, obj) => {
125
+ if (obj) {
126
+ getLogger().trace(obj, msg);
127
+ }
128
+ else {
129
+ getLogger().trace(msg);
130
+ }
131
+ },
132
+ /**
133
+ * Log at debug level
134
+ */
135
+ debug: (msg, obj) => {
136
+ if (obj) {
137
+ getLogger().debug(obj, msg);
138
+ }
139
+ else {
140
+ getLogger().debug(msg);
141
+ }
142
+ },
143
+ /**
144
+ * Log at info level (default)
145
+ */
146
+ info: (msg, obj) => {
147
+ if (obj) {
148
+ getLogger().info(obj, msg);
149
+ }
150
+ else {
151
+ getLogger().info(msg);
152
+ }
153
+ },
154
+ /**
155
+ * Log at warn level
156
+ */
157
+ warn: (msg, obj) => {
158
+ if (obj) {
159
+ getLogger().warn(obj, msg);
160
+ }
161
+ else {
162
+ getLogger().warn(msg);
163
+ }
164
+ },
165
+ /**
166
+ * Log at error level
167
+ */
168
+ error: (msg, obj) => {
169
+ if (obj) {
170
+ getLogger().error(obj, msg);
171
+ }
172
+ else {
173
+ getLogger().error(msg);
174
+ }
175
+ },
176
+ /**
177
+ * Log at fatal level (most severe)
178
+ */
179
+ fatal: (msg, obj) => {
180
+ if (obj) {
181
+ getLogger().fatal(obj, msg);
182
+ }
183
+ else {
184
+ getLogger().fatal(msg);
185
+ }
186
+ },
187
+ /**
188
+ * Create a child logger with additional context
189
+ */
190
+ child: (bindings) => createChildLogger(bindings),
191
+ /**
192
+ * Check if a level is enabled
193
+ */
194
+ isLevelEnabled: (level) => {
195
+ return getLogger().isLevelEnabled(level);
196
+ },
197
+ };
198
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
Binary file
Binary file
Binary file