Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
97e126b
ci: better release PR title for evitaDB
lukashornych Jan 21, 2026
76e1de1
Merge remote-tracking branch 'origin/dev' into dev
lukashornych Jan 21, 2026
874b59c
build(deps): bump markdown-it from 14.1.0 to 14.1.1
dependabot[bot] Feb 13, 2026
6dff52c
build(deps): bump rollup from 4.50.1 to 4.59.0
dependabot[bot] Feb 28, 2026
cca6868
build(deps): bump immutable from 5.1.3 to 5.1.5
dependabot[bot] Mar 4, 2026
9d38633
build(deps): bump flatted from 3.3.3 to 3.4.2
dependabot[bot] Mar 21, 2026
f48901c
build(deps): bump yaml from 2.8.0 to 2.8.3
dependabot[bot] Mar 26, 2026
7f0ac14
build(deps-dev): bump vite from 7.3.0 to 7.3.2
dependabot[bot] Apr 6, 2026
0793ad8
build(deps): bump lodash from 4.17.21 to 4.18.1
dependabot[bot] Apr 7, 2026
22ef72a
build(deps): bump dompurify from 3.2.6 to 3.4.0
dependabot[bot] Apr 16, 2026
53421e9
docs: claude code document
lukashornych Jan 20, 2026
71a2477
docs: claude code document
lukashornych Jan 20, 2026
02e6167
feat: visualisation of reference schema partially faceted and buckets
Apr 23, 2026
23b66ed
refactor: result visualisation engine for more implementation clarity
Apr 24, 2026
9d3e30f
feat: reference summary visualization
Apr 30, 2026
07dd475
fix: missing localization texts
Apr 30, 2026
f61f21d
feat: better styling for histogram index definitions
Apr 30, 2026
779f208
build: update evitaql codemirror plugin with new constraints
Apr 30, 2026
6e47285
fix: histogram chart not displaying occurrences correctly per bucket
Apr 30, 2026
04cd809
build: define minimal evitaDB version for current client
Apr 30, 2026
2354a6f
Merge pull request #404 from FgForrest/dependabot/npm_and_yarn/dompur…
lukashornych Apr 30, 2026
5a1fdb0
Merge pull request #403 from FgForrest/dependabot/npm_and_yarn/lodash…
lukashornych Apr 30, 2026
16ef8b5
Merge pull request #402 from FgForrest/dependabot/npm_and_yarn/vite-7…
lukashornych Apr 30, 2026
a6b25b0
Merge pull request #400 from FgForrest/dependabot/npm_and_yarn/yaml-2…
lukashornych Apr 30, 2026
f6a837a
Merge pull request #399 from FgForrest/dependabot/npm_and_yarn/flatte…
lukashornych Apr 30, 2026
6490a38
build(deps): bump uuid from 11.1.0 to 14.0.0
dependabot[bot] Apr 30, 2026
921c99d
Merge pull request #398 from FgForrest/dependabot/npm_and_yarn/immuta…
lukashornych Apr 30, 2026
1b98454
Merge pull request #396 from FgForrest/dependabot/npm_and_yarn/rollup…
lukashornych Apr 30, 2026
c99e2e5
build(deps): bump postcss from 8.5.6 to 8.5.12
dependabot[bot] Apr 30, 2026
6dcb1ba
Merge pull request #395 from FgForrest/dependabot/npm_and_yarn/markdo…
lukashornych Apr 30, 2026
125345f
Merge pull request #406 from FgForrest/dependabot/npm_and_yarn/uuid-1…
lukashornych Apr 30, 2026
688267f
Merge pull request #407 from FgForrest/dependabot/npm_and_yarn/postcs…
lukashornych Apr 30, 2026
b6fa909
build(deps): bump vite from 6.4.1 to 7.3.2
dependabot[bot] Apr 30, 2026
f86755c
Merge pull request #409 from FgForrest/405-support-for-reference-summ…
lukashornych Apr 30, 2026
b93bb27
Merge pull request #408 from FgForrest/dependabot/npm_and_yarn/vite-7…
lukashornych Apr 30, 2026
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
99 changes: 99 additions & 0 deletions .claude/skills/generate-evitadb-client/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
---
name: generate-evitadb-client
description: Regenerate gRPC TypeScript types from the evitaDB repository. Use when the user wants to refresh, regenerate, or update gRPC/proto-generated TS client code in evitaLab.
user_invocable: true
---

# generate-evitadb-client

Regenerate gRPC TypeScript types in evitaLab from the evitaDB repository's proto definitions.

## Strict rules

- **Do NOT edit any source code**, even if compilation, lint, or test errors appear after regeneration.
- **Do NOT commit anything** to git.
- Only run the steps below and report results.

## Workflow

### Step 1 — Activate the Node version from `.nvmrc`

Run:

```bash
nvm use
```

This switches Node to the version pinned in `.nvmrc`.

