Implementation:Apache Druid ModuleRepository
| Knowledge Sources | |
|---|---|
| Domains | Visual_Exploration, Data_Visualization |
| Last Updated | 2026-02-10 00:00 GMT |
Overview
Concrete static registry class for managing pluggable visualization module definitions in the Explore view.
Description
The ModuleRepository class provides a static Map-based registry for ModuleDefinition objects. Modules self-register at import time, and the registry provides lookup and enumeration methods. The registry enforces uniqueness by throwing an error on duplicate module ID registration.
Usage
Modules register themselves at import time. Use getAllModuleEntries() to populate the module picker and getModule(id) to resolve a module for rendering.
Code Reference
Source Location
- Repository: Apache Druid
- File: web-console/src/views/explore-view/module-repository/module-repository.ts
- Lines: L49-L66
Signature
interface ModuleDefinition<P> {
id: string;
icon: IconName;
title: string;
parameters: Readonly<Record<keyof P, ParameterDefinition>>;
component: (props: ModuleComponentProps<P>) => any;
}
export class ModuleRepository {
private static readonly repo = new Map<string, ModuleDefinition<any>>();
static registerModule<P>(module: ModuleDefinition<P>): void
static getModule(id: string): ModuleDefinition<any> | undefined
static getAllModuleEntries(): ModuleDefinition<any>[]
}
Import
import { ModuleRepository } from './module-repository/module-repository';
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| module | ModuleDefinition | Yes | Module to register (for registerModule) |
| id | string | Yes | Module ID to look up (for getModule) |
Outputs
| Name | Type | Description |
|---|---|---|
| ModuleDefinition | ModuleDefinition or undefined | The registered module definition |
| all modules | ModuleDefinition[] | All registered modules (for getAllModuleEntries) |
Usage Examples
Registering and Using Modules
import { ModuleRepository } from './module-repository/module-repository';
// Registration (done at module import time):
ModuleRepository.registerModule({
id: 'time-chart',
icon: 'timeline-line-chart',
title: 'Time chart',
parameters: { /* ... */ },
component: TimeChartModule,
});
// Listing all modules (for module picker):
const modules = ModuleRepository.getAllModuleEntries();
// modules = [timeChart, barChart, pieChart, groupingTable, recordTable, multiAxisChart]
// Looking up a specific module:
const mod = ModuleRepository.getModule('bar-chart');
if (mod) {
const Component = mod.component;
return <Component {...moduleProps} />;
}