depstein 0.1.0

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.
Files changed (65) hide show
  1. package/README.md +438 -0
  2. package/dist/core/cache.d.ts +15 -0
  3. package/dist/core/cache.js +75 -0
  4. package/dist/core/cache.js.map +1 -0
  5. package/dist/core/fetcher.d.ts +7 -0
  6. package/dist/core/fetcher.js +59 -0
  7. package/dist/core/fetcher.js.map +1 -0
  8. package/dist/core/replacements.d.ts +32 -0
  9. package/dist/core/replacements.js +419 -0
  10. package/dist/core/replacements.js.map +1 -0
  11. package/dist/core/scanner.d.ts +7 -0
  12. package/dist/core/scanner.js +298 -0
  13. package/dist/core/scanner.js.map +1 -0
  14. package/dist/core/scorer.d.ts +5 -0
  15. package/dist/core/scorer.js +289 -0
  16. package/dist/core/scorer.js.map +1 -0
  17. package/dist/core/types.d.ts +99 -0
  18. package/dist/core/types.js +2 -0
  19. package/dist/core/types.js.map +1 -0
  20. package/dist/core/vulnerabilities.d.ts +5 -0
  21. package/dist/core/vulnerabilities.js +93 -0
  22. package/dist/core/vulnerabilities.js.map +1 -0
  23. package/dist/ecosystems/cargo.d.ts +2 -0
  24. package/dist/ecosystems/cargo.js +74 -0
  25. package/dist/ecosystems/cargo.js.map +1 -0
  26. package/dist/ecosystems/golang.d.ts +2 -0
  27. package/dist/ecosystems/golang.js +90 -0
  28. package/dist/ecosystems/golang.js.map +1 -0
  29. package/dist/ecosystems/npm.d.ts +2 -0
  30. package/dist/ecosystems/npm.js +92 -0
  31. package/dist/ecosystems/npm.js.map +1 -0
  32. package/dist/ecosystems/pypi.d.ts +2 -0
  33. package/dist/ecosystems/pypi.js +80 -0
  34. package/dist/ecosystems/pypi.js.map +1 -0
  35. package/dist/index.d.ts +2 -0
  36. package/dist/index.js +303 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/tui/colors.d.ts +17 -0
  39. package/dist/tui/colors.js +86 -0
  40. package/dist/tui/colors.js.map +1 -0
  41. package/dist/tui/dashboard.d.ts +7 -0
  42. package/dist/tui/dashboard.js +236 -0
  43. package/dist/tui/dashboard.js.map +1 -0
  44. package/dist/tui/detail.d.ts +6 -0
  45. package/dist/tui/detail.js +68 -0
  46. package/dist/tui/detail.js.map +1 -0
  47. package/dist/tui/picker.d.ts +7 -0
  48. package/dist/tui/picker.js +62 -0
  49. package/dist/tui/picker.js.map +1 -0
  50. package/dist/tui/summary.d.ts +6 -0
  51. package/dist/tui/summary.js +13 -0
  52. package/dist/tui/summary.js.map +1 -0
  53. package/dist/tui/table.d.ts +9 -0
  54. package/dist/tui/table.js +50 -0
  55. package/dist/tui/table.js.map +1 -0
  56. package/dist/utils/format.d.ts +9 -0
  57. package/dist/utils/format.js +72 -0
  58. package/dist/utils/format.js.map +1 -0
  59. package/dist/utils/http.d.ts +2 -0
  60. package/dist/utils/http.js +53 -0
  61. package/dist/utils/http.js.map +1 -0
  62. package/dist/utils/spinner.d.ts +11 -0
  63. package/dist/utils/spinner.js +40 -0
  64. package/dist/utils/spinner.js.map +1 -0
  65. package/package.json +50 -0
