apollo-elements/apollo-elements

View on GitHub
packages/hybrids/factories/subscription.ts

Summary

Maintainability
B
4 hrs
Test Coverage
A
100%
import type { DocumentNode, TypedDocumentNode } from '@apollo/client/core';

import type { Descriptor } from 'hybrids';

import { controller } from './controller.js';

import {
  ApolloSubscriptionController,
  ApolloSubscriptionControllerOptions,
} from '@apollo-elements/core/apollo-subscription-controller';

/**
 * Hybrids property descriptor factory for GraphQL subscriptions.
 *
 * @param  subscriptionDocument The subscription document.
 * @param  options Options to control the subscription.
 * @return Hybrids descriptor for a [ApolloMutationController](/api/core/controllers/subscription/)
 */

export function subscription<E extends HTMLElement, D, V>(
  subscriptionDocument?: DocumentNode | null,
  options?: ApolloSubscriptionControllerOptions<D, V>,
): Descriptor<E, ApolloSubscriptionController<D, V>>
export function subscription<E extends HTMLElement, D extends TypedDocumentNode>(
  subscriptionDocument?: D | null,
  options?: ApolloSubscriptionControllerOptions<D>,
): Descriptor<E, ApolloSubscriptionController<D>> {
  return controller<E, ApolloSubscriptionController<D>>(
    ApolloSubscriptionController,
    subscriptionDocument,
    options
  );
}