import type {ExtensionTarget as AdminExtensionTarget} from '@shopify/ui-extensions/admin'; import type {ExtensionTarget as CheckoutExtensionTarget} from '@shopify/ui-extensions/checkout'; import type {ExtensionTarget as CustomerAccountExtensionTarget} from '@shopify/ui-extensions/customer-account'; import type {ExtensionTarget as PosExtensionTarget} from '@shopify/ui-extensions/point-of-sale'; import type {AnyExtensionTarget, ApiForTarget} from '../targets'; import { isCheckoutTarget, isCustomerAccountTarget, isPosTarget, isAdminTarget, } from '../targets'; import {createMockCheckoutTargetApi} from '../checkout/factories'; import {createMockCustomerAccountTargetApi} from '../customer-account/factories'; import {createMockPosTargetApi} from '../point-of-sale/factories'; import { createMockAdminTargetApi, type ApiForAdminExtension, } from '../admin/factories'; /** * Returns the default mock API values for a given target. */ export function createMockTargetApi( target: T, ): ApiForAdminExtension; export function createMockTargetApi( target: T, ): ApiForTarget; export function createMockTargetApi( target: T, ): ApiForTarget; export function createMockTargetApi( target: T, ): ApiForTarget; export function createMockTargetApi(target: AnyExtensionTarget): never; export function createMockTargetApi(target: AnyExtensionTarget): object { let api: object; if (isCheckoutTarget(target)) { api = createMockCheckoutTargetApi(target); } else if (isPosTarget(target)) { api = createMockPosTargetApi(target); } else if (isCustomerAccountTarget(target)) { api = createMockCustomerAccountTargetApi(target); } else if (isAdminTarget(target)) { api = createMockAdminTargetApi(target); } else { throw new Error( `Unsupported target: "${target}". No mock factory is available for this target.`, ); } // `@shopify/ui-extensions/preact` calls `shopify.setSignals()` as a // side-effect when imported. Include a no-op so the proxy doesn't // reject the access. return Object.assign(api, {setSignals() {}}); }