Add call graph fixtures for various languages and scenarios
Some checks failed
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Export Center CI / export-ci (push) Has been cancelled
Findings Ledger CI / build-test (push) Has been cancelled
Findings Ledger CI / migration-validation (push) Has been cancelled
Findings Ledger CI / generate-manifest (push) Has been cancelled
Lighthouse CI / Lighthouse Audit (push) Has been cancelled
Lighthouse CI / Axe Accessibility Audit (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
Reachability Corpus Validation / validate-corpus (push) Has been cancelled
Reachability Corpus Validation / validate-ground-truths (push) Has been cancelled
Scanner Analyzers / Discover Analyzers (push) Has been cancelled
Scanner Analyzers / Validate Test Fixtures (push) Has been cancelled
Signals CI & Image / signals-ci (push) Has been cancelled
Signals Reachability Scoring & Events / reachability-smoke (push) Has been cancelled
Reachability Corpus Validation / determinism-check (push) Has been cancelled
Scanner Analyzers / Build Analyzers (push) Has been cancelled
Scanner Analyzers / Test Language Analyzers (push) Has been cancelled
Scanner Analyzers / Verify Deterministic Output (push) Has been cancelled
Signals Reachability Scoring & Events / sign-and-upload (push) Has been cancelled

- Introduced `all-edge-reasons.json` to test edge resolution reasons in .NET.
- Added `all-visibility-levels.json` to validate method visibility levels in .NET.
- Created `dotnet-aspnetcore-minimal.json` for a minimal ASP.NET Core application.
- Included `go-gin-api.json` for a Go Gin API application structure.
- Added `java-spring-boot.json` for the Spring PetClinic application in Java.
- Introduced `legacy-no-schema.json` for legacy application structure without schema.
- Created `node-express-api.json` for an Express.js API application structure.
This commit is contained in:
master
2025-12-16 10:44:24 +02:00
parent 4391f35d8a
commit 5a480a3c2a
223 changed files with 19367 additions and 727 deletions

View File

@@ -0,0 +1,171 @@
{
"schema": "stella.callgraph.v1",
"scanKey": "scan:edge-reasons-test:1.0.0",
"language": "DotNet",
"artifacts": [
{
"artifactKey": "TestAssembly.dll",
"kind": "assembly",
"sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
],
"nodes": [
{ "id": "async", "name": "AsyncTarget", "kind": "method", "visibility": "Public" },
{ "id": "caller", "name": "Caller", "kind": "method", "visibility": "Public" },
{ "id": "delegate", "name": "DelegateTarget", "kind": "method", "visibility": "Public" },
{ "id": "di", "name": "DiTarget", "kind": "method", "visibility": "Public" },
{ "id": "direct", "name": "DirectTarget", "kind": "method", "visibility": "Public" },
{ "id": "dynamic", "name": "DynamicTarget", "kind": "method", "visibility": "Public" },
{ "id": "event", "name": "EventTarget", "kind": "method", "visibility": "Public" },
{ "id": "generic", "name": "GenericTarget", "kind": "method", "visibility": "Public" },
{ "id": "native", "name": "NativeTarget", "kind": "method", "visibility": "Public" },
{ "id": "newobj", "name": "NewObjTarget", "kind": "method", "visibility": "Public" },
{ "id": "reflection", "name": "ReflectionTarget", "kind": "method", "visibility": "Public" },
{ "id": "runtime", "name": "RuntimeTarget", "kind": "method", "visibility": "Public" },
{ "id": "unknown", "name": "UnknownTarget", "kind": "method", "visibility": "Public" },
{ "id": "virtual", "name": "VirtualTarget", "kind": "method", "visibility": "Public" }
],
"edges": [
{
"sourceId": "caller",
"targetId": "direct",
"type": "call",
"kind": "Static",
"reason": "DirectCall",
"weight": 1.0,
"isResolved": true
},
{
"sourceId": "caller",
"targetId": "virtual",
"type": "callvirt",
"kind": "Static",
"reason": "VirtualCall",
"weight": 1.0,
"isResolved": true,
"candidates": ["impl1", "impl2"]
},
{
"sourceId": "caller",
"targetId": "reflection",
"type": "reflection",
"kind": "Heuristic",
"reason": "ReflectionString",
"weight": 0.5,
"isResolved": false,
"provenance": "Type.GetMethod"
},
{
"sourceId": "caller",
"targetId": "di",
"type": "di-binding",
"kind": "Heuristic",
"reason": "DiBinding",
"weight": 0.9,
"isResolved": true,
"provenance": "Microsoft.Extensions.DependencyInjection"
},
{
"sourceId": "caller",
"targetId": "dynamic",
"type": "dynamic-import",
"kind": "Heuristic",
"reason": "DynamicImport",
"weight": 0.7,
"isResolved": false
},
{
"sourceId": "caller",
"targetId": "newobj",
"type": "newobj",
"kind": "Static",
"reason": "NewObj",
"weight": 1.0,
"isResolved": true
},
{
"sourceId": "caller",
"targetId": "delegate",
"type": "ldftn",
"kind": "Static",
"reason": "DelegateCreate",
"weight": 1.0,
"isResolved": true
},
{
"sourceId": "caller",
"targetId": "async",
"type": "async",
"kind": "Static",
"reason": "AsyncContinuation",
"weight": 1.0,
"isResolved": true
},
{
"sourceId": "caller",
"targetId": "event",
"type": "event",
"kind": "Heuristic",
"reason": "EventHandler",
"weight": 0.85,
"isResolved": true
},
{
"sourceId": "caller",
"targetId": "generic",
"type": "generic",
"kind": "Static",
"reason": "GenericInstantiation",
"weight": 1.0,
"isResolved": true
},
{
"sourceId": "caller",
"targetId": "native",
"type": "pinvoke",
"kind": "Static",
"reason": "NativeInterop",
"weight": 1.0,
"isResolved": false,
"provenance": "kernel32.dll"
},
{
"sourceId": "caller",
"targetId": "runtime",
"type": "runtime",
"kind": "Runtime",
"reason": "RuntimeMinted",
"weight": 1.0,
"isResolved": true
},
{
"sourceId": "caller",
"targetId": "unknown",
"type": "unknown",
"kind": "Heuristic",
"reason": "Unknown",
"weight": 0.3,
"isResolved": false
}
],
"entrypoints": [
{
"nodeId": "caller",
"kind": "Test",
"framework": "Unknown",
"source": "test-runner",
"phase": "Runtime",
"order": 0
}
],
"metadata": {
"toolId": "stellaops.scanner.test",
"toolVersion": "1.0.0",
"analysisTimestamp": "2025-01-15T14:00:00Z"
},
"id": "cg-edge-reasons-001",
"component": "EdgeReasonsTest",
"version": "1.0.0",
"ingestedAt": "2025-01-15T14:00:00Z",
"graphHash": "sha256:edge-reasons"
}

View File

@@ -0,0 +1,119 @@
{
"schema": "stella.callgraph.v1",
"scanKey": "scan:visibility-test:1.0.0",
"language": "DotNet",
"artifacts": [
{
"artifactKey": "VisibilityTest.dll",
"kind": "assembly",
"sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
}
],
"nodes": [
{
"id": "v001",
"name": "PublicMethod",
"kind": "method",
"namespace": "VisibilityTest",
"symbolKey": "VisibilityTest::PublicMethod()",
"visibility": "Public",
"isEntrypointCandidate": true
},
{
"id": "v002",
"name": "InternalMethod",
"kind": "method",
"namespace": "VisibilityTest.Internal",
"symbolKey": "VisibilityTest.Internal::InternalMethod()",
"visibility": "Internal",
"isEntrypointCandidate": false
},
{
"id": "v003",
"name": "ProtectedMethod",
"kind": "method",
"namespace": "VisibilityTest",
"symbolKey": "VisibilityTest.BaseClass::ProtectedMethod()",
"visibility": "Protected",
"isEntrypointCandidate": false
},
{
"id": "v004",
"name": "PrivateMethod",
"kind": "method",
"namespace": "VisibilityTest",
"symbolKey": "VisibilityTest.SomeClass::PrivateMethod()",
"visibility": "Private",
"isEntrypointCandidate": false
},
{
"id": "v005",
"name": "UnknownMethod",
"kind": "method",
"namespace": "External",
"symbolKey": "External::UnknownMethod()",
"visibility": "Unknown",
"isEntrypointCandidate": false
}
],
"edges": [
{
"sourceId": "v001",
"targetId": "v002",
"type": "call",
"kind": "Static",
"reason": "DirectCall",
"weight": 1.0,
"isResolved": true
},
{
"sourceId": "v002",
"targetId": "v003",
"type": "call",
"kind": "Static",
"reason": "DirectCall",
"weight": 1.0,
"isResolved": true
},
{
"sourceId": "v003",
"targetId": "v004",
"type": "call",
"kind": "Static",
"reason": "DirectCall",
"weight": 1.0,
"isResolved": true
},
{
"sourceId": "v004",
"targetId": "v005",
"type": "external",
"kind": "Static",
"reason": "DirectCall",
"weight": 1.0,
"isResolved": false
}
],
"entrypoints": [
{
"nodeId": "v001",
"kind": "Http",
"route": "/api/visibility",
"httpMethod": "GET",
"framework": "AspNetCore",
"source": "attribute",
"phase": "Runtime",
"order": 0
}
],
"metadata": {
"toolId": "stellaops.scanner.test",
"toolVersion": "1.0.0",
"analysisTimestamp": "2025-01-15T15:00:00Z"
},
"id": "cg-visibility-001",
"component": "VisibilityTest",
"version": "1.0.0",
"ingestedAt": "2025-01-15T15:00:00Z",
"graphHash": "sha256:visibility"
}

View File

@@ -0,0 +1,155 @@
{
"schema": "stella.callgraph.v1",
"scanKey": "scan:dotnet-aspnetcore-minimal:v1.0.0",
"language": "DotNet",
"artifacts": [
{
"artifactKey": "SampleApi.dll",
"kind": "assembly",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"purl": "pkg:nuget/SampleApi@1.0.0",
"buildId": "build-001",
"filePath": "/app/SampleApi.dll",
"sizeBytes": 12345
}
],
"nodes": [
{
"id": "n001",
"nodeId": "n001",
"name": "Main",
"kind": "method",
"namespace": "SampleApi",
"file": "Program.cs",
"line": 1,
"symbolKey": "SampleApi::Main(string[])",
"artifactKey": "SampleApi.dll",
"visibility": "Public",
"isEntrypointCandidate": true,
"attributes": {
"returnType": "void"
},
"flags": 1
},
{
"id": "n002",
"nodeId": "n002",
"name": "GetWeatherForecast",
"kind": "method",
"namespace": "SampleApi.Controllers",
"file": "WeatherForecastController.cs",
"line": 15,
"symbolKey": "SampleApi.Controllers.WeatherForecastController::GetWeatherForecast()",
"artifactKey": "SampleApi.dll",
"visibility": "Public",
"isEntrypointCandidate": true,
"attributes": {
"returnType": "IEnumerable<WeatherForecast>",
"httpMethod": "GET",
"route": "/weatherforecast"
},
"flags": 3
},
{
"id": "n003",
"nodeId": "n003",
"name": "GetRandomSummary",
"kind": "method",
"namespace": "SampleApi.Services",
"file": "WeatherService.cs",
"line": 20,
"symbolKey": "SampleApi.Services.WeatherService::GetRandomSummary()",
"artifactKey": "SampleApi.dll",
"visibility": "Internal",
"isEntrypointCandidate": false,
"attributes": {
"returnType": "string"
},
"flags": 0
},
{
"id": "n004",
"nodeId": "n004",
"name": "CreateLogger",
"kind": "method",
"namespace": "SampleApi.Internal",
"file": "LoggingHelper.cs",
"line": 8,
"symbolKey": "SampleApi.Internal.LoggingHelper::CreateLogger()",
"artifactKey": "SampleApi.dll",
"visibility": "Private",
"isEntrypointCandidate": false,
"flags": 0
}
],
"edges": [
{
"sourceId": "n001",
"targetId": "n002",
"from": "n001",
"to": "n002",
"type": "call",
"kind": "Static",
"reason": "DirectCall",
"weight": 1.0,
"isResolved": true
},
{
"sourceId": "n002",
"targetId": "n003",
"from": "n002",
"to": "n003",
"type": "di",
"kind": "Heuristic",
"reason": "DiBinding",
"weight": 0.9,
"isResolved": true,
"provenance": "Microsoft.Extensions.DependencyInjection"
},
{
"sourceId": "n003",
"targetId": "n004",
"from": "n003",
"to": "n004",
"type": "call",
"kind": "Static",
"reason": "DirectCall",
"weight": 1.0,
"offset": 42,
"isResolved": true
}
],
"entrypoints": [
{
"nodeId": "n001",
"kind": "Main",
"framework": "AspNetCore",
"source": "attribute",
"phase": "AppStart",
"order": 0
},
{
"nodeId": "n002",
"kind": "Http",
"route": "/weatherforecast",
"httpMethod": "GET",
"framework": "AspNetCore",
"source": "attribute",
"phase": "Runtime",
"order": 1
}
],
"metadata": {
"toolId": "stellaops.scanner.dotnet",
"toolVersion": "1.0.0",
"analysisTimestamp": "2025-01-15T10:00:00Z",
"sourceCommit": "abc123def456",
"buildId": "build-001"
},
"id": "cg-dotnet-aspnetcore-minimal-001",
"languageString": "dotnet",
"component": "SampleApi",
"version": "1.0.0",
"ingestedAt": "2025-01-15T10:00:00Z",
"graphHash": "sha256:a1b2c3d4e5f6"
}

View File

@@ -0,0 +1,155 @@
{
"schema": "stella.callgraph.v1",
"scanKey": "scan:gin-api:1.5.0",
"language": "Go",
"artifacts": [
{
"artifactKey": "gin-api",
"kind": "go-binary",
"sha256": "d5e6f78901234567890abcdef0123456789abcdef0123456789abcdef0123456",
"purl": "pkg:golang/github.com/example/gin-api@1.5.0",
"filePath": "/app/gin-api",
"sizeBytes": 15000000
}
],
"nodes": [
{
"id": "g001",
"nodeId": "g001",
"name": "main",
"kind": "function",
"namespace": "main",
"file": "main.go",
"line": 12,
"symbolKey": "main.main",
"artifactKey": "gin-api",
"visibility": "Public",
"isEntrypointCandidate": true,
"flags": 1
},
{
"id": "g002",
"nodeId": "g002",
"name": "GetProduct",
"kind": "function",
"namespace": "handlers",
"file": "product_handler.go",
"line": 28,
"symbolKey": "github.com/example/gin-api/handlers.GetProduct",
"artifactKey": "gin-api",
"visibility": "Public",
"isEntrypointCandidate": true,
"attributes": {
"httpMethod": "GET",
"route": "/api/products/:id"
},
"flags": 3
},
{
"id": "g003",
"nodeId": "g003",
"name": "FindByID",
"kind": "function",
"namespace": "repository",
"file": "product_repo.go",
"line": 45,
"symbolKey": "github.com/example/gin-api/repository.(*ProductRepo).FindByID",
"artifactKey": "gin-api",
"visibility": "Public",
"isEntrypointCandidate": false,
"flags": 0
},
{
"id": "g004",
"nodeId": "g004",
"name": "init",
"kind": "function",
"namespace": "config",
"file": "config.go",
"line": 8,
"symbolKey": "github.com/example/gin-api/config.init",
"artifactKey": "gin-api",
"visibility": "Unknown",
"isEntrypointCandidate": true,
"flags": 2
}
],
"edges": [
{
"sourceId": "g004",
"targetId": "g001",
"from": "g004",
"to": "g001",
"type": "init",
"kind": "Static",
"reason": "DirectCall",
"weight": 1.0,
"isResolved": true,
"provenance": "go-init-order"
},
{
"sourceId": "g001",
"targetId": "g002",
"from": "g001",
"to": "g002",
"type": "router-bind",
"kind": "Heuristic",
"reason": "DelegateCreate",
"weight": 0.9,
"isResolved": true,
"provenance": "gin-router"
},
{
"sourceId": "g002",
"targetId": "g003",
"from": "g002",
"to": "g003",
"type": "interface",
"kind": "Static",
"reason": "VirtualCall",
"weight": 1.0,
"isResolved": true
}
],
"entrypoints": [
{
"nodeId": "g004",
"kind": "ModuleInit",
"framework": "Unknown",
"source": "convention",
"phase": "ModuleInit",
"order": 0
},
{
"nodeId": "g001",
"kind": "Main",
"framework": "Gin",
"source": "convention",
"phase": "AppStart",
"order": 1
},
{
"nodeId": "g002",
"kind": "Http",
"route": "/api/products/:id",
"httpMethod": "GET",
"framework": "Gin",
"source": "code-analysis",
"phase": "Runtime",
"order": 2
}
],
"metadata": {
"toolId": "stellaops.scanner.go",
"toolVersion": "1.0.0",
"analysisTimestamp": "2025-01-15T13:00:00Z",
"sourceCommit": "012def345abc",
"buildId": "build-004"
},
"id": "cg-go-gin-api-001",
"languageString": "go",
"component": "gin-api",
"version": "1.5.0",
"ingestedAt": "2025-01-15T13:00:00Z",
"graphHash": "sha256:d4e5f6a7b8c9"
}

View File

@@ -0,0 +1,155 @@
{
"schema": "stella.callgraph.v1",
"scanKey": "scan:spring-petclinic:3.2.0",
"language": "Java",
"artifacts": [
{
"artifactKey": "spring-petclinic-3.2.0.jar",
"kind": "jar",
"sha256": "f4d3c2b1a0987654321fedcba0987654321fedcba0987654321fedcba098765",
"purl": "pkg:maven/org.springframework.samples/spring-petclinic@3.2.0",
"filePath": "/app/spring-petclinic-3.2.0.jar",
"sizeBytes": 54321000
}
],
"nodes": [
{
"id": "j001",
"nodeId": "j001",
"name": "main",
"kind": "method",
"namespace": "org.springframework.samples.petclinic",
"file": "PetClinicApplication.java",
"line": 25,
"symbolKey": "org.springframework.samples.petclinic.PetClinicApplication::main(String[])",
"artifactKey": "spring-petclinic-3.2.0.jar",
"visibility": "Public",
"isEntrypointCandidate": true,
"attributes": {
"returnType": "void",
"modifiers": "public static"
},
"flags": 1
},
{
"id": "j002",
"nodeId": "j002",
"name": "showOwner",
"kind": "method",
"namespace": "org.springframework.samples.petclinic.owner",
"file": "OwnerController.java",
"line": 87,
"symbolKey": "org.springframework.samples.petclinic.owner.OwnerController::showOwner(int)",
"artifactKey": "spring-petclinic-3.2.0.jar",
"visibility": "Public",
"isEntrypointCandidate": true,
"attributes": {
"returnType": "ModelAndView",
"httpMethod": "GET",
"route": "/owners/{ownerId}"
},
"flags": 3
},
{
"id": "j003",
"nodeId": "j003",
"name": "findById",
"kind": "method",
"namespace": "org.springframework.samples.petclinic.owner",
"file": "OwnerRepository.java",
"line": 42,
"symbolKey": "org.springframework.samples.petclinic.owner.OwnerRepository::findById(Integer)",
"artifactKey": "spring-petclinic-3.2.0.jar",
"visibility": "Public",
"isEntrypointCandidate": false,
"attributes": {
"returnType": "Owner"
},
"flags": 0
},
{
"id": "j004",
"nodeId": "j004",
"name": "validateOwner",
"kind": "method",
"namespace": "org.springframework.samples.petclinic.owner",
"file": "OwnerValidator.java",
"line": 30,
"symbolKey": "org.springframework.samples.petclinic.owner.OwnerValidator::validateOwner(Owner)",
"artifactKey": "spring-petclinic-3.2.0.jar",
"visibility": "Protected",
"isEntrypointCandidate": false,
"flags": 0
}
],
"edges": [
{
"sourceId": "j001",
"targetId": "j002",
"from": "j001",
"to": "j002",
"type": "spring-bean",
"kind": "Heuristic",
"reason": "DiBinding",
"weight": 0.85,
"isResolved": true,
"provenance": "SpringBoot"
},
{
"sourceId": "j002",
"targetId": "j003",
"from": "j002",
"to": "j003",
"type": "virtual",
"kind": "Static",
"reason": "VirtualCall",
"weight": 1.0,
"isResolved": true
},
{
"sourceId": "j002",
"targetId": "j004",
"from": "j002",
"to": "j004",
"type": "call",
"kind": "Static",
"reason": "DirectCall",
"weight": 1.0,
"offset": 156,
"isResolved": true
}
],
"entrypoints": [
{
"nodeId": "j001",
"kind": "Main",
"framework": "SpringBoot",
"source": "annotation",
"phase": "AppStart",
"order": 0
},
{
"nodeId": "j002",
"kind": "Http",
"route": "/owners/{ownerId}",
"httpMethod": "GET",
"framework": "Spring",
"source": "annotation",
"phase": "Runtime",
"order": 1
}
],
"metadata": {
"toolId": "stellaops.scanner.java",
"toolVersion": "1.0.0",
"analysisTimestamp": "2025-01-15T11:00:00Z",
"sourceCommit": "def789abc012",
"buildId": "build-002"
},
"id": "cg-java-spring-petclinic-001",
"languageString": "java",
"component": "spring-petclinic",
"version": "3.2.0",
"ingestedAt": "2025-01-15T11:00:00Z",
"graphHash": "sha256:b2c3d4e5f6a7"
}

View File

@@ -0,0 +1,47 @@
{
"id": "cg-legacy-001",
"languageString": "csharp",
"component": "LegacyApp",
"version": "0.9.0",
"ingestedAt": "2024-06-15T08:00:00Z",
"graphHash": "sha256:legacy123",
"nodes": [
{
"id": "l001",
"name": "Main",
"kind": "method",
"namespace": "LegacyApp"
},
{
"id": "l002",
"name": "ProcessData",
"kind": "method",
"namespace": "LegacyApp.Controllers"
},
{
"id": "l003",
"name": "ValidateInput",
"kind": "method",
"namespace": "LegacyApp.Internal"
}
],
"edges": [
{
"sourceId": "l001",
"targetId": "l002",
"type": "call"
},
{
"sourceId": "l002",
"targetId": "l003",
"type": "call"
}
],
"roots": [
{
"id": "l001",
"phase": "startup",
"source": "convention"
}
]
}

View File

@@ -0,0 +1,146 @@
{
"schema": "stella.callgraph.v1",
"scanKey": "scan:express-api:2.1.0",
"language": "Node",
"artifacts": [
{
"artifactKey": "express-api",
"kind": "npm-package",
"sha256": "c4d5e6f7890123456789abcdef0123456789abcdef0123456789abcdef012345",
"purl": "pkg:npm/express-api@2.1.0",
"filePath": "/app",
"sizeBytes": 2500000
}
],
"nodes": [
{
"id": "e001",
"nodeId": "e001",
"name": "startServer",
"kind": "function",
"namespace": "src",
"file": "index.js",
"line": 15,
"symbolKey": "src/index.js::startServer",
"artifactKey": "express-api",
"visibility": "Public",
"isEntrypointCandidate": true,
"flags": 1
},
{
"id": "e002",
"nodeId": "e002",
"name": "getUserById",
"kind": "function",
"namespace": "src/routes",
"file": "users.js",
"line": 22,
"symbolKey": "src/routes/users.js::getUserById",
"artifactKey": "express-api",
"visibility": "Public",
"isEntrypointCandidate": true,
"attributes": {
"httpMethod": "GET",
"route": "/api/users/:id"
},
"flags": 3
},
{
"id": "e003",
"nodeId": "e003",
"name": "findUser",
"kind": "function",
"namespace": "src/services",
"file": "userService.js",
"line": 45,
"symbolKey": "src/services/userService.js::findUser",
"artifactKey": "express-api",
"visibility": "Public",
"isEntrypointCandidate": false,
"flags": 0
},
{
"id": "e004",
"nodeId": "e004",
"name": "query",
"kind": "function",
"namespace": "src/db",
"file": "connection.js",
"line": 30,
"symbolKey": "src/db/connection.js::query",
"artifactKey": "express-api",
"visibility": "Public",
"isEntrypointCandidate": false,
"flags": 0
}
],
"edges": [
{
"sourceId": "e001",
"targetId": "e002",
"from": "e001",
"to": "e002",
"type": "require",
"kind": "Static",
"reason": "DynamicImport",
"weight": 0.95,
"isResolved": true,
"provenance": "express-router"
},
{
"sourceId": "e002",
"targetId": "e003",
"from": "e002",
"to": "e003",
"type": "call",
"kind": "Static",
"reason": "DirectCall",
"weight": 1.0,
"isResolved": true
},
{
"sourceId": "e003",
"targetId": "e004",
"from": "e003",
"to": "e004",
"type": "async-call",
"kind": "Static",
"reason": "AsyncContinuation",
"weight": 1.0,
"isResolved": true
}
],
"entrypoints": [
{
"nodeId": "e001",
"kind": "Main",
"framework": "Express",
"source": "convention",
"phase": "AppStart",
"order": 0
},
{
"nodeId": "e002",
"kind": "Http",
"route": "/api/users/:id",
"httpMethod": "GET",
"framework": "Express",
"source": "code-analysis",
"phase": "Runtime",
"order": 1
}
],
"metadata": {
"toolId": "stellaops.scanner.node",
"toolVersion": "1.0.0",
"analysisTimestamp": "2025-01-15T12:00:00Z",
"sourceCommit": "789abc012def",
"buildId": "build-003"
},
"id": "cg-node-express-api-001",
"languageString": "javascript",
"component": "express-api",
"version": "2.1.0",
"ingestedAt": "2025-01-15T12:00:00Z",
"graphHash": "sha256:c3d4e5f6a7b8"
}