/** * External dependencies. */ import type { Experiment, Maybe } from '@nab/types'; /** * Internal dependencies. */ import type { State } from '../types'; type ExtensionName = keyof Extensions; type Extensions = Required< Required< Experiment >[ 'extensions' ] >; type GetExtension = typeof _getExtension & { CurriedSignature: typeof __getExtension; }; export const getExtension = _getExtension as GetExtension; function _getExtension< TName extends ExtensionName >( state: State, name: TName ): Maybe< Extensions[ TName ] > { return state.experiment.extensions[ name ]; } /* eslint-disable @typescript-eslint/no-unused-vars */ function __getExtension< TName extends ExtensionName >( name: TName ): Maybe< Extensions[ TName ] > { return name ? undefined : undefined; } /* eslint-enable @typescript-eslint/no-unused-vars */ export function getExtensions( state: State ): Partial< Extensions > { return state.experiment.extensions; }