import type { JestEnvironment } from '@jest/environment'; import type { EnvironmentListener, EnvironmentListenerFn, EnvironmentListenerOnly, EnvironmentListenerWithOptions, } from '../types'; import { requireModule } from './requireModule'; export type ResolvedEnvironmentListener = [ EnvironmentListenerFn, any, ]; export async function resolveSubscription( rootDir: string, registration: EnvironmentListener | null, ): Promise> { if (Array.isArray(registration)) { const [callback, options] = registration as EnvironmentListenerWithOptions; return [await resolveSubscriptionSingle(rootDir, callback), options]; } return [await resolveSubscriptionSingle(rootDir, registration), undefined]; } export async function resolveSubscriptionSingle( rootDir: string, registration: EnvironmentListenerOnly | null, ): Promise> { if (typeof registration === 'function') { return registration; } if (typeof registration === 'string') { return resolveSubscriptionSingle(rootDir, await requireModule(rootDir, registration)); } return () => {}; }