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
3 changes: 0 additions & 3 deletions .husky/commit-msg
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

Comment on lines -1 to -3
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Husky no longer requires this stuff

npx --no-install commitlint --edit $1
3 changes: 0 additions & 3 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx --no-install pretty-quick --staged
3 changes: 0 additions & 3 deletions .husky/pre-push
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npm run test:ci
89 changes: 89 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

Hyperdash Angular (`@hypertrace/hyperdash-angular`) is an Angular library providing dashboard runtime capabilities. It wraps the core `@hypertrace/hyperdash` library with Angular services, components, and directives.

**Structure**: Monorepo with a publishable library (`projects/hyperdash-angular/`) and demo app (`src/`).

## Common Commands

```bash
# Development
npm start # Dev server at localhost:4200
npm run build # Build app and library

# Testing
npm test # Run tests (watch mode)
npm run test:ci:lib # Library tests only (CI mode)
npm run test:ci:app # App tests only (CI mode)
npm run test:ci # Full CI suite (lint + all tests)

# Code Quality
npm run lint # Run ESLint
npm run commit # Interactive conventional commit (commitizen)
```

## Architecture

### Injectable Wrappers Pattern

Core `@hypertrace/hyperdash` classes are wrapped as Angular injectable services following the pattern `[ClassName]Service`:

- `DashboardManagerService`, `ModelManagerService`, `ThemeManagerService`, etc.
- Always use the service wrapper (e.g., `DashboardManagerService`) rather than the core class directly.

### Module System

- `DashboardCoreModule`: Main runtime module with default property types and deserializers
- `DashboardCoreModule.with(metadata)`: Extend with custom types, models, renderers, editors, deserializers
- `DashboardEditorModule`: Separate module for editing capabilities

### Key Injection Tokens

- `MODEL_PROPERTY_TYPES`: Register custom property types
- `DASHBOARD_DESERIALIZERS`: Register custom deserializers

### Rendering

- `DashboardComponent` (`<hda-dashboard>`): Main rendering component
- `DashboardModelDirective` (`hdaDashboardModel`): Injects models into template context
- `ThemePropertyPipe`: Theme-aware property rendering

## Code Conventions

### Selectors

- **Library components**: `hda-*` prefix (kebab-case)
- **Library directives**: `hda*` prefix (camelCase)
- **App components**: `app-*` prefix

### TypeScript

- Strict mode enabled with `noUnusedLocals`, `noUnusedParameters`, `strictNullChecks`
- Explicit access modifiers required (public/private/protected)
- No `any` types allowed
- Parameter properties preferred: `constructor(private readonly service: Service)`

### Testing

- Jest with `@ngneat/spectator` for component testing
- Test files: `*.test.ts` or `*.spec.ts`
- Coverage excludes: `*.module.ts`, `public_api.ts`, `test/` directory

### Commits

- Conventional commits required (enforced via commitlint)
- Use `npm run commit` for interactive commit wizard
- Pre-commit hook runs Prettier on staged files

## ESLint Rules of Note

- Max 500 lines per file
- Template conditional complexity: max 4
- Template cyclomatic complexity: max 5
- No inline templates > 10 lines
- Arrow functions: `as-needed` body style
- Prefer template literals over string concatenation
Loading