Source: https://seerepo.com/docs/api-impact
Markdown source: https://seerepo.com/docs/api-impact.md
Description: What breaks if you touch a file: who names it, how far it gets, which pages and which processes.

# What depends on a file

`GET https://seerepo.com/api/v1/repos/:repo/impact`

Says what depends on a file, or on one of its exports, before you touch it. In JavaScript and TypeScript it follows what the code really names: a file that imports another and only uses something else of it doesn't count. In other languages it goes by whole imports, and says so.

Types aren't followed: a file that only uses a type of another isn't here. The compiler already tells you when you break a type.

## Request

| Parameter | Where | Description |
|---|---|---|
| `repo` | path | The repo's id, or owner/name with %2F. |
| `path` | query | The file, from the repo's root. |
| `name` | query | Optional. One of its exports. |
| `to` | query | Optional. Another file: one shortest way from it down to this one. |

```sh
curl "https://seerepo.com/api/v1/repos/6ad79fd8e89233277ded17c9/impact?path=lib/env.ts" \
  -H "Authorization: Bearer $SEEREPO_KEY"
```

## Response

| Field | Type | Description |
|---|---|---|
| `data.how` | string | `symbols`, by what's really named, or `files`, by whole imports. |
| `data.direct.total` | number | The files that name it themselves. |
| `data.direct.files[]` | string | Up to 30 of them. |
| `data.direct.names` | object | Which of its exports each of those files names, by file. Empty when the language has no symbols to follow. |
| `data.reach.total` | number | Every file that depends on it, directly or through others. |
| `data.reach.modules[]` | object | Where those live: `path`, `name` and `files`, the most first. |
| `data.pages.total` | number | The pages it gets to, its own if it's one. |
| `data.pages.routes[]` | object | Up to 30: `route` and `path`. |
| `data.processes[]` | string | The processes it gets to: `web`, `worker`. |
| `data.route` | array\|null | Only with `to`: the files from there down to this one, or null if there's no way. |
| `data.everyRequest.pages` | number | Present on what the framework runs before every page it matches, like Next's middleware: how many pages the repo has. |
| `data.tests.total`, `data.tests.files[]` | number, string | The tests that name it, by importing or mocking it, and the first five. They aren't in `direct` or `reach`. |

### Example

```json
{
  "status": "success",
  "data": {
    "path": "lib/env.ts",
    "how": "symbols",
    "direct": { "total": 2, "files": ["lib/mail.ts", "worker/index.ts"] },
    "reach": { "total": 5, "modules": [{ "path": "/account", "name": "Account", "files": 3 }] },
    "pages": { "total": 1, "routes": [{ "route": "/settings", "path": "app/settings/page.tsx" }] },
    "processes": ["web", "worker"]
  }
}
```

## Errors

| Status | Code | When |
|---|---|---|
| 400 | `bad_path` | No file was given. |
| 402 | `plan_required` | The repo is past its limit and only shows its first level. |
| 404 | `unknown_file` | SeeRepo didn't read that file as part of the product. That doesn't mean nobody uses it. |
| 404 | `unknown_language` | SeeRepo doesn't follow the imports of that language. That doesn't mean nothing depends on it. |
| 404 | `unknown_export` | The file doesn't export that name. The message says which it does. |
| 404 | `not_read_yet` | SeeRepo reads this at the repo's next push. |
