All files / src/renderer rendererRegistry.ts

100% Statements 6/6
100% Branches 1/1
100% Functions 4/4
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31                            18x   18x 2x     18x   116x       1x        
import type { FieldRenderer } from "./renderField";
 
/** Custom renderer map keyed by schema field type. */
export type RendererMap = Record<string, FieldRenderer>;
 
export interface RendererRegistry {
  /** Return a renderer for the given field type, if one was registered. */
  get(type: string): FieldRenderer | undefined;
  /** Register or replace a renderer for a custom field type. */
  register(type: string, renderer: FieldRenderer): void;
}
 
/** Create the small renderer lookup used by built-in and custom fields. */
export function createRendererRegistry(renderers: RendererMap = {}): RendererRegistry {
  const registry = new Map<string, FieldRenderer>();
 
  Object.entries(renderers).forEach(([type, renderer]) => {
    registry.set(type, renderer);
  });
 
  return {
    get(type) {
      return registry.get(type);
    },
 
    register(type, renderer) {
      registry.set(type, renderer);
    }
  };
}