**If the command fails with a "not yet installed" error** (or similar — e.g. `N/A: version "vX.Y.Z" is not yet installed`), install that version and retry, all in one shell invocation:

```bash
nvm install && nvm use
```

If activation still fails after that (network errors, version not found on remote, etc.), **stop immediately** and report the error to the user.

### Step 2 — Ensure yarn is installed

Run:

```bash
npm install -g yarn
```

This installs (or refreshes) the `yarn` binary globally for the active Node version. If install fails, **stop immediately** and report the error.

### Step 3 — Install project dependencies

Run:

```bash
yarn install
```

This ensures `@bufbuild/buf` and other tooling have their platform binaries downloaded. If install fails, **stop immediately** and report the error.

### Step 4 — Ask for evitaDB repo path

Ask the user for the absolute path to their local evitaDB repository checkout. Wait for their answer before proceeding. Do not guess or assume the path.

### Step 5 — Run the generator script

Run the project's generator script with the user-provided path as the first argument:

```bash
./generate-evitadb-client.sh <evitadb-repo-path>
```

If this script exits with a non-zero status, **stop immediately** and report the error to the user. Do not proceed to later steps.

### Step 6 — Run tests

Run:

```bash
yarn test
```

Capture the output. **Do not stop** if tests fail — continue to the next step. Note which tests failed and why (especially type errors caused by the regeneration).

### Step 7 — Run lint

Run:

```bash
yarn lint
```

Capture the output. Note any linting errors.

### Step 8 — Summarize compilation errors

Give the user a concise summary covering:
- Whether generation succeeded
- Test failures (counts + likely cause: type mismatches, missing exports, renamed symbols, etc.)
- Lint errors (counts + categories)
- A short list of the most likely **compilation errors** the user will need to fix manually (e.g. removed fields, renamed messages, changed enum values)

