modwire 9.3.0__tar.gz → 10.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (419) hide show
  1. {modwire-9.3.0 → modwire-10.0.0}/.dev/modwire.egg-info/SOURCES.txt +2 -0
  2. {modwire-9.3.0 → modwire-10.0.0}/PKG-INFO +9 -1
  3. {modwire-9.3.0 → modwire-10.0.0}/README.md +8 -0
  4. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/application.py +6 -0
  5. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/dependency/services/graph_builder.py +1 -1
  6. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/php/script.php +0 -0
  7. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/php/script.src.php +88 -8
  8. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/typescript/script.js +58 -11
  9. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/typescript/script.ts +61 -11
  10. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/services/php_extractor.py +9 -3
  11. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/services/python_extractor.py +6 -3
  12. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/services/python_syntax_parser.py +93 -12
  13. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/services/type_script_extractor.py +9 -3
  14. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/models/implementation_manifest.py +3 -3
  15. modwire-10.0.0/src/modwire/implementation/manifest/models/manifest_attribute.py +24 -0
  16. modwire-10.0.0/src/modwire/implementation/manifest/models/manifest_dependency.py +21 -0
  17. modwire-10.0.0/src/modwire/implementation/manifest/models/manifest_inheritance.py +19 -0
  18. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/services/code_map_manifest_compiler.py +88 -9
  19. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/code_map.py +1 -1
  20. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/dependency_graph.py +5 -6
  21. modwire-10.0.0/src/modwire/shared/code/models/edge.py +23 -0
  22. modwire-10.0.0/src/modwire/shared/code/models/source_class_property.py +11 -0
  23. modwire-10.0.0/src/modwire/shared/code/models/source_inheritance.py +19 -0
  24. modwire-10.0.0/src/modwire/shared/code/models/source_member_kind.py +8 -0
  25. modwire-10.0.0/src/modwire/shared/code/models/source_relation_kind.py +9 -0
  26. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_symbol.py +1 -0
  27. modwire-10.0.0/tests/application/test_08_implementation_manifest.py +279 -0
  28. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/dependency/test_02_invariants.py +5 -5
  29. {modwire-9.3.0 → modwire-10.0.0}/tests/shared/code/test_02_invariants.py +1 -1
  30. {modwire-9.3.0 → modwire-10.0.0}/tests/support/code_map.py +12 -2
  31. modwire-9.3.0/src/modwire/implementation/manifest/models/manifest_attribute.py +0 -8
  32. modwire-9.3.0/src/modwire/implementation/manifest/models/manifest_dependency.py +0 -12
  33. modwire-9.3.0/src/modwire/implementation/manifest/models/manifest_inheritance.py +0 -8
  34. modwire-9.3.0/src/modwire/shared/code/models/edge.py +0 -14
  35. modwire-9.3.0/src/modwire/shared/code/models/source_class_property.py +0 -6
  36. modwire-9.3.0/src/modwire/shared/code/models/source_inheritance.py +0 -10
  37. modwire-9.3.0/tests/application/test_08_implementation_manifest.py +0 -114
  38. {modwire-9.3.0 → modwire-10.0.0}/.github/workflows/ci.yml +0 -0
  39. {modwire-9.3.0 → modwire-10.0.0}/.github/workflows/release.yml +0 -0
  40. {modwire-9.3.0 → modwire-10.0.0}/.gitignore +0 -0
  41. {modwire-9.3.0 → modwire-10.0.0}/AGENTS.md +0 -0
  42. {modwire-9.3.0 → modwire-10.0.0}/LICENSE +0 -0
  43. {modwire-9.3.0 → modwire-10.0.0}/MANIFEST.in +0 -0
  44. {modwire-9.3.0 → modwire-10.0.0}/Makefile +0 -0
  45. {modwire-9.3.0 → modwire-10.0.0}/docs/target-language-ownership.md +0 -0
  46. {modwire-9.3.0 → modwire-10.0.0}/pyproject.toml +0 -0
  47. {modwire-9.3.0 → modwire-10.0.0}/scripts/check_extractors.py +0 -0
  48. {modwire-9.3.0 → modwire-10.0.0}/scripts/generate_docs.py +0 -0
  49. {modwire-9.3.0 → modwire-10.0.0}/scripts/verify_consumer.py +0 -0
  50. {modwire-9.3.0 → modwire-10.0.0}/setup.cfg +0 -0
  51. {modwire-9.3.0 → modwire-10.0.0}/setup.py +0 -0
  52. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/__init__.py +0 -0
  53. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/__main__.py +0 -0
  54. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/__init__.py +0 -0
  55. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/boundaries/__init__.py +0 -0
  56. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/boundaries/application.py +0 -0
  57. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/boundaries/domain.py +0 -0
  58. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/boundaries/models/__init__.py +0 -0
  59. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/boundaries/models/edge_rule_violation.py +0 -0
  60. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/boundaries/models/flow_report.py +0 -0
  61. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/boundaries/models/flow_violation.py +0 -0
  62. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/boundaries/models/types.py +0 -0
  63. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/boundaries/services/__init__.py +0 -0
  64. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/boundaries/services/backward_flow_analyzer.py +0 -0
  65. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/boundaries/services/boundaries_flow_analyzer.py +0 -0
  66. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/boundaries/services/module_boundary_analyzer.py +0 -0
  67. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/boundaries/services/no_cycles_flow_analyzer.py +0 -0
  68. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/boundaries/services/no_reentry_flow_analyzer.py +0 -0
  69. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/config/__init__.py +0 -0
  70. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/config/application.py +0 -0
  71. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/config/models/__init__.py +0 -0
  72. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/config/models/architecture_config.py +0 -0
  73. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/config/models/boundaries_config.py +0 -0
  74. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/config/models/boundary_rule.py +0 -0
  75. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/config/models/configuration_value.py +0 -0
  76. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/config/models/flow_realm.py +0 -0
  77. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/config/models/flow_rules.py +0 -0
  78. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/config/models/shape_config.py +0 -0
  79. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/config/models/shape_realm.py +0 -0
  80. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/config/models/shape_rules.py +0 -0
  81. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/config/models/tag_rule.py +0 -0
  82. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/facade.py +0 -0
  83. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/__init__.py +0 -0
  84. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/application.py +0 -0
  85. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/domain.py +0 -0
  86. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/models/__init__.py +0 -0
  87. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/models/callable_report_entry.py +0 -0
  88. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/models/callables_report.py +0 -0
  89. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/models/clusters_report.py +0 -0
  90. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/models/clusters_report_item.py +0 -0
  91. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/models/coherence_report.py +0 -0
  92. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/models/exports_report.py +0 -0
  93. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/models/exports_report_item.py +0 -0
  94. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/models/hotspots_report.py +0 -0
  95. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/models/hotspots_report_item.py +0 -0
  96. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/models/insight_report.py +0 -0
  97. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/services/__init__.py +0 -0
  98. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/services/callables_reporter.py +0 -0
  99. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/services/clusters_reporter.py +0 -0
  100. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/services/coherence_reporter.py +0 -0
  101. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/services/exports_reporter.py +0 -0
  102. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/services/hotspots_reporter.py +0 -0
  103. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/insights/services/insight_report_field_map.py +0 -0
  104. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/map/__init__.py +0 -0
  105. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/map/application.py +0 -0
  106. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/map/domain.py +0 -0
  107. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/map/models/__init__.py +0 -0
  108. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/map/models/architecture_map.py +0 -0
  109. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/map/models/architecture_realm.py +0 -0
  110. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/map/models/tag_map.py +0 -0
  111. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/map/models/tag_match.py +0 -0
  112. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/map/services/__init__.py +0 -0
  113. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/map/services/architecture_map_loader.py +0 -0
  114. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/map/services/tag_matcher.py +0 -0
  115. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/report/__init__.py +0 -0
  116. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/report/application.py +0 -0
  117. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/report/domain.py +0 -0
  118. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/report/models/__init__.py +0 -0
  119. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/report/models/architecture_group.py +0 -0
  120. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/report/models/map_report.py +0 -0
  121. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/report/models/report_catalog.py +0 -0
  122. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/report/models/report_descriptor.py +0 -0
  123. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/report/models/report_item.py +0 -0
  124. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/report/models/report_metadata.py +0 -0
  125. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/report/models/report_node.py +0 -0
  126. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/report/models/report_section.py +0 -0
  127. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/report/services/__init__.py +0 -0
  128. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/report/services/map_report_collector.py +0 -0
  129. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/__init__.py +0 -0
  130. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/application.py +0 -0
  131. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/domain.py +0 -0
  132. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/models/__init__.py +0 -0
  133. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/models/shape_realm_architecture_map.py +0 -0
  134. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/models/shape_report.py +0 -0
  135. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/models/shape_violation.py +0 -0
  136. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/services/__init__.py +0 -0
  137. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/services/abstract_class_resolver.py +0 -0
  138. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/services/callable_resolver.py +0 -0
  139. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/services/class_resolver.py +0 -0
  140. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/services/file_resolver.py +0 -0
  141. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/services/import_resolver.py +0 -0
  142. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/services/property_resolver.py +0 -0
  143. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/services/signature_resolver.py +0 -0
  144. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/architecture/shape/services/symbol_resolver.py +0 -0
  145. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/autowiring.py +0 -0
  146. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/__init__.py +0 -0
  147. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/__init__.py +0 -0
  148. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/application.py +0 -0
  149. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/domain.py +0 -0
  150. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/models/__init__.py +0 -0
  151. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/models/cache_entry.py +0 -0
  152. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/models/cache_key.py +0 -0
  153. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/models/cache_kind.py +0 -0
  154. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/models/cache_options.py +0 -0
  155. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/models/cache_outcome.py +0 -0
  156. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/models/cache_plan.py +0 -0
  157. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/models/cache_stage.py +0 -0
  158. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/models/cache_storage_state.py +0 -0
  159. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/models/cached_result.py +0 -0
  160. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/models/source_cache_entry.py +0 -0
  161. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/services/__init__.py +0 -0
  162. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/services/cache_codec.py +0 -0
  163. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/services/cache_identity.py +0 -0
  164. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/cache/services/filesystem_cache_storage.py +0 -0
  165. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/documentation/__init__.py +0 -0
  166. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/documentation/application.py +0 -0
  167. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/documentation/services/__init__.py +0 -0
  168. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/documentation/services/documentation_generator.py +0 -0
  169. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/facade.py +0 -0
  170. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/initialization/__init__.py +0 -0
  171. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/initialization/application.py +0 -0
  172. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/initialization/models/__init__.py +0 -0
  173. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/initialization/models/initialization_result.py +0 -0
  174. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/initialization/services/__init__.py +0 -0
  175. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/initialization/services/initialization_service.py +0 -0
  176. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/__init__.py +0 -0
  177. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/application.py +0 -0
  178. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/domain.py +0 -0
  179. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/models/__init__.py +0 -0
  180. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/models/command_request.py +0 -0
  181. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/models/extractor_batch_input.py +0 -0
  182. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/models/extractor_command_input.py +0 -0
  183. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/models/extractor_source_input.py +0 -0
  184. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/models/report_pipeline_context.py +0 -0
  185. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/models/source_entry.py +0 -0
  186. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/models/source_inventory.py +0 -0
  187. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/__init__.py +0 -0
  188. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/batch_source_reader.py +0 -0
  189. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/callables_insight.py +0 -0
  190. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/clusters_insight.py +0 -0
  191. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/coherence_insight.py +0 -0
  192. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/command_line.py +0 -0
  193. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/configuration_loader.py +0 -0
  194. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/extractor_command.py +0 -0
  195. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/flow_violations.py +0 -0
  196. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/hotspots_insight.py +0 -0
  197. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/map_tree.py +0 -0
  198. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/output_console.py +0 -0
  199. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/shape_violations.py +0 -0
  200. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/source_manifest_builder.py +0 -0
  201. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/success.py +0 -0
  202. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/unknown_files_warning.py +0 -0
  203. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/pipeline/services/unused_exports_insight.py +0 -0
  204. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/resources/__init__.py +0 -0
  205. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/resources/application.py +0 -0
  206. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/resources/models/__init__.py +0 -0
  207. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/resources/models/defaults.py +0 -0
  208. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/resources/models/init_asset.py +0 -0
  209. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/resources/templates/AGENTS.md +0 -0
  210. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/resources/templates/ARCHITECTURE.md +0 -0
  211. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/resources/templates/INDEX.md +0 -0
  212. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/resources/templates/MODWIRE.md +0 -0
  213. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/resources/templates/RULES.md +0 -0
  214. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/resources/templates/TESTING.md +0 -0
  215. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/resources/templates/WORKFLOW.md +0 -0
  216. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/cli/resources/templates/architecture.yaml +0 -0
  217. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/__init__.py +0 -0
  218. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/dependency/__init__.py +0 -0
  219. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/dependency/application.py +0 -0
  220. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/dependency/domain.py +0 -0
  221. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/dependency/services/__init__.py +0 -0
  222. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/dependency/services/import_identity_index.py +0 -0
  223. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/dependency/services/import_resolver.py +0 -0
  224. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/__init__.py +0 -0
  225. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/application.py +0 -0
  226. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/domain.py +0 -0
  227. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/models/__init__.py +0 -0
  228. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/models/batch_config.py +0 -0
  229. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/models/extraction_request.py +0 -0
  230. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/models/extractor_resource.py +0 -0
  231. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/models/extractor_resource_set.py +0 -0
  232. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/models/extractor_runtime.py +0 -0
  233. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/models/python_call_context.py +0 -0
  234. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/__init__.py +0 -0
  235. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/php/build.php +0 -0
  236. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/php/build.py +0 -0
  237. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/php/composer.json +0 -0
  238. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/php/composer.lock +0 -0
  239. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/python/__init__.py +0 -0
  240. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/python/script.py +0 -0
  241. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/typescript/build.mjs +0 -0
  242. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/typescript/build.py +0 -0
  243. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/typescript/package-lock.json +0 -0
  244. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/typescript/package.json +0 -0
  245. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/resources/typescript/tsconfig.json +0 -0
  246. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/services/__init__.py +0 -0
  247. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/extractors/services/python_call_reader.py +0 -0
  248. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/extraction/facade.py +0 -0
  249. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/__init__.py +0 -0
  250. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/facade.py +0 -0
  251. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/__init__.py +0 -0
  252. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/application.py +0 -0
  253. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/contracts/__init__.py +0 -0
  254. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/contracts/manifest_compiler.py +0 -0
  255. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/contracts/manifest_serializer.py +0 -0
  256. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/models/__init__.py +0 -0
  257. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/models/digest_algorithm.py +0 -0
  258. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/models/implementation_manifest_document.py +0 -0
  259. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/models/manifest_annotation.py +0 -0
  260. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/models/manifest_callable.py +0 -0
  261. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/models/manifest_format.py +0 -0
  262. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/models/manifest_parameter.py +0 -0
  263. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/models/manifest_span.py +0 -0
  264. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/models/manifest_symbol.py +0 -0
  265. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/services/__init__.py +0 -0
  266. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/implementation/manifest/services/canonical_json_manifest_serializer.py +0 -0
  267. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/py.typed +0 -0
  268. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/__init__.py +0 -0
  269. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/__init__.py +0 -0
  270. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/application.py +0 -0
  271. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/domain.py +0 -0
  272. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/__init__.py +0 -0
  273. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/capability_coverage.py +0 -0
  274. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/capability_status.py +0 -0
  275. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/code_map_producer.py +0 -0
  276. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/code_package.py +0 -0
  277. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/declaration_family.py +0 -0
  278. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/declaration_identity.py +0 -0
  279. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/dependency_edge_result.py +0 -0
  280. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/dependency_node_result.py +0 -0
  281. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/duplicate_identity_error.py +0 -0
  282. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/edge_resolution.py +0 -0
  283. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/extractor_descriptor.py +0 -0
  284. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/fact_capability.py +0 -0
  285. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/identity.py +0 -0
  286. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/node.py +0 -0
  287. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/query_builder.py +0 -0
  288. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/query_types.py +0 -0
  289. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/queryable_code_map.py +0 -0
  290. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/runtime_observation.py +0 -0
  291. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/scan_policy.py +0 -0
  292. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_abstract_class.py +0 -0
  293. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_artifact.py +0 -0
  294. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_call.py +0 -0
  295. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_callable.py +0 -0
  296. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_callable_symbol.py +0 -0
  297. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_class.py +0 -0
  298. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_class_method.py +0 -0
  299. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_export.py +0 -0
  300. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_extraction.py +0 -0
  301. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_file.py +0 -0
  302. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_file_result.py +0 -0
  303. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_function.py +0 -0
  304. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_import.py +0 -0
  305. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_imported_symbol.py +0 -0
  306. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_interface.py +0 -0
  307. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_item_result.py +0 -0
  308. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_manifest.py +0 -0
  309. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_parameter.py +0 -0
  310. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_signature.py +0 -0
  311. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_type.py +0 -0
  312. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_value.py +0 -0
  313. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/source_value_scope.py +0 -0
  314. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/models/types.py +0 -0
  315. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/services/__init__.py +0 -0
  316. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/services/glob_path_matcher.py +0 -0
  317. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/services/identity_resolver.py +0 -0
  318. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/code/services/installed_package_version.py +0 -0
  319. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/values/__init__.py +0 -0
  320. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/values/models/__init__.py +0 -0
  321. {modwire-9.3.0 → modwire-10.0.0}/src/modwire/shared/values/models/value_model.py +0 -0
  322. {modwire-9.3.0 → modwire-10.0.0}/tests/__init__.py +0 -0
  323. {modwire-9.3.0 → modwire-10.0.0}/tests/application/__init__.py +0 -0
  324. {modwire-9.3.0 → modwire-10.0.0}/tests/application/base_test.py +0 -0
  325. {modwire-9.3.0 → modwire-10.0.0}/tests/application/test_01_attacks.py +0 -0
  326. {modwire-9.3.0 → modwire-10.0.0}/tests/application/test_06_happy_path.py +0 -0
  327. {modwire-9.3.0 → modwire-10.0.0}/tests/application/test_07_cache.py +0 -0
  328. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/__init__.py +0 -0
  329. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/base_test.py +0 -0
  330. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/boundaries/__init__.py +0 -0
  331. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/boundaries/base_test.py +0 -0
  332. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/boundaries/test_01_attacks.py +0 -0
  333. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/boundaries/test_02_invariants.py +0 -0
  334. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/boundaries/test_03_public_api.py +0 -0
  335. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/boundaries/test_04_paths.py +0 -0
  336. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/config/__init__.py +0 -0
  337. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/config/test_01_attacks.py +0 -0
  338. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/config/test_02_invariants.py +0 -0
  339. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/insights/__init__.py +0 -0
  340. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/insights/base_test.py +0 -0
  341. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/insights/test_02_invariants.py +0 -0
  342. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/map/__init__.py +0 -0
  343. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/map/test_02_patterns.py +0 -0
  344. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/report/__init__.py +0 -0
  345. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/report/test_02_invariants.py +0 -0
  346. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/report_benchmark/__init__.py +0 -0
  347. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/report_benchmark/benchmark_process_timeout.py +0 -0
  348. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/report_benchmark/run.py +0 -0
  349. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/shape/__init__.py +0 -0
  350. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/shape/base_test.py +0 -0
  351. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/shape/test_01_limits.py +0 -0
  352. {modwire-9.3.0 → modwire-10.0.0}/tests/architecture/shape/test_02_invariants.py +0 -0
  353. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/__init__.py +0 -0
  354. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/base_test.py +0 -0
  355. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/documentation/__init__.py +0 -0
  356. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/documentation/test_02_invariants.py +0 -0
  357. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/initialization/__init__.py +0 -0
  358. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/initialization/test_01_attacks.py +0 -0
  359. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/initialization/test_02_invariants.py +0 -0
  360. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/initialization/test_03_interruption.py +0 -0
  361. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/initialization/test_04_cleanup.py +0 -0
  362. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/initialization/test_05_recovery.py +0 -0
  363. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/pipeline/__init__.py +0 -0
  364. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/pipeline/base_test.py +0 -0
  365. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/pipeline/test_01_attacks.py +0 -0
  366. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/pipeline/test_02_invariants.py +0 -0
  367. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/pipeline/test_03_interruption.py +0 -0
  368. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/pipeline/test_04_command_transport.py +0 -0
  369. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/pipeline/test_05_recovery.py +0 -0
  370. {modwire-9.3.0 → modwire-10.0.0}/tests/cli/pipeline/test_06_happy_path.py +0 -0
  371. {modwire-9.3.0 → modwire-10.0.0}/tests/conftest.py +0 -0
  372. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/__init__.py +0 -0
  373. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/base_test.py +0 -0
  374. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/big_projects/__init__.py +0 -0
  375. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/big_projects/project.py +0 -0
  376. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/big_projects/projects.json +0 -0
  377. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/big_projects/resolution_results.json +0 -0
  378. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/big_projects/results.json +0 -0
  379. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/big_projects/run.py +0 -0
  380. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/cache_benchmark/__init__.py +0 -0
  381. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/cache_benchmark/benchmark_process_timeout.py +0 -0
  382. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/cache_benchmark/run.py +0 -0
  383. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/dependency/__init__.py +0 -0
  384. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/extractors/__init__.py +0 -0
  385. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/extractors/test_01_attacks.py +0 -0
  386. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/extractors/test_02_invariants.py +0 -0
  387. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/extractors/test_03_native_symbols.py +0 -0
  388. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/scan_benchmark/__init__.py +0 -0
  389. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/scan_benchmark/prepare.py +0 -0
  390. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/scan_benchmark/results.json +0 -0
  391. {modwire-9.3.0 → modwire-10.0.0}/tests/extraction/scan_benchmark/run.py +0 -0
  392. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/php/ignored/example_generated.php +0 -0
  393. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/php/src/example_application/example_actions/example_action.php +0 -0
  394. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/php/src/example_domain/example_model/example_record.php +0 -0
  395. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/php/src/example_domain/example_services/example_policy.php +0 -0
  396. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/php/src/example_interfaces/example_http/example_controller.php +0 -0
  397. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/python/ignored/example_generated.py +0 -0
  398. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/python/src/example_application/example_actions/example_action.py +0 -0
  399. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/python/src/example_domain/example_model/example_record.py +0 -0
  400. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/python/src/example_domain/example_services/example_policy.py +0 -0
  401. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/python/src/example_interfaces/example_http/example_controller.py +0 -0
  402. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/typescript/ignored/example_generated.ts +0 -0
  403. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/typescript/src/example_application/example_actions/example_action.ts +0 -0
  404. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/typescript/src/example_domain/example_model/example_record.ts +0 -0
  405. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/typescript/src/example_domain/example_model/example_view.tsx +0 -0
  406. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/typescript/src/example_domain/example_services/example_audit.js +0 -0
  407. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/typescript/src/example_domain/example_services/example_callables.ts +0 -0
  408. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/typescript/src/example_domain/example_services/example_policy.ts +0 -0
  409. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/typescript/src/example_interfaces/example_http/example_controller.ts +0 -0
  410. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/languages/typescript/src/example_interfaces/example_http/example_view.jsx +0 -0
  411. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/syntax/php/example_shapes.php +0 -0
  412. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/syntax/python/example_shapes.py +0 -0
  413. {modwire-9.3.0 → modwire-10.0.0}/tests/fixtures/syntax/typescript/example_shapes.ts +0 -0
  414. {modwire-9.3.0 → modwire-10.0.0}/tests/shared/__init__.py +0 -0
  415. {modwire-9.3.0 → modwire-10.0.0}/tests/shared/code/__init__.py +0 -0
  416. {modwire-9.3.0 → modwire-10.0.0}/tests/support/__init__.py +0 -0
  417. {modwire-9.3.0 → modwire-10.0.0}/tests/support/base_test.py +0 -0
  418. {modwire-9.3.0 → modwire-10.0.0}/tests/support/service_test.py +0 -0
  419. {modwire-9.3.0 → modwire-10.0.0}/uv.lock +0 -0
