driftdetect-core 0.1.3 → 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 +7 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inheritance-resolver.js","sourceRoot":"","sources":["../../../../src/parsers/tree-sitter/pydantic/inheritance-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,+CAA+C;AAC/C,6BAA6B;AAC7B,+CAA+C;AAE/C;;;;;;;;GAQG;AACH,MAAM,OAAO,mBAAmB;IAC9B;;;;;;OAMG;IACH,aAAa,CACX,KAAwB,EACxB,SAAyC;QAEzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACK,sBAAsB,CAC5B,KAAwB,EACxB,SAAyC,EACzC,OAAoB;QAEpB,6BAA6B;QAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAExB,MAAM,eAAe,GAAwB,EAAE,CAAC;QAEhD,sCAAsC;QACtC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAE/C,6BAA6B;YAC7B,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;YAED,kBAAkB;YAClB,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACvB,SAAS;YACX,CAAC;YAED,wBAAwB;YACxB,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YAED,gCAAgC;YAChC,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAC9C,WAAW,EACX,SAAS,EACT,OAAO,CACR,CAAC;YAEF,4CAA4C;YAC5C,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACpD,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC;gBAC3E,CAAC,CAAC,YAAY,CAAC;YAEjB,0CAA0C;YAC1C,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;gBACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxD,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,MAAM,SAAS,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;YACxE,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;gBACvB,SAAS,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,OAAe;QAC5B,kCAAkC;QAClC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAEnE,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAEnD,OAAO;gBACL,IAAI,EAAE,IAAI,IAAI,EAAE;gBAChB,QAAQ,EAAE,IAAI;gBACd,QAAQ;gBACR,cAAc,EAAE,qBAAqB,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrD,SAAS,EAAE,IAAI,KAAK,SAAS;aAC9B,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,OAAO;YACL,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,EAAE;YACZ,cAAc,EAAE,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC;YAClD,SAAS,EAAE,OAAO,KAAK,SAAS;SACjC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,OAAe;QACnC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjC,KAAK,EAAE,CAAC;gBACR,OAAO,IAAI,IAAI,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACxC,KAAK,EAAE,CAAC;gBACR,OAAO,IAAI,IAAI,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBACvC,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;oBACnB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5B,CAAC;gBACD,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,sBAAsB,CAC5B,MAA2B,EAC3B,WAA8B,EAC9B,QAAkB;QAElB,sEAAsE;QACtE,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAE1D,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC3E,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,0BAA0B;QAC1B,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;QAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAE,EAAE,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC;QACrD,CAAC;QAED,gCAAgC;QAChC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5B,GAAG,KAAK;YACR,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC;SACrD,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,KAAwB;QAChD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAC9C,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,cAAc,CACpB,IAAc,EACd,aAAkC;QAElC,2CAA2C;QAC3C,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO;gBACL,GAAG,IAAI;gBACP,IAAI,EAAE,WAAW;gBACjB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;aAC9C,CAAC;QACJ,CAAC;QAED,2CAA2C;QAC3C,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,GAAG,IAAI;gBACP,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;aACtE,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,mBAAmB,CACjB,KAAwB,EACxB,SAAyC;QAEzC,MAAM,KAAK,GAAwB,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAElC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAE7D,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,qBAAqB,CAC3B,KAAwB,EACxB,SAAyC,EACzC,KAA0B,EAC1B,OAAoB;QAEpB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAExB,kCAAkC;QAClC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAE/C,IAAI,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAClD,SAAS;YACX,CAAC;YAED,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,YAAY,CACV,KAAwB,EACxB,YAAoB,EACpB,SAAyC;QAEzC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,eAAe,CACb,YAAoB,EACpB,SAAyC;QAEzC,MAAM,WAAW,GAAwB,EAAE,CAAC;QAE5C,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;gBAC3B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC;gBACtD,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pydantic Model Extractor
|
|
3
|
+
*
|
|
4
|
+
* Main orchestrator for extracting Pydantic model information.
|
|
5
|
+
* Coordinates field, validator, config, and inheritance extraction.
|
|
6
|
+
*
|
|
7
|
+
* @module pydantic/pydantic-extractor
|
|
8
|
+
*/
|
|
9
|
+
import type { TreeSitterTree } from '../types.js';
|
|
10
|
+
import type { PydanticModelInfo, PydanticFieldInfo } from '../types.js';
|
|
11
|
+
import type { ExtractionContext } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Main Pydantic model extractor.
|
|
14
|
+
*
|
|
15
|
+
* Orchestrates extraction of:
|
|
16
|
+
* - Model definitions
|
|
17
|
+
* - Field definitions with types and constraints
|
|
18
|
+
* - Validators (v1 and v2)
|
|
19
|
+
* - Model configuration
|
|
20
|
+
* - Inheritance resolution
|
|
21
|
+
*/
|
|
22
|
+
export declare class PydanticExtractor {
|
|
23
|
+
private readonly fieldExtractor;
|
|
24
|
+
private readonly validatorExtractor;
|
|
25
|
+
private readonly configExtractor;
|
|
26
|
+
private readonly inheritanceResolver;
|
|
27
|
+
constructor();
|
|
28
|
+
/**
|
|
29
|
+
* Extract all Pydantic models from a tree-sitter tree.
|
|
30
|
+
*
|
|
31
|
+
* @param tree - The parsed tree-sitter tree
|
|
32
|
+
* @param source - Original source code
|
|
33
|
+
* @param options - Extraction options
|
|
34
|
+
* @returns Array of extracted model information
|
|
35
|
+
*/
|
|
36
|
+
extractModels(tree: TreeSitterTree, source: string, options?: Partial<ExtractionContext>): PydanticModelInfo[];
|
|
37
|
+
/**
|
|
38
|
+
* Extract a single model with resolved inheritance.
|
|
39
|
+
*
|
|
40
|
+
* @param modelName - Name of the model to extract
|
|
41
|
+
* @param allModels - Map of all models
|
|
42
|
+
* @returns Model with resolved inherited fields
|
|
43
|
+
*/
|
|
44
|
+
resolveModel(modelName: string, allModels: Map<string, PydanticModelInfo>): PydanticModelInfo | null;
|
|
45
|
+
/**
|
|
46
|
+
* Get all models as a map for easy lookup.
|
|
47
|
+
*/
|
|
48
|
+
modelsToMap(models: PydanticModelInfo[]): Map<string, PydanticModelInfo>;
|
|
49
|
+
/**
|
|
50
|
+
* Extract a single Pydantic model from a class definition.
|
|
51
|
+
*/
|
|
52
|
+
private extractModel;
|
|
53
|
+
/**
|
|
54
|
+
* Find all model names in the tree (first pass).
|
|
55
|
+
*/
|
|
56
|
+
private findModelNames;
|
|
57
|
+
/**
|
|
58
|
+
* Find all class definitions in the tree.
|
|
59
|
+
*/
|
|
60
|
+
private findClassDefinitions;
|
|
61
|
+
/**
|
|
62
|
+
* Extract type aliases from the tree.
|
|
63
|
+
*/
|
|
64
|
+
private extractTypeAliases;
|
|
65
|
+
/**
|
|
66
|
+
* Extract base classes from a class definition.
|
|
67
|
+
*/
|
|
68
|
+
private extractBaseClasses;
|
|
69
|
+
/**
|
|
70
|
+
* Check if base classes indicate a Pydantic model.
|
|
71
|
+
*/
|
|
72
|
+
private isPydanticModel;
|
|
73
|
+
/**
|
|
74
|
+
* Extract decorators from a class.
|
|
75
|
+
*/
|
|
76
|
+
private extractDecorators;
|
|
77
|
+
/**
|
|
78
|
+
* Extract docstring from a class body.
|
|
79
|
+
*/
|
|
80
|
+
private extractDocstring;
|
|
81
|
+
/**
|
|
82
|
+
* Detect Pydantic version from model structure.
|
|
83
|
+
*/
|
|
84
|
+
private detectPydanticVersion;
|
|
85
|
+
/**
|
|
86
|
+
* Walk the tree and call visitor for each node.
|
|
87
|
+
*/
|
|
88
|
+
private walkTree;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Convert extracted models to a flat field list for contracts.
|
|
92
|
+
*/
|
|
93
|
+
export declare function modelsToContractFields(models: PydanticModelInfo[], modelName: string): PydanticFieldInfo[] | null;
|
|
94
|
+
/**
|
|
95
|
+
* Find a model by name in the extracted models.
|
|
96
|
+
*/
|
|
97
|
+
export declare function findModel(models: PydanticModelInfo[], name: string): PydanticModelInfo | null;
|
|
98
|
+
/**
|
|
99
|
+
* Get all model names from extracted models.
|
|
100
|
+
*/
|
|
101
|
+
export declare function getModelNames(models: PydanticModelInfo[]): string[];
|
|
102
|
+
//# sourceMappingURL=pydantic-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pydantic-extractor.d.ts","sourceRoot":"","sources":["../../../../src/parsers/tree-sitter/pydantic/pydantic-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAWpD;;;;;;;;;GASG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;;IAS1D;;;;;;;OAOG;IACH,aAAa,CACX,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACvC,iBAAiB,EAAE;IA2BtB;;;;;;OAMG;IACH,YAAY,CACV,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GACxC,iBAAiB,GAAG,IAAI;IAe3B;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAYxE;;OAEG;IACH,OAAO,CAAC,YAAY;IAqEpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuD7B;;OAEG;IACH,OAAO,CAAC,QAAQ;CASjB;AAMD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,EAAE,EAC3B,SAAS,EAAE,MAAM,GAChB,iBAAiB,EAAE,GAAG,IAAI,CAG5B;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,iBAAiB,EAAE,EAC3B,IAAI,EAAE,MAAM,GACX,iBAAiB,GAAG,IAAI,CAE1B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,EAAE,CAEnE"}
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pydantic Model Extractor
|
|
3
|
+
*
|
|
4
|
+
* Main orchestrator for extracting Pydantic model information.
|
|
5
|
+
* Coordinates field, validator, config, and inheritance extraction.
|
|
6
|
+
*
|
|
7
|
+
* @module pydantic/pydantic-extractor
|
|
8
|
+
*/
|
|
9
|
+
import { createExtractionContext, PYDANTIC_BASE_CLASSES } from './types.js';
|
|
10
|
+
import { FieldExtractor } from './field-extractor.js';
|
|
11
|
+
import { ValidatorExtractor } from './validator-extractor.js';
|
|
12
|
+
import { ConfigExtractor } from './config-extractor.js';
|
|
13
|
+
import { InheritanceResolver } from './inheritance-resolver.js';
|
|
14
|
+
// ============================================
|
|
15
|
+
// Pydantic Extractor Class
|
|
16
|
+
// ============================================
|
|
17
|
+
/**
|
|
18
|
+
* Main Pydantic model extractor.
|
|
19
|
+
*
|
|
20
|
+
* Orchestrates extraction of:
|
|
21
|
+
* - Model definitions
|
|
22
|
+
* - Field definitions with types and constraints
|
|
23
|
+
* - Validators (v1 and v2)
|
|
24
|
+
* - Model configuration
|
|
25
|
+
* - Inheritance resolution
|
|
26
|
+
*/
|
|
27
|
+
export class PydanticExtractor {
|
|
28
|
+
fieldExtractor;
|
|
29
|
+
validatorExtractor;
|
|
30
|
+
configExtractor;
|
|
31
|
+
inheritanceResolver;
|
|
32
|
+
constructor() {
|
|
33
|
+
this.fieldExtractor = new FieldExtractor();
|
|
34
|
+
this.validatorExtractor = new ValidatorExtractor();
|
|
35
|
+
this.configExtractor = new ConfigExtractor();
|
|
36
|
+
this.inheritanceResolver = new InheritanceResolver();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Extract all Pydantic models from a tree-sitter tree.
|
|
40
|
+
*
|
|
41
|
+
* @param tree - The parsed tree-sitter tree
|
|
42
|
+
* @param source - Original source code
|
|
43
|
+
* @param options - Extraction options
|
|
44
|
+
* @returns Array of extracted model information
|
|
45
|
+
*/
|
|
46
|
+
extractModels(tree, source, options = {}) {
|
|
47
|
+
// First pass: find all model names
|
|
48
|
+
const modelNames = this.findModelNames(tree.rootNode);
|
|
49
|
+
// Create context with known models
|
|
50
|
+
const context = createExtractionContext(source, {
|
|
51
|
+
...options,
|
|
52
|
+
knownModels: new Set(modelNames),
|
|
53
|
+
});
|
|
54
|
+
// Extract type aliases
|
|
55
|
+
this.extractTypeAliases(tree.rootNode, context);
|
|
56
|
+
// Second pass: extract full model info
|
|
57
|
+
const models = [];
|
|
58
|
+
const classNodes = this.findClassDefinitions(tree.rootNode);
|
|
59
|
+
for (const classNode of classNodes) {
|
|
60
|
+
const model = this.extractModel(classNode, context);
|
|
61
|
+
if (model) {
|
|
62
|
+
models.push(model);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return models;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Extract a single model with resolved inheritance.
|
|
69
|
+
*
|
|
70
|
+
* @param modelName - Name of the model to extract
|
|
71
|
+
* @param allModels - Map of all models
|
|
72
|
+
* @returns Model with resolved inherited fields
|
|
73
|
+
*/
|
|
74
|
+
resolveModel(modelName, allModels) {
|
|
75
|
+
const model = allModels.get(modelName);
|
|
76
|
+
if (!model)
|
|
77
|
+
return null;
|
|
78
|
+
const resolvedFields = this.inheritanceResolver.resolveFields(model, allModels);
|
|
79
|
+
return {
|
|
80
|
+
...model,
|
|
81
|
+
fields: resolvedFields,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get all models as a map for easy lookup.
|
|
86
|
+
*/
|
|
87
|
+
modelsToMap(models) {
|
|
88
|
+
const map = new Map();
|
|
89
|
+
for (const model of models) {
|
|
90
|
+
map.set(model.name, model);
|
|
91
|
+
}
|
|
92
|
+
return map;
|
|
93
|
+
}
|
|
94
|
+
// ============================================
|
|
95
|
+
// Model Extraction
|
|
96
|
+
// ============================================
|
|
97
|
+
/**
|
|
98
|
+
* Extract a single Pydantic model from a class definition.
|
|
99
|
+
*/
|
|
100
|
+
extractModel(classNode, context) {
|
|
101
|
+
// Get class name
|
|
102
|
+
const nameNode = classNode.childForFieldName('name');
|
|
103
|
+
if (!nameNode)
|
|
104
|
+
return null;
|
|
105
|
+
const name = nameNode.text;
|
|
106
|
+
// Get base classes
|
|
107
|
+
const bases = this.extractBaseClasses(classNode);
|
|
108
|
+
// Check if this is a Pydantic model
|
|
109
|
+
if (!this.isPydanticModel(bases)) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
// Get class body
|
|
113
|
+
const bodyNode = classNode.childForFieldName('body');
|
|
114
|
+
if (!bodyNode)
|
|
115
|
+
return null;
|
|
116
|
+
// Extract components
|
|
117
|
+
const fields = this.fieldExtractor.extractFields(bodyNode, context);
|
|
118
|
+
const validators = this.validatorExtractor.extractValidators(bodyNode, context);
|
|
119
|
+
const config = this.configExtractor.extractConfig(bodyNode, context);
|
|
120
|
+
// Extract decorators
|
|
121
|
+
const decorators = this.extractDecorators(classNode);
|
|
122
|
+
// Extract docstring
|
|
123
|
+
const docstring = this.extractDocstring(bodyNode);
|
|
124
|
+
// Detect Pydantic version
|
|
125
|
+
const version = this.detectPydanticVersion(bodyNode, bases);
|
|
126
|
+
// Build position info
|
|
127
|
+
const positions = context.includePositions
|
|
128
|
+
? {
|
|
129
|
+
startPosition: {
|
|
130
|
+
row: classNode.startPosition.row,
|
|
131
|
+
column: classNode.startPosition.column,
|
|
132
|
+
},
|
|
133
|
+
endPosition: {
|
|
134
|
+
row: classNode.endPosition.row,
|
|
135
|
+
column: classNode.endPosition.column,
|
|
136
|
+
},
|
|
137
|
+
}
|
|
138
|
+
: {
|
|
139
|
+
startPosition: { row: 0, column: 0 },
|
|
140
|
+
endPosition: { row: 0, column: 0 },
|
|
141
|
+
};
|
|
142
|
+
return {
|
|
143
|
+
name,
|
|
144
|
+
bases,
|
|
145
|
+
fields,
|
|
146
|
+
validators,
|
|
147
|
+
config,
|
|
148
|
+
decorators,
|
|
149
|
+
docstring,
|
|
150
|
+
version,
|
|
151
|
+
...positions,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// ============================================
|
|
155
|
+
// Discovery Methods
|
|
156
|
+
// ============================================
|
|
157
|
+
/**
|
|
158
|
+
* Find all model names in the tree (first pass).
|
|
159
|
+
*/
|
|
160
|
+
findModelNames(rootNode) {
|
|
161
|
+
const names = [];
|
|
162
|
+
const classNodes = this.findClassDefinitions(rootNode);
|
|
163
|
+
for (const classNode of classNodes) {
|
|
164
|
+
const nameNode = classNode.childForFieldName('name');
|
|
165
|
+
if (!nameNode)
|
|
166
|
+
continue;
|
|
167
|
+
const bases = this.extractBaseClasses(classNode);
|
|
168
|
+
if (this.isPydanticModel(bases)) {
|
|
169
|
+
names.push(nameNode.text);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return names;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Find all class definitions in the tree.
|
|
176
|
+
*/
|
|
177
|
+
findClassDefinitions(node) {
|
|
178
|
+
const classes = [];
|
|
179
|
+
this.walkTree(node, (n) => {
|
|
180
|
+
if (n.type === 'class_definition') {
|
|
181
|
+
classes.push(n);
|
|
182
|
+
}
|
|
183
|
+
// Also check decorated definitions
|
|
184
|
+
if (n.type === 'decorated_definition') {
|
|
185
|
+
for (const child of n.namedChildren) {
|
|
186
|
+
if (child.type === 'class_definition') {
|
|
187
|
+
classes.push(child);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
return classes;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Extract type aliases from the tree.
|
|
196
|
+
*/
|
|
197
|
+
extractTypeAliases(rootNode, context) {
|
|
198
|
+
this.walkTree(rootNode, (node) => {
|
|
199
|
+
if (node.type !== 'expression_statement')
|
|
200
|
+
return;
|
|
201
|
+
const inner = node.namedChildren[0];
|
|
202
|
+
if (!inner || inner.type !== 'assignment')
|
|
203
|
+
return;
|
|
204
|
+
const left = inner.childForFieldName('left');
|
|
205
|
+
const right = inner.childForFieldName('right');
|
|
206
|
+
if (!left || !right)
|
|
207
|
+
return;
|
|
208
|
+
if (left.type !== 'identifier')
|
|
209
|
+
return;
|
|
210
|
+
// Check if this looks like a type alias
|
|
211
|
+
const name = left.text;
|
|
212
|
+
const value = right.text;
|
|
213
|
+
// Simple heuristic: uppercase first letter or ends with common type suffixes
|
|
214
|
+
if (/^[A-Z]/.test(name) || name.endsWith('Type') || name.endsWith('T')) {
|
|
215
|
+
context.typeAliases.set(name, value);
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
// ============================================
|
|
220
|
+
// Base Class Handling
|
|
221
|
+
// ============================================
|
|
222
|
+
/**
|
|
223
|
+
* Extract base classes from a class definition.
|
|
224
|
+
*/
|
|
225
|
+
extractBaseClasses(classNode) {
|
|
226
|
+
const bases = [];
|
|
227
|
+
const argumentList = classNode.childForFieldName('superclasses');
|
|
228
|
+
if (!argumentList)
|
|
229
|
+
return bases;
|
|
230
|
+
for (const child of argumentList.namedChildren) {
|
|
231
|
+
// Handle simple identifiers
|
|
232
|
+
if (child.type === 'identifier') {
|
|
233
|
+
bases.push(child.text);
|
|
234
|
+
}
|
|
235
|
+
// Handle attributes (e.g., pydantic.BaseModel)
|
|
236
|
+
else if (child.type === 'attribute') {
|
|
237
|
+
bases.push(child.text);
|
|
238
|
+
}
|
|
239
|
+
// Handle subscripts (e.g., Generic[T])
|
|
240
|
+
else if (child.type === 'subscript') {
|
|
241
|
+
bases.push(child.text);
|
|
242
|
+
}
|
|
243
|
+
// Handle calls (e.g., some_factory())
|
|
244
|
+
else if (child.type === 'call') {
|
|
245
|
+
const func = child.childForFieldName('function');
|
|
246
|
+
if (func) {
|
|
247
|
+
bases.push(func.text);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return bases;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Check if base classes indicate a Pydantic model.
|
|
255
|
+
*/
|
|
256
|
+
isPydanticModel(bases) {
|
|
257
|
+
return bases.some((base) => {
|
|
258
|
+
// Direct match
|
|
259
|
+
if (PYDANTIC_BASE_CLASSES.has(base))
|
|
260
|
+
return true;
|
|
261
|
+
// Check without generic args
|
|
262
|
+
const baseName = base.split('[')[0];
|
|
263
|
+
if (baseName && PYDANTIC_BASE_CLASSES.has(baseName))
|
|
264
|
+
return true;
|
|
265
|
+
// Check for common patterns
|
|
266
|
+
if (base.includes('BaseModel') || base.includes('BaseSettings')) {
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
return false;
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
// ============================================
|
|
273
|
+
// Decorator & Docstring Extraction
|
|
274
|
+
// ============================================
|
|
275
|
+
/**
|
|
276
|
+
* Extract decorators from a class.
|
|
277
|
+
*/
|
|
278
|
+
extractDecorators(classNode) {
|
|
279
|
+
const decorators = [];
|
|
280
|
+
const parent = classNode.parent;
|
|
281
|
+
if (parent?.type === 'decorated_definition') {
|
|
282
|
+
for (const child of parent.namedChildren) {
|
|
283
|
+
if (child.type === 'decorator') {
|
|
284
|
+
const content = child.namedChildren[0];
|
|
285
|
+
if (content) {
|
|
286
|
+
decorators.push(content.text);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return decorators;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Extract docstring from a class body.
|
|
295
|
+
*/
|
|
296
|
+
extractDocstring(bodyNode) {
|
|
297
|
+
if (bodyNode.namedChildCount === 0)
|
|
298
|
+
return null;
|
|
299
|
+
const firstChild = bodyNode.namedChildren[0];
|
|
300
|
+
if (firstChild?.type !== 'expression_statement')
|
|
301
|
+
return null;
|
|
302
|
+
const expr = firstChild.namedChildren[0];
|
|
303
|
+
if (expr?.type !== 'string')
|
|
304
|
+
return null;
|
|
305
|
+
// Remove quotes
|
|
306
|
+
const text = expr.text;
|
|
307
|
+
if (text.startsWith('"""') || text.startsWith("'''")) {
|
|
308
|
+
return text.slice(3, -3).trim();
|
|
309
|
+
}
|
|
310
|
+
if (text.startsWith('"') || text.startsWith("'")) {
|
|
311
|
+
return text.slice(1, -1).trim();
|
|
312
|
+
}
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
315
|
+
// ============================================
|
|
316
|
+
// Version Detection
|
|
317
|
+
// ============================================
|
|
318
|
+
/**
|
|
319
|
+
* Detect Pydantic version from model structure.
|
|
320
|
+
*/
|
|
321
|
+
detectPydanticVersion(bodyNode, bases) {
|
|
322
|
+
// Check for v2 indicators
|
|
323
|
+
for (const child of bodyNode.namedChildren) {
|
|
324
|
+
// model_config is v2
|
|
325
|
+
if (child.type === 'expression_statement') {
|
|
326
|
+
const inner = child.namedChildren[0];
|
|
327
|
+
if (inner?.type === 'assignment') {
|
|
328
|
+
const left = inner.childForFieldName('left');
|
|
329
|
+
if (left?.text === 'model_config') {
|
|
330
|
+
return 2;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// Config class is v1
|
|
335
|
+
if (child.type === 'class_definition') {
|
|
336
|
+
const name = child.childForFieldName('name');
|
|
337
|
+
if (name?.text === 'Config') {
|
|
338
|
+
return 1;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
// Check for v2 validators
|
|
342
|
+
if (child.type === 'decorated_definition') {
|
|
343
|
+
for (const decorator of child.namedChildren) {
|
|
344
|
+
if (decorator.type === 'decorator') {
|
|
345
|
+
const content = decorator.namedChildren[0];
|
|
346
|
+
const text = content?.text ?? '';
|
|
347
|
+
if (text.includes('field_validator') || text.includes('model_validator')) {
|
|
348
|
+
return 2;
|
|
349
|
+
}
|
|
350
|
+
if (text.includes('validator') || text.includes('root_validator')) {
|
|
351
|
+
return 1;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
// Check base classes for hints
|
|
358
|
+
if (bases.some((b) => b.includes('BaseSettings'))) {
|
|
359
|
+
// BaseSettings exists in both, but v2 has different import
|
|
360
|
+
return 'unknown';
|
|
361
|
+
}
|
|
362
|
+
return 'unknown';
|
|
363
|
+
}
|
|
364
|
+
// ============================================
|
|
365
|
+
// Tree Walking
|
|
366
|
+
// ============================================
|
|
367
|
+
/**
|
|
368
|
+
* Walk the tree and call visitor for each node.
|
|
369
|
+
*/
|
|
370
|
+
walkTree(node, visitor) {
|
|
371
|
+
visitor(node);
|
|
372
|
+
for (const child of node.children) {
|
|
373
|
+
this.walkTree(child, visitor);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
// ============================================
|
|
378
|
+
// Utility Functions
|
|
379
|
+
// ============================================
|
|
380
|
+
/**
|
|
381
|
+
* Convert extracted models to a flat field list for contracts.
|
|
382
|
+
*/
|
|
383
|
+
export function modelsToContractFields(models, modelName) {
|
|
384
|
+
const model = models.find((m) => m.name === modelName);
|
|
385
|
+
return model?.fields ?? null;
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Find a model by name in the extracted models.
|
|
389
|
+
*/
|
|
390
|
+
export function findModel(models, name) {
|
|
391
|
+
return models.find((m) => m.name === name) ?? null;
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Get all model names from extracted models.
|
|
395
|
+
*/
|
|
396
|
+
export function getModelNames(models) {
|
|
397
|
+
return models.map((m) => m.name);
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=pydantic-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pydantic-extractor.js","sourceRoot":"","sources":["../../../../src/parsers/tree-sitter/pydantic/pydantic-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pydantic Type Resolver
|
|
3
|
+
*
|
|
4
|
+
* Resolves Python type annotations to TypeInfo structures.
|
|
5
|
+
* Handles Optional, Union, List, Dict, Literal, and nested generics.
|
|
6
|
+
*
|
|
7
|
+
* @module pydantic/type-resolver
|
|
8
|
+
*/
|
|
9
|
+
import type { TypeInfo } from '../types.js';
|
|
10
|
+
import type { ExtractionContext } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Resolves Python type annotations to TypeInfo.
|
|
13
|
+
*
|
|
14
|
+
* Handles:
|
|
15
|
+
* - Simple types: `str`, `int`, `bool`
|
|
16
|
+
* - Optional: `Optional[str]`, `str | None`
|
|
17
|
+
* - Union: `Union[str, int]`, `str | int`
|
|
18
|
+
* - List/Dict: `List[str]`, `Dict[str, int]`
|
|
19
|
+
* - Literal: `Literal['a', 'b', 'c']`
|
|
20
|
+
* - Nested: `List[Dict[str, Optional[int]]]`
|
|
21
|
+
*/
|
|
22
|
+
export declare class TypeResolver {
|
|
23
|
+
/**
|
|
24
|
+
* Resolve a type annotation string to TypeInfo.
|
|
25
|
+
*
|
|
26
|
+
* @param typeStr - The type annotation string
|
|
27
|
+
* @param context - Extraction context
|
|
28
|
+
* @param depth - Current recursion depth
|
|
29
|
+
* @returns Resolved TypeInfo
|
|
30
|
+
*/
|
|
31
|
+
resolve(typeStr: string, context: ExtractionContext, depth?: number): TypeInfo;
|
|
32
|
+
/**
|
|
33
|
+
* Create an unknown type placeholder.
|
|
34
|
+
*/
|
|
35
|
+
createUnknownType(raw?: string): TypeInfo;
|
|
36
|
+
/**
|
|
37
|
+
* Parse a type string into a structured format.
|
|
38
|
+
*/
|
|
39
|
+
private parseTypeString;
|
|
40
|
+
/**
|
|
41
|
+
* Check if type string contains union operator (|) outside brackets.
|
|
42
|
+
*/
|
|
43
|
+
private containsUnionOperator;
|
|
44
|
+
/**
|
|
45
|
+
* Parse a union type (str | int | None).
|
|
46
|
+
*/
|
|
47
|
+
private parseUnionType;
|
|
48
|
+
/**
|
|
49
|
+
* Split union members respecting bracket depth.
|
|
50
|
+
*/
|
|
51
|
+
private splitUnionMembers;
|
|
52
|
+
/**
|
|
53
|
+
* Parse generic type arguments.
|
|
54
|
+
*/
|
|
55
|
+
private parseGenericArgs;
|
|
56
|
+
/**
|
|
57
|
+
* Convert ParsedType to TypeInfo.
|
|
58
|
+
*/
|
|
59
|
+
private parsedToTypeInfo;
|
|
60
|
+
/**
|
|
61
|
+
* Handle Union type conversion.
|
|
62
|
+
*/
|
|
63
|
+
private handleUnionType;
|
|
64
|
+
/**
|
|
65
|
+
* Handle Literal type conversion.
|
|
66
|
+
*/
|
|
67
|
+
private handleLiteralType;
|
|
68
|
+
/**
|
|
69
|
+
* Handle List/Sequence type conversion.
|
|
70
|
+
*/
|
|
71
|
+
private handleListType;
|
|
72
|
+
/**
|
|
73
|
+
* Handle Dict/Mapping type conversion.
|
|
74
|
+
*/
|
|
75
|
+
private handleDictType;
|
|
76
|
+
/**
|
|
77
|
+
* Handle Tuple type conversion.
|
|
78
|
+
*/
|
|
79
|
+
private handleTupleType;
|
|
80
|
+
/**
|
|
81
|
+
* Check if a type name is a list-like type.
|
|
82
|
+
*/
|
|
83
|
+
private isListType;
|
|
84
|
+
/**
|
|
85
|
+
* Check if a type name is a dict-like type.
|
|
86
|
+
*/
|
|
87
|
+
private isDictType;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=type-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-resolver.d.ts","sourceRoot":"","sources":["../../../../src/parsers/tree-sitter/pydantic/type-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAc,MAAM,YAAY,CAAC;AAOhE;;;;;;;;;;GAUG;AACH,qBAAa,YAAY;IACvB;;;;;;;OAOG;IACH,OAAO,CACL,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,iBAAiB,EAC1B,KAAK,GAAE,MAAU,GAChB,QAAQ;IAsBX;;OAEG;IACH,iBAAiB,CAAC,GAAG,GAAE,MAAkB,GAAG,QAAQ;IAoBpD;;OAEG;IACH,OAAO,CAAC,eAAe;IAgCvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAU7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAgCtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2BzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiCxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkExB;;OAEG;IACH,OAAO,CAAC,eAAe;IAwCvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmCzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,cAAc;IA8BtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAwBvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,UAAU;CAQnB"}
|