git-history-ui 1.0.5 → 2.0.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 (38) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +7 -0
  3. package/build/frontend/index.html +13 -10
  4. package/build/frontend/main-7AXSFTJM.js +11 -0
  5. package/build/frontend/styles-YQ73RJ2V.css +1 -0
  6. package/dist/backend/dev-server.d.ts +0 -1
  7. package/dist/backend/dev-server.js +8 -4
  8. package/dist/backend/dev-server.js.map +1 -1
  9. package/dist/backend/gitService.d.ts +36 -11
  10. package/dist/backend/gitService.js +341 -197
  11. package/dist/backend/gitService.js.map +1 -1
  12. package/dist/backend/server.d.ts +8 -2
  13. package/dist/backend/server.js +145 -111
  14. package/dist/backend/server.js.map +1 -1
  15. package/dist/cli.d.ts +0 -1
  16. package/dist/cli.js +44 -22
  17. package/dist/cli.js.map +1 -1
  18. package/package.json +43 -27
  19. package/build/frontend/main-44CFNHDH.js +0 -8
  20. package/build/frontend/main-YHO6NCZZ.js +0 -8
  21. package/build/frontend/styles-26JPPBSI.css +0 -1
  22. package/build/frontend/styles-J5I4DBTU.css +0 -1
  23. package/dist/__tests__/gitService.test.d.ts +0 -2
  24. package/dist/__tests__/gitService.test.d.ts.map +0 -1
  25. package/dist/__tests__/gitService.test.js +0 -427
  26. package/dist/__tests__/gitService.test.js.map +0 -1
  27. package/dist/__tests__/setup.d.ts +0 -2
  28. package/dist/__tests__/setup.d.ts.map +0 -1
  29. package/dist/__tests__/setup.js +0 -24
  30. package/dist/__tests__/setup.js.map +0 -1
  31. package/dist/backend/dev-server.d.ts.map +0 -1
  32. package/dist/backend/gitService.d.ts.map +0 -1
  33. package/dist/backend/server.d.ts.map +0 -1
  34. package/dist/cli.d.ts.map +0 -1
  35. package/dist/config/paths.d.ts +0 -14
  36. package/dist/config/paths.d.ts.map +0 -1
  37. package/dist/config/paths.js +0 -35
  38. package/dist/config/paths.js.map +0 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,51 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
5
+ this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [2.0.0] - 2026-04-27
8
+
9
+ A full-stack rewrite focused on extreme performance, correctness, and a polished UI.
10
+
11
+ ### Highlights
12
+
13
+ - Rewritten backend `GitService` with deterministic parsing, ref-index caching,
14
+ filter-aware pagination via `git rev-list --count`, and safe `execFile`
15
+ arguments (no NUL-byte placeholders).
16
+ - New backend HTTP server hardened with `helmet`, `compression`, configurable
17
+ CORS, rate limiting, and graceful shutdown.
18
+ - New frontend built around Angular signals, `OnPush` change detection,
19
+ CDK virtual scroll, and a canvas-rendered swim-lane git graph.
20
+ - Light / dark / system theming via CSS custom properties with persisted
21
+ preference.
22
+ - Diff viewer with unified and split-view modes, syntax highlighting via
23
+ `highlight.js`, and proper line-number gutters.
24
+ - Command palette (`⌘K`) and keyboard navigation (`j` / `k` / `g` / `G`,
25
+ `?`, `/`).
26
+ - Modern release infra: GitHub Actions CI + tag-driven npm publish via
27
+ `NODE_TOKEN`, multi-stage Node 20 Docker image, ESLint + Prettier,
28
+ Dependabot.
29
+ - Comprehensive Jest coverage for backend git service and HTTP server.
30
+
31
+ ### Added
32
+
33
+ - `/api/authors` endpoint and frontend `GitService.getAuthors`.
34
+ - `since` / `until` / server-side `search` (--grep) filters.
35
+ - `subject`, `body`, `shortHash`, `authorEmail`, `isMerge`, and rich diff
36
+ status (`added` / `modified` / `deleted` / `renamed` / `copied` / `binary`)
37
+ in commit and diff shapes.
38
+ - `.editorconfig`, `.nvmrc`, `.prettierrc`, `.prettierignore`, dependabot
39
+ config.
40
+
41
+ ### Changed
42
+
43
+ - Bumped engines to Node `>=18`.
44
+ - Pagination now uses `--skip` + filter-aware count caching.
45
+ - Frontend now ships as an Angular standalone app with signals end-to-end.
46
+
47
+ ### Removed
48
+
49
+ - Legacy color-palette selector and the inline app template (replaced by the
50
+ new toolbar + theme service).
51
+ - Custom dark-mode CSS overrides in favour of token-driven theming.
package/README.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Git History UI
2
2
 