@@ -291,7 +291,9 @@ src/modwire/shared/code/models/source_inheritance.py
291
291
  src/modwire/shared/code/models/source_interface.py
292
292
  src/modwire/shared/code/models/source_item_result.py
293
293
  src/modwire/shared/code/models/source_manifest.py
294
+ src/modwire/shared/code/models/source_member_kind.py
294
295
  src/modwire/shared/code/models/source_parameter.py
296
+ src/modwire/shared/code/models/source_relation_kind.py
295
297
  src/modwire/shared/code/models/source_signature.py
296
298
  src/modwire/shared/code/models/source_symbol.py
297
299
  src/modwire/shared/code/models/source_type.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modwire
3
- Version: 9.3.0
3
+ Version: 10.0.0
4
4
  Summary: Code extraction, architecture analysis and the Modwire CLI.
5
5
  Author: Tomasz Szpak
6
6
  License-Expression: MIT
@@ -154,6 +154,14 @@ Generic persistent-cache settings supplied by a caller.
154
154
 
155
155
  Caller-owned filesystem traversal policy with explicit exclusions and opt-in symlink following.
156
156
 
157
+ ## `SourceMemberKind`
158
+
159
+ Ownership kind for a declared class or type member.
160
+
161
+ ## `SourceRelationKind`
162
+
163
+ Canonical relation kinds published by code maps and implementation manifests.
164
+
157
165
  ## `ImplementationManifest`
