acidtest 0.7.0 → 1.0.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 (84) hide show
  1. package/.github/workflows/acidtest-pr-comment.yml +219 -0
  2. package/README.md +155 -30
  3. package/dist/analysis/dataflow-graph.d.ts +19 -0
  4. package/dist/analysis/dataflow-graph.d.ts.map +1 -0
  5. package/dist/analysis/dataflow-graph.js +365 -0
  6. package/dist/analysis/dataflow-graph.js.map +1 -0
  7. package/dist/analysis/dataflow-types.d.ts +86 -0
  8. package/dist/analysis/dataflow-types.d.ts.map +1 -0
  9. package/dist/analysis/dataflow-types.js +8 -0
  10. package/dist/analysis/dataflow-types.js.map +1 -0
  11. package/dist/analysis/dataflow.test.d.ts +7 -0
  12. package/dist/analysis/dataflow.test.d.ts.map +1 -0
  13. package/dist/analysis/dataflow.test.js +257 -0
  14. package/dist/analysis/dataflow.test.js.map +1 -0
  15. package/dist/analysis/taint-propagation.d.ts +30 -0
  16. package/dist/analysis/taint-propagation.d.ts.map +1 -0
  17. package/dist/analysis/taint-propagation.js +207 -0
  18. package/dist/analysis/taint-propagation.js.map +1 -0
  19. package/dist/index.js +1 -1
  20. package/dist/layers/code.d.ts +1 -1
  21. package/dist/layers/code.d.ts.map +1 -1
  22. package/dist/layers/code.js +282 -3
  23. package/dist/layers/code.js.map +1 -1
  24. package/dist/layers/code.test.js +196 -0
  25. package/dist/layers/code.test.js.map +1 -1
  26. package/dist/layers/crossref.d.ts.map +1 -1
  27. package/dist/layers/crossref.js +6 -3
  28. package/dist/layers/crossref.js.map +1 -1
  29. package/dist/layers/dataflow.d.ts +29 -0
  30. package/dist/layers/dataflow.d.ts.map +1 -0
  31. package/dist/layers/dataflow.js +217 -0
  32. package/dist/layers/dataflow.js.map +1 -0
  33. package/dist/layers/permissions.d.ts.map +1 -1
  34. package/dist/layers/permissions.js +2 -1
  35. package/dist/layers/permissions.js.map +1 -1
  36. package/dist/mcp-server.js +1 -1
  37. package/dist/parsers/parser-interface.d.ts +31 -0
  38. package/dist/parsers/parser-interface.d.ts.map +1 -0
  39. package/dist/parsers/parser-interface.js +6 -0
  40. package/dist/parsers/parser-interface.js.map +1 -0
  41. package/dist/parsers/parsers.test.d.ts +5 -0
  42. package/dist/parsers/parsers.test.d.ts.map +1 -0
  43. package/dist/parsers/parsers.test.js +111 -0
  44. package/dist/parsers/parsers.test.js.map +1 -0
  45. package/dist/parsers/python-parser.d.ts +18 -0
  46. package/dist/parsers/python-parser.d.ts.map +1 -0
  47. package/dist/parsers/python-parser.js +120 -0
  48. package/dist/parsers/python-parser.js.map +1 -0
  49. package/dist/parsers/typescript-parser.d.ts +16 -0
  50. package/dist/parsers/typescript-parser.d.ts.map +1 -0
  51. package/dist/parsers/typescript-parser.js +112 -0
  52. package/dist/parsers/typescript-parser.js.map +1 -0
  53. package/dist/patterns/dangerous-calls-python.json +220 -0
  54. package/dist/patterns/dangerous-imports-python.json +256 -0
  55. package/dist/patterns/insecure-crypto.json +163 -0
  56. package/dist/patterns/prototype-pollution.json +72 -0
  57. package/dist/patterns/python-deserialization.json +94 -0
  58. package/dist/patterns/regex-dos.json +50 -0
  59. package/dist/patterns/sql-injection.json +91 -0
  60. package/dist/patterns/xss-injection.json +115 -0
  61. package/dist/scanner.d.ts +1 -1
  62. package/dist/scanner.d.ts.map +1 -1
  63. package/dist/scanner.js +51 -4
  64. package/dist/scanner.js.map +1 -1
  65. package/dist/schemas/pattern.schema.json +139 -0
  66. package/dist/test-corpus/validate-corpus.d.ts +7 -0
  67. package/dist/test-corpus/validate-corpus.d.ts.map +1 -0
  68. package/dist/test-corpus/validate-corpus.js +341 -0
  69. package/dist/test-corpus/validate-corpus.js.map +1 -0
  70. package/dist/types.d.ts +2 -1
  71. package/dist/types.d.ts.map +1 -1
  72. package/dist/validation/pattern-validator.d.ts +34 -0
  73. package/dist/validation/pattern-validator.d.ts.map +1 -0
  74. package/dist/validation/pattern-validator.js +168 -0
  75. package/dist/validation/pattern-validator.js.map +1 -0
  76. package/dist/validation/pattern-validator.test.d.ts +5 -0
  77. package/dist/validation/pattern-validator.test.d.ts.map +1 -0
  78. package/dist/validation/pattern-validator.test.js +222 -0
  79. package/dist/validation/pattern-validator.test.js.map +1 -0
  80. package/dist/validation/validate-patterns.d.ts +6 -0
  81. package/dist/validation/validate-patterns.d.ts.map +1 -0
  82. package/dist/validation/validate-patterns.js +55 -0
  83. package/dist/validation/validate-patterns.js.map +1 -0
  84. package/package.json +11 -4
