All files / kernel-platforms/src types.ts

0% Statements 0/0
0% Branches 0/0
0% Functions 0/0
0% Lines 0/0

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                                                                                               
import type { PlatformCapabilityRegistry } from './capabilities/index.ts';
 
export type CapabilityName = keyof PlatformCapabilityRegistry;
 
export type Capability<Name extends CapabilityName> =
  PlatformCapabilityRegistry[Name]['capability'];
 
export type CapabilityConfig<Name extends CapabilityName> =
  PlatformCapabilityRegistry[Name]['config'];
 
export type CapabilityFactory<Name extends CapabilityName, Options = never> = (
  config: CapabilityConfig<Name>,
  options?: Options,
) => Capability<Name>;
 
export type CapabilityFactories = {
  [Key in CapabilityName]: CapabilityFactory<Key>;
};
 
export type Platform<Name extends CapabilityName> = {
  [Key in Name]: PlatformCapabilityRegistry[Key]['capability'];
};
 
export type PlatformConfig<Name extends CapabilityName = CapabilityName> = {
  [Key in Name]: PlatformCapabilityRegistry[Key]['config'];
};
 
/**
 * Extracts the options type from a capability factory
 */
export type ExtractCapabilityOptions<Factory> =
  Factory extends CapabilityFactory<never, infer Options> ? Options : never;
 
/**
 * Maps capability names to their factory options types
 */
export type PlatformOptions<Factories extends Partial<CapabilityFactories>> = {
  [Key in keyof Factories]: ExtractCapabilityOptions<Factories[Key]>;
};
 
export type PlatformFactory<
  KnownCapabilities extends CapabilityName = CapabilityName,
  Factories extends Partial<CapabilityFactories> = Partial<CapabilityFactories>,
> = (
  config: Partial<PlatformConfig<KnownCapabilities>>,
  options?: Partial<PlatformOptions<Factories>>,
) => Promise<Platform<keyof typeof config>>;