driftdetect-core 0.1.3 → 0.4.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 +31 -0
- package/dist/parsers/tree-sitter/index.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/index.js +63 -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/java-loader.d.ts +50 -0
- package/dist/parsers/tree-sitter/java-loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java-loader.js +161 -0
- package/dist/parsers/tree-sitter/java-loader.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/php-loader.d.ts +50 -0
- package/dist/parsers/tree-sitter/php-loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/php-loader.js +164 -0
- package/dist/parsers/tree-sitter/php-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-java-parser.d.ts +90 -0
- package/dist/parsers/tree-sitter/tree-sitter-java-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-java-parser.js +298 -0
- package/dist/parsers/tree-sitter/tree-sitter-java-parser.js.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-php-parser.d.ts +177 -0
- package/dist/parsers/tree-sitter/tree-sitter-php-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-php-parser.js +585 -0
- package/dist/parsers/tree-sitter/tree-sitter-php-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 +9 -2
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pydantic Config Extractor
|
|
3
|
+
*
|
|
4
|
+
* Extracts model configuration from Pydantic classes.
|
|
5
|
+
* Handles both v1 (Config class) and v2 (model_config dict).
|
|
6
|
+
*
|
|
7
|
+
* @module pydantic/config-extractor
|
|
8
|
+
*/
|
|
9
|
+
import type { TreeSitterNode } from '../types.js';
|
|
10
|
+
import type { PydanticConfigInfo } from '../types.js';
|
|
11
|
+
import type { ExtractionContext } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Extracts Pydantic model configuration.
|
|
14
|
+
*
|
|
15
|
+
* Handles:
|
|
16
|
+
* - v1: class Config: ...
|
|
17
|
+
* - v2: model_config = ConfigDict(...)
|
|
18
|
+
* - v2: model_config = {...}
|
|
19
|
+
*/
|
|
20
|
+
export declare class ConfigExtractor {
|
|
21
|
+
/**
|
|
22
|
+
* Extract config from a class body.
|
|
23
|
+
*
|
|
24
|
+
* @param bodyNode - The class body (block) node
|
|
25
|
+
* @param context - Extraction context
|
|
26
|
+
* @returns Config info or null if no config found
|
|
27
|
+
*/
|
|
28
|
+
extractConfig(bodyNode: TreeSitterNode, context: ExtractionContext): PydanticConfigInfo | null;
|
|
29
|
+
/**
|
|
30
|
+
* Extract v2 style model_config.
|
|
31
|
+
*/
|
|
32
|
+
private extractV2Config;
|
|
33
|
+
/**
|
|
34
|
+
* Parse v2 config value (dict or ConfigDict call).
|
|
35
|
+
*/
|
|
36
|
+
private parseV2ConfigValue;
|
|
37
|
+
/**
|
|
38
|
+
* Parse a dictionary literal config.
|
|
39
|
+
*/
|
|
40
|
+
private parseDictConfig;
|
|
41
|
+
/**
|
|
42
|
+
* Parse a ConfigDict() call.
|
|
43
|
+
*/
|
|
44
|
+
private parseConfigDictCall;
|
|
45
|
+
/**
|
|
46
|
+
* Extract v1 style Config class.
|
|
47
|
+
*/
|
|
48
|
+
private extractV1Config;
|
|
49
|
+
/**
|
|
50
|
+
* Parse v1 Config class body.
|
|
51
|
+
*/
|
|
52
|
+
private parseV1ConfigClass;
|
|
53
|
+
/**
|
|
54
|
+
* Parse a config value string.
|
|
55
|
+
*/
|
|
56
|
+
private parseConfigValue;
|
|
57
|
+
/**
|
|
58
|
+
* Remove quotes from a string.
|
|
59
|
+
*/
|
|
60
|
+
private unquote;
|
|
61
|
+
/**
|
|
62
|
+
* Process raw config data into PydanticConfigInfo.
|
|
63
|
+
*/
|
|
64
|
+
private processRawConfig;
|
|
65
|
+
/**
|
|
66
|
+
* Extract extra config value.
|
|
67
|
+
*/
|
|
68
|
+
private extractExtraConfig;
|
|
69
|
+
/**
|
|
70
|
+
* Extract a boolean config value.
|
|
71
|
+
*/
|
|
72
|
+
private extractBooleanConfig;
|
|
73
|
+
/**
|
|
74
|
+
* Extract json_schema_extra config.
|
|
75
|
+
*/
|
|
76
|
+
private extractJsonSchemaExtra;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=config-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-extractor.d.ts","sourceRoot":"","sources":["../../../../src/parsers/tree-sitter/pydantic/config-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAA8B,MAAM,YAAY,CAAC;AAMhF;;;;;;;GAOG;AACH,qBAAa,eAAe;IAC1B;;;;;;OAMG;IACH,aAAa,CACX,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,iBAAiB,GACzB,kBAAkB,GAAG,IAAI;IAoB5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA8BxB;;OAEG;IACH,OAAO,CAAC,OAAO;IAaf;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsB1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAa/B"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pydantic Config Extractor
|
|
3
|
+
*
|
|
4
|
+
* Extracts model configuration from Pydantic classes.
|
|
5
|
+
* Handles both v1 (Config class) and v2 (model_config dict).
|
|
6
|
+
*
|
|
7
|
+
* @module pydantic/config-extractor
|
|
8
|
+
*/
|
|
9
|
+
// ============================================
|
|
10
|
+
// Config Extractor Class
|
|
11
|
+
// ============================================
|
|
12
|
+
/**
|
|
13
|
+
* Extracts Pydantic model configuration.
|
|
14
|
+
*
|
|
15
|
+
* Handles:
|
|
16
|
+
* - v1: class Config: ...
|
|
17
|
+
* - v2: model_config = ConfigDict(...)
|
|
18
|
+
* - v2: model_config = {...}
|
|
19
|
+
*/
|
|
20
|
+
export class ConfigExtractor {
|
|
21
|
+
/**
|
|
22
|
+
* Extract config from a class body.
|
|
23
|
+
*
|
|
24
|
+
* @param bodyNode - The class body (block) node
|
|
25
|
+
* @param context - Extraction context
|
|
26
|
+
* @returns Config info or null if no config found
|
|
27
|
+
*/
|
|
28
|
+
extractConfig(bodyNode, context) {
|
|
29
|
+
// Try v2 style first (model_config)
|
|
30
|
+
const v2Config = this.extractV2Config(bodyNode, context);
|
|
31
|
+
if (v2Config) {
|
|
32
|
+
return v2Config;
|
|
33
|
+
}
|
|
34
|
+
// Try v1 style (Config class)
|
|
35
|
+
const v1Config = this.extractV1Config(bodyNode, context);
|
|
36
|
+
if (v1Config) {
|
|
37
|
+
return v1Config;
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
// ============================================
|
|
42
|
+
// V2 Config Extraction
|
|
43
|
+
// ============================================
|
|
44
|
+
/**
|
|
45
|
+
* Extract v2 style model_config.
|
|
46
|
+
*/
|
|
47
|
+
extractV2Config(bodyNode, _context) {
|
|
48
|
+
for (const child of bodyNode.namedChildren) {
|
|
49
|
+
if (child.type !== 'expression_statement')
|
|
50
|
+
continue;
|
|
51
|
+
const inner = child.namedChildren[0];
|
|
52
|
+
if (!inner || inner.type !== 'assignment')
|
|
53
|
+
continue;
|
|
54
|
+
const left = inner.childForFieldName('left');
|
|
55
|
+
if (!left || left.text !== 'model_config')
|
|
56
|
+
continue;
|
|
57
|
+
const right = inner.childForFieldName('right');
|
|
58
|
+
if (!right)
|
|
59
|
+
continue;
|
|
60
|
+
const rawData = this.parseV2ConfigValue(right, inner);
|
|
61
|
+
return this.processRawConfig(rawData);
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Parse v2 config value (dict or ConfigDict call).
|
|
67
|
+
*/
|
|
68
|
+
parseV2ConfigValue(valueNode, assignmentNode) {
|
|
69
|
+
const values = new Map();
|
|
70
|
+
if (valueNode.type === 'dictionary') {
|
|
71
|
+
// model_config = {...}
|
|
72
|
+
this.parseDictConfig(valueNode, values);
|
|
73
|
+
}
|
|
74
|
+
else if (valueNode.type === 'call') {
|
|
75
|
+
// model_config = ConfigDict(...)
|
|
76
|
+
this.parseConfigDictCall(valueNode, values);
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
version: 2,
|
|
80
|
+
values,
|
|
81
|
+
node: assignmentNode,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Parse a dictionary literal config.
|
|
86
|
+
*/
|
|
87
|
+
parseDictConfig(dictNode, values) {
|
|
88
|
+
for (const child of dictNode.namedChildren) {
|
|
89
|
+
if (child.type === 'pair') {
|
|
90
|
+
const keyNode = child.childForFieldName('key');
|
|
91
|
+
const valueNode = child.childForFieldName('value');
|
|
92
|
+
if (keyNode && valueNode) {
|
|
93
|
+
const key = this.unquote(keyNode.text);
|
|
94
|
+
values.set(key, this.parseConfigValue(valueNode.text));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Parse a ConfigDict() call.
|
|
101
|
+
*/
|
|
102
|
+
parseConfigDictCall(callNode, values) {
|
|
103
|
+
const argsNode = callNode.childForFieldName('arguments');
|
|
104
|
+
if (!argsNode)
|
|
105
|
+
return;
|
|
106
|
+
for (const child of argsNode.namedChildren) {
|
|
107
|
+
if (child.type === 'keyword_argument') {
|
|
108
|
+
const nameNode = child.childForFieldName('name');
|
|
109
|
+
const valueNode = child.childForFieldName('value');
|
|
110
|
+
if (nameNode && valueNode) {
|
|
111
|
+
values.set(nameNode.text, this.parseConfigValue(valueNode.text));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// ============================================
|
|
117
|
+
// V1 Config Extraction
|
|
118
|
+
// ============================================
|
|
119
|
+
/**
|
|
120
|
+
* Extract v1 style Config class.
|
|
121
|
+
*/
|
|
122
|
+
extractV1Config(bodyNode, _context) {
|
|
123
|
+
for (const child of bodyNode.namedChildren) {
|
|
124
|
+
if (child.type !== 'class_definition')
|
|
125
|
+
continue;
|
|
126
|
+
const nameNode = child.childForFieldName('name');
|
|
127
|
+
if (!nameNode || nameNode.text !== 'Config')
|
|
128
|
+
continue;
|
|
129
|
+
const configBody = child.childForFieldName('body');
|
|
130
|
+
if (!configBody)
|
|
131
|
+
continue;
|
|
132
|
+
const rawData = this.parseV1ConfigClass(configBody, child);
|
|
133
|
+
return this.processRawConfig(rawData);
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Parse v1 Config class body.
|
|
139
|
+
*/
|
|
140
|
+
parseV1ConfigClass(bodyNode, classNode) {
|
|
141
|
+
const values = new Map();
|
|
142
|
+
for (const child of bodyNode.namedChildren) {
|
|
143
|
+
if (child.type !== 'expression_statement')
|
|
144
|
+
continue;
|
|
145
|
+
const inner = child.namedChildren[0];
|
|
146
|
+
if (!inner || inner.type !== 'assignment')
|
|
147
|
+
continue;
|
|
148
|
+
const left = inner.childForFieldName('left');
|
|
149
|
+
const right = inner.childForFieldName('right');
|
|
150
|
+
if (left && right && left.type === 'identifier') {
|
|
151
|
+
values.set(left.text, this.parseConfigValue(right.text));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
version: 1,
|
|
156
|
+
values,
|
|
157
|
+
node: classNode,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
// ============================================
|
|
161
|
+
// Value Parsing
|
|
162
|
+
// ============================================
|
|
163
|
+
/**
|
|
164
|
+
* Parse a config value string.
|
|
165
|
+
*/
|
|
166
|
+
parseConfigValue(valueStr) {
|
|
167
|
+
const trimmed = valueStr.trim();
|
|
168
|
+
// Boolean
|
|
169
|
+
if (trimmed === 'True') {
|
|
170
|
+
return { raw: trimmed, parsed: true, isComplex: false };
|
|
171
|
+
}
|
|
172
|
+
if (trimmed === 'False') {
|
|
173
|
+
return { raw: trimmed, parsed: false, isComplex: false };
|
|
174
|
+
}
|
|
175
|
+
if (trimmed === 'None') {
|
|
176
|
+
return { raw: trimmed, parsed: null, isComplex: false };
|
|
177
|
+
}
|
|
178
|
+
// Number
|
|
179
|
+
const num = parseFloat(trimmed);
|
|
180
|
+
if (!isNaN(num) && /^-?\d+\.?\d*$/.test(trimmed)) {
|
|
181
|
+
return { raw: trimmed, parsed: num, isComplex: false };
|
|
182
|
+
}
|
|
183
|
+
// String
|
|
184
|
+
if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
|
|
185
|
+
(trimmed.startsWith("'") && trimmed.endsWith("'"))) {
|
|
186
|
+
return { raw: trimmed, parsed: trimmed.slice(1, -1), isComplex: false };
|
|
187
|
+
}
|
|
188
|
+
// Complex expression
|
|
189
|
+
return { raw: trimmed, parsed: null, isComplex: true };
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Remove quotes from a string.
|
|
193
|
+
*/
|
|
194
|
+
unquote(value) {
|
|
195
|
+
const trimmed = value.trim();
|
|
196
|
+
if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
|
|
197
|
+
(trimmed.startsWith("'") && trimmed.endsWith("'"))) {
|
|
198
|
+
return trimmed.slice(1, -1);
|
|
199
|
+
}
|
|
200
|
+
return trimmed;
|
|
201
|
+
}
|
|
202
|
+
// ============================================
|
|
203
|
+
// Processing
|
|
204
|
+
// ============================================
|
|
205
|
+
/**
|
|
206
|
+
* Process raw config data into PydanticConfigInfo.
|
|
207
|
+
*/
|
|
208
|
+
processRawConfig(raw) {
|
|
209
|
+
const rawValues = {};
|
|
210
|
+
for (const [key, value] of raw.values) {
|
|
211
|
+
rawValues[key] = value.isComplex ? value.raw : value.parsed;
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
extra: this.extractExtraConfig(raw.values),
|
|
215
|
+
frozen: this.extractBooleanConfig(raw.values, ['frozen', 'allow_mutation']),
|
|
216
|
+
validateAssignment: this.extractBooleanConfig(raw.values, ['validate_assignment']),
|
|
217
|
+
useEnumValues: this.extractBooleanConfig(raw.values, ['use_enum_values']),
|
|
218
|
+
validateDefault: this.extractBooleanConfig(raw.values, ['validate_default']),
|
|
219
|
+
populateByName: this.extractBooleanConfig(raw.values, ['populate_by_name', 'allow_population_by_field_name']),
|
|
220
|
+
arbitraryTypesAllowed: this.extractBooleanConfig(raw.values, ['arbitrary_types_allowed']),
|
|
221
|
+
jsonSchemaExtra: this.extractJsonSchemaExtra(raw.values),
|
|
222
|
+
raw: rawValues,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Extract extra config value.
|
|
227
|
+
*/
|
|
228
|
+
extractExtraConfig(values) {
|
|
229
|
+
const value = values.get('extra');
|
|
230
|
+
if (!value)
|
|
231
|
+
return null;
|
|
232
|
+
const parsed = value.parsed;
|
|
233
|
+
if (typeof parsed === 'string') {
|
|
234
|
+
if (parsed === 'allow' || parsed === 'forbid' || parsed === 'ignore') {
|
|
235
|
+
return parsed;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Handle v1 style: Extra.allow, Extra.forbid, Extra.ignore
|
|
239
|
+
const raw = value.raw;
|
|
240
|
+
if (raw.includes('allow'))
|
|
241
|
+
return 'allow';
|
|
242
|
+
if (raw.includes('forbid'))
|
|
243
|
+
return 'forbid';
|
|
244
|
+
if (raw.includes('ignore'))
|
|
245
|
+
return 'ignore';
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Extract a boolean config value.
|
|
250
|
+
*/
|
|
251
|
+
extractBooleanConfig(values, keys) {
|
|
252
|
+
for (const key of keys) {
|
|
253
|
+
const value = values.get(key);
|
|
254
|
+
if (value && typeof value.parsed === 'boolean') {
|
|
255
|
+
// Handle inverted keys (allow_mutation -> frozen)
|
|
256
|
+
if (key === 'allow_mutation') {
|
|
257
|
+
return !value.parsed;
|
|
258
|
+
}
|
|
259
|
+
return value.parsed;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Extract json_schema_extra config.
|
|
266
|
+
*/
|
|
267
|
+
extractJsonSchemaExtra(values) {
|
|
268
|
+
const value = values.get('json_schema_extra') || values.get('schema_extra');
|
|
269
|
+
if (!value)
|
|
270
|
+
return null;
|
|
271
|
+
// If it's a simple dict, try to parse it
|
|
272
|
+
if (!value.isComplex && typeof value.parsed === 'object' && value.parsed !== null) {
|
|
273
|
+
return value.parsed;
|
|
274
|
+
}
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=config-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-extractor.js","sourceRoot":"","sources":["../../../../src/parsers/tree-sitter/pydantic/config-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
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
|
+
import type { FieldConstraints } from '../types.js';
|
|
10
|
+
import type { FieldArgument } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Parses Pydantic Field() constraints.
|
|
13
|
+
*
|
|
14
|
+
* Handles:
|
|
15
|
+
* - Numeric: ge, le, gt, lt, multiple_of
|
|
16
|
+
* - String: min_length, max_length, pattern, regex
|
|
17
|
+
* - Other: frozen, alias, title, description
|
|
18
|
+
*/
|
|
19
|
+
export declare class ConstraintParser {
|
|
20
|
+
/**
|
|
21
|
+
* Parse constraints from Field() arguments.
|
|
22
|
+
*
|
|
23
|
+
* @param args - Field() call arguments
|
|
24
|
+
* @returns Parsed constraints
|
|
25
|
+
*/
|
|
26
|
+
parseConstraints(args: FieldArgument[]): FieldConstraints;
|
|
27
|
+
/**
|
|
28
|
+
* Parse a single constraint argument.
|
|
29
|
+
*/
|
|
30
|
+
private parseConstraintArg;
|
|
31
|
+
/**
|
|
32
|
+
* Parse a numeric value.
|
|
33
|
+
*/
|
|
34
|
+
private parseNumber;
|
|
35
|
+
/**
|
|
36
|
+
* Parse a string value (remove quotes).
|
|
37
|
+
*/
|
|
38
|
+
private parseString;
|
|
39
|
+
/**
|
|
40
|
+
* Parse a boolean value.
|
|
41
|
+
*/
|
|
42
|
+
private parseBoolean;
|
|
43
|
+
/**
|
|
44
|
+
* Parse json_schema_extra value.
|
|
45
|
+
*/
|
|
46
|
+
private parseJsonSchemaExtra;
|
|
47
|
+
/**
|
|
48
|
+
* Parse a simple Python dict literal.
|
|
49
|
+
*/
|
|
50
|
+
private parseSimpleDict;
|
|
51
|
+
/**
|
|
52
|
+
* Split dict pairs respecting nested structures.
|
|
53
|
+
*/
|
|
54
|
+
private splitDictPairs;
|
|
55
|
+
/**
|
|
56
|
+
* Parse a generic Python value.
|
|
57
|
+
*/
|
|
58
|
+
private parseValue;
|
|
59
|
+
/**
|
|
60
|
+
* Parse a simple Python list literal.
|
|
61
|
+
*/
|
|
62
|
+
private parseSimpleList;
|
|
63
|
+
/**
|
|
64
|
+
* Parse validator references.
|
|
65
|
+
*/
|
|
66
|
+
private parseValidators;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if constraints have any numeric constraints.
|
|
70
|
+
*/
|
|
71
|
+
export declare function hasNumericConstraints(constraints: FieldConstraints): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Check if constraints have any string constraints.
|
|
74
|
+
*/
|
|
75
|
+
export declare function hasStringConstraints(constraints: FieldConstraints): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Check if constraints are empty.
|
|
78
|
+
*/
|
|
79
|
+
export declare function hasAnyConstraints(constraints: FieldConstraints): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Merge two constraint objects.
|
|
82
|
+
*/
|
|
83
|
+
export declare function mergeConstraints(base: FieldConstraints, override: Partial<FieldConstraints>): FieldConstraints;
|
|
84
|
+
//# sourceMappingURL=constraint-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraint-parser.d.ts","sourceRoot":"","sources":["../../../../src/parsers/tree-sitter/pydantic/constraint-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMhD;;;;;;;GAOG;AACH,qBAAa,gBAAgB;IAC3B;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,gBAAgB;IAwBzD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0D1B;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAsBnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAyCtB;;OAEG;IACH,OAAO,CAAC,UAAU;IAkClB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,eAAe;CAQxB;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAQ5E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAM3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAQxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAClC,gBAAgB,CAclB"}
|