@@ -0,0 +1,365 @@
1
+ /**
2
+ * Dataflow Graph Construction
3
+ *
4
+ * Builds a dataflow graph from TypeScript AST by tracking:
5
+ * - Variable declarations and assignments
6
+ * - Property access (read/write)
7
+ * - Function calls and arguments
8
+ * - Template literals
9
+ * - Object construction
10
+ *
11
+ * Phase 3.1: Dataflow Implementation
12
+ */
13
+ import * as ts from 'typescript';
14
+ /**
15
+ * Build dataflow graph from TypeScript source code
16
+ */
17
+ export function buildDataFlowGraph(sourceFile) {
18
+ const builder = new DataFlowGraphBuilder();
19
+ builder.visitNode(sourceFile);
20
+ return builder.getGraph();
21
+ }
22
+ /**
23
+ * Internal graph builder with visitor pattern
24
+ */
25
+ class DataFlowGraphBuilder {
26
+ nodes = [];
27
+ edges = [];
28
+ nodeIdCounter = 0;
29
+ variableMap = new Map(); // variable name → node ID
30
+ sourceNodeIds = [];
31
+ sinkNodeIds = [];
32
+ /**
33
+ * Get the constructed graph
34
+ */
35
+ getGraph() {
36
+ return {
37
+ nodes: this.nodes,
38
+ edges: this.edges,
39
+ sourceNodeIds: this.sourceNodeIds,
40
+ sinkNodeIds: this.sinkNodeIds,
41
+ };
42
+ }
43
+ /**
44
+ * Create a unique node ID
45
+ */
46
+ createNodeId(prefix, line, column) {
47
+ return `${prefix}_${line}_${column}_${this.nodeIdCounter++}`;
48
+ }
49
+ /**
50
+ * Add a node to the graph
51
+ */
52
+ addNode(type, identifier, line, column, metadata) {
53
+ const id = this.createNodeId(type, line, column);
54
+ this.nodes.push({
55
+ id,
56
+ type,
57
+ identifier,
58
+ line,
59
+ column,
60
+ metadata,
61
+ });
62
+ return id;
63
+ }
64
+ /**
65
+ * Add an edge to the graph
66
+ */
67
+ addEdge(from, to, type, label) {
68
+ this.edges.push({ from, to, type, label });
69
+ }
70
+ /**
71
+ * Visit AST node and build graph
72
+ */
73
+ visitNode(node) {
74
+ // Variable declarations: const a = b
75
+ if (ts.isVariableDeclaration(node)) {
76
+ this.visitVariableDeclaration(node);
77
+ }
78
+ // Binary expressions: a = b
79
+ if (ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
80
+ this.visitAssignment(node);
81
+ }
82
+ // Property access: obj.prop
83
+ if (ts.isPropertyAccessExpression(node)) {
84
+ this.visitPropertyAccess(node);
85
+ }
86
+ // Call expressions: func(arg)
87
+ if (ts.isCallExpression(node)) {
88
+ this.visitCallExpression(node);
89
+ }
90
+ // Template literals: `${expr}`
91
+ if (ts.isTemplateExpression(node)) {
92
+ this.visitTemplateExpression(node);
93
+ }
94
+ // Object literals: { key: value }
95
+ if (ts.isObjectLiteralExpression(node)) {
96
+ this.visitObjectLiteral(node);
97
+ }
98
+ // Recurse into children
99
+ ts.forEachChild(node, (child) => this.visitNode(child));
100
+ }
101
+ /**
102
+ * Handle variable declaration: const a = b
103
+ */
104
+ visitVariableDeclaration(node) {
105
+ const varName = node.name.getText();
106
+ const line = this.getLine(node);
107
+ const column = this.getColumn(node);
108
+ // Create node for the variable
109
+ const varNodeId = this.addNode('variable', varName, line, column);
110
+ this.variableMap.set(varName, varNodeId);
111
+ // If initializer exists, create dataflow edge
112
+ if (node.initializer) {
113
+ this.handleInitializer(varNodeId, node.initializer);
114
+ }
115
+ }
116
+ /**
117
+ * Handle assignment: a = b
118
+ */
119
+ visitAssignment(node) {
120
+ const left = node.left;
121
+ const right = node.right;
122
+ // Get or create node for left side
123
+ let leftNodeId;
124
+ if (ts.isIdentifier(left)) {
125
+ const varName = left.getText();
126
+ leftNodeId = this.variableMap.get(varName);
127
+ if (!leftNodeId) {
128
+ leftNodeId = this.addNode('variable', varName, this.getLine(left), this.getColumn(left));
129
+ this.variableMap.set(varName, leftNodeId);
130
+ }
131
+ }
132
+ else if (ts.isPropertyAccessExpression(left)) {
133
+ // Handle property assignment: obj.prop = value
134
+ leftNodeId = this.addNode('property', left.getText(), this.getLine(left), this.getColumn(left));
135
+ }
136
+ if (leftNodeId) {
137
+ this.handleInitializer(leftNodeId, right);
138
+ }
139
+ }
140
+ /**
141
+ * Handle property access: obj.prop
142
+ */
143
+ visitPropertyAccess(node) {
144
+ const propName = node.getText();
145
+ const line = this.getLine(node);
146
+ const column = this.getColumn(node);
147
+ // Check for process.env (taint source)
148
+ if (propName.startsWith('process.env.') || propName.includes('process.env[')) {
149
+ const sourceNodeId = this.addNode('source', propName, line, column, {
150
+ sourceType: 'env-var',
151
+ envVarName: propName.replace(/^process\.env\./, '').replace(/process\.env\[['"](.+)['"]\]/, '$1'),
152
+ });
153
+ this.sourceNodeIds.push(sourceNodeId);
154
+ }
155
+ }
156
+ /**
157
+ * Handle call expression: func(arg1, arg2)
158
+ */
159
+ visitCallExpression(node) {
160
+ const funcName = this.getFunctionName(node);
161
+ const line = this.getLine(node);
162
+ const column = this.getColumn(node);
163
+ // Check if this is a taint sink
164
+ if (this.isSinkFunction(funcName)) {
165
+ const sinkNodeId = this.addNode('sink', funcName, line, column, {
166
+ sinkType: this.getSinkType(funcName),
167
+ functionName: funcName,
168
+ });
169
+ this.sinkNodeIds.push(sinkNodeId);
170
+ // Create edges from arguments to sink
171
+ node.arguments.forEach((arg, index) => {
172
+ const argNodeId = this.getOrCreateNodeForExpression(arg);
173
+ if (argNodeId) {
174
+ this.addEdge(argNodeId, sinkNodeId, 'function-call', `arg${index}`);
175
+ }
176
+ });
177
+ }
178
+ }
179
+ /**
180
+ * Handle template expression: `${expr}`
181
+ */
182
+ visitTemplateExpression(node) {
183
+ const line = this.getLine(node);
184
+ const column = this.getColumn(node);
185
+ const templateNodeId = this.addNode('operation', 'template-literal', line, column);
186
+ // Create edges from each template span expression
187
+ node.templateSpans.forEach((span) => {
188
+ const exprNodeId = this.getOrCreateNodeForExpression(span.expression);
189
+ if (exprNodeId) {
190
+ this.addEdge(exprNodeId, templateNodeId, 'template-literal');
191
+ }
192
+ });
193
+ }
194
+ /**
195
+ * Handle object literal: { key: value }
196
+ * Note: We don't create the object node here, as it's created in getOrCreateNodeForExpression
197
+ * This method just ensures we visit the properties
198
+ */
199
+ visitObjectLiteral(node) {
200
+ // Properties will be visited through recursive forEachChild
201
+ }
202
+ /**
203
+ * Handle initializer expression (right side of assignment)
204
+ */
205
+ handleInitializer(targetNodeId, initializer) {
206
+ const sourceNodeId = this.getOrCreateNodeForExpression(initializer);
207
+ if (sourceNodeId) {
208
+ this.addEdge(sourceNodeId, targetNodeId, 'assignment');
209
+ }
210
+ }
211
+ /**
212
+ * Get or create node for an expression
213
+ */
214
+ getOrCreateNodeForExpression(expr) {
215
+ // Identifier: variable reference
216
+ if (ts.isIdentifier(expr)) {
217
+ const varName = expr.getText();
218
+ let nodeId = this.variableMap.get(varName);
219
+ if (!nodeId) {
220
+ nodeId = this.addNode('variable', varName, this.getLine(expr), this.getColumn(expr));
221
+ this.variableMap.set(varName, nodeId);
222
+ }
223
+ return nodeId;
224
+ }
225
+ // Property access: process.env.X, obj.prop
226
+ if (ts.isPropertyAccessExpression(expr)) {
227
+ const propName = expr.getText();
228
+ const line = this.getLine(expr);
229
+ const column = this.getColumn(expr);
230
+ // Check for process.env (taint source)
231
+ if (propName.startsWith('process.env.') || propName.includes('process.env[')) {
232
+ const sourceNodeId = this.addNode('source', propName, line, column, {
233
+ sourceType: 'env-var',
234
+ envVarName: propName.replace(/^process\.env\./, '').replace(/process\.env\[['"](.+)['"]\]/, '$1'),
235
+ });
236
+ this.sourceNodeIds.push(sourceNodeId);
237
+ return sourceNodeId;
238
+ }
239
+ // Property read: obj.prop (create edge from obj to prop)
240
+ const propNodeId = this.addNode('property', propName, line, column);
241
+ // Get the object being accessed
242
+ const objExpr = expr.expression;
243
+ if (ts.isIdentifier(objExpr)) {
244
+ const objName = objExpr.getText();
245
+ const objNodeId = this.variableMap.get(objName);
246
+ if (objNodeId) {
247
+ this.addEdge(objNodeId, propNodeId, 'property-read', expr.name.getText());
248
+ }
249
+ }
250
+ return propNodeId;
251
+ }
252
+ // Template literal
253
+ if (ts.isTemplateExpression(expr) || ts.isNoSubstitutionTemplateLiteral(expr)) {
254
+ const line = this.getLine(expr);
255
+ const column = this.getColumn(expr);
256
+ return this.addNode('operation', 'template-literal', line, column);
257
+ }
258
+ // Object literal
259
+ if (ts.isObjectLiteralExpression(expr)) {
260
+ const line = this.getLine(expr);
261
+ const column = this.getColumn(expr);
262
+ const objNodeId = this.addNode('operation', 'object-literal', line, column);
263
+ // Create edges from property values to object
264
+ expr.properties.forEach((prop) => {
265
+ if (ts.isPropertyAssignment(prop)) {
266
+ const valueNodeId = this.getOrCreateNodeForExpression(prop.initializer);
267
+ if (valueNodeId) {
268
+ const propName = prop.name.getText();
269
+ this.addEdge(valueNodeId, objNodeId, 'object-construction', propName);
270
+ }
271
+ }
272
+ });
273
+ return objNodeId;
274
+ }
275
+ // Call expression
276
+ if (ts.isCallExpression(expr)) {
277
+ const funcName = this.getFunctionName(expr);
278
+ const line = this.getLine(expr);
279
+ const column = this.getColumn(expr);
280
+ // If it's a source (e.g., fetch response), create source node
281
+ if (funcName === 'fetch' || funcName.includes('.json') || funcName.includes('.text')) {
282
+ const sourceNodeId = this.addNode('source', funcName, line, column, {
283
+ sourceType: 'network-response',
284
+ });
285
+ this.sourceNodeIds.push(sourceNodeId);
286
+ return sourceNodeId;
287
+ }
288
+ return this.addNode('operation', funcName, line, column);
289
+ }
290
+ return undefined;
291
+ }
292
+ /**
293
+ * Check if function is a taint sink
294
+ */
295
+ isSinkFunction(funcName) {
296
+ const sinks = [
297
+ // Command execution
298
+ 'exec', 'execSync', 'spawn', 'spawnSync', 'execFile', 'execFileSync',
299
+ // Code evaluation
300
+ 'eval', 'Function',
301
+ // Network (only fetch for body/URL, not all network calls)
302
+ 'fetch',
303
+ // File system
304
+ 'writeFile', 'writeFileSync', 'appendFile', 'appendFileSync',
305
+ // Dynamic imports
306
+ 'require', 'import',
307
+ ];
308
+ return sinks.some((sink) => funcName === sink || funcName.endsWith(`.${sink}`));
309
+ }
310
+ /**
311
+ * Get sink type based on function name
312
+ */
313
+ getSinkType(funcName) {
314
+ if (funcName.includes('exec') || funcName.includes('spawn')) {
315
+ return 'command-execution';
316
+ }
317
+ if (funcName === 'eval' || funcName === 'Function') {
318
+ return 'code-evaluation';
319
+ }
320
+ if (funcName === 'fetch' || funcName.includes('axios') || funcName.includes('http')) {
321
+ return 'network-request';
322
+ }
323
+ if (funcName.includes('write') || funcName.includes('append')) {
324
+ return 'file-write';
325
+ }
326
+ if (funcName === 'require' || funcName === 'import') {
327
+ return 'dynamic-import';
328
+ }
329
+ return 'unknown';
330
+ }
331
+ /**
332
+ * Get function name from call expression
333
+ */
334
+ getFunctionName(node) {
335
+ const expr = node.expression;
336
+ if (ts.isIdentifier(expr)) {
337
+ return expr.getText();
338
+ }
339
+ if (ts.isPropertyAccessExpression(expr)) {
340
+ return expr.name.getText();
341
+ }
342
+ return expr.getText();
343
+ }
344
+ /**
345
+ * Get line number for node
346
+ */
347
+ getLine(node) {
348
+ const sourceFile = node.getSourceFile();
349
+ if (!sourceFile)
350
+ return 0;
351
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
352
+ return line + 1; // Convert to 1-indexed
353
+ }
354
+ /**
355
+ * Get column number for node
356
+ */
357
+ getColumn(node) {
358
+ const sourceFile = node.getSourceFile();
359
+ if (!sourceFile)
360
+ return 0;
361
+ const { character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
362
+ return character;
363
+ }
364
+ }
365
+ //# sourceMappingURL=dataflow-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataflow-graph.js","sourceRoot":"","sources":["../../src/analysis/dataflow-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Type definitions for dataflow/taint analysis
3
+ *
4
+ * Phase 3.1: Dataflow Implementation
5
+ * v1.0.0 Scope: Single-file, intraprocedural analysis
6
+ */
7
+ /**
8
+ * Dataflow graph representing data dependencies in code
9
+ */
10
+ export interface DataFlowGraph {
11
+ nodes: DataFlowNode[];
12
+ edges: DataFlowEdge[];
13
+ sourceNodeIds: string[];
14
+ sinkNodeIds: string[];
15
+ }
16
+ /**
17
+ * Node in the dataflow graph
18
+ */
19
+ export interface DataFlowNode {
20
+ id: string;
21
+ type: NodeType;
22
+ identifier?: string;
23
+ line: number;
24
+ column: number;
25
+ scope?: string;
26
+ isTainted?: boolean;
27
+ metadata?: {
28
+ astNodeKind?: string;
29
+ [key: string]: any;
30
+ };
31
+ }
32
+ export type NodeType = 'source' | 'sink' | 'variable' | 'operation' | 'parameter' | 'property';
33
+ /**
34
+ * Edge in the dataflow graph (data dependency)
35
+ */
36
+ export interface DataFlowEdge {
37
+ from: string;
38
+ to: string;
39
+ type: EdgeType;
40
+ label?: string;
41
+ }
42
+ export type EdgeType = 'assignment' | 'property-read' | 'property-write' | 'function-call' | 'function-return' | 'template-literal' | 'object-construction';
43
+ /**
44
+ * Taint source (where untrusted/sensitive data originates)
45
+ */
46
+ export interface TaintSource {
47
+ nodeId: string;
48
+ type: TaintSourceType;
49
+ identifier: string;
50
+ line: number;
51
+ column: number;
52
+ metadata?: {
53
+ envVarName?: string;
54
+ paramName?: string;
55
+ apiUrl?: string;
56
+ };
57
+ }
58
+ export type TaintSourceType = 'env-var' | 'user-input' | 'network-response' | 'file-input';
59
+ /**
60
+ * Taint sink (where tainted data causes security issues)
61
+ */
62
+ export interface TaintSink {
63
+ nodeId: string;
64
+ type: TaintSinkType;
65
+ function: string;
66
+ line: number;
67
+ column: number;
68
+ argumentIndex?: number;
69
+ metadata?: {
70
+ url?: string;
71
+ filePath?: string;
72
+ };
73
+ }
74
+ export type TaintSinkType = 'command-execution' | 'code-evaluation' | 'network-request' | 'file-write' | 'dynamic-import';
75
+ /**
76
+ * Dataflow path from source to sink
77
+ */
78
+ export interface DataFlowPath {
79
+ source: TaintSource;
80
+ sink: TaintSink;
81
+ path: DataFlowNode[];
82
+ confidence: ConfidenceLevel;
83
+ severity: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW' | 'INFO';
84
+ }
85
+ export type ConfidenceLevel = 'high' | 'medium' | 'low';
86
+ //# sourceMappingURL=dataflow-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataflow-types.d.ts","sourceRoot":"","sources":["../../src/analysis/dataflow-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE;QACT,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,MAAM,MAAM,QAAQ,GAChB,QAAQ,GACR,MAAM,GACN,UAAU,GACV,WAAW,GACX,WAAW,GACX,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,iBAAiB,GACjB,kBAAkB,GAClB,qBAAqB,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,YAAY,GACZ,kBAAkB,GAClB,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE;QACT,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,MAAM,aAAa,GACrB,mBAAmB,GACnB,iBAAiB,GACjB,iBAAiB,GACjB,YAAY,GACZ,gBAAgB,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,UAAU,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CAC3D;AAED,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,QAAQ,GACR,KAAK,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Type definitions for dataflow/taint analysis
3
+ *
4
+ * Phase 3.1: Dataflow Implementation
5
+ * v1.0.0 Scope: Single-file, intraprocedural analysis
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=dataflow-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataflow-types.js","sourceRoot":"","sources":["../../src/analysis/dataflow-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Tests for dataflow/taint analysis
3
+ *
4
+ * Phase 3.1: Dataflow Implementation
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=dataflow.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataflow.test.d.ts","sourceRoot":"","sources":["../../src/analysis/dataflow.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}