driftdetect-core 0.1.2 → 0.3.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.
- package/dist/boundaries/boundary-store.d.ts +92 -0
- package/dist/boundaries/boundary-store.d.ts.map +1 -0
- package/dist/boundaries/boundary-store.js +458 -0
- package/dist/boundaries/boundary-store.js.map +1 -0
- package/dist/boundaries/index.d.ts +8 -0
- package/dist/boundaries/index.d.ts.map +1 -0
- package/dist/boundaries/index.js +8 -0
- package/dist/boundaries/index.js.map +1 -0
- package/dist/boundaries/types.d.ts +237 -0
- package/dist/boundaries/types.d.ts.map +1 -0
- package/dist/boundaries/types.js +8 -0
- package/dist/boundaries/types.js.map +1 -0
- package/dist/dna/ai-context.d.ts +10 -0
- package/dist/dna/ai-context.d.ts.map +1 -0
- package/dist/dna/ai-context.js +46 -0
- package/dist/dna/ai-context.js.map +1 -0
- package/dist/dna/dna-analyzer.d.ts +34 -0
- package/dist/dna/dna-analyzer.d.ts.map +1 -0
- package/dist/dna/dna-analyzer.js +110 -0
- package/dist/dna/dna-analyzer.js.map +1 -0
- package/dist/dna/dna-store.d.ts +13 -0
- package/dist/dna/dna-store.d.ts.map +1 -0
- package/dist/dna/dna-store.js +43 -0
- package/dist/dna/dna-store.js.map +1 -0
- package/dist/dna/gene-extractors/animation-approach.d.ts +15 -0
- package/dist/dna/gene-extractors/animation-approach.d.ts.map +1 -0
- package/dist/dna/gene-extractors/animation-approach.js +97 -0
- package/dist/dna/gene-extractors/animation-approach.js.map +1 -0
- package/dist/dna/gene-extractors/base-extractor.d.ts +53 -0
- package/dist/dna/gene-extractors/base-extractor.d.ts.map +1 -0
- package/dist/dna/gene-extractors/base-extractor.js +76 -0
- package/dist/dna/gene-extractors/base-extractor.js.map +1 -0
- package/dist/dna/gene-extractors/index.d.ts +16 -0
- package/dist/dna/gene-extractors/index.d.ts.map +1 -0
- package/dist/dna/gene-extractors/index.js +38 -0
- package/dist/dna/gene-extractors/index.js.map +1 -0
- package/dist/dna/gene-extractors/responsive-approach.d.ts +10 -0
- package/dist/dna/gene-extractors/responsive-approach.d.ts.map +1 -0
- package/dist/dna/gene-extractors/responsive-approach.js +30 -0
- package/dist/dna/gene-extractors/responsive-approach.js.map +1 -0
- package/dist/dna/gene-extractors/spacing-philosophy.d.ts +10 -0
- package/dist/dna/gene-extractors/spacing-philosophy.d.ts.map +1 -0
- package/dist/dna/gene-extractors/spacing-philosophy.js +30 -0
- package/dist/dna/gene-extractors/spacing-philosophy.js.map +1 -0
- package/dist/dna/gene-extractors/state-styling.d.ts +10 -0
- package/dist/dna/gene-extractors/state-styling.d.ts.map +1 -0
- package/dist/dna/gene-extractors/state-styling.js +29 -0
- package/dist/dna/gene-extractors/state-styling.js.map +1 -0
- package/dist/dna/gene-extractors/theming.d.ts +10 -0
- package/dist/dna/gene-extractors/theming.d.ts.map +1 -0
- package/dist/dna/gene-extractors/theming.js +30 -0
- package/dist/dna/gene-extractors/theming.js.map +1 -0
- package/dist/dna/gene-extractors/variant-handling.d.ts +13 -0
- package/dist/dna/gene-extractors/variant-handling.d.ts.map +1 -0
- package/dist/dna/gene-extractors/variant-handling.js +38 -0
- package/dist/dna/gene-extractors/variant-handling.js.map +1 -0
- package/dist/dna/health-calculator.d.ts +21 -0
- package/dist/dna/health-calculator.d.ts.map +1 -0
- package/dist/dna/health-calculator.js +113 -0
- package/dist/dna/health-calculator.js.map +1 -0
- package/dist/dna/index.d.ts +21 -0
- package/dist/dna/index.d.ts.map +1 -0
- package/dist/dna/index.js +19 -0
- package/dist/dna/index.js.map +1 -0
- package/dist/dna/mutation-detector.d.ts +10 -0
- package/dist/dna/mutation-detector.d.ts.map +1 -0
- package/dist/dna/mutation-detector.js +39 -0
- package/dist/dna/mutation-detector.js.map +1 -0
- package/dist/dna/playbook-generator.d.ts +6 -0
- package/dist/dna/playbook-generator.d.ts.map +1 -0
- package/dist/dna/playbook-generator.js +53 -0
- package/dist/dna/playbook-generator.js.map +1 -0
- package/dist/dna/types.d.ts +95 -0
- package/dist/dna/types.d.ts.map +1 -0
- package/dist/dna/types.js +8 -0
- package/dist/dna/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/parsers/parser-manager.d.ts.map +1 -1
- package/dist/parsers/parser-manager.js +2 -0
- package/dist/parsers/parser-manager.js.map +1 -1
- package/dist/parsers/tree-sitter/config.d.ts +82 -0
- package/dist/parsers/tree-sitter/config.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/config.js +200 -0
- package/dist/parsers/tree-sitter/config.js.map +1 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts +64 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.js +271 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.js.map +1 -0
- package/dist/parsers/tree-sitter/csharp-loader.d.ts +43 -0
- package/dist/parsers/tree-sitter/csharp-loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/csharp-loader.js +146 -0
- package/dist/parsers/tree-sitter/csharp-loader.js.map +1 -0
- package/dist/parsers/tree-sitter/index.d.ts +26 -0
- package/dist/parsers/tree-sitter/index.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/index.js +47 -0
- package/dist/parsers/tree-sitter/index.js.map +1 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts +79 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.js +540 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/java/class-extractor.d.ts +40 -0
- package/dist/parsers/tree-sitter/java/class-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/class-extractor.js +770 -0
- package/dist/parsers/tree-sitter/java/class-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/java/index.d.ts +14 -0
- package/dist/parsers/tree-sitter/java/index.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/index.js +25 -0
- package/dist/parsers/tree-sitter/java/index.js.map +1 -0
- package/dist/parsers/tree-sitter/java/method-extractor.d.ts +88 -0
- package/dist/parsers/tree-sitter/java/method-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/method-extractor.js +551 -0
- package/dist/parsers/tree-sitter/java/method-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/java/types.d.ts +545 -0
- package/dist/parsers/tree-sitter/java/types.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/types.js +81 -0
- package/dist/parsers/tree-sitter/java/types.js.map +1 -0
- package/dist/parsers/tree-sitter/loader.d.ts +50 -0
- package/dist/parsers/tree-sitter/loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/loader.js +156 -0
- package/dist/parsers/tree-sitter/loader.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts +78 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.js +278 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts +84 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.js +321 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts +74 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.js +285 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/index.d.ts +18 -0
- package/dist/parsers/tree-sitter/pydantic/index.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/index.js +23 -0
- package/dist/parsers/tree-sitter/pydantic/index.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts +70 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js +251 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts +102 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js +399 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts +89 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.js +426 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/types.d.ts +177 -0
- package/dist/parsers/tree-sitter/pydantic/types.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/types.js +139 -0
- package/dist/parsers/tree-sitter/pydantic/types.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts +88 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.js +315 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/python-ast-converter.d.ts +140 -0
- package/dist/parsers/tree-sitter/python-ast-converter.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/python-ast-converter.js +360 -0
- package/dist/parsers/tree-sitter/python-ast-converter.js.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts +465 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js +1146 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts +86 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.js +177 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.js.map +1 -0
- package/dist/parsers/tree-sitter/types.d.ts +399 -0
- package/dist/parsers/tree-sitter/types.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/types.js +20 -0
- package/dist/parsers/tree-sitter/types.js.map +1 -0
- package/dist/parsers/types.d.ts +1 -1
- package/dist/parsers/types.d.ts.map +1 -1
- package/dist/scanner/file-walker.d.ts.map +1 -1
- package/dist/scanner/file-walker.js +5 -0
- package/dist/scanner/file-walker.js.map +1 -1
- package/dist/store/history-store.d.ts +85 -269
- package/dist/store/history-store.d.ts.map +1 -1
- package/dist/store/history-store.js +272 -624
- package/dist/store/history-store.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/java-type-mapping.d.ts +79 -0
- package/dist/types/java-type-mapping.d.ts.map +1 -0
- package/dist/types/java-type-mapping.js +290 -0
- package/dist/types/java-type-mapping.js.map +1 -0
- package/package.json +8 -3
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pydantic Constraint Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses Field() constraints from function call arguments.
|
|
5
|
+
* Handles numeric, string, and custom constraints.
|
|
6
|
+
*
|
|
7
|
+
* @module pydantic/constraint-parser
|
|
8
|
+
*/
|
|
9
|
+
// ============================================
|
|
10
|
+
// Constraint Parser Class
|
|
11
|
+
// ============================================
|
|
12
|
+
/**
|
|
13
|
+
* Parses Pydantic Field() constraints.
|
|
14
|
+
*
|
|
15
|
+
* Handles:
|
|
16
|
+
* - Numeric: ge, le, gt, lt, multiple_of
|
|
17
|
+
* - String: min_length, max_length, pattern, regex
|
|
18
|
+
* - Other: frozen, alias, title, description
|
|
19
|
+
*/
|
|
20
|
+
export class ConstraintParser {
|
|
21
|
+
/**
|
|
22
|
+
* Parse constraints from Field() arguments.
|
|
23
|
+
*
|
|
24
|
+
* @param args - Field() call arguments
|
|
25
|
+
* @returns Parsed constraints
|
|
26
|
+
*/
|
|
27
|
+
parseConstraints(args) {
|
|
28
|
+
const constraints = {
|
|
29
|
+
ge: null,
|
|
30
|
+
le: null,
|
|
31
|
+
gt: null,
|
|
32
|
+
lt: null,
|
|
33
|
+
minLength: null,
|
|
34
|
+
maxLength: null,
|
|
35
|
+
pattern: null,
|
|
36
|
+
multipleOf: null,
|
|
37
|
+
frozen: false,
|
|
38
|
+
validators: [],
|
|
39
|
+
jsonSchemaExtra: null,
|
|
40
|
+
};
|
|
41
|
+
for (const arg of args) {
|
|
42
|
+
if (!arg.isKeyword || !arg.name)
|
|
43
|
+
continue;
|
|
44
|
+
this.parseConstraintArg(arg.name, arg.value, constraints);
|
|
45
|
+
}
|
|
46
|
+
return constraints;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Parse a single constraint argument.
|
|
50
|
+
*/
|
|
51
|
+
parseConstraintArg(name, value, constraints) {
|
|
52
|
+
switch (name) {
|
|
53
|
+
// Numeric constraints
|
|
54
|
+
case 'ge':
|
|
55
|
+
constraints.ge = this.parseNumber(value);
|
|
56
|
+
break;
|
|
57
|
+
case 'le':
|
|
58
|
+
constraints.le = this.parseNumber(value);
|
|
59
|
+
break;
|
|
60
|
+
case 'gt':
|
|
61
|
+
constraints.gt = this.parseNumber(value);
|
|
62
|
+
break;
|
|
63
|
+
case 'lt':
|
|
64
|
+
constraints.lt = this.parseNumber(value);
|
|
65
|
+
break;
|
|
66
|
+
case 'multiple_of':
|
|
67
|
+
constraints.multipleOf = this.parseNumber(value);
|
|
68
|
+
break;
|
|
69
|
+
// String constraints
|
|
70
|
+
case 'min_length':
|
|
71
|
+
constraints.minLength = this.parseNumber(value);
|
|
72
|
+
break;
|
|
73
|
+
case 'max_length':
|
|
74
|
+
constraints.maxLength = this.parseNumber(value);
|
|
75
|
+
break;
|
|
76
|
+
case 'pattern':
|
|
77
|
+
case 'regex':
|
|
78
|
+
constraints.pattern = this.parseString(value);
|
|
79
|
+
break;
|
|
80
|
+
// Boolean constraints
|
|
81
|
+
case 'frozen':
|
|
82
|
+
constraints.frozen = this.parseBoolean(value);
|
|
83
|
+
break;
|
|
84
|
+
// JSON schema extra
|
|
85
|
+
case 'json_schema_extra':
|
|
86
|
+
constraints.jsonSchemaExtra = this.parseJsonSchemaExtra(value);
|
|
87
|
+
break;
|
|
88
|
+
// Validators (custom validation functions)
|
|
89
|
+
case 'validator':
|
|
90
|
+
case 'validators':
|
|
91
|
+
const validators = this.parseValidators(value);
|
|
92
|
+
constraints.validators.push(...validators);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// ============================================
|
|
97
|
+
// Value Parsers
|
|
98
|
+
// ============================================
|
|
99
|
+
/**
|
|
100
|
+
* Parse a numeric value.
|
|
101
|
+
*/
|
|
102
|
+
parseNumber(value) {
|
|
103
|
+
const trimmed = value.trim();
|
|
104
|
+
// Handle negative numbers
|
|
105
|
+
const num = parseFloat(trimmed);
|
|
106
|
+
if (!isNaN(num)) {
|
|
107
|
+
return num;
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Parse a string value (remove quotes).
|
|
113
|
+
*/
|
|
114
|
+
parseString(value) {
|
|
115
|
+
const trimmed = value.trim();
|
|
116
|
+
// Handle raw strings: r'pattern' or r"pattern"
|
|
117
|
+
if (trimmed.startsWith('r"') || trimmed.startsWith("r'")) {
|
|
118
|
+
return trimmed.slice(2, -1);
|
|
119
|
+
}
|
|
120
|
+
// Handle regular strings
|
|
121
|
+
if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
|
|
122
|
+
(trimmed.startsWith("'") && trimmed.endsWith("'"))) {
|
|
123
|
+
return trimmed.slice(1, -1);
|
|
124
|
+
}
|
|
125
|
+
// Handle triple-quoted strings
|
|
126
|
+
if (trimmed.startsWith('"""') || trimmed.startsWith("'''")) {
|
|
127
|
+
return trimmed.slice(3, -3);
|
|
128
|
+
}
|
|
129
|
+
return trimmed;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Parse a boolean value.
|
|
133
|
+
*/
|
|
134
|
+
parseBoolean(value) {
|
|
135
|
+
const trimmed = value.trim().toLowerCase();
|
|
136
|
+
return trimmed === 'true';
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Parse json_schema_extra value.
|
|
140
|
+
*/
|
|
141
|
+
parseJsonSchemaExtra(value) {
|
|
142
|
+
// This is typically a dict literal or function call
|
|
143
|
+
// For now, we'll store the raw value and mark it as complex
|
|
144
|
+
try {
|
|
145
|
+
// Simple dict parsing for common cases
|
|
146
|
+
if (value.startsWith('{') && value.endsWith('}')) {
|
|
147
|
+
return this.parseSimpleDict(value);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// Fall through to return null
|
|
152
|
+
}
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Parse a simple Python dict literal.
|
|
157
|
+
*/
|
|
158
|
+
parseSimpleDict(value) {
|
|
159
|
+
// Remove braces
|
|
160
|
+
const inner = value.slice(1, -1).trim();
|
|
161
|
+
if (!inner)
|
|
162
|
+
return {};
|
|
163
|
+
const result = {};
|
|
164
|
+
const pairs = this.splitDictPairs(inner);
|
|
165
|
+
for (const pair of pairs) {
|
|
166
|
+
const colonIndex = pair.indexOf(':');
|
|
167
|
+
if (colonIndex === -1)
|
|
168
|
+
continue;
|
|
169
|
+
const key = this.parseString(pair.slice(0, colonIndex).trim());
|
|
170
|
+
const val = pair.slice(colonIndex + 1).trim();
|
|
171
|
+
if (key) {
|
|
172
|
+
result[key] = this.parseValue(val);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Split dict pairs respecting nested structures.
|
|
179
|
+
*/
|
|
180
|
+
splitDictPairs(inner) {
|
|
181
|
+
const pairs = [];
|
|
182
|
+
let current = '';
|
|
183
|
+
let depth = 0;
|
|
184
|
+
let inString = false;
|
|
185
|
+
let stringChar = '';
|
|
186
|
+
for (let i = 0; i < inner.length; i++) {
|
|
187
|
+
const char = inner[i];
|
|
188
|
+
const prevChar = inner[i - 1];
|
|
189
|
+
// Handle string boundaries
|
|
190
|
+
if ((char === '"' || char === "'") && prevChar !== '\\') {
|
|
191
|
+
if (!inString) {
|
|
192
|
+
inString = true;
|
|
193
|
+
stringChar = char;
|
|
194
|
+
}
|
|
195
|
+
else if (char === stringChar) {
|
|
196
|
+
inString = false;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (!inString) {
|
|
200
|
+
if (char === '{' || char === '[' || char === '(')
|
|
201
|
+
depth++;
|
|
202
|
+
else if (char === '}' || char === ']' || char === ')')
|
|
203
|
+
depth--;
|
|
204
|
+
else if (char === ',' && depth === 0) {
|
|
205
|
+
pairs.push(current.trim());
|
|
206
|
+
current = '';
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
current += char;
|
|
211
|
+
}
|
|
212
|
+
if (current.trim()) {
|
|
213
|
+
pairs.push(current.trim());
|
|
214
|
+
}
|
|
215
|
+
return pairs;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Parse a generic Python value.
|
|
219
|
+
*/
|
|
220
|
+
parseValue(value) {
|
|
221
|
+
const trimmed = value.trim();
|
|
222
|
+
// Boolean
|
|
223
|
+
if (trimmed === 'True')
|
|
224
|
+
return true;
|
|
225
|
+
if (trimmed === 'False')
|
|
226
|
+
return false;
|
|
227
|
+
if (trimmed === 'None')
|
|
228
|
+
return null;
|
|
229
|
+
// Number
|
|
230
|
+
const num = parseFloat(trimmed);
|
|
231
|
+
if (!isNaN(num) && /^-?\d+\.?\d*$/.test(trimmed)) {
|
|
232
|
+
return num;
|
|
233
|
+
}
|
|
234
|
+
// String
|
|
235
|
+
const str = this.parseString(trimmed);
|
|
236
|
+
if (str !== trimmed) {
|
|
237
|
+
return str;
|
|
238
|
+
}
|
|
239
|
+
// List
|
|
240
|
+
if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
|
|
241
|
+
return this.parseSimpleList(trimmed);
|
|
242
|
+
}
|
|
243
|
+
// Dict
|
|
244
|
+
if (trimmed.startsWith('{') && trimmed.endsWith('}')) {
|
|
245
|
+
return this.parseSimpleDict(trimmed);
|
|
246
|
+
}
|
|
247
|
+
// Return as-is for complex expressions
|
|
248
|
+
return trimmed;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Parse a simple Python list literal.
|
|
252
|
+
*/
|
|
253
|
+
parseSimpleList(value) {
|
|
254
|
+
const inner = value.slice(1, -1).trim();
|
|
255
|
+
if (!inner)
|
|
256
|
+
return [];
|
|
257
|
+
const items = this.splitDictPairs(inner); // Same splitting logic works
|
|
258
|
+
return items.map((item) => this.parseValue(item));
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Parse validator references.
|
|
262
|
+
*/
|
|
263
|
+
parseValidators(value) {
|
|
264
|
+
// Could be a single validator or list
|
|
265
|
+
if (value.startsWith('[') && value.endsWith(']')) {
|
|
266
|
+
const inner = value.slice(1, -1);
|
|
267
|
+
return inner.split(',').map((v) => v.trim()).filter(Boolean);
|
|
268
|
+
}
|
|
269
|
+
return [value.trim()];
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// ============================================
|
|
273
|
+
// Constraint Utilities
|
|
274
|
+
// ============================================
|
|
275
|
+
/**
|
|
276
|
+
* Check if constraints have any numeric constraints.
|
|
277
|
+
*/
|
|
278
|
+
export function hasNumericConstraints(constraints) {
|
|
279
|
+
return (constraints.ge !== null ||
|
|
280
|
+
constraints.le !== null ||
|
|
281
|
+
constraints.gt !== null ||
|
|
282
|
+
constraints.lt !== null ||
|
|
283
|
+
constraints.multipleOf !== null);
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Check if constraints have any string constraints.
|
|
287
|
+
*/
|
|
288
|
+
export function hasStringConstraints(constraints) {
|
|
289
|
+
return (constraints.minLength !== null ||
|
|
290
|
+
constraints.maxLength !== null ||
|
|
291
|
+
constraints.pattern !== null);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Check if constraints are empty.
|
|
295
|
+
*/
|
|
296
|
+
export function hasAnyConstraints(constraints) {
|
|
297
|
+
return (hasNumericConstraints(constraints) ||
|
|
298
|
+
hasStringConstraints(constraints) ||
|
|
299
|
+
constraints.frozen ||
|
|
300
|
+
constraints.validators.length > 0 ||
|
|
301
|
+
constraints.jsonSchemaExtra !== null);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Merge two constraint objects.
|
|
305
|
+
*/
|
|
306
|
+
export function mergeConstraints(base, override) {
|
|
307
|
+
return {
|
|
308
|
+
ge: override.ge ?? base.ge,
|
|
309
|
+
le: override.le ?? base.le,
|
|
310
|
+
gt: override.gt ?? base.gt,
|
|
311
|
+
lt: override.lt ?? base.lt,
|
|
312
|
+
minLength: override.minLength ?? base.minLength,
|
|
313
|
+
maxLength: override.maxLength ?? base.maxLength,
|
|
314
|
+
pattern: override.pattern ?? base.pattern,
|
|
315
|
+
multipleOf: override.multipleOf ?? base.multipleOf,
|
|
316
|
+
frozen: override.frozen ?? base.frozen,
|
|
317
|
+
validators: [...base.validators, ...(override.validators ?? [])],
|
|
318
|
+
jsonSchemaExtra: override.jsonSchemaExtra ?? base.jsonSchemaExtra,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=constraint-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraint-parser.js","sourceRoot":"","sources":["../../../../src/parsers/tree-sitter/pydantic/constraint-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pydantic Field Extractor
|
|
3
|
+
*
|
|
4
|
+
* Extracts field definitions from Pydantic model class bodies.
|
|
5
|
+
* Handles annotated assignments, Field() calls, and default values.
|
|
6
|
+
*
|
|
7
|
+
* @module pydantic/field-extractor
|
|
8
|
+
*/
|
|
9
|
+
import type { TreeSitterNode } from '../types.js';
|
|
10
|
+
import type { PydanticFieldInfo } from '../types.js';
|
|
11
|
+
import type { ExtractionContext } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Extracts Pydantic field definitions from class bodies.
|
|
14
|
+
*
|
|
15
|
+
* Handles:
|
|
16
|
+
* - Simple annotations: `name: str`
|
|
17
|
+
* - Annotations with defaults: `name: str = "default"`
|
|
18
|
+
* - Field() calls: `name: str = Field(default="value", min_length=1)`
|
|
19
|
+
* - Optional fields: `name: Optional[str] = None`
|
|
20
|
+
*/
|
|
21
|
+
export declare class FieldExtractor {
|
|
22
|
+
private readonly typeResolver;
|
|
23
|
+
private readonly constraintParser;
|
|
24
|
+
constructor();
|
|
25
|
+
/**
|
|
26
|
+
* Extract all fields from a class body node.
|
|
27
|
+
*
|
|
28
|
+
* @param bodyNode - The class body (block) node
|
|
29
|
+
* @param context - Extraction context
|
|
30
|
+
* @returns Array of extracted field information
|
|
31
|
+
*/
|
|
32
|
+
extractFields(bodyNode: TreeSitterNode, context: ExtractionContext): PydanticFieldInfo[];
|
|
33
|
+
/**
|
|
34
|
+
* Extract a single field from an AST node.
|
|
35
|
+
*
|
|
36
|
+
* @param node - AST node (expression_statement or typed_assignment)
|
|
37
|
+
* @param context - Extraction context
|
|
38
|
+
* @returns Field info or null if not a field
|
|
39
|
+
*/
|
|
40
|
+
extractField(node: TreeSitterNode, context: ExtractionContext): PydanticFieldInfo | null;
|
|
41
|
+
/**
|
|
42
|
+
* Extract raw field data from an assignment node.
|
|
43
|
+
*/
|
|
44
|
+
private extractRawFieldData;
|
|
45
|
+
/**
|
|
46
|
+
* Parse a Field() call and extract arguments.
|
|
47
|
+
*/
|
|
48
|
+
private parseFieldCall;
|
|
49
|
+
/**
|
|
50
|
+
* Extract arguments from a call's argument_list.
|
|
51
|
+
*/
|
|
52
|
+
private extractCallArguments;
|
|
53
|
+
/**
|
|
54
|
+
* Process raw field data into PydanticFieldInfo.
|
|
55
|
+
*/
|
|
56
|
+
private processRawField;
|
|
57
|
+
/**
|
|
58
|
+
* Determine if a field is required.
|
|
59
|
+
*/
|
|
60
|
+
private isFieldRequired;
|
|
61
|
+
/**
|
|
62
|
+
* Extract the actual default value (not Field() call).
|
|
63
|
+
*/
|
|
64
|
+
private extractDefaultValue;
|
|
65
|
+
/**
|
|
66
|
+
* Extract a string constraint value.
|
|
67
|
+
*/
|
|
68
|
+
private extractStringConstraint;
|
|
69
|
+
/**
|
|
70
|
+
* Create empty constraints object.
|
|
71
|
+
*/
|
|
72
|
+
private createEmptyConstraints;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=field-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-extractor.d.ts","sourceRoot":"","sources":["../../../../src/parsers/tree-sitter/pydantic/field-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAA+B,MAAM,YAAY,CAAC;AASjF;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;;IAOpD;;;;;;OAMG;IACH,aAAa,CACX,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,iBAAiB,GACzB,iBAAiB,EAAE;IAatB;;;;;;OAMG;IACH,YAAY,CACV,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,iBAAiB,GACzB,iBAAiB,GAAG,IAAI;IAyB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyC3B;;OAEG;IACH,OAAO,CAAC,cAAc;IA+BtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiC5B;;OAEG;IACH,OAAO,CAAC,eAAe;IA2CvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAe/B"}
|