{"version":3,"file":"mutation.mjs","sources":["../../../../../src/mutation/mutation.ts"],"sourcesContent":["import { type EventCallable, type Store, attach, createEvent, sample } from \"effector\"\n\nimport type {\n  ApolloClient,\n  DefaultContext,\n  DocumentNode,\n  MaybeMasked,\n  OperationVariables,\n  TypedDocumentNode,\n} from \"@apollo/client\"\n\nimport { operationName } from \"../lib/name\"\nimport { type Optional, optional } from \"../lib/optional\"\nimport { storify } from \"../lib/storify\"\nimport {\n  type ExecutionParams,\n  type RemoteOperation,\n  type RemoteOperationInternals,\n  createRemoteOperation,\n} from \"../remote_operation\"\n\ninterface CreateMutationOptions<Data, Variables> {\n  /** Your Apollo Client instance that'll be used for making the mutation. */\n  client: ApolloClient<unknown> | Store<ApolloClient<unknown>>\n  /**\n   * A GraphQL Document with a single `mutation` for your operation.\n   * It's passed directly to Apollo with no modifications.\n   */\n  document: DocumentNode | TypedDocumentNode<Data, Variables>\n\n  /** Context passed to your Apollo Link. */\n  context?: DefaultContext | Store<DefaultContext>\n\n  name?: string\n}\n\nexport type MutationMeta = void\n\ntype MutationInternals<Data, Variables> = RemoteOperationInternals<\n  MaybeMasked<Data>,\n  Variables,\n  MutationMeta\n>\n\nexport interface Mutation<Data, Variables>\n  extends RemoteOperation<MaybeMasked<Data>, Variables, MutationMeta> {\n  /** Run this Mutation against the GraphQL server. */\n  start: EventCallable<Optional<Variables>>\n\n  meta: {\n    name: string\n    client: Store<ApolloClient<unknown>>\n    document: TypedDocumentNode<Data, Variables>\n  }\n\n  /**\n   * Internal tools, useful for testing.\n   */\n  __: MutationInternals<Data, Variables>\n}\n\nexport function createMutation<Data, Variables extends OperationVariables = OperationVariables>({\n  client,\n  document,\n  context,\n\n  name = operationName(document) || \"unknown\",\n}: CreateMutationOptions<Data, Variables>): Mutation<Data, Variables> {\n  type ResolvedData = MaybeMasked<Data>\n\n  const $client = storify(client, { name: `${name}.client`, sid: `apollo.${name}.$client` })\n\n  const $context = storify(context, { name: `${name}.context`, sid: `apollo.${name}.$context` })\n\n  const handler = attach({\n    source: { client: $client, context: $context },\n    effect: ({ client, context }, { variables }: ExecutionParams<Variables, MutationMeta>) =>\n      client\n        .mutate({ mutation: document, context, variables, fetchPolicy: \"network-only\" })\n        .then(({ data }) => data!),\n  })\n\n  const operation = createRemoteOperation<ResolvedData, Variables, MutationMeta>({ name, handler })\n\n  const start = createEvent<Variables>({ name: `${name}.start` })\n\n  sample({\n    clock: start,\n    fn: (variables) => ({ variables }) as ExecutionParams<Variables, void>,\n    target: operation.__.execute,\n  })\n\n  return {\n    ...operation,\n\n    start: optional(start),\n\n    meta: { name, client: $client, document },\n    __: { ...operation.__ },\n  }\n}\n"],"names":["client","context"],"mappings":";;;;;AA6DO,SAAS,eAAgF;AAAA,EAC9F;AAAA,EACA;AAAA,EACA;AAAA,EAEA,OAAO,cAAc,QAAQ,KAAK;AACpC,GAAsE;AAGpE,QAAM,UAAU,QAAQ,QAAQ,EAAE,MAAM,GAAG,IAAI,WAAW,KAAK,UAAU,IAAI,WAAA,CAAY;AAEzF,QAAM,WAAW,QAAQ,SAAS,EAAE,MAAM,GAAG,IAAI,YAAY,KAAK,UAAU,IAAI,YAAA,CAAa;AAE7F,QAAM,UAAU,OAAO;AAAA,IACrB,QAAQ,EAAE,QAAQ,SAAS,SAAS,SAAS;AAAA,IAC7C,QAAQ,CAAC,EAAE,QAAAA,SAAQ,SAAAC,SAAQ,GAAG,EAAE,UAAA,MAC9BD,QACG,OAAO,EAAE,UAAU,UAAU,SAAAC,UAAS,WAAW,aAAa,eAAgB,CAAA,EAC9E,KAAK,CAAC,EAAE,KAAK,MAAM,IAAK;AAAA,EAAA,CAC9B;AAED,QAAM,YAAY,sBAA6D,EAAE,MAAM,SAAS;AAEhG,QAAM,QAAQ,YAAuB,EAAE,MAAM,GAAG,IAAI,UAAU;AAEvD,SAAA;AAAA,IACL,OAAO;AAAA,IACP,IAAI,CAAC,eAAe,EAAE;IACtB,QAAQ,UAAU,GAAG;AAAA,EAAA,CACtB;AAEM,SAAA;AAAA,IACL,GAAG;AAAA,IAEH,OAAO,SAAS,KAAK;AAAA,IAErB,MAAM,EAAE,MAAM,QAAQ,SAAS,SAAS;AAAA,IACxC,IAAI,EAAE,GAAG,UAAU,GAAG;AAAA,EACxB;AACF;"}