3
+ [![npm version](https://badge.fury.io/js/git-history-ui.svg)](https://badge.fury.io/js/git-history-ui)
4
+ [![npm downloads](https://img.shields.io/npm/dm/git-history-ui.svg)](https://www.npmjs.com/package/git-history-ui)
5
+ [![npm license](https://img.shields.io/npm/l/git-history-ui.svg)](https://www.npmjs.com/package/git-history-ui)
6
+ [![npm bundle size](https://img.shields.io/bundlephobia/min/git-history-ui.svg)](https://bundlephobia.com/result?p=git-history-ui)
7
+ [![GitHub stars](https://img.shields.io/github/stars/beingmartinbmc/git-history-ui.svg)](https://github.com/beingmartinbmc/git-history-ui)
8
+ [![GitHub issues](https://img.shields.io/github/issues/beingmartinbmc/git-history-ui.svg)](https://github.com/beingmartinbmc/git-history-ui/issues)
9
+
3
10
  A beautiful, modern web UI for visualizing git history with interactive commit graphs, search, filtering, and diff visualization. Built with Angular and Node.js.
4
11
 
5
12
  ## 🚀 Quick Start
@@ -1,13 +1,16 @@
1
1
  <!doctype html>
2
2
  <html lang="en" data-beasties-container>
3
- <head>
4
- <meta charset="utf-8">
5
- <title>Frontend</title>
6
- <base href="/">
7
- <meta name="viewport" content="width=device-width, initial-scale=1">
8
- <link rel="icon" type="image/x-icon" href="favicon.ico">
9
- <style>*,:before,:after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / .5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.6;color:#333;background-color:#f8f9fa}@media (prefers-color-scheme: dark){body{background-color:#1a1a1a;color:#e0e0e0}}*{transition:background-color .2s ease,border-color .2s ease,color .2s ease}</style><link rel="stylesheet" href="styles-J5I4DBTU.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-J5I4DBTU.css"></noscript></head>
10
- <body>
11
- <app-root></app-root>
12
- <script src="polyfills-5CFQRCPP.js" type="module"></script><script src="main-YHO6NCZZ.js" type="module"></script></body>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Git History UI</title>
6
+ <base href="/">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1">
8
+ <meta name="color-scheme" content="light dark">
9
+ <meta name="theme-color" content="#0b1020" media="(prefers-color-scheme: dark)">
10
+ <meta name="theme-color" content="#f7f8fa" media="(prefers-color-scheme: light)">
11
+ <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%234f46e5' d='M12 .5a11.5 11.5 0 1 0 11.5 11.5A11.5 11.5 0 0 0 12 .5Zm5.7 14.83a1 1 0 0 1-1.41 1.41L13 13.41V19a1 1 0 0 1-2 0v-5.59l-3.29 3.33A1 1 0 1 1 6.3 15.34l5-5.05a1 1 0 0 1 1.42 0Z'/%3E%3C/svg%3E">
12
+ <style>*,:before,:after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / .5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}:root{color-scheme:light;--bg-app:#f7f8fa;--bg-surface:#ffffff;--bg-surface-2:#f3f4f6;--bg-elevated:#ffffff;--bg-hover:#eef2ff;--bg-selected:#e0e7ff;--bg-overlay:rgba(15, 23, 42, .45);--fg-primary:#0f172a;--fg-secondary:#475569;--fg-muted:#64748b;--fg-subtle:#94a3b8;--fg-inverted:#ffffff;--border-soft:#e2e8f0;--border-strong:#cbd5e1;--border-focus:#6366f1;--accent:#4f46e5;--accent-hover:#4338ca;--accent-soft:#eef2ff;--accent-fg:#ffffff;--success:#16a34a;--warning:#d97706;--danger:#dc2626;--diff-add-bg:#dcfce7;--diff-add-fg:#14532d;--diff-add-gutter:#86efac;--diff-del-bg:#fee2e2;--diff-del-fg:#7f1d1d;--diff-del-gutter:#fca5a5;--diff-hunk-bg:#f1f5f9;--diff-hunk-fg:#475569;--shadow-sm:0 1px 2px rgba(15, 23, 42, .06);--shadow-md:0 4px 12px rgba(15, 23, 42, .08);--shadow-lg:0 12px 32px rgba(15, 23, 42, .12);--radius-sm:6px;--radius-md:10px;--radius-lg:14px;--font-sans:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, "Cascadia Mono", "Liberation Mono", "Courier New", monospace}*,*:before,*:after{box-sizing:border-box}html,body{height:100%}body{margin:0;font-family:var(--font-sans);font-size:14px;line-height:1.5;color:var(--fg-primary);background:var(--bg-app);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}</style><link rel="stylesheet" href="styles-YQ73RJ2V.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-YQ73RJ2V.css"></noscript></head>
13
+ <body>
14
+ <app-root></app-root>
15
+ <script src="polyfills-5CFQRCPP.js" type="module"></script><script src="main-7AXSFTJM.js" type="module"></script></body>
13
16
  </html>