entrygraph 0.1.43__tar.gz → 0.1.45__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.
- {entrygraph-0.1.43 → entrygraph-0.1.45}/PKG-INFO +1 -1
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/_version.py +2 -2
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/entrypoints/golang.py +15 -1
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/entrypoints/php.py +39 -2
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/entrypoints/ruby.py +13 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_entrypoints_go.py +19 -0
- entrygraph-0.1.45/tests/test_entrypoints_php.py +66 -0
- entrygraph-0.1.45/tests/test_entrypoints_ruby.py +63 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/.github/workflows/ci.yml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/.github/workflows/release.yml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/.gitignore +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/LICENSE +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/README.md +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/RELEASING.md +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/pyproject.toml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/__init__.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/__main__.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/api.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/cli/__init__.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/cli/main.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/cli/render.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/data/sinks/csharp.toml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/data/sinks/go.toml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/data/sinks/java.toml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/data/sinks/javascript.toml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/data/sinks/lib_javascript.toml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/data/sinks/lib_python.toml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/data/sinks/php.toml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/data/sinks/python.toml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/data/sinks/ruby.toml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/data/sinks/rust.toml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/db/__init__.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/db/engine.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/db/meta.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/db/models.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/db/queries.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/__init__.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/entrypoints/__init__.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/entrypoints/base.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/entrypoints/configs.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/entrypoints/csharp.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/entrypoints/java.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/entrypoints/javascript.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/entrypoints/python.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/entrypoints/rust.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/frameworks.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/manifests.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/detect/taint.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/errors.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/extract/__init__.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/extract/base.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/extract/csharp.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/extract/golang.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/extract/ir.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/extract/java.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/extract/javascript.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/extract/php.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/extract/python.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/extract/registry.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/extract/ruby.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/extract/rust.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/fs/__init__.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/fs/hashing.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/fs/lang.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/fs/walker.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/graph/__init__.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/graph/adjacency.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/graph/cte.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/graph/scoring.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/kinds.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/parsing/__init__.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/parsing/parsers.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/parsing/queries.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/pipeline/__init__.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/pipeline/scanner.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/pipeline/worker.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/pipeline/writer.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/py.typed +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/csharp/calls.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/csharp/definitions.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/csharp/imports.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/go/calls.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/go/definitions.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/go/imports.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/java/calls.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/java/definitions.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/java/imports.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/javascript/calls.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/javascript/definitions.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/javascript/imports.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/php/calls.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/php/definitions.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/php/imports.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/python/calls.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/python/definitions.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/python/imports.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/ruby/calls.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/ruby/definitions.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/ruby/imports.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/rust/calls.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/rust/definitions.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/queries/rust/imports.scm +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/resolve/__init__.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/resolve/externals.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/resolve/hierarchy.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/resolve/resolver.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/resolve/symbol_table.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/src/entrygraph/results.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/conftest.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/csharp/aspnet_app/Controllers/ReportsController.cs +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/csharp/aspnet_app/Program.cs +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/csharp/aspnet_app/Services/ReportService.cs +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/csharp/aspnet_app/app.csproj +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/csharp/minimalapi_app/Program.cs +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/csharp/minimalapi_app/app.csproj +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/go/gin_app/go.mod +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/go/gin_app/main.go +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/go/gin_app/service.go +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/go/nethttp_app/go.mod +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/go/nethttp_app/main.go +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/java/methodref_app/pom.xml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/java/methodref_app/src/main/java/com/example/App.java +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/java/spring_app/pom.xml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/java/spring_app/src/main/java/com/example/Application.java +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/java/spring_app/src/main/java/com/example/ReportRunner.java +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/java/spring_app/src/main/java/com/example/ReportService.java +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/java/spring_app/src/main/java/com/example/UserController.java +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/javascript/commonjs_app/server.js +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/javascript/express_app/package.json +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/javascript/express_app/src/routes.js +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/javascript/express_app/src/services.js +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/php/laravel_app/app/Http/Controllers/ReportController.php +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/php/laravel_app/artisan +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/php/laravel_app/composer.json +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/php/laravel_app/routes/web.php +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/python/chained_sinks/app.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/python/flask_app/app/__init__.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/python/flask_app/app/db.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/python/flask_app/app/routes.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/python/flask_app/app/services.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/python/flask_app/cli.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/python/flask_app/requirements.txt +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/python/fuzzy_sink/app.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/python/heal_fidelity/caller.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/python/heal_fidelity/worker.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/python/may_continue/app.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/python/sanitizer/app.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/python/taint_source/handler.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/ruby/sinatra_app/Gemfile +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/ruby/sinatra_app/app.rb +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/ruby/sinatra_app/services/runner.rb +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/rust/axum_app/Cargo.toml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/rust/axum_app/src/handlers.rs +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/rust/axum_app/src/main.rs +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/rust/axum_callback_app/Cargo.toml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/rust/axum_callback_app/src/main.rs +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/rust/scoped_sink_app/Cargo.toml +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/rust/scoped_sink_app/src/main.rs +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_api.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_cli.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_commonjs.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_csharp_callbacks.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_cte_bounds.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_engine_pragmas.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_entrypoint_expansion.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_entrypoints.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_entrypoints_javascript.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_extract_csharp.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_extract_go.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_extract_java.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_extract_javascript.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_extract_php.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_extract_python.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_extract_ruby.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_extract_rust.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_frameworks.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_fuzzy_sink.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_go_callbacks.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_hardening.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_heal_fidelity.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_incremental.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_indexer.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_java_callbacks.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_lang.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_manifests.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_may_continue.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_models.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_pool.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_reachability.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_registry_cache.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_render.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_resolver.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_rust_callbacks.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_rust_scoped_sinks.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_sanitizer_languages.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_scoring.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_sink_catalog.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_taint.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_taint_sanitizers.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_taint_sources.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/tests/test_walker.py +0 -0
- {entrygraph-0.1.43 → entrygraph-0.1.45}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: entrygraph
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.45
|
|
4
4
|
Summary: Language-agnostic code graph: query symbols, entrypoints, and source-to-sink call paths from a SQLite index
|
|
5
5
|
Project-URL: Repository, https://github.com/brettbergin/entrygraph
|
|
6
6
|
Author-email: Brett Bergin <brettberginbc@yahoo.com>
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.1.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 1,
|
|
21
|
+
__version__ = version = '0.1.45'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 45)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -22,6 +22,12 @@ _GIN_METHODS = (
|
|
|
22
22
|
_NETHTTP_REGISTER = frozenset({"HandleFunc", "Handle"})
|
|
23
23
|
|
|
24
24
|
|
|
25
|
+
def _is_go_test(path: str) -> bool:
|
|
26
|
+
"""Go test files (`*_test.go`) register routes only to exercise handlers; those
|
|
27
|
+
are test-harness calls, not the production route surface (#33)."""
|
|
28
|
+
return path.endswith("_test.go")
|
|
29
|
+
|
|
30
|
+
|
|
25
31
|
def _go_main(x: FileExtraction) -> list[EntrypointHint]:
|
|
26
32
|
hints = []
|
|
27
33
|
for symbol in x.symbols:
|
|
@@ -43,6 +49,8 @@ def _go_main(x: FileExtraction) -> list[EntrypointHint]:
|
|
|
43
49
|
|
|
44
50
|
|
|
45
51
|
def _nethttp_routes(x: FileExtraction) -> list[EntrypointHint]:
|
|
52
|
+
if _is_go_test(x.path):
|
|
53
|
+
return []
|
|
46
54
|
hints = []
|
|
47
55
|
for ref in x.references:
|
|
48
56
|
if (
|
|
@@ -101,6 +109,8 @@ def _group_prefixes(x: FileExtraction) -> dict[str, str]:
|
|
|
101
109
|
|
|
102
110
|
|
|
103
111
|
def _gin_routes(x: FileExtraction) -> list[EntrypointHint]:
|
|
112
|
+
if _is_go_test(x.path):
|
|
113
|
+
return []
|
|
104
114
|
prefixes = _group_prefixes(x)
|
|
105
115
|
hints = []
|
|
106
116
|
for ref in x.references:
|
|
@@ -172,6 +182,8 @@ def _chi_routes(x: FileExtraction) -> list[EntrypointHint]:
|
|
|
172
182
|
falls inside a Route call's span gets that prefix (nested Routes stack). Mount
|
|
173
183
|
(`r.Mount("/api", subRouter())`) points at a router built in another function,
|
|
174
184
|
which is out of static reach, so its prefix isn't composed."""
|
|
185
|
+
if _is_go_test(x.path):
|
|
186
|
+
return []
|
|
175
187
|
scopes: list[tuple[int, int, str]] = []
|
|
176
188
|
for ref in x.references:
|
|
177
189
|
if (
|
|
@@ -229,6 +241,8 @@ def _gorilla_routes(x: FileExtraction) -> list[EntrypointHint]:
|
|
|
229
241
|
per line. Previously only bare HandleFunc was matched — the `.Path().Methods()`
|
|
230
242
|
form and any `.Methods()` verb were dropped (loki: ~0% of gorilla routes).
|
|
231
243
|
"""
|
|
244
|
+
if _is_go_test(x.path):
|
|
245
|
+
return []
|
|
232
246
|
routes: dict[int, str] = {}
|
|
233
247
|
methods: dict[int, list[str]] = {}
|
|
234
248
|
handlers: dict[int, str | None] = {}
|
|
@@ -297,7 +311,7 @@ def _grpc_services(x: FileExtraction) -> list[EntrypointHint]:
|
|
|
297
311
|
`route` — the Entrypoint row has no name column, and it keeps distinct services
|
|
298
312
|
from collapsing in dedup (they all share `handler_qualified_name=None`).
|
|
299
313
|
"""
|
|
300
|
-
if x.path
|
|
314
|
+
if _is_go_test(x.path):
|
|
301
315
|
return [] # test harnesses spin up real services; not production surface (#33)
|
|
302
316
|
hints = []
|
|
303
317
|
seen: set[str] = set()
|
|
@@ -14,6 +14,7 @@ import re
|
|
|
14
14
|
|
|
15
15
|
from entrygraph.detect.entrypoints.base import (
|
|
16
16
|
EntrypointRule,
|
|
17
|
+
compose_route,
|
|
17
18
|
first_string_arg,
|
|
18
19
|
register,
|
|
19
20
|
)
|
|
@@ -23,6 +24,12 @@ from entrygraph.kinds import EntrypointKind, SymbolKind
|
|
|
23
24
|
_LARAVEL_VERBS = frozenset({"get", "post", "put", "delete", "patch", "any", "match"})
|
|
24
25
|
_LARAVEL_RESOURCE = frozenset({"resource", "apiResource"})
|
|
25
26
|
_SYMFONY_ROUTE = re.compile(r"#\[\s*Route\s*\(")
|
|
27
|
+
# Symfony route paths can be positional (`#[Route('/x')]`) or the `path:` named arg
|
|
28
|
+
# (`#[Route(path: '/x')]`); methods live in `methods: ['GET', 'POST']` (or a bare
|
|
29
|
+
# string). `first_string_arg` covers the positional case.
|
|
30
|
+
_SYMFONY_PATH_KW = re.compile(r"""path\s*:\s*['"]([^'"]+)['"]""")
|
|
31
|
+
_SYMFONY_METHODS = re.compile(r"""methods\s*:\s*(?:\[([^\]]*)\]|['"]([^'"]+)['"])""")
|
|
32
|
+
_QUOTED_RE = re.compile(r"""['"]([^'"]+)['"]""")
|
|
26
33
|
_WORDPRESS_HOOKS = frozenset({"add_action", "add_filter"})
|
|
27
34
|
# register_rest_route($namespace, $route, ...). Anchor to the first two positional
|
|
28
35
|
# args: arg 1 is the namespace (a literal like 'wp/v2' or a variable such as
|
|
@@ -160,20 +167,50 @@ def _laravel_routes(x: FileExtraction) -> list[EntrypointHint]:
|
|
|
160
167
|
return hints
|
|
161
168
|
|
|
162
169
|
|
|
170
|
+
def _symfony_path(decorator: str) -> str | None:
|
|
171
|
+
"""The route path from a `#[Route(...)]` attribute: the `path:` named arg if
|
|
172
|
+
present, else the first positional string."""
|
|
173
|
+
m = _SYMFONY_PATH_KW.search(decorator)
|
|
174
|
+
return m.group(1) if m else first_string_arg(decorator)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def _symfony_methods(decorator: str) -> list[str]:
|
|
178
|
+
"""HTTP verbs from `methods: ['GET', 'POST']` / `methods: 'GET'`; empty if the
|
|
179
|
+
attribute omits `methods` (Symfony then allows all verbs)."""
|
|
180
|
+
m = _SYMFONY_METHODS.search(decorator)
|
|
181
|
+
if not m:
|
|
182
|
+
return []
|
|
183
|
+
body = m.group(1) if m.group(1) is not None else m.group(2)
|
|
184
|
+
verbs = [q.upper() for q in _QUOTED_RE.findall(body)]
|
|
185
|
+
if not verbs and body.strip(): # unquoted single value
|
|
186
|
+
verbs = [body.strip().upper()]
|
|
187
|
+
return verbs
|
|
188
|
+
|
|
189
|
+
|
|
163
190
|
def _symfony_routes(x: FileExtraction) -> list[EntrypointHint]:
|
|
191
|
+
# class qname -> class-level #[Route(...)] path prefix (composed onto each
|
|
192
|
+
# method route, mirroring @Controller in NestJS and @RequestMapping in Spring).
|
|
193
|
+
prefixes: dict[str, str] = {}
|
|
194
|
+
for symbol in x.symbols:
|
|
195
|
+
if symbol.kind is SymbolKind.CLASS:
|
|
196
|
+
for decorator in symbol.decorators:
|
|
197
|
+
if _SYMFONY_ROUTE.search(decorator):
|
|
198
|
+
prefixes[symbol.qualified_name] = _symfony_path(decorator) or ""
|
|
199
|
+
break
|
|
164
200
|
hints = []
|
|
165
201
|
for symbol in x.symbols:
|
|
166
202
|
if symbol.kind not in (SymbolKind.METHOD, SymbolKind.FUNCTION):
|
|
167
203
|
continue
|
|
168
204
|
for decorator in symbol.decorators:
|
|
169
205
|
if _SYMFONY_ROUTE.search(decorator):
|
|
206
|
+
prefix = prefixes.get(symbol.parent_qualified_name or "", "")
|
|
170
207
|
hints.append(
|
|
171
208
|
EntrypointHint(
|
|
172
209
|
rule_id="php.symfony.route",
|
|
173
210
|
kind=EntrypointKind.HTTP_ROUTE,
|
|
174
211
|
handler_qualified_name=symbol.qualified_name,
|
|
175
|
-
route=
|
|
176
|
-
http_methods=["*"],
|
|
212
|
+
route=compose_route(prefix, _symfony_path(decorator)),
|
|
213
|
+
http_methods=_symfony_methods(decorator) or ["*"],
|
|
177
214
|
framework="symfony",
|
|
178
215
|
)
|
|
179
216
|
)
|
|
@@ -21,6 +21,15 @@ _SINATRA_VERBS = frozenset({"get", "post", "put", "delete", "patch"})
|
|
|
21
21
|
_RAILS_VERBS = frozenset({"get", "post", "put", "patch", "delete", "resources", "resource", "root"})
|
|
22
22
|
|
|
23
23
|
|
|
24
|
+
def _is_ruby_test(path: str) -> bool:
|
|
25
|
+
"""RSpec / Test::Unit files. Rack::Test reuses the bare `get '/x'` verb DSL
|
|
26
|
+
inside specs, indistinguishable from a Sinatra/Grape route declaration, so those
|
|
27
|
+
files must not contribute to the route surface (#33)."""
|
|
28
|
+
return (
|
|
29
|
+
path.endswith(("_spec.rb", "_test.rb")) or "/spec/" in f"/{path}" or "/test/" in f"/{path}"
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
24
33
|
def _is_rails_routes_file(path: str) -> bool:
|
|
25
34
|
"""The main `config/routes.rb` plus split route files loaded via `draw(:x)`
|
|
26
35
|
(`config/routes/api.rb`, `config/routes/admin.rb`, ...). Missing the split
|
|
@@ -29,6 +38,8 @@ def _is_rails_routes_file(path: str) -> bool:
|
|
|
29
38
|
|
|
30
39
|
|
|
31
40
|
def _sinatra_routes(x: FileExtraction) -> list[EntrypointHint]:
|
|
41
|
+
if _is_ruby_test(x.path):
|
|
42
|
+
return []
|
|
32
43
|
hints = []
|
|
33
44
|
for ref in x.references:
|
|
34
45
|
if (
|
|
@@ -106,6 +117,8 @@ def _rake_tasks(x: FileExtraction) -> list[EntrypointHint]:
|
|
|
106
117
|
|
|
107
118
|
def _grape_routes(x: FileExtraction) -> list[EntrypointHint]:
|
|
108
119
|
"""Grape API classes: class-body `get '/x'` / `post '/y'` declarations."""
|
|
120
|
+
if _is_ruby_test(x.path):
|
|
121
|
+
return []
|
|
109
122
|
hints = []
|
|
110
123
|
for ref in x.references:
|
|
111
124
|
if (
|
|
@@ -206,3 +206,22 @@ def test_fiber_group_prefix_end_to_end():
|
|
|
206
206
|
x = GoExtractor().extract(parse("go", src), ctx)
|
|
207
207
|
got = {(h.http_methods[0], h.route) for h in _fiber_rule().match(x)}
|
|
208
208
|
assert got == {("GET", "/api"), ("POST", "/api/auth/login")}
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
def test_go_route_rules_skip_test_files():
|
|
212
|
+
# *_test.go registers routes only to exercise handlers (chi corpus: 152/204
|
|
213
|
+
# routes came from _test.go). All Go HTTP-route rules must skip them (#33).
|
|
214
|
+
refs = [_call("Get", "r", '("/users", h)')]
|
|
215
|
+
assert _chi_rule().match(_go_ext(refs, path="middleware/compress_test.go")) == []
|
|
216
|
+
assert _gin_rule().match(_go_ext(refs, path="api/routes_test.go")) == []
|
|
217
|
+
assert _fiber_rule().match(_go_ext(refs, path="api/routes_test.go")) == []
|
|
218
|
+
# sanity: the same refs in a non-test file still produce a route
|
|
219
|
+
assert _chi_rule().match(_go_ext(refs, path="middleware/compress.go"))
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
def test_go_nethttp_and_grpc_skip_test_files():
|
|
223
|
+
nethttp = {r.id: r for r in rules_for("go", {"net/http"})}["go.nethttp.route"]
|
|
224
|
+
refs = [_call("HandleFunc", "http", '("/x", h)')]
|
|
225
|
+
assert nethttp.match(_go_ext(refs, path="server_test.go")) == []
|
|
226
|
+
grpc = [_call("RegisterPusherServer", "pb", "(s, impl)")]
|
|
227
|
+
assert _grpc_rule().match(_go_ext(grpc, path="server_test.go")) == []
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"""PHP entrypoint-rule tests (kept per-language so PRs touching different
|
|
2
|
+
languages don't serially conflict on one shared test module)."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from entrygraph.detect.entrypoints import rules_for
|
|
7
|
+
from entrygraph.detect.entrypoints.php import _symfony_methods, _symfony_path
|
|
8
|
+
from entrygraph.extract.base import FileContext
|
|
9
|
+
from entrygraph.extract.php import PhpExtractor
|
|
10
|
+
from entrygraph.parsing.parsers import parse
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _symfony_rule():
|
|
14
|
+
return {r.id: r for r in rules_for("php", {"symfony"})}["php.symfony.route"]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _extract(src: bytes, path="src/Controller/UserController.php"):
|
|
18
|
+
ctx = FileContext(
|
|
19
|
+
path=path,
|
|
20
|
+
language="php",
|
|
21
|
+
module_path="App.Controller.UserController",
|
|
22
|
+
source=src,
|
|
23
|
+
is_package=False,
|
|
24
|
+
)
|
|
25
|
+
return PhpExtractor().extract(parse("php", src), ctx)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def test_symfony_class_route_prefix_composed():
|
|
29
|
+
# Class-level #[Route('/profile')] must prefix each method route, and
|
|
30
|
+
# methods: [...] must be honored (symfony-demo: 11/12 routes were wrong) (#36).
|
|
31
|
+
src = (
|
|
32
|
+
b"<?php\nnamespace App\\Controller;\n"
|
|
33
|
+
b"#[Route('/profile'), IsGranted(User::ROLE_USER)]\n"
|
|
34
|
+
b"final class UserController extends AbstractController\n{\n"
|
|
35
|
+
b" #[Route('/edit', name: 'user_edit', methods: ['GET', 'POST'])]\n"
|
|
36
|
+
b" public function edit() {}\n"
|
|
37
|
+
b" #[Route(path: '/pw', name: 'pw')]\n"
|
|
38
|
+
b" public function pw() {}\n"
|
|
39
|
+
b"}\n"
|
|
40
|
+
)
|
|
41
|
+
got = {(tuple(h.http_methods), h.route) for h in _symfony_rule().match(_extract(src))}
|
|
42
|
+
assert got == {
|
|
43
|
+
(("GET", "POST"), "/profile/edit"),
|
|
44
|
+
(("*",), "/profile/pw"), # path: named arg, no methods -> all verbs
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_symfony_route_without_class_prefix():
|
|
49
|
+
# A controller with no class-level #[Route] leaves method routes unprefixed.
|
|
50
|
+
src = (
|
|
51
|
+
b"<?php\nnamespace App\\Controller;\n"
|
|
52
|
+
b"final class SecurityController extends AbstractController\n{\n"
|
|
53
|
+
b" #[Route('/login', name: 'login')]\n"
|
|
54
|
+
b" public function login() {}\n"
|
|
55
|
+
b"}\n"
|
|
56
|
+
)
|
|
57
|
+
got = {(tuple(h.http_methods), h.route) for h in _symfony_rule().match(_extract(src))}
|
|
58
|
+
assert got == {(("*",), "/login")}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_symfony_path_and_methods_parsing():
|
|
62
|
+
assert _symfony_path("#[Route('/edit', name: 'x')]") == "/edit"
|
|
63
|
+
assert _symfony_path("#[Route(path: '/pw', name: 'x')]") == "/pw"
|
|
64
|
+
assert _symfony_methods("#[Route('/x', methods: ['GET', 'POST'])]") == ["GET", "POST"]
|
|
65
|
+
assert _symfony_methods("#[Route('/x', methods: 'DELETE')]") == ["DELETE"]
|
|
66
|
+
assert _symfony_methods("#[Route('/x', name: 'x')]") == []
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""Ruby entrypoint-rule tests (kept per-language so PRs touching different
|
|
2
|
+
languages don't serially conflict on one shared test module)."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from entrygraph.detect.entrypoints import rules_for
|
|
7
|
+
from entrygraph.extract.ir import FileExtraction, RawReference, Span
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def _ruby_ext(references, path):
|
|
11
|
+
return FileExtraction(
|
|
12
|
+
path=path,
|
|
13
|
+
language="ruby",
|
|
14
|
+
module_path=path.replace("/", ".").removesuffix(".rb"),
|
|
15
|
+
parse_ok=True,
|
|
16
|
+
error_count=0,
|
|
17
|
+
symbols=[],
|
|
18
|
+
references=list(references),
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _verb(verb, route):
|
|
23
|
+
return RawReference(
|
|
24
|
+
kind="call",
|
|
25
|
+
callee_text=verb,
|
|
26
|
+
callee_name=verb,
|
|
27
|
+
receiver_text=None,
|
|
28
|
+
span=Span(1, 0, 1, 40),
|
|
29
|
+
caller_qualified_name=None,
|
|
30
|
+
arg_preview=f"('{route}')",
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _sinatra_rule():
|
|
35
|
+
return {r.id: r for r in rules_for("ruby", {"sinatra"})}["ruby.sinatra.route"]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _grape_rule():
|
|
39
|
+
return {r.id: r for r in rules_for("ruby", {"grape"})}["ruby.grape.route"]
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_sinatra_route_in_app_file_detected():
|
|
43
|
+
hints = _sinatra_rule().match(_ruby_ext([_verb("get", "/health")], "app.rb"))
|
|
44
|
+
assert [h.route for h in hints] == ["/health"]
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def test_sinatra_ignores_rack_test_calls_in_spec_and_test_files():
|
|
48
|
+
# Rack::Test uses the same bare `get '/x'` DSL inside specs; those files are not
|
|
49
|
+
# the route surface (sinatra corpus: 256/274 routes came from test/spec) (#33).
|
|
50
|
+
for path in (
|
|
51
|
+
"test/routing_test.rb",
|
|
52
|
+
"spec/app_spec.rb",
|
|
53
|
+
"rack-protection/spec/lib/rack/protection/ip_spoofing_spec.rb",
|
|
54
|
+
"some/nested/test/helper_test.rb",
|
|
55
|
+
):
|
|
56
|
+
assert _sinatra_rule().match(_ruby_ext([_verb("get", "/")], path)) == []
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def test_grape_ignores_test_files():
|
|
60
|
+
assert _grape_rule().match(_ruby_ext([_verb("post", "/x")], "spec/api_spec.rb")) == []
|
|
61
|
+
assert [h.route for h in _grape_rule().match(_ruby_ext([_verb("post", "/x")], "api.rb"))] == [
|
|
62
|
+
"/x"
|
|
63
|
+
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/csharp/aspnet_app/Services/ReportService.cs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{entrygraph-0.1.43 → entrygraph-0.1.45}/tests/fixtures/javascript/express_app/src/services.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|