Skip to content

Global (method, path) dedup in map() silently drops sibling routes #10

@jorgeraad

Description

@jorgeraad

map() dedupes globally on ${method}::${path} (first-seen wins). When a repo has multiple apps under one scan, two siblings registering the same (method, path) (e.g. /health, /metrics, /{proxy+}) collapse to one row — and consumers that filter the result back to a single app may end up with the survivor attributed to the other app's file, silently losing the route for its real owner.

Likely scenarios: monorepos / SST-style repos where multiple services share a root manifest and conventionally expose health, catch-all, or auth routes.

Considerations for a fix:

  • Per-file dedup (file, method, path) would solve this, but flips the answer to a different question: same logical route registered from two files (mounted middleware, catch-all + SPA fallback, double-registration bugs) becomes two rows instead of one. Sometimes that's noise, sometimes it's the truth a tool wants to surface.
  • A dedup-mode option lets each consumer pick the view that matches its question. CLI keeps the clean default; tools doing per-app scoping ask for per-file rows.

Suggested API (open to alternatives):

map(repoPath, { dedup: 'route' | 'file-route' | 'none' })  // default 'route'

Or simpler: export mapRaw so power users can do their own dedup downstream.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions