modwire 10.0.0__tar.gz → 10.1.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.
- {modwire-10.0.0 → modwire-10.1.0}/.dev/modwire.egg-info/SOURCES.txt +2 -0
- {modwire-10.0.0 → modwire-10.1.0}/.github/workflows/ci.yml +3 -0
- {modwire-10.0.0 → modwire-10.1.0}/PKG-INFO +9 -1
- {modwire-10.0.0 → modwire-10.1.0}/README.md +8 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/application.py +9 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/facade.py +4 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/application.py +9 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/typescript/build.py +1 -1
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/typescript/package-lock.json +7 -4
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/typescript/package.json +3 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/typescript/script.js +225 -103
- modwire-10.1.0/src/modwire/shared/code/models/source_manifest_identity.py +10 -0
- modwire-10.1.0/tests/application/test_09_source_manifest_identity.py +120 -0
- {modwire-10.0.0 → modwire-10.1.0}/.github/workflows/release.yml +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/.gitignore +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/AGENTS.md +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/LICENSE +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/MANIFEST.in +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/Makefile +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/docs/target-language-ownership.md +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/pyproject.toml +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/scripts/check_extractors.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/scripts/generate_docs.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/scripts/verify_consumer.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/setup.cfg +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/setup.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/__main__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/boundaries/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/boundaries/application.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/boundaries/domain.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/boundaries/models/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/boundaries/models/edge_rule_violation.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/boundaries/models/flow_report.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/boundaries/models/flow_violation.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/boundaries/models/types.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/boundaries/services/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/boundaries/services/backward_flow_analyzer.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/boundaries/services/boundaries_flow_analyzer.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/boundaries/services/module_boundary_analyzer.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/boundaries/services/no_cycles_flow_analyzer.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/boundaries/services/no_reentry_flow_analyzer.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/config/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/config/application.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/config/models/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/config/models/architecture_config.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/config/models/boundaries_config.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/config/models/boundary_rule.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/config/models/configuration_value.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/config/models/flow_realm.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/config/models/flow_rules.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/config/models/shape_config.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/config/models/shape_realm.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/config/models/shape_rules.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/config/models/tag_rule.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/facade.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/application.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/domain.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/models/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/models/callable_report_entry.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/models/callables_report.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/models/clusters_report.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/models/clusters_report_item.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/models/coherence_report.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/models/exports_report.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/models/exports_report_item.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/models/hotspots_report.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/models/hotspots_report_item.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/models/insight_report.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/services/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/services/callables_reporter.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/services/clusters_reporter.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/services/coherence_reporter.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/services/exports_reporter.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/services/hotspots_reporter.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/insights/services/insight_report_field_map.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/map/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/map/application.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/map/domain.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/map/models/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/map/models/architecture_map.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/map/models/architecture_realm.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/map/models/tag_map.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/map/models/tag_match.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/map/services/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/map/services/architecture_map_loader.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/map/services/tag_matcher.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/report/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/report/application.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/report/domain.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/report/models/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/report/models/architecture_group.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/report/models/map_report.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/report/models/report_catalog.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/report/models/report_descriptor.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/report/models/report_item.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/report/models/report_metadata.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/report/models/report_node.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/report/models/report_section.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/report/services/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/report/services/map_report_collector.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/application.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/domain.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/models/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/models/shape_realm_architecture_map.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/models/shape_report.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/models/shape_violation.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/services/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/services/abstract_class_resolver.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/services/callable_resolver.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/services/class_resolver.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/services/file_resolver.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/services/import_resolver.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/services/property_resolver.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/services/signature_resolver.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/architecture/shape/services/symbol_resolver.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/autowiring.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/application.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/domain.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/models/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/models/cache_entry.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/models/cache_key.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/models/cache_kind.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/models/cache_options.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/models/cache_outcome.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/models/cache_plan.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/models/cache_stage.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/models/cache_storage_state.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/models/cached_result.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/models/source_cache_entry.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/services/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/services/cache_codec.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/services/cache_identity.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/cache/services/filesystem_cache_storage.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/documentation/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/documentation/application.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/documentation/services/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/documentation/services/documentation_generator.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/initialization/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/initialization/application.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/initialization/models/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/initialization/models/initialization_result.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/initialization/services/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/initialization/services/initialization_service.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/domain.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/models/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/models/command_request.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/models/extractor_batch_input.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/models/extractor_command_input.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/models/extractor_source_input.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/models/report_pipeline_context.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/models/source_entry.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/models/source_inventory.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/batch_source_reader.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/callables_insight.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/clusters_insight.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/coherence_insight.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/command_line.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/configuration_loader.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/extractor_command.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/flow_violations.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/hotspots_insight.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/map_tree.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/output_console.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/shape_violations.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/source_manifest_builder.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/success.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/unknown_files_warning.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/pipeline/services/unused_exports_insight.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/resources/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/resources/application.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/resources/models/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/resources/models/defaults.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/resources/models/init_asset.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/resources/templates/AGENTS.md +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/resources/templates/ARCHITECTURE.md +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/resources/templates/INDEX.md +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/resources/templates/MODWIRE.md +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/resources/templates/RULES.md +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/resources/templates/TESTING.md +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/resources/templates/WORKFLOW.md +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/cli/resources/templates/architecture.yaml +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/dependency/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/dependency/application.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/dependency/domain.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/dependency/services/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/dependency/services/graph_builder.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/dependency/services/import_identity_index.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/dependency/services/import_resolver.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/application.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/domain.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/models/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/models/batch_config.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/models/extraction_request.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/models/extractor_resource.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/models/extractor_resource_set.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/models/extractor_runtime.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/models/python_call_context.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/php/build.php +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/php/build.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/php/composer.json +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/php/composer.lock +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/php/script.php +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/php/script.src.php +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/python/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/python/script.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/typescript/build.mjs +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/typescript/script.ts +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/typescript/tsconfig.json +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/services/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/services/php_extractor.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/services/python_call_reader.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/services/python_extractor.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/services/python_syntax_parser.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/services/type_script_extractor.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/facade.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/facade.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/application.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/contracts/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/contracts/manifest_compiler.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/contracts/manifest_serializer.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/models/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/models/digest_algorithm.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/models/implementation_manifest.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/models/implementation_manifest_document.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/models/manifest_annotation.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/models/manifest_attribute.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/models/manifest_callable.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/models/manifest_dependency.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/models/manifest_format.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/models/manifest_inheritance.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/models/manifest_parameter.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/models/manifest_span.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/models/manifest_symbol.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/services/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/services/canonical_json_manifest_serializer.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/implementation/manifest/services/code_map_manifest_compiler.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/py.typed +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/application.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/domain.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/capability_coverage.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/capability_status.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/code_map.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/code_map_producer.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/code_package.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/declaration_family.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/declaration_identity.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/dependency_edge_result.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/dependency_graph.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/dependency_node_result.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/duplicate_identity_error.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/edge.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/edge_resolution.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/extractor_descriptor.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/fact_capability.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/identity.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/node.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/query_builder.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/query_types.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/queryable_code_map.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/runtime_observation.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/scan_policy.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_abstract_class.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_artifact.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_call.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_callable.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_callable_symbol.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_class.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_class_method.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_class_property.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_export.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_extraction.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_file.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_file_result.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_function.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_import.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_imported_symbol.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_inheritance.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_interface.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_item_result.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_manifest.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_member_kind.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_parameter.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_relation_kind.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_signature.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_symbol.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_type.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_value.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/source_value_scope.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/models/types.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/services/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/services/glob_path_matcher.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/services/identity_resolver.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/code/services/installed_package_version.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/values/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/values/models/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/src/modwire/shared/values/models/value_model.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/application/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/application/base_test.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/application/test_01_attacks.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/application/test_06_happy_path.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/application/test_07_cache.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/application/test_08_implementation_manifest.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/base_test.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/boundaries/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/boundaries/base_test.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/boundaries/test_01_attacks.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/boundaries/test_02_invariants.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/boundaries/test_03_public_api.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/boundaries/test_04_paths.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/config/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/config/test_01_attacks.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/config/test_02_invariants.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/insights/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/insights/base_test.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/insights/test_02_invariants.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/map/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/map/test_02_patterns.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/report/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/report/test_02_invariants.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/report_benchmark/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/report_benchmark/benchmark_process_timeout.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/report_benchmark/run.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/shape/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/shape/base_test.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/shape/test_01_limits.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/architecture/shape/test_02_invariants.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/base_test.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/documentation/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/documentation/test_02_invariants.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/initialization/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/initialization/test_01_attacks.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/initialization/test_02_invariants.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/initialization/test_03_interruption.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/initialization/test_04_cleanup.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/initialization/test_05_recovery.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/pipeline/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/pipeline/base_test.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/pipeline/test_01_attacks.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/pipeline/test_02_invariants.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/pipeline/test_03_interruption.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/pipeline/test_04_command_transport.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/pipeline/test_05_recovery.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/cli/pipeline/test_06_happy_path.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/conftest.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/base_test.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/big_projects/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/big_projects/project.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/big_projects/projects.json +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/big_projects/resolution_results.json +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/big_projects/results.json +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/big_projects/run.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/cache_benchmark/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/cache_benchmark/benchmark_process_timeout.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/cache_benchmark/run.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/dependency/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/dependency/test_02_invariants.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/extractors/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/extractors/test_01_attacks.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/extractors/test_02_invariants.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/extractors/test_03_native_symbols.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/scan_benchmark/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/scan_benchmark/prepare.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/scan_benchmark/results.json +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/extraction/scan_benchmark/run.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/php/ignored/example_generated.php +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/php/src/example_application/example_actions/example_action.php +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/php/src/example_domain/example_model/example_record.php +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/php/src/example_domain/example_services/example_policy.php +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/php/src/example_interfaces/example_http/example_controller.php +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/python/ignored/example_generated.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/python/src/example_application/example_actions/example_action.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/python/src/example_domain/example_model/example_record.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/python/src/example_domain/example_services/example_policy.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/python/src/example_interfaces/example_http/example_controller.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/typescript/ignored/example_generated.ts +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/typescript/src/example_application/example_actions/example_action.ts +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/typescript/src/example_domain/example_model/example_record.ts +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/typescript/src/example_domain/example_model/example_view.tsx +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/typescript/src/example_domain/example_services/example_audit.js +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/typescript/src/example_domain/example_services/example_callables.ts +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/typescript/src/example_domain/example_services/example_policy.ts +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/typescript/src/example_interfaces/example_http/example_controller.ts +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/languages/typescript/src/example_interfaces/example_http/example_view.jsx +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/syntax/php/example_shapes.php +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/syntax/python/example_shapes.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/fixtures/syntax/typescript/example_shapes.ts +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/shared/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/shared/code/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/shared/code/test_02_invariants.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/support/__init__.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/support/base_test.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/support/code_map.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/tests/support/service_test.py +0 -0
- {modwire-10.0.0 → modwire-10.1.0}/uv.lock +0 -0
|
@@ -291,6 +291,7 @@ 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_manifest_identity.py
|
|
294
295
|
src/modwire/shared/code/models/source_member_kind.py
|
|
295
296
|
src/modwire/shared/code/models/source_parameter.py
|
|
296
297
|
src/modwire/shared/code/models/source_relation_kind.py
|
|
@@ -315,6 +316,7 @@ tests/application/test_01_attacks.py
|
|
|
315
316
|
tests/application/test_06_happy_path.py
|
|
316
317
|
tests/application/test_07_cache.py
|
|
317
318
|
tests/application/test_08_implementation_manifest.py
|
|
319
|
+
tests/application/test_09_source_manifest_identity.py
|
|
318
320
|
tests/architecture/__init__.py
|
|
319
321
|
tests/architecture/base_test.py
|
|
320
322
|
tests/architecture/boundaries/__init__.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: modwire
|
|
3
|
-
Version: 10.
|
|
3
|
+
Version: 10.1.0
|
|
4
4
|
Summary: Code extraction, architecture analysis and the Modwire CLI.
|
|
5
5
|
Author: Tomasz Szpak
|
|
6
6
|
License-Expression: MIT
|
|
@@ -88,6 +88,10 @@ Return a queryable code map with content-addressed persistent reuse.
|
|
|
88
88
|
|
|
89
89
|
Return a queryable code map and public outcomes for every applicable cache stage.
|
|
90
90
|
|
|
91
|
+
### `source_manifest_identity`
|
|
92
|
+
|
|
93
|
+
Observe the current canonical source-manifest identity without parsing source.
|
|
94
|
+
|
|
91
95
|
### `implementation_manifest`
|
|
92
96
|
|
|
93
97
|
Publish a deterministic, provenance-bearing implementation manifest.
|
|
@@ -154,6 +158,10 @@ Generic persistent-cache settings supplied by a caller.
|
|
|
154
158
|
|
|
155
159
|
Caller-owned filesystem traversal policy with explicit exclusions and opt-in symlink following.
|
|
156
160
|
|
|
161
|
+
## `SourceManifestIdentity`
|
|
162
|
+
|
|
163
|
+
Canonical identity of one observed source manifest.
|
|
164
|
+
|
|
157
165
|
## `SourceMemberKind`
|
|
158
166
|
|
|
159
167
|
Ownership kind for a declared class or type member.
|
|
@@ -60,6 +60,10 @@ Return a queryable code map with content-addressed persistent reuse.
|
|
|
60
60
|
|
|
61
61
|
Return a queryable code map and public outcomes for every applicable cache stage.
|
|
62
62
|
|
|
63
|
+
### `source_manifest_identity`
|
|
64
|
+
|
|
65
|
+
Observe the current canonical source-manifest identity without parsing source.
|
|
66
|
+
|
|
63
67
|
### `implementation_manifest`
|
|
64
68
|
|
|
65
69
|
Publish a deterministic, provenance-bearing implementation manifest.
|
|
@@ -126,6 +130,10 @@ Generic persistent-cache settings supplied by a caller.
|
|
|
126
130
|
|
|
127
131
|
Caller-owned filesystem traversal policy with explicit exclusions and opt-in symlink following.
|
|
128
132
|
|
|
133
|
+
## `SourceManifestIdentity`
|
|
134
|
+
|
|
135
|
+
Canonical identity of one observed source manifest.
|
|
136
|
+
|
|
129
137
|
## `SourceMemberKind`
|
|
130
138
|
|
|
131
139
|
Ownership kind for a declared class or type member.
|
|
@@ -29,6 +29,7 @@ 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_manifest_identity import SourceManifestIdentity
|
|
32
33
|
from .shared.code.models.source_member_kind import SourceMemberKind
|
|
33
34
|
from .shared.code.models.source_relation_kind import SourceRelationKind
|
|
34
35
|
|
|
@@ -51,6 +52,7 @@ __all__ = [
|
|
|
51
52
|
"QueryableCodeMap",
|
|
52
53
|
"ScanPolicy",
|
|
53
54
|
"SourceMemberKind",
|
|
55
|
+
"SourceManifestIdentity",
|
|
54
56
|
"SourceRelationKind",
|
|
55
57
|
]
|
|
56
58
|
|
|
@@ -189,6 +191,12 @@ class ModwireApplication:
|
|
|
189
191
|
cached = self.generate_map_cached_with_diagnostics(language, root, policy, options)
|
|
190
192
|
return CachedResult(value=QueryableCodeMap(code_map=cached.value), outcomes=cached.outcomes)
|
|
191
193
|
|
|
194
|
+
def source_manifest_identity(self, language: str, root: str, policy: ScanPolicy) -> SourceManifestIdentity:
|
|
195
|
+
"""Observe the current canonical source-manifest identity without parsing source."""
|
|
196
|
+
|
|
197
|
+
request = self.extraction.request(language, str(root))
|
|
198
|
+
return self.cli.source_manifest_identity(request, policy)
|
|
199
|
+
|
|
192
200
|
def implementation_manifest(self, code_map: CodeMap, format: ManifestFormat) -> ImplementationManifestDocument:
|
|
193
201
|
"""Publish a deterministic, provenance-bearing implementation manifest."""
|
|
194
202
|
|
|
@@ -231,6 +239,7 @@ class ModwireApplication:
|
|
|
231
239
|
CachedResult,
|
|
232
240
|
CacheOptions,
|
|
233
241
|
ScanPolicy,
|
|
242
|
+
SourceManifestIdentity,
|
|
234
243
|
SourceMemberKind,
|
|
235
244
|
SourceRelationKind,
|
|
236
245
|
ImplementationManifest,
|
|
@@ -13,6 +13,7 @@ from ..shared.code.models.code_map import CodeMap
|
|
|
13
13
|
from ..shared.code.models.queryable_code_map import QueryableCodeMap
|
|
14
14
|
from ..shared.code.models.scan_policy import ScanPolicy
|
|
15
15
|
from ..shared.code.models.source_extraction import SourceExtraction
|
|
16
|
+
from ..shared.code.models.source_manifest_identity import SourceManifestIdentity
|
|
16
17
|
from .cache.application import CacheApplication
|
|
17
18
|
from .cache.models.cache_options import CacheOptions
|
|
18
19
|
from .cache.models.cache_plan import CachePlan
|
|
@@ -49,6 +50,9 @@ class CliFacade:
|
|
|
49
50
|
def extract(self, request: ExtractionRequest, policy: ScanPolicy) -> SourceExtraction:
|
|
50
51
|
return self.pipeline.extract(request, policy)
|
|
51
52
|
|
|
53
|
+
def source_manifest_identity(self, request: ExtractionRequest, policy: ScanPolicy) -> SourceManifestIdentity:
|
|
54
|
+
return self.pipeline.source_manifest_identity(request, policy)
|
|
55
|
+
|
|
52
56
|
def has_source_files(self, request: ExtractionRequest, policy: ScanPolicy) -> bool:
|
|
53
57
|
return self.pipeline.has_source_files(request, policy)
|
|
54
58
|
|
|
@@ -9,6 +9,7 @@ from ...architecture.report.models.report_node import ReportNode
|
|
|
9
9
|
from ...extraction.extractors.models.extraction_request import ExtractionRequest
|
|
10
10
|
from ...shared.code.models.scan_policy import ScanPolicy
|
|
11
11
|
from ...shared.code.models.source_extraction import SourceExtraction
|
|
12
|
+
from ...shared.code.models.source_manifest_identity import SourceManifestIdentity
|
|
12
13
|
from .domain import ReportPipelineStep, SourceReader
|
|
13
14
|
from .models.command_request import CommandRequest
|
|
14
15
|
from .models.extractor_command_input import ExtractorCommandInput
|
|
@@ -37,6 +38,14 @@ class PipelineApplication:
|
|
|
37
38
|
self.reader.ensure_available(request.runtime)
|
|
38
39
|
return self.reader.extract_source(request, policy)
|
|
39
40
|
|
|
41
|
+
def source_manifest_identity(self, request: ExtractionRequest, policy: ScanPolicy) -> SourceManifestIdentity:
|
|
42
|
+
self.reader.ensure_available(request.runtime)
|
|
43
|
+
manifest = self.reader.inventory(request, policy).manifest
|
|
44
|
+
return SourceManifestIdentity(
|
|
45
|
+
digest_algorithm=manifest.digest_algorithm,
|
|
46
|
+
digest=manifest.digest,
|
|
47
|
+
)
|
|
48
|
+
|
|
40
49
|
def has_source_files(self, request: ExtractionRequest, policy: ScanPolicy) -> bool:
|
|
41
50
|
self.reader.ensure_available(request.runtime)
|
|
42
51
|
return self.reader.has_source_files(request, policy)
|
{modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/typescript/build.py
RENAMED
|
@@ -12,7 +12,7 @@ class BuildAdapter:
|
|
|
12
12
|
shutil.copytree(source, work, ignore=shutil.ignore_patterns("build.py", "__pycache__"))
|
|
13
13
|
environment = dict(os.environ)
|
|
14
14
|
environment["npm_config_cache"] = str(work.parent.parent / "cache/npm")
|
|
15
|
-
BuildAdapter.run(("npm", "ci"), cwd=work, environment=environment)
|
|
15
|
+
BuildAdapter.run(("npm", "ci", "--engine-strict"), cwd=work, environment=environment)
|
|
16
16
|
BuildAdapter.run(("npm", "run", "check"), cwd=work, environment=environment)
|
|
17
17
|
BuildAdapter.run(("npm", "run", "build"), cwd=work, environment=environment)
|
|
18
18
|
if (work / "script.js").read_bytes() != (source / "script.js").read_bytes():
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
"devDependencies": {
|
|
12
12
|
"@types/node": "^24.0.7",
|
|
13
13
|
"@vercel/ncc": "^0.38.3"
|
|
14
|
+
},
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": "20 || >=22"
|
|
14
17
|
}
|
|
15
18
|
},
|
|
16
19
|
"node_modules/@nodelib/fs.scandir": {
|
|
@@ -89,15 +92,15 @@
|
|
|
89
92
|
}
|
|
90
93
|
},
|
|
91
94
|
"node_modules/brace-expansion": {
|
|
92
|
-
"version": "5.0.
|
|
93
|
-
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.
|
|
94
|
-
"integrity": "sha512-
|
|
95
|
+
"version": "5.0.12",
|
|
96
|
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz",
|
|
97
|
+
"integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==",
|
|
95
98
|
"license": "MIT",
|
|
96
99
|
"dependencies": {
|
|
97
100
|
"balanced-match": "^4.0.2"
|
|
98
101
|
},
|
|
99
102
|
"engines": {
|
|
100
|
-
"node": "
|
|
103
|
+
"node": "20 || >=22"
|
|
101
104
|
}
|
|
102
105
|
},
|
|
103
106
|
"node_modules/braces": {
|
{modwire-10.0.0 → modwire-10.1.0}/src/modwire/extraction/extractors/resources/typescript/script.js
RENAMED
|
@@ -230989,7 +230989,7 @@ exports.range = range;
|
|
|
230989
230989
|
"use strict";
|
|
230990
230990
|
|
|
230991
230991
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
230992
|
-
exports.EXPANSION_MAX = void 0;
|
|
230992
|
+
exports.EXPANSION_MAX_REWRITES = exports.EXPANSION_MAX_DEPTH = exports.EXPANSION_MAX_LENGTH = exports.EXPANSION_MAX = void 0;
|
|
230993
230993
|
exports.expand = expand;
|
|
230994
230994
|
const balanced_match_1 = __nccwpck_require__(2649);
|
|
230995
230995
|
const escSlash = '\0SLASH' + Math.random() + '\0';
|
|
@@ -231008,6 +231008,35 @@ const closePattern = /\\}/g;
|
|
|
231008
231008
|
const commaPattern = /\\,/g;
|
|
231009
231009
|
const periodPattern = /\\\./g;
|
|
231010
231010
|
exports.EXPANSION_MAX = 100_000;
|
|
231011
|
+
// `EXPANSION_MAX` caps the *number* of expansions, but not their length. An
|
|
231012
|
+
// input like `'{a,b}'.repeat(1500)` stays under that count - its output is
|
|
231013
|
+
// truncated to 100k results - while making every result ~1500 characters
|
|
231014
|
+
// long. The result set, and the intermediate arrays built while combining
|
|
231015
|
+
// brace sets, then grow large enough to exhaust memory and crash the process
|
|
231016
|
+
// (CVE-2026-14257). `EXPANSION_MAX_LENGTH` bounds the total number of
|
|
231017
|
+
// characters the accumulator may hold at any point, so memory stays flat no
|
|
231018
|
+
// matter how many brace groups are chained. The limit sits well above any
|
|
231019
|
+
// realistic expansion (100k results hitting `EXPANSION_MAX` measure ~1M
|
|
231020
|
+
// characters) so legitimate input is unaffected.
|
|
231021
|
+
exports.EXPANSION_MAX_LENGTH = 4_000_000;
|
|
231022
|
+
// `expand_` recurses once per level of brace *nesting* - both when expanding a
|
|
231023
|
+
// set's comma members and when re-wrapping a set whose body is a single part.
|
|
231024
|
+
// The CVE-2026-14257 fix made the *tail* iterative (recursion on `m.post`, one
|
|
231025
|
+
// level per chained group), which left nesting depth unbounded: about 3,100
|
|
231026
|
+
// levels of `{{{...a,b...}}}` - only ~6KB of input - exhausted the native stack
|
|
231027
|
+
// and crashed the process. `EXPANSION_MAX_DEPTH` bounds how deep the parser
|
|
231028
|
+
// will follow nesting. It sits far above any realistic pattern and well below
|
|
231029
|
+
// the depth at which the stack runs out.
|
|
231030
|
+
exports.EXPANSION_MAX_DEPTH = 1_000;
|
|
231031
|
+
// Bash keeps a quirk where a brace group followed by a comma set still expands
|
|
231032
|
+
// (`{a},b}`). The parser implements it by rewriting the string and restarting
|
|
231033
|
+
// the scan, absorbing one `}` per pass. `n` trailing braces therefore cost `n`
|
|
231034
|
+
// full passes over a string that itself grows by one `escClose` sentinel each
|
|
231035
|
+
// time - quadratic in `n`, with a ~26x constant from the sentinel's length.
|
|
231036
|
+
// 128KB of `'{a}' + '}'.repeat(n) + ',z}'` blocked the event loop for 27
|
|
231037
|
+
// seconds to produce two results. `EXPANSION_MAX_REWRITES` bounds how many
|
|
231038
|
+
// times the scan may restart. Real `{a},b}` input needs a handful.
|
|
231039
|
+
exports.EXPANSION_MAX_REWRITES = 1_000;
|
|
231011
231040
|
function numeric(str) {
|
|
231012
231041
|
return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0);
|
|
231013
231042
|
}
|
|
@@ -231027,37 +231056,52 @@ function unescapeBraces(str) {
|
|
|
231027
231056
|
.replace(escCommaPattern, ',')
|
|
231028
231057
|
.replace(escPeriodPattern, '.');
|
|
231029
231058
|
}
|
|
231059
|
+
// Like `target.push(...items)` but doesn't overflow the stack
|
|
231060
|
+
function pushAll(target, items) {
|
|
231061
|
+
for (let i = 0; i < items.length; i++) {
|
|
231062
|
+
target.push(items[i]);
|
|
231063
|
+
}
|
|
231064
|
+
}
|
|
231030
231065
|
/**
|
|
231031
231066
|
* Basically just str.split(","), but handling cases
|
|
231032
231067
|
* where we have nested braced sections, which should be
|
|
231033
231068
|
* treated as individual members, like {a,{b,c},d}
|
|
231034
231069
|
*/
|
|
231035
231070
|
function parseCommaParts(str) {
|
|
231036
|
-
if (!str) {
|
|
231037
|
-
return [''];
|
|
231038
|
-
}
|
|
231039
231071
|
const parts = [];
|
|
231040
|
-
|
|
231041
|
-
|
|
231042
|
-
|
|
231043
|
-
|
|
231044
|
-
|
|
231045
|
-
|
|
231046
|
-
|
|
231047
|
-
|
|
231048
|
-
|
|
231049
|
-
|
|
231050
|
-
|
|
231051
|
-
|
|
231052
|
-
|
|
231053
|
-
|
|
231054
|
-
|
|
231072
|
+
// Walk the brace groups iteratively. Recursing on `post` once per group let a
|
|
231073
|
+
// chain of them exhaust the stack - the parsing-side counterpart to
|
|
231074
|
+
// the `expand_` overflow fixed for CVE-2026-14257, and not something `max` or
|
|
231075
|
+
// `maxLength` can bound, since it happens before expansion.
|
|
231076
|
+
//
|
|
231077
|
+
// The part the next chunk continues
|
|
231078
|
+
let carry = '';
|
|
231079
|
+
for (;;) {
|
|
231080
|
+
const m = (0, balanced_match_1.balanced)('{', '}', str);
|
|
231081
|
+
if (!m) {
|
|
231082
|
+
const tail = str.split(',');
|
|
231083
|
+
tail[0] = carry + tail[0];
|
|
231084
|
+
pushAll(parts, tail);
|
|
231085
|
+
return parts;
|
|
231086
|
+
}
|
|
231087
|
+
const { pre, body, post } = m;
|
|
231088
|
+
const p = pre.split(',');
|
|
231089
|
+
p[0] = carry + p[0];
|
|
231090
|
+
p[p.length - 1] += '{' + body + '}';
|
|
231091
|
+
if (!post.length) {
|
|
231092
|
+
pushAll(parts, p);
|
|
231093
|
+
return parts;
|
|
231094
|
+
}
|
|
231095
|
+
carry = p.pop();
|
|
231096
|
+
pushAll(parts, p);
|
|
231097
|
+
str = post;
|
|
231098
|
+
}
|
|
231055
231099
|
}
|
|
231056
231100
|
function expand(str, options = {}) {
|
|
231057
231101
|
if (!str) {
|
|
231058
231102
|
return [];
|
|
231059
231103
|
}
|
|
231060
|
-
const { max = exports.EXPANSION_MAX } = options;
|
|
231104
|
+
const { max = exports.EXPANSION_MAX, maxLength = exports.EXPANSION_MAX_LENGTH, maxDepth = exports.EXPANSION_MAX_DEPTH, maxRewrites = exports.EXPANSION_MAX_REWRITES, } = options;
|
|
231061
231105
|
// I don't know why Bash 4.3 does this, but it does.
|
|
231062
231106
|
// Anything starting with {} will have the first two bytes preserved
|
|
231063
231107
|
// but *only* at the top level, so {},a}b will not expand to anything,
|
|
@@ -231067,7 +231111,7 @@ function expand(str, options = {}) {
|
|
|
231067
231111
|
if (str.slice(0, 2) === '{}') {
|
|
231068
231112
|
str = '\\{\\}' + str.slice(2);
|
|
231069
231113
|
}
|
|
231070
|
-
return expand_(escapeBraces(str), max, true).map(unescapeBraces);
|
|
231114
|
+
return expand_(escapeBraces(str), max, maxLength, maxDepth, 0, maxRewrites, true).map(unescapeBraces);
|
|
231071
231115
|
}
|
|
231072
231116
|
function embrace(str) {
|
|
231073
231117
|
return '{' + str + '}';
|
|
@@ -231081,25 +231125,125 @@ function lte(i, y) {
|
|
|
231081
231125
|
function gte(i, y) {
|
|
231082
231126
|
return i >= y;
|
|
231083
231127
|
}
|
|
231084
|
-
|
|
231085
|
-
|
|
231086
|
-
|
|
231087
|
-
|
|
231088
|
-
|
|
231089
|
-
|
|
231128
|
+
// Build `{ acc[a] + pre + values[v] }` for every combination, capping the
|
|
231129
|
+
// number of results at `max` and the total number of characters at `maxLength`.
|
|
231130
|
+
// This is the one place output grows, so bounding it here keeps the single
|
|
231131
|
+
// accumulator - and therefore memory - flat regardless of how many brace groups
|
|
231132
|
+
// are combined (CVE-2026-14257).
|
|
231133
|
+
function combine(acc, pre, values, max, maxLength, dropEmpties) {
|
|
231134
|
+
const out = [];
|
|
231135
|
+
let length = 0;
|
|
231136
|
+
for (let a = 0; a < acc.length; a++) {
|
|
231137
|
+
for (let v = 0; v < values.length; v++) {
|
|
231138
|
+
if (out.length >= max)
|
|
231139
|
+
return out;
|
|
231140
|
+
const expansion = acc[a] + pre + values[v];
|
|
231141
|
+
// Bash drops empty results at the top level. Skip them before they count
|
|
231142
|
+
// against `max`, so `max` bounds the number of *kept* results.
|
|
231143
|
+
if (dropEmpties && !expansion)
|
|
231144
|
+
continue;
|
|
231145
|
+
if (length + expansion.length > maxLength)
|
|
231146
|
+
return out;
|
|
231147
|
+
out.push(expansion);
|
|
231148
|
+
length += expansion.length;
|
|
231149
|
+
}
|
|
231150
|
+
}
|
|
231151
|
+
return out;
|
|
231152
|
+
}
|
|
231153
|
+
// The expansion values of a single numeric (`1..5`) or alphabetic (`a..e..2`)
|
|
231154
|
+
// sequence body.
|
|
231155
|
+
function expandSequence(body, isAlphaSequence, max, maxLength) {
|
|
231156
|
+
const n = body.split(/\.\./);
|
|
231157
|
+
const N = [];
|
|
231158
|
+
// A sequence body always splits into two or three parts, but the compiler
|
|
231159
|
+
// can't know that.
|
|
231160
|
+
/* c8 ignore start */
|
|
231161
|
+
if (n[0] === undefined || n[1] === undefined) {
|
|
231162
|
+
return N;
|
|
231163
|
+
}
|
|
231164
|
+
/* c8 ignore stop */
|
|
231165
|
+
const x = numeric(n[0]);
|
|
231166
|
+
const y = numeric(n[1]);
|
|
231167
|
+
const width = Math.max(n[0].length, n[1].length);
|
|
231168
|
+
let incr = n.length === 3 && n[2] !== undefined ?
|
|
231169
|
+
Math.max(Math.abs(numeric(n[2])), 1)
|
|
231170
|
+
: 1;
|
|
231171
|
+
let test = lte;
|
|
231172
|
+
const reverse = y < x;
|
|
231173
|
+
if (reverse) {
|
|
231174
|
+
incr *= -1;
|
|
231175
|
+
test = gte;
|
|
231176
|
+
}
|
|
231177
|
+
const pad = n.some(isPadded);
|
|
231178
|
+
let length = 0;
|
|
231179
|
+
for (let i = x; test(i, y) && N.length < max; i += incr) {
|
|
231180
|
+
let c;
|
|
231181
|
+
if (isAlphaSequence) {
|
|
231182
|
+
c = String.fromCharCode(i);
|
|
231183
|
+
if (c === '\\') {
|
|
231184
|
+
c = '';
|
|
231185
|
+
}
|
|
231186
|
+
}
|
|
231187
|
+
else {
|
|
231188
|
+
c = String(i);
|
|
231189
|
+
if (pad) {
|
|
231190
|
+
const need = width - c.length;
|
|
231191
|
+
if (need > 0) {
|
|
231192
|
+
const z = new Array(need + 1).join('0');
|
|
231193
|
+
if (i < 0) {
|
|
231194
|
+
c = '-' + z + c.slice(1);
|
|
231195
|
+
}
|
|
231196
|
+
else {
|
|
231197
|
+
c = z + c;
|
|
231198
|
+
}
|
|
231199
|
+
}
|
|
231200
|
+
}
|
|
231201
|
+
}
|
|
231202
|
+
if (length + c.length > maxLength)
|
|
231203
|
+
break;
|
|
231204
|
+
N.push(c);
|
|
231205
|
+
length += c.length;
|
|
231206
|
+
}
|
|
231207
|
+
return N;
|
|
231208
|
+
}
|
|
231209
|
+
function expand_(str, max, maxLength, maxDepth, depth, maxRewrites, isTop) {
|
|
231210
|
+
// Too deeply nested to keep following: treat the rest as literal, the same
|
|
231211
|
+
// way a group that cannot expand is already handled. Truncating rather than
|
|
231212
|
+
// throwing keeps `expand` total, matching `max` and `maxLength`.
|
|
231213
|
+
if (depth > maxDepth) {
|
|
231214
|
+
return [str];
|
|
231215
|
+
}
|
|
231216
|
+
// Consume the string's top-level brace groups left to right, threading a
|
|
231217
|
+
// running set of combined prefixes (`acc`). Expanding the tail iteratively -
|
|
231218
|
+
// rather than recursing on `m.post` once per group - keeps the native stack
|
|
231219
|
+
// depth constant, so deeply chained input (`'{a,b}'.repeat(3000)`) can no
|
|
231220
|
+
// longer overflow the stack, and leaves a single accumulator whose size
|
|
231221
|
+
// `maxLength` bounds directly (CVE-2026-14257).
|
|
231222
|
+
let acc = [''];
|
|
231223
|
+
// Bash drops empty results, but only when the *first* top-level group is a
|
|
231224
|
+
// comma set - a sequence like `{a..\}` may legitimately yield ''. The drop
|
|
231225
|
+
// is on the final strings, so it is applied to whichever `combine` produces
|
|
231226
|
+
// them (the one with no brace set left in the tail).
|
|
231227
|
+
// How many times the `{a},b}` rewrite below has restarted the scan. Each pass
|
|
231228
|
+
// re-reads the whole string, so leaving this unbounded is quadratic.
|
|
231229
|
+
let rewrites = 0;
|
|
231230
|
+
let dropEmpties = false;
|
|
231231
|
+
let firstGroup = true;
|
|
231090
231232
|
for (;;) {
|
|
231091
231233
|
const m = (0, balanced_match_1.balanced)('{', '}', str);
|
|
231092
|
-
|
|
231093
|
-
|
|
231234
|
+
// No brace set left: the rest of the string is literal.
|
|
231235
|
+
if (!m) {
|
|
231236
|
+
return combine(acc, str, [''], max, maxLength, dropEmpties);
|
|
231237
|
+
}
|
|
231094
231238
|
// no need to expand pre, since it is guaranteed to be free of brace-sets
|
|
231095
231239
|
const pre = m.pre;
|
|
231096
|
-
if (/\$$/.test(
|
|
231097
|
-
|
|
231098
|
-
|
|
231099
|
-
|
|
231100
|
-
|
|
231101
|
-
|
|
231102
|
-
|
|
231240
|
+
if (/\$$/.test(pre)) {
|
|
231241
|
+
acc = combine(acc, pre + '{' + m.body + '}', [''], max, maxLength, dropEmpties && !m.post.length);
|
|
231242
|
+
firstGroup = false;
|
|
231243
|
+
if (!m.post.length)
|
|
231244
|
+
break;
|
|
231245
|
+
str = m.post;
|
|
231246
|
+
continue;
|
|
231103
231247
|
}
|
|
231104
231248
|
const isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
|
|
231105
231249
|
const isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
|
|
@@ -231107,95 +231251,73 @@ function expand_(str, max, isTop) {
|
|
|
231107
231251
|
const isOptions = m.body.indexOf(',') >= 0;
|
|
231108
231252
|
if (!isSequence && !isOptions) {
|
|
231109
231253
|
// {a},b}
|
|
231110
|
-
if (m.post.match(/,(?!,).*\}/)) {
|
|
231254
|
+
if (rewrites < maxRewrites && m.post.match(/,(?!,).*\}/)) {
|
|
231255
|
+
rewrites++;
|
|
231111
231256
|
str = m.pre + '{' + m.body + escClose + m.post;
|
|
231112
231257
|
isTop = true;
|
|
231113
231258
|
continue;
|
|
231114
231259
|
}
|
|
231115
|
-
|
|
231260
|
+
// Nothing here expands, so the whole remaining string is literal.
|
|
231261
|
+
return combine(acc, pre + '{' + m.body + '}' + m.post, [''], max, maxLength, dropEmpties);
|
|
231116
231262
|
}
|
|
231117
|
-
|
|
231118
|
-
|
|
231119
|
-
|
|
231120
|
-
|
|
231121
|
-
|
|
231122
|
-
let n;
|
|
231263
|
+
if (firstGroup) {
|
|
231264
|
+
dropEmpties = isTop && !isSequence;
|
|
231265
|
+
firstGroup = false;
|
|
231266
|
+
}
|
|
231267
|
+
let values;
|
|
231123
231268
|
if (isSequence) {
|
|
231124
|
-
|
|
231269
|
+
values = expandSequence(m.body, isAlphaSequence, max, maxLength);
|
|
231125
231270
|
}
|
|
231126
231271
|
else {
|
|
231127
|
-
n = parseCommaParts(m.body);
|
|
231272
|
+
let n = parseCommaParts(m.body);
|
|
231128
231273
|
if (n.length === 1 && n[0] !== undefined) {
|
|
231129
231274
|
// x{{a,b}}y ==> x{a}y x{b}y
|
|
231130
|
-
n = expand_(n[0], max, false).map(embrace);
|
|
231275
|
+
n = expand_(n[0], max, maxLength, maxDepth, depth + 1, maxRewrites, false).map(embrace);
|
|
231131
231276
|
//XXX is this necessary? Can't seem to hit it in tests.
|
|
231132
231277
|
/* c8 ignore start */
|
|
231133
231278
|
if (n.length === 1) {
|
|
231134
|
-
|
|
231279
|
+
acc = combine(acc, pre + n[0], [''], max, maxLength, dropEmpties && !m.post.length);
|
|
231280
|
+
if (!m.post.length)
|
|
231281
|
+
break;
|
|
231282
|
+
str = m.post;
|
|
231283
|
+
continue;
|
|
231135
231284
|
}
|
|
231136
231285
|
/* c8 ignore stop */
|
|
231137
231286
|
}
|
|
231138
|
-
|
|
231139
|
-
|
|
231140
|
-
|
|
231141
|
-
|
|
231142
|
-
|
|
231143
|
-
|
|
231144
|
-
|
|
231145
|
-
|
|
231146
|
-
|
|
231147
|
-
Math.max(Math.abs(numeric(n[2])), 1)
|
|
231148
|
-
: 1;
|
|
231149
|
-
let test = lte;
|
|
231150
|
-
const reverse = y < x;
|
|
231151
|
-
if (reverse) {
|
|
231152
|
-
incr *= -1;
|
|
231153
|
-
test = gte;
|
|
231154
|
-
}
|
|
231155
|
-
const pad = n.some(isPadded);
|
|
231156
|
-
N = [];
|
|
231157
|
-
for (let i = x; test(i, y) && N.length < max; i += incr) {
|
|
231158
|
-
let c;
|
|
231159
|
-
if (isAlphaSequence) {
|
|
231160
|
-
c = String.fromCharCode(i);
|
|
231161
|
-
if (c === '\\') {
|
|
231162
|
-
c = '';
|
|
231163
|
-
}
|
|
231287
|
+
// Values that `combine` is going to drop as empty produce no result, so
|
|
231288
|
+
// they must not count against `max` - otherwise `{a,,b}` with `max: 2`
|
|
231289
|
+
// would stop at `['a', '']` and yield one result instead of two. Skipping
|
|
231290
|
+
// them outright keeps `values` bounded while leaving `max` a bound on
|
|
231291
|
+
// *kept* results.
|
|
231292
|
+
let dropsEmpties = dropEmpties && !m.post.length && !pre;
|
|
231293
|
+
for (let d = 0; dropsEmpties && d < acc.length; d++) {
|
|
231294
|
+
if (acc[d]) {
|
|
231295
|
+
dropsEmpties = false;
|
|
231164
231296
|
}
|
|
231165
|
-
else {
|
|
231166
|
-
c = String(i);
|
|
231167
|
-
if (pad) {
|
|
231168
|
-
const need = width - c.length;
|
|
231169
|
-
if (need > 0) {
|
|
231170
|
-
const z = new Array(need + 1).join('0');
|
|
231171
|
-
if (i < 0) {
|
|
231172
|
-
c = '-' + z + c.slice(1);
|
|
231173
|
-
}
|
|
231174
|
-
else {
|
|
231175
|
-
c = z + c;
|
|
231176
|
-
}
|
|
231177
|
-
}
|
|
231178
|
-
}
|
|
231179
|
-
}
|
|
231180
|
-
N.push(c);
|
|
231181
231297
|
}
|
|
231182
|
-
|
|
231183
|
-
|
|
231184
|
-
|
|
231185
|
-
|
|
231186
|
-
|
|
231187
|
-
|
|
231188
|
-
|
|
231189
|
-
|
|
231190
|
-
|
|
231191
|
-
|
|
231192
|
-
|
|
231193
|
-
|
|
231298
|
+
values = [];
|
|
231299
|
+
let valuesLength = 0;
|
|
231300
|
+
outer: for (let j = 0; j < n.length; j++) {
|
|
231301
|
+
const expanded = expand_(n[j], max, maxLength, maxDepth, depth + 1, maxRewrites, false);
|
|
231302
|
+
for (let k = 0; k < expanded.length; k++) {
|
|
231303
|
+
const v = expanded[k];
|
|
231304
|
+
if (dropsEmpties && !v)
|
|
231305
|
+
continue;
|
|
231306
|
+
if (values.length >= max ||
|
|
231307
|
+
valuesLength + v.length > maxLength) {
|
|
231308
|
+
break outer;
|
|
231309
|
+
}
|
|
231310
|
+
values.push(v);
|
|
231311
|
+
valuesLength += v.length;
|
|
231194
231312
|
}
|
|
231195
231313
|
}
|
|
231196
231314
|
}
|
|
231197
|
-
|
|
231315
|
+
acc = combine(acc, pre, values, max, maxLength, dropEmpties && !m.post.length);
|
|
231316
|
+
if (!m.post.length)
|
|
231317
|
+
break;
|
|
231318
|
+
str = m.post;
|
|
231198
231319
|
}
|
|
231320
|
+
return acc;
|
|
231199
231321
|
}
|
|
231200
231322
|
//# sourceMappingURL=index.js.map
|
|
231201
231323
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from pydantic import Field
|
|
2
|
+
|
|
3
|
+
from ...values.models.value_model import ValueModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class SourceManifestIdentity(ValueModel):
|
|
7
|
+
"""Canonical identity of one observed source manifest."""
|
|
8
|
+
|
|
9
|
+
digest_algorithm: str = Field(pattern="^sha256$")
|
|
10
|
+
digest: str = Field(pattern="^[0-9a-f]{64}$")
|