All files / core/src/enums RenderBackends.ts

40% Statements 2/5
0% Branches 0/2
0% Functions 0/1
40% Lines 2/5

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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51                                          128x                             128x                            
import type {
  CoreRenderBackendConstants,
  RenderBackendConstants,
  RenderBackend as RenderBackendWire,
} from '../types/RenderBackendRegistry';
 
/**
 * Shape of `Enums.RenderBackends`. Augment {@link RenderBackendConstants} in
 * your extension `.d.ts`; property types on `Enums.RenderBackends` follow that
 * interface.
 */
export type RenderBackendsMap = RenderBackendConstants;
 
/**
 * String form accepted anywhere a render backend is expected: the built-in
 * `'auto' | 'gpu' | 'cpu'` values plus any backend registered via
 * `registerRenderBackend()` (typed through the augmentable
 * `RenderBackendRegistry` interface).
 */
export type RenderBackendValue = RenderBackendWire;
 
const builtInRenderBackends: CoreRenderBackendConstants = {
  Auto: 'auto',
  GPU: 'gpu',
  CPU: 'cpu',
};
 
/**
 * Runtime render backend constants: built-in names map to wire-type strings.
 *
 * Built-ins are available immediately. Extension backends are added when you
 * call `registerRenderBackend({ name: 'WEBGPU', backend: 'myOrg:webgpu', ... })`.
 *
 * For compile-time names, augment `RenderBackendConstants` only —
 * `Enums.RenderBackends` is typed from it.
 */
const RenderBackends = builtInRenderBackends as RenderBackendsMap;
 
export function registerRenderBackendsConstant<
  Name extends keyof RenderBackendConstants,
>(name: Name, backend: RenderBackendConstants[Name]): void {
  if (Object.prototype.hasOwnProperty.call(RenderBackends, name)) {
    throw new Error(`Render backend constant "${String(name)}" already exists`);
  }
 
  (RenderBackends as Record<keyof RenderBackendConstants, string>)[name] =
    backend;
}
 
export default RenderBackends;