Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ All notable changes to Ripple are documented here. The format is based on
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
## [0.7.0] - 2026-08-18

### Added

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ Everything below is real output against a shipped example project in `tests/fixt
```bash
npm install -g @alimaandev/ripple

ripple version # → 0.6.0
ripple version # → 0.7.0
```

Or install from source:
Expand Down Expand Up @@ -132,7 +132,7 @@ ripple analyze src/authentication/login.ts
Expected output:

```text
ripple · impact analysis · v0.6.0
ripple · impact analysis · v0.7.0

File src/authentication/login.ts
Risk MEDIUM · 34.7/100 ███░░░░░░░
Expand Down Expand Up @@ -165,7 +165,7 @@ ripple graph
```

```text
ripple · dependency graph · v0.6.0
ripple · dependency graph · v0.7.0

Files 25
Edges 28
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@alimaandev/ripple",
"version": "0.6.0",
"version": "0.7.0",
"description": "Dependency impact analysis for TypeScript and JavaScript. Know the blast radius of any change — before you commit.",
"keywords": [
"cli",
Expand Down
10 changes: 5 additions & 5 deletions src/cache/parsed.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import { createHash } from "node:crypto";
import fs from "node:fs/promises";
import path from "node:path";
Expand All @@ -13,13 +13,13 @@
* Parsing a file with ts-morph (imports, exports, symbols) is the dominant
* cost of an analysis run. For every discovered file we reuse the previously
* parsed surface when the file is provably unchanged. Freshness is checked
* with a cheap mtime+size match first — the steady-state hot path touches
* neither the file contents nor the hasher — and the cache is only rewritten
* with a cheap mtime+size match first — the steady-state hot path touches
* neither the file contents nor the hasher — and the cache is only rewritten
* to disk when something actually changed, so repeated runs are near-free.
*
* The cache is keyed by the discovery-affecting config (include/ignore), so
* changing discovery invalidates it wholesale. The parsed surface is only a
* function of file content — resolution, cycles and risk are recomputed
* function of file content — resolution, cycles and risk are recomputed
* fresh on every run, so cached runs are byte-identical to cold runs.
*
* The cache lives in `<rootDir>/.ripple/cache/` and is written atomically.
Expand Down Expand Up @@ -79,7 +79,7 @@
return path.join(rootDir, CACHE_FILE);
}

/** Load the cache manifest; any problem (missing, corrupt, stale) → empty. */
/** Load the cache manifest; any problem (missing, corrupt, stale) → empty. */
export async function loadParsedCache(
rootDir: string,
configHash: string,
Expand Down Expand Up @@ -139,7 +139,7 @@
* whose content changed since the last run. The result is ordered exactly
* like `filePaths`, so downstream output is identical to a cold run.
*
* When nothing changed, the on-disk cache is not rewritten at all — the
* When nothing changed, the on-disk cache is not rewritten at all — the
* steady-state hot path is stat + JSON parse + graph rebuild.
*/
export async function loadParsedFiles(options: {
Expand Down
Loading