@merupatel/reachable 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [1.0.6](https://github.com/Meru143/reachable/compare/v1.0.5...v1.0.6) (2026-04-04)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * scope reachable audit to production dependencies ([3b1a280](https://github.com/Meru143/reachable/commit/3b1a2803dbbd44a5341f9e0ce2096b933e4756b5))
7
+
8
+ ## [1.0.5](https://github.com/Meru143/reachable/compare/v1.0.4...v1.0.5) (2026-03-20)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * add cli demo and resolve wildcard aliases ([5c6a62d](https://github.com/Meru143/reachable/commit/5c6a62d2b191d9c78cfd1ad18253c977d82b76a8))
14
+
1
15
  ## [1.0.4](https://github.com/Meru143/reachable/compare/v1.0.3...v1.0.4) (2026-03-20)
2
16
 
3
17
 
package/README.md CHANGED
@@ -4,10 +4,20 @@
4
4
  ![npm](https://img.shields.io/npm/v/%40merupatel%2Freachable)
5
5
  ![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)
6
6
 
7
- `reachable` is a local-first CLI that answers the question developers ask after `npm audit`: is the vulnerable code path actually reachable from my application?
7
+ `reachable` is a local-first CLI for JavaScript and TypeScript that answers the question developers ask after `npm audit`: is the vulnerable code path actually reachable from my application?
8
8
 
9
9
  It parses JavaScript and TypeScript with tree-sitter, builds a project call graph, queries OSV advisories, and reports whether the vulnerable symbol is reachable, unknown, or unreachable from your entry points.
10
10
 
11
+ Live page: [merup.me/reachable](https://merup.me/reachable/)
12
+
13
+ The point is not to replace package-level scanners. It is to rank the work that actually matters by asking the next question those tools cannot answer on their own: does your code reach the vulnerable symbol?
14
+
15
+ ![reachable CLI demo](docs/assets/reachable-demo.gif)
16
+
17
+ - Cut false-positive dependency noise by separating `REACHABLE`, `UNKNOWN`, and `UNREACHABLE` findings.
18
+ - Fail CI on code paths that actually matter instead of every advisory in the lockfile.
19
+ - Run locally or in GitHub Actions without a hosted service, account, or API key.
20
+
11
21
  ## Why reachable?
12
22
 
13
23
  `npm audit` reports package-level risk. It does not know whether your code imports or calls the vulnerable function. That leads to noisy CI failures, broad dependency upgrade churn, and teams ignoring entire audit reports.
@@ -18,6 +28,14 @@ It parses JavaScript and TypeScript with tree-sitter, builds a project call grap
18
28
  - It separates `REACHABLE`, `UNKNOWN`, and `UNREACHABLE` findings so real risk rises to the top.
19
29
  - It works locally in CI without a hosted service, account, or API key.
20
30
 
31
+ ## Why Not Just `npm audit`?
32
+
33
+ | Tool | Flags vulnerable packages | Checks whether your code reaches the vulnerable symbol | Local-first CLI |
34
+ | --- | --- | --- | --- |
35
+ | `reachable` | Yes | Yes | Yes |
36
+ | `npm audit` | Yes | No | Yes |
37
+ | Dependabot alerts | Yes | No | No |
38
+
21
39
  ## Installation
22
40
 
23
41
  ```bash
package/dist/cli/index.js CHANGED
@@ -209482,7 +209482,7 @@ function resolveAlias(importPath, cwd) {
209482
209482
  }
209483
209483
  const wildcardValue = match[1] ?? "";
209484
209484
  for (const target of targets) {
209485
- const substituted = target.replace("*", wildcardValue);
209485
+ const substituted = target.split("*").join(wildcardValue);
209486
209486
  const absoluteTarget = import_node_path2.default.isAbsolute(substituted) ? substituted : import_node_path2.default.resolve(config.baseUrl, substituted);
209487
209487
  const resolved = resolveFileCandidate(absoluteTarget);
209488
209488
  if (resolved) {
@@ -209849,8 +209849,8 @@ var import_promises = require("timers/promises");
209849
209849
  // package.json
209850
209850
  var package_default = {
209851
209851
  name: "@merupatel/reachable",
209852
- version: "1.0.4",
209853
- description: "Dependency vulnerability reachability analyzer",
209852
+ version: "1.0.6",
209853
+ description: "Local-first vulnerability reachability CLI for JavaScript and TypeScript",
209854
209854
  bin: {
209855
209855
  reachable: "dist/cli/index.js"
209856
209856
  },
@@ -209878,10 +209878,22 @@ var package_default = {
209878
209878
  keywords: [
209879
209879
  "cli",
209880
209880
  "security",
209881
- "dependency",
209881
+ "dependency-analysis",
209882
209882
  "reachability",
209883
209883
  "osv",
209884
- "audit"
209884
+ "audit",
209885
+ "nodejs",
209886
+ "javascript",
209887
+ "typescript",
209888
+ "npm",
209889
+ "vulnerability-scanner",
209890
+ "static-analysis",
209891
+ "devsecops",
209892
+ "sast",
209893
+ "sarif",
209894
+ "github-actions",
209895
+ "supply-chain-security",
209896
+ "tree-sitter"
209885
209897
  ],
209886
209898
  author: "merupatel",
209887
209899
  license: "MIT",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@merupatel/reachable",
3
- "version": "1.0.4",
4
- "description": "Dependency vulnerability reachability analyzer",
3
+ "version": "1.0.6",
4
+ "description": "Local-first vulnerability reachability CLI for JavaScript and TypeScript",
5
5
  "bin": {
6
6
  "reachable": "dist/cli/index.js"
7
7
  },
@@ -29,10 +29,22 @@
29
29
  "keywords": [
30
30
  "cli",
31
31
  "security",
32
- "dependency",
32
+ "dependency-analysis",
33
33
  "reachability",
34
34
  "osv",
35
- "audit"
35
+ "audit",
36
+ "nodejs",
37
+ "javascript",
38
+ "typescript",
39
+ "npm",
40
+ "vulnerability-scanner",
41
+ "static-analysis",
42
+ "devsecops",
43
+ "sast",
44
+ "sarif",
45
+ "github-actions",
46
+ "supply-chain-security",
47
+ "tree-sitter"
36
48
  ],
37
49
  "author": "merupatel",
38
50
  "license": "MIT",