Remind the user that per the skill rules, no code was edited and nothing was committed — fixes are up to them.
2 changes: 1 addition & 1 deletion .evitadbrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2025.8.0
2026.2.0
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ jobs:
const { data: pullRequest } = await github.rest.pulls.create({
owner: 'FgForrest',
repo: 'evitaDB',
title: 'Update evitaLab to ${{ needs.build.outputs.released_version }}',
title: 'build: Update evitaLab to ${{ needs.build.outputs.released_version }}',
head: branchName,
base: 'dev',
body: 'This PR updates embedded evitaLab with new released version.'
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,5 @@ pnpm-debug.log*
*.sln
*.sw?
*.iml

.hole/
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v22.16.0
v22
122 changes: 122 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# CLAUDE.md

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

## Project Overview

evitaLab is the official web-based GUI client for evitaDB e-commerce database. It's a Vue.js SPA that allows users to browse entities, execute queries (GraphQL/evitaQL), inspect schemas, manage server connections, and more.

## Development Commands

```bash
# Install dependencies
yarn install

# Run development server (localhost:3000/lab)
yarn dev

# Run in driver mode for evitaLab Desktop (localhost:3000)
yarn dev-driver

# Build for production
yarn build # Standalone mode
yarn build-driver # Driver mode for Desktop app

# Lint with auto-fix
yarn lint

# Run tests
yarn test
```

**Environment Configuration:** Set `VITE_DEV_CONNECTION` in `.env.local` to `DEMO` (default) or `LOCAL` to change the dev connection target.

## Architecture

### Module System

The codebase is organized into **modules** under `src/modules/`. Each module is a semantic domain separation with its own services, components, and models. Modules communicate via dependency injection.

**Module types:**
- **Abstract modules** (`base`, `console`, `code-editor`): Shared services, models, and UI components
- **Generic modules** (`config`, `connection`, `workspace`, `storage`, `keymap`): Core evitaLab infrastructure
- **Feature modules** (`entity-viewer`, `evitaql-console`, `graphql-console`, `schema-viewer`, etc.): User-facing features

**Key modules:**
- `database-driver`: `EvitaClient` class - the single entrypoint for all evitaDB server communication. Uses gRPC internally but exposes an internal model tailored to evitaLab
- `workspace`: Manages tabs, history, and overall UI structure. Use `WorkspaceService` to create tabs
- `connection`: Manages connections to evitaDB instances

### Module Registration

Modules that need dependency injection implement `ModuleRegistrar` interface and are registered in `src/modules/modules.ts`. The registration order matters - base modules must be registered before feature modules that depend on them.

```typescript
// Example: injecting EvitaClient in a module registrar
const evitaClient: EvitaClient = builder.inject(evitaClientInjectionKey)

// In components, use the helper
const evitaClient = useEvitaClient()
```

### Bootstrapping

`main.ts` initializes Vue, plugins, and calls each module's `register()` method. `Lab.vue` is the root component.

## Code Conventions

### Vue Components

- Use **Single-File Components** with **Composition API**
- Order: `<script>`, `<template>`, `<style>`
- Setup structure: imports → constants → service injection → props/emit → refs/computed/functions
- Complex data-accessing components should follow **MVVM** pattern with a mediator service

### Dependency Injection

Export injection key and helper function for each injectable service:

```typescript
export const serviceInjectionKey: InjectionKey<Service> = Symbol('service')
export function useService(): Service {
return mandatoryInject(serviceInjectionKey)
}
```

For component tree injection, create a `dependencies.ts` file with `provideX`/`injectX` methods.

### UI Components

Use Vuetify components as the base. Custom components in `modules/base/component`:
- `VLabDialog` / `VFormDialog` for dialogs
- `VTabToolbar` for tab toolbars
- `VPropertiesTable` for property displays
- `VMarkdown` for markdown rendering
- `VQueryEditor`, `VInlineQueryEditor`, `VPreviewEditor` for code editors

### Error Handling

Wrap all service/EvitaClient calls in try-catch and use `useToaster().error(...)` for user feedback.

### Creating Tabs

Implement `TabDefinition` interface, create a factory class, then use:
```typescript
workspaceService.createTab(tabDefinition)
```

## Documentation

Document every new Vue component, class, type, interface, and so on.

## Git Workflow

- `master`: Released versions only
- `dev`: Current development (target for feature branches)
- Feature branches: Created from `dev` for each issue

Use [conventional commits](https://www.conventionalcommits.org/) for commit messages - CI/CD depends on this for versioning.

## External Documentation

Always use Context7 MCP when you need library/API documentation, code generation, setup or configuration steps without being explicitly asked.
12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"@connectrpc/connect-web": "^2.0.2",
"@connectrpc/protoc-gen-connect-es": "^1.6.1",
"@ddietr/codemirror-themes": "^1.5.1",
"@lukashornych/codemirror-lang-evitaql": "^1.4.1",
"@lukashornych/codemirror-lang-evitaql": "^1.5.1",
"@mdi/font": "7.4.47",
"@tsconfig/node22": "^22.0.2",
"@types/dompurify": "^3.2.0",
Expand All @@ -33,15 +33,15 @@
"cm6-graphql": "^0.2.1",
"codemirror": "^6.0.2",
"core-js": "^3.43.0",
"dompurify": "^3.2.6",
"dompurify": "^3.4.0",
"graphql": "^16.11.0",
"highlight.js": "^11.11.1",
"immutable": "^5.1.3",
"immutable": "^5.1.5",
"keymaster": "^1.6.2",
"ky": "^1.8.1",
"luxon": "^3.6.1",
"lz-string": "^1.5.0",
"markdown-it": "^14.1.0",
"markdown-it": "^14.1.1",
"markdown-it-emoji": "^3.0.0",
"markdown-it-highlightjs": "^4.2.0",
"pinia": "^3.0.3",
Expand All @@ -53,7 +53,7 @@
"unplugin-vue": "^6.2.0",
"unplugin-vue-components": "^28.7.0",
"unplugin-vue-router": "^0.12.0",
"uuid": "^11.1.0",
"uuid": "^14.0.0",
"vite-plugin-vue-layouts-next": "^0.1.5",
"vue": "^3.5.17",
"vue-codemirror": "^6.1.1",
Expand Down Expand Up @@ -83,7 +83,7 @@
"sass": "^1.89.2",
"ts-node": "^10.9.2",
"typescript": "^5.8.3",
"vite": "^7.1.11",
"vite": "^7.3.2",
"vite-plugin-vuetify": "^2.1.1",
"vitest": "^3.2.4",
"vue-tsc": "^2.2.10"
Expand Down
9 changes: 7 additions & 2 deletions src/modules/base/component/VPropertiesTableValueItem.vue
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,13 @@ const props =
>
{{ propertyValue.value.valueSpecification }}

<VTooltip v-if="propertyValue.value.description" activator="parent">
{{ propertyValue.value.description }}
<VTooltip v-if="propertyValue.value.description || propertyValue.value.descriptionMarkup" activator="parent">
<template v-if="propertyValue.value.descriptionMarkup">
<VMarkdown :source="propertyValue.value.descriptionMarkup" />
</template>
<template v-else>
{{ propertyValue.value.description }}
</template>
</VTooltip>
</VChip>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,14 @@ export class MultiValueFlagValue {
*/
readonly description?: string
readonly icon?: string
readonly descriptionMarkup?: string

constructor(value: boolean, valueSpecification: string, description?: string, icon: string | undefined = undefined) {
constructor(value: boolean, valueSpecification: string, description?: string, icon: string | undefined = undefined, descriptionMarkup?: string) {
this.value = value
this.valueSpecification = valueSpecification
this.description = description
this.icon = icon
this.descriptionMarkup = descriptionMarkup
}

toString() {
Expand Down
Loading
Loading