158
166
 
159
167
  A versioned, language-neutral statement of observed implementation facts and provenance.
@@ -126,6 +126,14 @@ Generic persistent-cache settings supplied by a caller.
126
126
 
127
127
  Caller-owned filesystem traversal policy with explicit exclusions and opt-in symlink following.
128
128
 
129
+ ## `SourceMemberKind`
130
+
131
+ Ownership kind for a declared class or type member.
132
+
133
+ ## `SourceRelationKind`
134
+
135
+ Canonical relation kinds published by code maps and implementation manifests.
136
+
129
137
  ## `ImplementationManifest`
130
138
 
131
139
  A versioned, language-neutral statement of observed implementation facts and provenance.
@@ -29,6 +29,8 @@ from .shared.code.models.declaration_identity import DeclarationIdentity
29
29
  from .shared.code.models.fact_capability import FactCapability
30
30
  from .shared.code.models.queryable_code_map import QueryableCodeMap
31
31
  from .shared.code.models.scan_policy import ScanPolicy
32
+ from .shared.code.models.source_member_kind import SourceMemberKind
33
+ from .shared.code.models.source_relation_kind import SourceRelationKind
32
34
 
33
35
  __all__ = [
34
36
  "CacheOptions",
@@ -48,6 +50,8 @@ __all__ = [
48
50
  "ModwireApplication",
49
51
  "QueryableCodeMap",
50
52
  "ScanPolicy",
53
+ "SourceMemberKind",
54
+ "SourceRelationKind",
51
55
  ]
52
56
 
53
57
 
@@ -227,6 +231,8 @@ class ModwireApplication:
227
231
  CachedResult,
228
232
  CacheOptions,
229
233
  ScanPolicy,
234
+ SourceMemberKind,
235
+ SourceRelationKind,
230
236
  ImplementationManifest,
231
237
  ImplementationManifestDocument,
232
238
  ManifestFormat,
@@ -19,7 +19,7 @@ class DependencyGraphBuilder(GraphBuilder):
19
19
  graph.add_edge(
20
20
  file_path,
21
21
  imported_reference.target_file_id,
22
- specifier=imported_reference.normalized_path,
22
+ specifier=imported_reference.path,
23
23
  resolution=imported_reference.resolution,
24
24
  )
25
25
  return graph
@@ -13,6 +13,7 @@ use PhpParser\Node\Name;
13
13
  use PhpParser\Node\Param;
14
14
  use PhpParser\Node\Stmt;
15
15
  use PhpParser\ParserFactory;
16
+ use PhpParser\PrettyPrinter\Standard;
16
17
 
17
18
  function line_count_for_content(string $content): int {
18
19
  return max(1, substr_count($content, "\n") + 1);
@@ -164,10 +165,72 @@ function member_visibility(Stmt\ClassMethod|Stmt\Property|Stmt\ClassConst $node)
164
165
  return 'public';
165
166
  }
166
167
 
168
+ function parameter_visibility(Param $param): string {
169
+ if (($param->flags & Stmt\Class_::MODIFIER_PRIVATE) !== 0) {
170
+ return 'private';
171
+ }
172
+ if (($param->flags & Stmt\Class_::MODIFIER_PROTECTED) !== 0) {
173
+ return 'protected';
174
+ }
175
+ return 'public';
176
+ }
177
+
178
+ function type_annotation(Node|Name|string|null $type): string {
179
+ if ($type instanceof Node\NullableType) {
180
+ return '?' . type_annotation($type->type);
181
+ }
182
+ if ($type instanceof Node\UnionType) {
183
+ return implode('|', array_map(
184
+ fn (Node $item): string => $item instanceof Node\IntersectionType
185
+ ? '(' . type_annotation($item) . ')'
186
+ : type_annotation($item),
187
+ $type->types
188
+ ));
189
+ }
190
+ if ($type instanceof Node\IntersectionType) {
191
+ return implode('&', array_map(type_annotation(...), $type->types));
192
+ }
193
+ if ($type instanceof Name) {
194
+ return $type->toCodeString();
195
+ }
196
+ return node_name($type);
197
+ }
198
+
199
+ function type_is_optional(Node|Name|string|null $type): bool {
200
+ if ($type instanceof Node\NullableType) {
201
+ return true;
202
+ }
203
+ if ($type instanceof Node\UnionType) {
204
+ return in_array('null', array_map(fn (Node $item): string => strtolower(type_annotation($item)), $type->types), true);
205
+ }
206
+ return false;
207
+ }
208
+
209
+ function attribute_argument(Arg $argument): string {
210
+ $printer = new Standard();
211
+ $value = $printer->prettyPrintExpr($argument->value);
212
+ if ($argument->name !== null) {
213
+ return node_name($argument->name) . ': ' . $value;
214
+ }
215
+ return $argument->unpack ? '...' . $value : $value;
216
+ }
217
+
218
+ function declaration_annotations(Stmt\ClassLike $node): array {
219
+ $annotations = [];
220
+ foreach ($node->attrGroups as $group) {
221
+ foreach ($group->attrs as $attribute) {
222
+ $arguments = array_map(attribute_argument(...), $attribute->args);
223
+ $annotations[] = type_annotation($attribute->name)
224
+ . ($arguments === [] ? '' : '(' . implode(', ', $arguments) . ')');
225
+ }
226
+ }
227
+ return $annotations;
228
+ }
229
+
167
230
  function parameter_definitions(array $params): array {
168
231
  return array_map(fn (Param $param): array => [
169
232
  'name' => var_name($param->var),
170
- 'annotation' => $param->type instanceof Node ? node_name($param->type) : '',
233
+ 'annotation' => type_annotation($param->type),
171
234
  'kind' => $param->variadic ? 'variadic_positional' : 'positional',
172
235
  'has_default' => $param->default !== null || $param->variadic,
173
236
  ], $params);
@@ -220,6 +283,7 @@ function source_callable_entry(
220
283
  'kind' => $kind,
221
284
  'visibility' => $visibility,
222
285
  'visibility_intent' => visibility_intent($name, $visibility),
286
+ 'declaration_annotations' => [],
223
287
  'line_start' => $node->getStartLine(),
224
288
  'line_end' => $node->getEndLine(),
225
289
  'line_count' => line_span($node),
@@ -320,11 +384,15 @@ function expression_target_name(string $expression): string {
320
384
  return trim($expression, '$\\');
321
385
  }
322
386
 
323
- function collect_imports(array $nodes): array {
387
+ function source_text(Node $node, string $content): string {
388
+ return substr($content, $node->getStartFilePos(), $node->getEndFilePos() - $node->getStartFilePos() + 1);
389
+ }
390
+
391
+ function collect_imports(array $nodes, string $content): array {
324
392
  $imports = [];
325
393
  $statementId = 0;
326
394
 
327
- walk_nodes($nodes, function (Node $node, array $parents) use (&$imports, &$statementId): void {
395
+ walk_nodes($nodes, function (Node $node, array $parents) use ($content, &$imports, &$statementId): void {
328
396
  if (!$node instanceof Stmt\Use_ && !$node instanceof Stmt\GroupUse) {
329
397
  return;
330
398
  }
@@ -333,9 +401,9 @@ function collect_imports(array $nodes): array {
333
401
  }
334
402
 
335
403
  $statementId++;
336
- $prefix = $node instanceof Stmt\GroupUse ? node_name($node->prefix) . '\\' : '';
404
+ $prefix = $node instanceof Stmt\GroupUse ? source_text($node->prefix, $content) . '\\' : '';
337
405
  foreach ($node->uses as $use) {
338
- $path = trim($prefix . node_name($use->name), '\\');
406
+ $path = $prefix . source_text($use->name, $content);
339
407
  $alias = $use->alias !== null ? node_name($use->alias) : '';
340
408
  $symbolName = imported_symbol_name($path);
341
409
  $imports[] = [
@@ -413,7 +481,11 @@ function collect_definitions(array $nodes, string $sourceId): array {
413
481
  $properties[$propertyProperty->name->toString()] = [
414
482
  'name' => $propertyProperty->name->toString(),
415
483
  'is_optional' => $propertyProperty->default instanceof Expr\ConstFetch
416
- && strtolower(node_name($propertyProperty->default->name)) === 'null',
484
+ && strtolower(node_name($propertyProperty->default->name)) === 'null'
485
+ || type_is_optional($property->type),
486
+ 'annotation' => type_annotation($property->type),
487
+ 'visibility' => member_visibility($property),
488
+ 'member_kind' => $property->isStatic() ? 'static' : 'instance',
417
489
  ];
418
490
  }
419
491
  }
@@ -426,7 +498,10 @@ function collect_definitions(array $nodes, string $sourceId): array {
426
498
  $propertyName = var_name($param->var);
427
499
  $properties[$propertyName] = [
428
500
  'name' => $propertyName,
429
- 'is_optional' => $param->default !== null,
501
+ 'is_optional' => $param->default !== null || type_is_optional($param->type),
502
+ 'annotation' => type_annotation($param->type),
503
+ 'visibility' => parameter_visibility($param),
504
+ 'member_kind' => 'instance',
430
505
  ];
431
506
  }
432
507
  }
@@ -441,6 +516,7 @@ function collect_definitions(array $nodes, string $sourceId): array {
441
516
  'name' => $methodName,
442
517
  'visibility' => member_visibility($method),
443
518
  'visibility_intent' => visibility_intent($methodName, member_visibility($method)),
519
+ 'declaration_annotations' => [],
444
520
  'line_count' => line_span($method),
445
521
  'declared_args' => count($parameters),
446
522
  'optional_args' => count(array_filter($parameters, fn (array $parameter): bool => $parameter['has_default'])),
@@ -460,6 +536,7 @@ function collect_definitions(array $nodes, string $sourceId): array {
460
536
  'name' => $name,
461
537
  'visibility' => class_visibility($node),
462
538
  'visibility_intent' => visibility_intent($name, class_visibility($node)),
539
+ 'declaration_annotations' => declaration_annotations($node),
463
540
  'properties' => array_values($properties),
464
541
  'line_count' => line_span($node),
465
542
  ];
@@ -502,6 +579,7 @@ function collect_definitions(array $nodes, string $sourceId): array {
502
579
  'name' => $method->name->toString(),
503
580
  'visibility' => 'public',
504
581
  'visibility_intent' => visibility_intent($method->name->toString(), 'public'),
582
+ 'declaration_annotations' => [],
505
583
  'line_count' => line_span($method),
506
584
  'declared_args' => count($parameters),
507
585
  'optional_args' => count(array_filter($parameters, fn (array $parameter): bool => $parameter['has_default'])),
@@ -512,6 +590,7 @@ function collect_definitions(array $nodes, string $sourceId): array {
512
590
  'name' => $name,
513
591
  'visibility' => 'public',
514
592
  'visibility_intent' => visibility_intent($name, 'public'),
593
+ 'declaration_annotations' => declaration_annotations($node),
515
594
  'methods' => $methods,
516
595
  'properties' => [],
517
596
  'signatures' => [],
@@ -534,6 +613,7 @@ function collect_definitions(array $nodes, string $sourceId): array {
534
613
  'name' => $name,
535
614
  'visibility' => 'public',
536
615
  'visibility_intent' => visibility_intent($name, 'public'),
616
+ 'declaration_annotations' => [],
537
617
  'line_count' => line_span($node),
538
618
  'declared_args' => count($parameters),
539
619
  'optional_args' => count(array_filter($parameters, fn (array $parameter): bool => $parameter['has_default'])),
@@ -794,7 +874,7 @@ function extract_file(string $path, ?string $sourceId = null, ?string $sourcesRo
794
874
  $graph = collect_values_and_callables($nodes, $resolvedSourceId);
795
875
 
796
876
  return [
797
- 'imports' => collect_imports($nodes),
877
+ 'imports' => collect_imports($nodes, $content),
798
878
  'exports' => $definitions['exports'],
799
879
  'classes' => $definitions['classes'],
800
880
  'interfaces' => $definitions['interfaces'],
@@ -229767,6 +229767,14 @@ function visibilityFromModifiers(node, fallback = 'public') {
229767
229767
  const name = typeof node.getName === 'function' ? node.getName() : '';
229768
229768
  return name.startsWith('#') ? 'private' : fallback;
229769
229769
  }
229770
+ function memberKindFromModifiers(node) {
229771
+ return node.getModifiers().some(modifier => modifier.getKind() === ts_morph_1.SyntaxKind.StaticKeyword)
229772
+ ? 'static'
229773
+ : 'instance';
229774
+ }
229775
+ function declarationAnnotations(node) {
229776
+ return node.getDecorators().map(decorator => decorator.getExpression().getText());
229777
+ }
229770
229778
  function isExported(node) {
229771
229779
  return Boolean((typeof node.hasExportKeyword === 'function' && node.hasExportKeyword())
229772
229780
  || (typeof node.isDefaultExport === 'function' && node.isDefaultExport()));
@@ -229902,6 +229910,7 @@ function sourceCallable(options) {
229902
229910
  kind: options.kind,
229903
229911
  visibility: options.visibility,
229904
229912
  visibility_intent: visibilityIntent(options.name, options.visibility),
229913
+ declaration_annotations: [],
229905
229914
  line_start: lineNumberAt(options.lineStarts, options.startIndex),
229906
229915
  line_end: lineNumberAt(options.lineStarts, options.endIndex),
229907
229916
  line_count: lineSpan(options.lineStarts, options.startIndex, options.endIndex),
@@ -230162,10 +230171,27 @@ function collectExports(sourceFile, filePath, sourcesRoot) {
230162
230171
  function classDeclarationIsAbstract(classDeclaration) {
230163
230172
  return classDeclaration.getModifiers().some(modifier => modifier.getKind() === ts_morph_1.SyntaxKind.AbstractKeyword);
230164
230173
  }
230165
- function classPropertyIsOptional(property) {
230174
+ function typeIncludesUndefined(typeNode) {
230175
+ if (typeNode === undefined) {
230176
+ return false;
230177
+ }
230178
+ if (typeNode.kind === ts_morph_1.SyntaxKind.UndefinedKeyword) {
230179
+ return true;
230180
+ }
230181
+ if (ts_morph_1.ts.isUnionTypeNode(typeNode)) {
230182
+ return typeNode.types.some(typeIncludesUndefined);
230183
+ }
230184
+ if (ts_morph_1.ts.isParenthesizedTypeNode(typeNode)) {
230185
+ return typeIncludesUndefined(typeNode.type);
230186
+ }
230187
+ return false;
230188
+ }
230189
+ function propertyIsOptional(property) {
230190
+ const typeNode = typeof property.getTypeNode === 'function' ? property.getTypeNode() : undefined;
230191
+ const initializer = typeof property.getInitializer === 'function' ? property.getInitializer() : undefined;
230166
230192
  return Boolean((typeof property.hasQuestionToken === 'function' && property.hasQuestionToken())
230167
- || textOf(typeof property.getTypeNode === 'function' ? property.getTypeNode() : undefined).includes('undefined')
230168
- || textOf(property.getInitializer()).match(/^(undefined|null)$/));
230193
+ || typeIncludesUndefined(typeNode?.compilerNode)
230194
+ || textOf(initializer).match(/^(undefined|null)$/));
230169
230195
  }
230170
230196
  function sourceClassMethod(method, lineStarts, name = propertyNameText(method)) {
230171
230197
  const parameters = functionParameters(method);
@@ -230174,6 +230200,7 @@ function sourceClassMethod(method, lineStarts, name = propertyNameText(method))
230174
230200
  name,
230175
230201
  visibility,
230176
230202
  visibility_intent: visibilityIntent(name, visibility),
230203
+ declaration_annotations: [],
230177
230204
  line_count: lineSpan(lineStarts, method.getStart(), endIndexForNode(method)),
230178
230205
  declared_args: parameters.length,
230179
230206
  optional_args: parameters.filter(parameter => parameter.has_default).length,
@@ -230192,13 +230219,26 @@ function collectClasses(sourceFile, lineStarts, sourceId) {
230192
230219
  });
230193
230220
  const properties = new Map();
230194
230221
  for (const property of classDeclaration.getProperties()) {
230195
- properties.set(propertyNameText(property), classPropertyIsOptional(property));
230222
+ const propertyName = propertyNameText(property);
230223
+ properties.set(propertyName, {
230224
+ name: propertyName,
230225
+ is_optional: propertyIsOptional(property),
230226
+ annotation: textOf(property.getTypeNode()),
230227
+ visibility: visibilityFromModifiers(property),
230228
+ member_kind: memberKindFromModifiers(property),
230229
+ });
230196
230230
  }
230197
230231
  for (const constructorDeclaration of classDeclaration.getConstructors()) {
230198
230232
  for (const parameter of constructorDeclaration.getParameters()) {
230199
230233
  if (parameter.isParameterProperty()) {
230200
230234
  const parameterName = singleBindingName(parameter.getNameNode()) || parameter.getNameNode().getText();
230201
- properties.set(parameterName, parameter.isOptional() || parameter.getInitializer() !== undefined);
230235
+ properties.set(parameterName, {
230236
+ name: parameterName,
230237
+ is_optional: parameter.isOptional() || parameter.getInitializer() !== undefined,
230238
+ annotation: textOf(parameter.getTypeNode()),
230239
+ visibility: visibilityFromModifiers(parameter),
230240
+ member_kind: 'instance',
230241
+ });
230202
230242
  }
230203
230243
  }
230204
230244
  }
@@ -230226,10 +230266,8 @@ function collectClasses(sourceFile, lineStarts, sourceId) {
230226
230266
  name,
230227
230267
  visibility,
230228
230268
  visibility_intent: visibilityIntent(name, visibility),
230229
- properties: Array.from(properties, ([propertyName, isOptional]) => ({
230230
- name: propertyName,
230231
- is_optional: Boolean(isOptional),
230232
- })),
230269
+ declaration_annotations: declarationAnnotations(classDeclaration),
230270
+ properties: Array.from(properties.values()),
230233
230271
  line_count: lineSpan(lineStarts, classDeclaration.getStart(), endIndexForNode(classDeclaration)),
230234
230272
  };
230235
230273
  if (classDeclarationIsAbstract(classDeclaration)) {
@@ -230279,7 +230317,10 @@ function collectInterfaces(sourceFile, lineStarts, sourceId) {
230279
230317
  const visibility = moduleVisibility(interfaceDeclaration);
230280
230318
  const properties = interfaceDeclaration.getProperties().map(property => ({
230281
230319
  name: propertyNameText(property),
230282
- is_optional: Boolean(typeof property.hasQuestionToken === 'function' && property.hasQuestionToken()),
230320
+ is_optional: propertyIsOptional(property),
230321
+ annotation: textOf(property.getTypeNode()),
230322
+ visibility: 'public',
230323
+ member_kind: 'instance',
230283
230324
  }));
230284
230325
  const methods = interfaceDeclaration.getMethods().map(method => sourceClassMethod(method, lineStarts));
230285
230326
  return {
@@ -230292,6 +230333,7 @@ function collectInterfaces(sourceFile, lineStarts, sourceId) {
230292
230333
  name: interfaceDeclaration.getName(),
230293
230334
  visibility,
230294
230335
  visibility_intent: visibilityIntent(interfaceDeclaration.getName(), visibility),
230336
+ declaration_annotations: [],
230295
230337
  methods,
230296
230338
  properties,
230297
230339
  signatures: collectSignaturesFromMembers(interfaceDeclaration.getMembers(), lineStarts),
@@ -230306,7 +230348,10 @@ function collectTypes(sourceFile, lineStarts, sourceId) {
230306
230348
  const members = ts_morph_1.Node.isTypeLiteral(typeNode) ? typeNode.getMembers() : [];
230307
230349
  const properties = members.filter(member => ts_morph_1.Node.isPropertySignature(member)).map(property => ({
230308
230350
  name: propertyNameText(property),
230309
- is_optional: Boolean(typeof property.hasQuestionToken === 'function' && property.hasQuestionToken()),
230351
+ is_optional: propertyIsOptional(property),
230352
+ annotation: textOf(property.getTypeNode()),
230353
+ visibility: 'public',
230354
+ member_kind: 'instance',
230310
230355
  }));
230311
230356
  return {
230312
230357
  declaration_id: {
@@ -230318,6 +230363,7 @@ function collectTypes(sourceFile, lineStarts, sourceId) {
230318
230363
  name: typeAlias.getName(),
230319
230364
  visibility,
230320
230365
  visibility_intent: visibilityIntent(typeAlias.getName(), visibility),
230366
+ declaration_annotations: [],
230321
230367
  properties,
230322
230368
  signatures: collectSignaturesFromMembers(members, lineStarts),
230323
230369
  line_count: lineSpan(lineStarts, typeAlias.getStart(), endIndexForNode(typeAlias)),
@@ -230394,6 +230440,7 @@ function collectFunctions(sourceFile, lineStarts, sourceId) {
230394
230440
  name,
230395
230441
  visibility,
230396
230442
  visibility_intent: visibilityIntent(name, visibility),
230443
+ declaration_annotations: [],
230397
230444
  line_count: lineSpan(lineStarts, node.getStart(), endIndexForNode(node)),
230398
230445
  declared_args: parameters.length,
230399
230446
  optional_args: parameters.filter(parameter => parameter.has_default).length,
@@ -136,6 +136,16 @@ function visibilityFromModifiers(node, fallback = 'public') {
136
136
  return name.startsWith('#') ? 'private' : fallback;
137
137
  }
138
138
 
139
+ function memberKindFromModifiers(node) {
140
+ return node.getModifiers().some(modifier => modifier.getKind() === SyntaxKind.StaticKeyword)
141
+ ? 'static'
142
+ : 'instance';
143
+ }
144
+
145
+ function declarationAnnotations(node) {
146
+ return node.getDecorators().map(decorator => decorator.getExpression().getText());
147
+ }
148
+
139
149
  function isExported(node) {
140
150
  return Boolean(
141
151
  (typeof node.hasExportKeyword === 'function' && node.hasExportKeyword())
@@ -287,6 +297,7 @@ function sourceCallable(options) {
287
297
  kind: options.kind,
288
298
  visibility: options.visibility,
289
299
  visibility_intent: visibilityIntent(options.name, options.visibility),
300
+ declaration_annotations: [],
290
301
  line_start: lineNumberAt(options.lineStarts, options.startIndex),
291
302
  line_end: lineNumberAt(options.lineStarts, options.endIndex),
292
303
  line_count: lineSpan(options.lineStarts, options.startIndex, options.endIndex),
@@ -575,11 +586,29 @@ function classDeclarationIsAbstract(classDeclaration) {
575
586
  return classDeclaration.getModifiers().some(modifier => modifier.getKind() === SyntaxKind.AbstractKeyword);
576
587
  }
577
588
 
578
- function classPropertyIsOptional(property) {
589
+ function typeIncludesUndefined(typeNode) {
590
+ if (typeNode === undefined) {
591
+ return false;
592
+ }
593
+ if (typeNode.kind === SyntaxKind.UndefinedKeyword) {
594
+ return true;
595
+ }
596
+ if (ts.isUnionTypeNode(typeNode)) {
597
+ return typeNode.types.some(typeIncludesUndefined);
598
+ }
599
+ if (ts.isParenthesizedTypeNode(typeNode)) {
600
+ return typeIncludesUndefined(typeNode.type);
601
+ }
602
+ return false;
603
+ }
604
+
605
+ function propertyIsOptional(property) {
606
+ const typeNode = typeof property.getTypeNode === 'function' ? property.getTypeNode() : undefined;
607
+ const initializer = typeof property.getInitializer === 'function' ? property.getInitializer() : undefined;
579
608
  return Boolean(
580
609
  (typeof property.hasQuestionToken === 'function' && property.hasQuestionToken())
581
- || textOf(typeof property.getTypeNode === 'function' ? property.getTypeNode() : undefined).includes('undefined')
582
- || textOf(property.getInitializer()).match(/^(undefined|null)$/),
610
+ || typeIncludesUndefined(typeNode?.compilerNode)
611
+ || textOf(initializer).match(/^(undefined|null)$/),
583
612
  );
584
613
  }
585
614
 
@@ -590,6 +619,7 @@ function sourceClassMethod(method, lineStarts, name = propertyNameText(method))
590
619
  name,
591
620
  visibility,
592
621
  visibility_intent: visibilityIntent(name, visibility),
622
+ declaration_annotations: [],
593
623
  line_count: lineSpan(lineStarts, method.getStart(), endIndexForNode(method)),
594
624
  declared_args: parameters.length,
595
625
  optional_args: parameters.filter(parameter => parameter.has_default).length,
@@ -611,13 +641,26 @@ function collectClasses(sourceFile, lineStarts, sourceId) {
611
641
 
612
642
  const properties = new Map();
613
643
  for (const property of classDeclaration.getProperties()) {
614
- properties.set(propertyNameText(property), classPropertyIsOptional(property));
644
+ const propertyName = propertyNameText(property);
645
+ properties.set(propertyName, {
646
+ name: propertyName,
647
+ is_optional: propertyIsOptional(property),
648
+ annotation: textOf(property.getTypeNode()),
649
+ visibility: visibilityFromModifiers(property),
650
+ member_kind: memberKindFromModifiers(property),
651
+ });
615
652
  }
616
653
  for (const constructorDeclaration of classDeclaration.getConstructors()) {
617
654
  for (const parameter of constructorDeclaration.getParameters()) {
618
655
  if (parameter.isParameterProperty()) {
619
656
  const parameterName = singleBindingName(parameter.getNameNode()) || parameter.getNameNode().getText();
620
- properties.set(parameterName, parameter.isOptional() || parameter.getInitializer() !== undefined);
657
+ properties.set(parameterName, {
658
+ name: parameterName,
659
+ is_optional: parameter.isOptional() || parameter.getInitializer() !== undefined,
660
+ annotation: textOf(parameter.getTypeNode()),
661
+ visibility: visibilityFromModifiers(parameter),
662
+ member_kind: 'instance',
663
+ });
621
664
  }
622
665
  }
623
666
  }
@@ -646,10 +689,8 @@ function collectClasses(sourceFile, lineStarts, sourceId) {
646
689
  name,
647
690
  visibility,
648
691
  visibility_intent: visibilityIntent(name, visibility),
649
- properties: Array.from(properties, ([propertyName, isOptional]) => ({
650
- name: propertyName,
651
- is_optional: Boolean(isOptional),
652
- })),
692
+ declaration_annotations: declarationAnnotations(classDeclaration),
693
+ properties: Array.from(properties.values()),
653
694
  line_count: lineSpan(lineStarts, classDeclaration.getStart(), endIndexForNode(classDeclaration)),
654
695
  };
655
696
 
@@ -700,7 +741,10 @@ function collectInterfaces(sourceFile, lineStarts, sourceId) {
700
741
  const visibility = moduleVisibility(interfaceDeclaration);
701
742
  const properties = interfaceDeclaration.getProperties().map(property => ({
702
743
  name: propertyNameText(property),
703
- is_optional: Boolean(typeof property.hasQuestionToken === 'function' && property.hasQuestionToken()),
744
+ is_optional: propertyIsOptional(property),
745
+ annotation: textOf(property.getTypeNode()),
746
+ visibility: 'public',
747
+ member_kind: 'instance',
704
748
  }));
705
749
  const methods = interfaceDeclaration.getMethods().map(method => sourceClassMethod(method, lineStarts));
706
750
  return {
@@ -713,6 +757,7 @@ function collectInterfaces(sourceFile, lineStarts, sourceId) {
713
757
  name: interfaceDeclaration.getName(),
714
758
  visibility,
715
759
  visibility_intent: visibilityIntent(interfaceDeclaration.getName(), visibility),
760
+ declaration_annotations: [],
716
761
  methods,
717
762
  properties,
718
763
  signatures: collectSignaturesFromMembers(interfaceDeclaration.getMembers(), lineStarts),
@@ -728,7 +773,10 @@ function collectTypes(sourceFile, lineStarts, sourceId) {
728
773
  const members = Node.isTypeLiteral(typeNode) ? typeNode.getMembers() : [];
729
774
  const properties = members.filter(member => Node.isPropertySignature(member)).map(property => ({
730
775
  name: propertyNameText(property),
731
- is_optional: Boolean(typeof property.hasQuestionToken === 'function' && property.hasQuestionToken()),
776
+ is_optional: propertyIsOptional(property),
777
+ annotation: textOf(property.getTypeNode()),
778
+ visibility: 'public',
779
+ member_kind: 'instance',
732
780
  }));
733
781
  return {
734
782
  declaration_id: {
@@ -740,6 +788,7 @@ function collectTypes(sourceFile, lineStarts, sourceId) {
740
788
  name: typeAlias.getName(),
741
789
  visibility,
742
790
  visibility_intent: visibilityIntent(typeAlias.getName(), visibility),
791
+ declaration_annotations: [],
743
792
  properties,
744
793
  signatures: collectSignaturesFromMembers(members, lineStarts),
745
794
  line_count: lineSpan(lineStarts, typeAlias.getStart(), endIndexForNode(typeAlias)),
@@ -821,6 +870,7 @@ function collectFunctions(sourceFile, lineStarts, sourceId) {
821
870
  name,
822
871
  visibility,
823
872
  visibility_intent: visibilityIntent(name, visibility),
873
+ declaration_annotations: [],
824
874
  line_count: lineSpan(lineStarts, node.getStart(), endIndexForNode(node)),
825
875
  declared_args: parameters.length,
826
876
  optional_args: parameters.filter(parameter => parameter.has_default).length,
@@ -52,17 +52,23 @@ class PhpExtractor(SourceExtractor):
52
52
  CapabilityCoverage(
53
53
  capability=FactCapability.ANNOTATIONS,
54
54
  status=CapabilityStatus.PARTIAL,
55
- explanation="Type annotations are extracted; PHP attributes are not yet emitted.",
55
+ explanation=(
56
+ "Class and interface attributes and declared type annotations are extracted; "
57
+ "attributes on other declarations are not yet emitted."
58
+ ),
56
59
  ),
57
60
  CapabilityCoverage(
58
61
  capability=FactCapability.MODIFIERS,
59
62
  status=CapabilityStatus.PARTIAL,
60
- explanation="Visibility intent and callable kind are normalized.",
63
+ explanation="Visibility intent, callable kind, and property member kind are normalized.",
61
64
  ),
62
65
  CapabilityCoverage(
63
66
  capability=FactCapability.ATTRIBUTES,
64
67
  status=CapabilityStatus.SUPPORTED,
65
- explanation="Declared and promoted properties with optionality are extracted.",
68
+ explanation=(
69
+ "Declared and promoted property identity, exact declared type, visibility, optionality, "
70
+ "and member kind are extracted."
71
+ ),
66
72
  ),
67
73
  CapabilityCoverage(
68
74
  capability=FactCapability.INHERITANCE,
@@ -54,19 +54,22 @@ class PythonExtractor(SourceExtractor):
54
54
  capability=FactCapability.ANNOTATIONS,
55
55
  status=CapabilityStatus.PARTIAL,
56
56
  explanation=(
57
- "Callable decorators and type annotations are extracted; "
57
+ "Class and callable decorators and declared type annotations are extracted; "
58
58
  "arbitrary annotations are not evaluated."
59
59
  ),
60
60
  ),
61
61
  CapabilityCoverage(
62
62
  capability=FactCapability.MODIFIERS,
63
63
  status=CapabilityStatus.PARTIAL,
64
- explanation="Visibility intent and callable kind are normalized.",
64
+ explanation="Visibility intent, callable kind, and class property member kind are normalized.",
65
65
  ),
66
66
  CapabilityCoverage(
67
67
  capability=FactCapability.ATTRIBUTES,
68
68
  status=CapabilityStatus.SUPPORTED,
69
- explanation="Class properties and optionality are extracted.",
69
+ explanation=(
70
+ "Class property identity, exact declared type, visibility, optionality, and member kind "
71
+ "are extracted."
72
+ ),
70
73
  ),
71
74
  CapabilityCoverage(
72
75
  capability=FactCapability.INHERITANCE,