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,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree-sitter Loader
|
|
3
|
+
*
|
|
4
|
+
* Handles loading tree-sitter and tree-sitter-python with graceful fallback.
|
|
5
|
+
* Provides functions to check availability and access the parser/language.
|
|
6
|
+
*
|
|
7
|
+
* @requirements 3.5 - Unified AST query interface
|
|
8
|
+
*/
|
|
9
|
+
import type { TreeSitterParser, TreeSitterLanguage } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Check if tree-sitter is available.
|
|
12
|
+
*
|
|
13
|
+
* This function attempts to load tree-sitter and tree-sitter-python
|
|
14
|
+
* on first call and caches the result.
|
|
15
|
+
*
|
|
16
|
+
* @returns true if tree-sitter is available and working
|
|
17
|
+
*/
|
|
18
|
+
export declare function isTreeSitterAvailable(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Get the tree-sitter Parser constructor.
|
|
21
|
+
*
|
|
22
|
+
* @returns TreeSitter Parser constructor
|
|
23
|
+
* @throws Error if tree-sitter is not available
|
|
24
|
+
*/
|
|
25
|
+
export declare function getTreeSitter(): new () => TreeSitterParser;
|
|
26
|
+
/**
|
|
27
|
+
* Get the Python language for tree-sitter.
|
|
28
|
+
*
|
|
29
|
+
* @returns TreeSitter Python language
|
|
30
|
+
* @throws Error if tree-sitter-python is not available
|
|
31
|
+
*/
|
|
32
|
+
export declare function getPythonLanguage(): TreeSitterLanguage;
|
|
33
|
+
/**
|
|
34
|
+
* Create a new tree-sitter parser instance configured for Python.
|
|
35
|
+
*
|
|
36
|
+
* @returns Configured TreeSitter parser
|
|
37
|
+
* @throws Error if tree-sitter is not available
|
|
38
|
+
*/
|
|
39
|
+
export declare function createPythonParser(): TreeSitterParser;
|
|
40
|
+
/**
|
|
41
|
+
* Get the loading error message if tree-sitter failed to load.
|
|
42
|
+
*
|
|
43
|
+
* @returns Error message or null if no error
|
|
44
|
+
*/
|
|
45
|
+
export declare function getLoadingError(): string | null;
|
|
46
|
+
/**
|
|
47
|
+
* Reset the loader state (useful for testing).
|
|
48
|
+
*/
|
|
49
|
+
export declare function resetLoader(): void;
|
|
50
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/parsers/tree-sitter/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAyBvE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAe/C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,UAAU,gBAAgB,CAU1D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,kBAAkB,CAUtD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,gBAAgB,CAQrD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAI/C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAKlC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree-sitter Loader
|
|
3
|
+
*
|
|
4
|
+
* Handles loading tree-sitter and tree-sitter-python with graceful fallback.
|
|
5
|
+
* Provides functions to check availability and access the parser/language.
|
|
6
|
+
*
|
|
7
|
+
* @requirements 3.5 - Unified AST query interface
|
|
8
|
+
*/
|
|
9
|
+
import { createRequire } from 'node:module';
|
|
10
|
+
// Create require function for ESM compatibility
|
|
11
|
+
const require = createRequire(import.meta.url);
|
|
12
|
+
// ============================================
|
|
13
|
+
// Module State
|
|
14
|
+
// ============================================
|
|
15
|
+
/** Whether tree-sitter is available */
|
|
16
|
+
let treeSitterAvailable = null;
|
|
17
|
+
/** Cached tree-sitter Parser constructor */
|
|
18
|
+
let cachedTreeSitter = null;
|
|
19
|
+
/** Cached Python language */
|
|
20
|
+
let cachedPythonLanguage = null;
|
|
21
|
+
/** Loading error message if any */
|
|
22
|
+
let loadingError = null;
|
|
23
|
+
// ============================================
|
|
24
|
+
// Public API
|
|
25
|
+
// ============================================
|
|
26
|
+
/**
|
|
27
|
+
* Check if tree-sitter is available.
|
|
28
|
+
*
|
|
29
|
+
* This function attempts to load tree-sitter and tree-sitter-python
|
|
30
|
+
* on first call and caches the result.
|
|
31
|
+
*
|
|
32
|
+
* @returns true if tree-sitter is available and working
|
|
33
|
+
*/
|
|
34
|
+
export function isTreeSitterAvailable() {
|
|
35
|
+
if (treeSitterAvailable !== null) {
|
|
36
|
+
return treeSitterAvailable;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
loadTreeSitter();
|
|
40
|
+
treeSitterAvailable = true;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
treeSitterAvailable = false;
|
|
44
|
+
loadingError = error instanceof Error ? error.message : 'Unknown error loading tree-sitter';
|
|
45
|
+
logDebug(`tree-sitter not available: ${loadingError}`);
|
|
46
|
+
}
|
|
47
|
+
return treeSitterAvailable;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get the tree-sitter Parser constructor.
|
|
51
|
+
*
|
|
52
|
+
* @returns TreeSitter Parser constructor
|
|
53
|
+
* @throws Error if tree-sitter is not available
|
|
54
|
+
*/
|
|
55
|
+
export function getTreeSitter() {
|
|
56
|
+
if (!isTreeSitterAvailable()) {
|
|
57
|
+
throw new Error(`tree-sitter is not available: ${loadingError ?? 'unknown error'}`);
|
|
58
|
+
}
|
|
59
|
+
if (!cachedTreeSitter) {
|
|
60
|
+
throw new Error('tree-sitter module not loaded');
|
|
61
|
+
}
|
|
62
|
+
return cachedTreeSitter;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get the Python language for tree-sitter.
|
|
66
|
+
*
|
|
67
|
+
* @returns TreeSitter Python language
|
|
68
|
+
* @throws Error if tree-sitter-python is not available
|
|
69
|
+
*/
|
|
70
|
+
export function getPythonLanguage() {
|
|
71
|
+
if (!isTreeSitterAvailable()) {
|
|
72
|
+
throw new Error(`tree-sitter-python is not available: ${loadingError ?? 'unknown error'}`);
|
|
73
|
+
}
|
|
74
|
+
if (!cachedPythonLanguage) {
|
|
75
|
+
throw new Error('tree-sitter-python language not loaded');
|
|
76
|
+
}
|
|
77
|
+
return cachedPythonLanguage;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create a new tree-sitter parser instance configured for Python.
|
|
81
|
+
*
|
|
82
|
+
* @returns Configured TreeSitter parser
|
|
83
|
+
* @throws Error if tree-sitter is not available
|
|
84
|
+
*/
|
|
85
|
+
export function createPythonParser() {
|
|
86
|
+
const Parser = getTreeSitter();
|
|
87
|
+
const language = getPythonLanguage();
|
|
88
|
+
const parser = new Parser();
|
|
89
|
+
parser.setLanguage(language);
|
|
90
|
+
return parser;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get the loading error message if tree-sitter failed to load.
|
|
94
|
+
*
|
|
95
|
+
* @returns Error message or null if no error
|
|
96
|
+
*/
|
|
97
|
+
export function getLoadingError() {
|
|
98
|
+
// Ensure we've attempted to load
|
|
99
|
+
isTreeSitterAvailable();
|
|
100
|
+
return loadingError;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Reset the loader state (useful for testing).
|
|
104
|
+
*/
|
|
105
|
+
export function resetLoader() {
|
|
106
|
+
treeSitterAvailable = null;
|
|
107
|
+
cachedTreeSitter = null;
|
|
108
|
+
cachedPythonLanguage = null;
|
|
109
|
+
loadingError = null;
|
|
110
|
+
}
|
|
111
|
+
// ============================================
|
|
112
|
+
// Internal Functions
|
|
113
|
+
// ============================================
|
|
114
|
+
/**
|
|
115
|
+
* Attempt to load tree-sitter and tree-sitter-python.
|
|
116
|
+
*
|
|
117
|
+
* @throws Error if loading fails
|
|
118
|
+
*/
|
|
119
|
+
function loadTreeSitter() {
|
|
120
|
+
// Skip if already loaded
|
|
121
|
+
if (cachedTreeSitter && cachedPythonLanguage) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
// Dynamic require for optional dependencies
|
|
126
|
+
// tree-sitter exports the Parser constructor directly
|
|
127
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
128
|
+
cachedTreeSitter = require('tree-sitter');
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
throw new Error(`Failed to load tree-sitter: ${error instanceof Error ? error.message : 'unknown error'}. ` +
|
|
132
|
+
'Install with: pnpm add tree-sitter tree-sitter-python');
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
136
|
+
cachedPythonLanguage = require('tree-sitter-python');
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
// Clear tree-sitter cache since we can't use it without Python
|
|
140
|
+
cachedTreeSitter = null;
|
|
141
|
+
throw new Error(`Failed to load tree-sitter-python: ${error instanceof Error ? error.message : 'unknown error'}. ` +
|
|
142
|
+
'Install with: pnpm add tree-sitter-python');
|
|
143
|
+
}
|
|
144
|
+
logDebug('tree-sitter and tree-sitter-python loaded successfully');
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Log debug message if debug mode is enabled.
|
|
148
|
+
*
|
|
149
|
+
* @param message - Message to log
|
|
150
|
+
*/
|
|
151
|
+
function logDebug(message) {
|
|
152
|
+
if (process.env['DRIFT_PARSER_DEBUG'] === 'true') {
|
|
153
|
+
console.debug(`[tree-sitter-loader] ${message}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/parsers/tree-sitter/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|