@@ -0,0 +1,72 @@
1
+ // ── Number formatting ──────────────────────────────────────────────────────────
2
+ export function formatDownloads(n) {
3
+ if (n >= 1_000_000_000)
4
+ return `${(n / 1_000_000_000).toFixed(1)}B`;
5
+ if (n >= 1_000_000)
6
+ return `${(n / 1_000_000).toFixed(1)}M`;
7
+ if (n >= 1_000)
8
+ return `${(n / 1_000).toFixed(1)}K`;
9
+ return n.toString();
10
+ }
11
+ export function formatBytes(bytes) {
12
+ if (bytes >= 1_048_576)
13
+ return `${(bytes / 1_048_576).toFixed(1)}MB`;
14
+ if (bytes >= 1_024)
15
+ return `${(bytes / 1_024).toFixed(1)}KB`;
16
+ return `${bytes}B`;
17
+ }
18
+ export function formatScore(score) {
19
+ return `${score}/100`;
20
+ }
21
+ // ── Date formatting ────────────────────────────────────────────────────────────
22
+ export function formatRelativeDate(date) {
23
+ if (!date)
24
+ return 'unknown';
25
+ const now = Date.now();
26
+ const diffMs = now - date.getTime();
27
+ const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
28
+ if (diffDays < 1)
29
+ return 'today';
30
+ if (diffDays === 1)
31
+ return '1 day ago';
32
+ if (diffDays < 30)
33
+ return `${diffDays} days ago`;
34
+ if (diffDays < 365) {
35
+ const months = Math.floor(diffDays / 30);
36
+ return `${months} month${months !== 1 ? 's' : ''} ago`;
37
+ }
38
+ const years = Math.floor(diffDays / 365);
39
+ const remainingMonths = Math.floor((diffDays % 365) / 30);
40
+ if (remainingMonths > 0)
41
+ return `${years}y ${remainingMonths}mo ago`;
42
+ return `${years} year${years !== 1 ? 's' : ''} ago`;
43
+ }
44
+ export function formatDate(date) {
45
+ if (!date)
46
+ return 'N/A';
47
+ return date.toLocaleDateString('en-US', {
48
+ year: 'numeric',
49
+ month: 'short',
50
+ day: 'numeric',
51
+ });
52
+ }
53
+ // ── String helpers ─────────────────────────────────────────────────────────────
54
+ export function truncate(str, maxLen) {
55
+ if (str.length <= maxLen)
56
+ return str;
57
+ return str.slice(0, maxLen - 1) + '…';
58
+ }
59
+ export function padEnd(str, len) {
60
+ return str.padEnd(len).slice(0, len);
61
+ }
62
+ // ── Bar chart ─────────────────────────────────────────────────────────────────
63
+ export function progressBar(value, max, width = 20) {
64
+ const ratio = Math.min(value / max, 1);
65
+ const filled = Math.round(ratio * width);
66
+ const empty = width - filled;
67
+ return '█'.repeat(filled) + '░'.repeat(empty);
68
+ }
69
+ export function progressBarPercent(value, total, width = 20) {
70
+ return progressBar(value, total, width);
71
+ }
72
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function fetchJson(url: string, options?: RequestInit): Promise<unknown>;
2
+ export declare function fetchHead(url: string): Promise<boolean>;
@@ -0,0 +1,53 @@
1
+ const DEFAULT_HEADERS = {
2
+ 'User-Agent': 'depstein/0.1.0 (https://github.com/kstij/DepStein)',
3
+ Accept: 'application/json',
4
+ };
5
+ const RETRY_COUNT = 3;
6
+ const RETRY_BASE_DELAY_MS = 500;
7
+ export async function fetchJson(url, options) {
8
+ const response = await fetchWithRetry(url, options, 0);
9
+ if (!response.ok) {
10
+ throw new Error(`HTTP ${response.status} ${response.statusText}: ${url}`);
11
+ }
12
+ return response.json();
13
+ }
14
+ export async function fetchHead(url) {
15
+ try {
16
+ const response = await fetchWithRetry(url, { method: 'HEAD' }, 0);
17
+ return response.ok;
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ }
23
+ async function fetchWithRetry(url, options, attempt) {
24
+ try {
25
+ const response = await fetch(url, {
26
+ ...options,
27
+ headers: {
28
+ ...DEFAULT_HEADERS,
29
+ ...options?.headers,
30
+ },
31
+ });
32
+ if (response.status === 429) {
33
+ if (attempt >= RETRY_COUNT) {
34
+ throw new Error(`Rate limited after ${RETRY_COUNT} retries: ${url}`);
35
+ }
36
+ const retryAfter = response.headers.get('Retry-After');
37
+ const delay = retryAfter ? parseInt(retryAfter, 10) * 1000 : Math.pow(2, attempt) * RETRY_BASE_DELAY_MS;
38
+ await sleep(delay);
39
+ return fetchWithRetry(url, options, attempt + 1);
40
+ }
41
+ return response;
42
+ }
43
+ catch (err) {
44
+ if (attempt >= RETRY_COUNT)
45
+ throw err;
46
+ await sleep(Math.pow(2, attempt) * RETRY_BASE_DELAY_MS);
47
+ return fetchWithRetry(url, options, attempt + 1);
48
+ }
49
+ }
50
+ function sleep(ms) {
51
+ return new Promise(resolve => setTimeout(resolve, ms));
52
+ }
53
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAA2B;IAC5C,YAAY,EAAE,oDAAoD;IAClE,MAAM,EAAE,kBAAkB;CAC7B,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,OAAqB;IAC9D,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACvD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACvC,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,QAAQ,CAAC,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,OAAgC,EAAE,OAAe;IACxF,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC9B,GAAG,OAAO;YACV,OAAO,EAAE;gBACL,GAAG,eAAe;gBAClB,GAAI,OAAO,EAAE,OAA8C;aAC9D;SACJ,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,sBAAsB,WAAW,aAAa,GAAG,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,mBAAmB,CAAC;YACxG,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,OAAO,IAAI,WAAW;YAAE,MAAM,GAAG,CAAC;QACtC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,mBAAmB,CAAC,CAAC;QACxD,OAAO,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;AACL,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACrB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare class Spinner {
2
+ private frames;
3
+ private frame;
4
+ private interval;
5
+ private text;
6
+ start(text: string): void;
7
+ update(text: string): void;
8
+ succeed(text?: string): void;
9
+ fail(text?: string): void;
10
+ stop(): void;
11
+ }
@@ -0,0 +1,40 @@
1
+ // Simple stderr spinner for --json mode (non-TUI fallback)
2
+ export class Spinner {
3
+ frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
4
+ frame = 0;
5
+ interval = null;
6
+ text = '';
7
+ start(text) {
8
+ this.text = text;
9
+ this.frame = 0;
10
+ if (!process.stderr.isTTY) {
11
+ process.stderr.write(`${text}\n`);
12
+ return;
13
+ }
14
+ this.interval = setInterval(() => {
15
+ process.stderr.write(`\r${this.frames[this.frame % this.frames.length]} ${this.text}`);
16
+ this.frame++;
17
+ }, 80);
18
+ }
19
+ update(text) {
20
+ this.text = text;
21
+ }
22
+ succeed(text) {
23
+ this.stop();
24
+ process.stderr.write(`\r✓ ${text ?? this.text}\n`);
25
+ }
26
+ fail(text) {
27
+ this.stop();
28
+ process.stderr.write(`\r✗ ${text ?? this.text}\n`);
29
+ }
30
+ stop() {
31
+ if (this.interval) {
32
+ clearInterval(this.interval);
33
+ this.interval = null;
34
+ }
35
+ if (process.stderr.isTTY) {
36
+ process.stderr.write('\r\x1b[K');
37
+ }
38
+ }
39
+ }
40
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,MAAM,OAAO,OAAO;IACR,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5D,KAAK,GAAG,CAAC,CAAC;IACV,QAAQ,GAA0C,IAAI,CAAC;IACvD,IAAI,GAAG,EAAE,CAAC;IAElB,KAAK,CAAC,IAAY;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAEf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YAClC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,EAAE,EAAE,CAAC,CAAC;IACX,CAAC;IAED,MAAM,CAAC,IAAY;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,OAAO,CAAC,IAAa;QACjB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,IAAa;QACd,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,IAAI;QACA,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;CACJ"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "depstein",
3
+ "version": "0.1.0",
4
+ "description": "Dependency health scorer for npm, PyPI, Cargo, and Go projects",
5
+ "type": "module",
6
+ "engines": {
7
+ "node": ">=18.0.0"
8
+ },
9
+ "bin": {
10
+ "depstein": "dist/index.js"
11
+ },
12
+ "files": [
13
+ "dist/",
14
+ "README.md"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc && chmod +x dist/index.js",
18
+ "dev": "tsx src/index.ts",
19
+ "start": "node dist/index.js",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "dependencies": {
23
+ "chalk": "^5.3.0",
24
+ "commander": "^11.1.0",
25
+ "ink": "^4.4.1",
26
+ "react": "^18.2.0"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^20.10.0",
30
+ "@types/react": "^18.2.0",
31
+ "tsx": "^4.6.0",
32
+ "typescript": "^5.3.0"
33
+ },
34
+ "keywords": [
35
+ "dependencies",
36
+ "audit",
37
+ "security",
38
+ "npm",
39
+ "pypi",
40
+ "cargo",
41
+ "golang",
42
+ "cli",
43
+ "health"
44
+ ],
45
+ "license": "MIT",
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "git+https://github.com/kstij/DepStein.git"
49
+ }
50
+ }