From my own experience with a single repo, it consistently takes 8~10 min, but I assume that’s based on the change size, we do PRs consistently about 8~15 files (tests included), and about 2.5K lines.
Only the smallest of changes takes less and yet 4 min minimum is a lot of time.
Though it’s my own criteria about the size of the project, this is the analysis I get through cloc (Ignore JSON files, almost all of those are from a Country/State/City data source):
# Vital Link — project size analysis
Generated from `cloc` with exclusions: `node_modules`, `.git`, `.next`, `out`, `build`, `coverage`, test reports, `.vercel`, `dist`, `.cache`, etc.
## Overall (everything `cloc` counts)
| Metric | Value |
| ----------------- | ---------: |
| **Files** | 5,774 |
| **Lines (total)** | ~2,390,688 |
**By language (dominant rows):**
| Language | Files | Code lines\* |
| ---------- | ----: | -----------: |
| JSON | 4,166 | ~2,159,194 |
| TypeScript | 1,329 | 157,829 |
| Markdown | 226 | 23,136 |
| YAML | 15 | 13,648 |
| Other | small | modest |
\* `cloc` “code” = non-blank, non-comment by its rules.
Most of the repo’s **raw line volume is JSON** (fixtures/data-style files), not application TypeScript.
---
## “Source-like” footprint (JSON excluded)
Closer to **maintained text + code**, with bulk JSON stripped out:
| Metric | Value |
| -------------------- | ------: |
| **Files** | 1,618 |
| **Code lines (sum)** | 274,497 |
Rough mix without the huge JSON pile: **TypeScript is the largest single language**; remaining JSON in this run is **10 files / ~78k code lines** (e.g. config or smaller JSON).
---
## TypeScript only — tests vs non-test
**Test files:** names matching `*.test.ts`, `*.test.tsx`, `*.spec.ts`, `*.spec.tsx` (no `__tests__/` trees in this repo).
| Bucket | Files | Code lines | Blank | Comment |
| ------------ | --------: | ----------: | -----: | ------: |
| **Test** | 202 | 35,286 | 4,288 | 253 |
| **Non-test** | 1,127 | 122,543 | 13,230 | 6,961 |
| **TS total** | **1,329** | **157,829** | 17,518 | 6,214 |
**Physical line count for TS only** (`wc -l` style): **181,686** total — **~39,827** in test files, **~141,859** in non-test. The gap vs `cloc` “code” is mostly blanks + comments.
---
## Takeaways
1. **Headline TS size:** ~**1.3k** TS files and ~**158k** lines of TS “code” per `cloc`, split ~**22%** test files by file count (202/1329) and ~**22%** of TS code lines in tests (35,286/157,829).
2. **Total repo line count is dominated by JSON** if you include all `.json`; for “how big is the codebase we edit,” use the JSON-excluded figures or the TS-only tables above.
---
## Commands used (reference)
Full tree:
```bash
cloc . \
--exclude-dir=node_modules,.git,.next,out,build,coverage,test-results,playwright-report,.vercel,.pnpm-store,dist,.cache \
--exclude-ext=snap
```
TS test vs non-test:
```bash
cloc . \
--exclude-dir=node_modules,.git,.next,out,build,coverage,test-results,playwright-report,.vercel,.pnpm-store,dist,.cache \
--exclude-ext=snap \
--include-lang=TypeScript \
--match-f='\.(test|spec)\.(ts|tsx)$'
cloc . \
--exclude-dir=node_modules,.git,.next,out,build,coverage,test-results,playwright-report,.vercel,.pnpm-store,dist,.cache \
--exclude-ext=snap \
--include-lang=TypeScript \
--not-match-f='\.(test|spec)\.(ts|tsx)$'
```
Exclude JSON for source-like totals:
```bash
cloc . \
--exclude-dir=node_modules,.git,.next,out,build,coverage,test-results,playwright-report,.vercel,.pnpm-store,dist,.cache \
--exclude-ext=snap,json
```