{
  "version": 3,
  "sources": ["../../../src/storeObservation/compiledHooks/useCompiledLazyLoadQuery.ts"],
  "sourcesContent": ["import { useRef, useEffect } from \"react\";\nimport { useQuery as useApolloQuery } from \"@apollo/client\";\nimport invariant from \"invariant\";\nimport { useDeepCompareMemoize } from \"./useDeepCompareMemoize\";\nimport { useForceUpdate } from \"./useForceUpdate\";\nimport { useOverridenOrDefaultApolloClient } from \"../../useOverridenOrDefaultApolloClient\";\n\nimport type {\n  ObservableQuery,\n  ApolloClient,\n  WatchQueryFetchPolicy,\n} from \"@apollo/client\";\nimport type { DocumentNode } from \"graphql\";\nimport type { CompiledArtefactModule } from \"@graphitation/apollo-react-relay-duct-tape-compiler\";\n\nclass ExecutionQueryHandler {\n  public status: [pending: boolean, error?: Error];\n  private querySubscription?: ZenObservable.Subscription;\n\n  constructor(private onDataReceive: () => void) {\n    this.status = [true, undefined];\n  }\n\n  public isIdle() {\n    return this.status[0] && this.querySubscription === undefined;\n  }\n\n  public dispose() {\n    this.querySubscription?.unsubscribe();\n    this.querySubscription = undefined;\n  }\n\n  public reset() {\n    this.dispose();\n    this.status = [true, undefined];\n  }\n\n  private handleResult(error: Error | undefined, loading?: boolean) {\n    this.status = [false, error];\n\n    /**\n    /* For cache-and-network, we return the result from the cache\n    /* immediately, but we don't want to dispose of the observable\n    /* until the network request completes.\n    */\n    if (!loading) {\n      this.dispose();\n    }\n    this.onDataReceive();\n  }\n\n  public subscribe(observable: ObservableQuery) {\n    this.querySubscription = observable.subscribe(\n      ({ error: err, loading }) => {\n        this.handleResult(err, loading);\n      },\n      (err) => {\n        this.handleResult(err);\n      },\n    );\n  }\n}\n\nfunction useExecutionQuery(\n  client: ApolloClient<unknown>,\n  executionQueryDocument: DocumentNode,\n  variables: Record<string, unknown>,\n  fetchPolicy: WatchQueryFetchPolicy | undefined,\n): [loading: boolean, error?: Error] {\n  const forceUpdate = useForceUpdate();\n  const execution = useRef(new ExecutionQueryHandler(() => forceUpdate()));\n  useEffect(() => {\n    if (execution.current.isIdle()) {\n      execution.current.subscribe(\n        client.watchQuery({\n          query: executionQueryDocument,\n          variables,\n          fetchPolicy,\n        }),\n      );\n    }\n    return () => {\n      execution.current.reset();\n    };\n  }, [executionQueryDocument, variables, fetchPolicy]);\n  return execution.current.status;\n}\n\n/**\n * @todo Rewrite this to mimic Relay's preload APIs\n *\n * @param documents Compiled execute and watch query documents that are used to\n *                  setup a narrow observable for just the data selected by the\n *                  original fragment.\n * @param options An object containing a variables field.\n */\nexport function useCompiledLazyLoadQuery(\n  documents: CompiledArtefactModule,\n  options: {\n    variables: Record<string, unknown>;\n    fetchPolicy?: WatchQueryFetchPolicy;\n  },\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): { data?: Record<string, any>; error?: Error } {\n  const { watchQueryDocument } = documents;\n  invariant(\n    watchQueryDocument,\n    \"useLazyLoadQuery(): Expected a `watchQueryDocument` to have been \" +\n      \"extracted. Did you forget to invoke the compiler?\",\n  );\n  const { executionQueryDocument } = documents;\n  invariant(\n    executionQueryDocument,\n    \"useLazyLoadQuery(): Expected a `executionQueryDocument` to have been \" +\n      \"extracted. Did you forget to invoke the compiler?\",\n  );\n  const client = useOverridenOrDefaultApolloClient();\n  const variables = useDeepCompareMemoize(options.variables);\n  // First fetch all data needed for the entire tree...\n  const [pending, error] = useExecutionQuery(\n    client,\n    executionQueryDocument,\n    variables,\n    options.fetchPolicy,\n  );\n  // ...then fetch/watch data for only the calling component...\n  const { data } = useApolloQuery(watchQueryDocument, {\n    client,\n    variables,\n    fetchPolicy: \"cache-only\",\n    // ...but only once finished loading.\n    skip: pending || !!error,\n  });\n  return { data, error };\n}\n"],
  "mappings": ";AAAA,SAAS,QAAQ,iBAAiB;AAClC,SAAS,YAAY,sBAAsB;AAC3C,OAAO,eAAe;AACtB,SAAS,6BAA6B;AACtC,SAAS,sBAAsB;AAC/B,SAAS,yCAAyC;AAUlD,IAAM,wBAAN,MAA4B;AAAA,EAI1B,YAAoB,eAA2B;AAA3B;AAClB,SAAK,SAAS,CAAC,MAAM,MAAS;AAAA,EAChC;AAAA,EAEO,SAAS;AACd,WAAO,KAAK,OAAO,CAAC,KAAK,KAAK,sBAAsB;AAAA,EACtD;AAAA,EAEO,UAAU;AA3BnB;AA4BI,eAAK,sBAAL,mBAAwB;AACxB,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EAEO,QAAQ;AACb,SAAK,QAAQ;AACb,SAAK,SAAS,CAAC,MAAM,MAAS;AAAA,EAChC;AAAA,EAEQ,aAAa,OAA0B,SAAmB;AAChE,SAAK,SAAS,CAAC,OAAO,KAAK;AAO3B,QAAI,CAAC,SAAS;AACZ,WAAK,QAAQ;AAAA,IACf;AACA,SAAK,cAAc;AAAA,EACrB;AAAA,EAEO,UAAU,YAA6B;AAC5C,SAAK,oBAAoB,WAAW;AAAA,MAClC,CAAC,EAAE,OAAO,KAAK,QAAQ,MAAM;AAC3B,aAAK,aAAa,KAAK,OAAO;AAAA,MAChC;AAAA,MACA,CAAC,QAAQ;AACP,aAAK,aAAa,GAAG;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,kBACP,QACA,wBACA,WACA,aACmC;AACnC,QAAM,cAAc,eAAe;AACnC,QAAM,YAAY,OAAO,IAAI,sBAAsB,MAAM,YAAY,CAAC,CAAC;AACvE,YAAU,MAAM;AACd,QAAI,UAAU,QAAQ,OAAO,GAAG;AAC9B,gBAAU,QAAQ;AAAA,QAChB,OAAO,WAAW;AAAA,UAChB,OAAO;AAAA,UACP;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO,MAAM;AACX,gBAAU,QAAQ,MAAM;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,wBAAwB,WAAW,WAAW,CAAC;AACnD,SAAO,UAAU,QAAQ;AAC3B;AAUO,SAAS,yBACd,WACA,SAK+C;AAC/C,QAAM,EAAE,mBAAmB,IAAI;AAC/B;AAAA,IACE;AAAA,IACA;AAAA,EAEF;AACA,QAAM,EAAE,uBAAuB,IAAI;AACnC;AAAA,IACE;AAAA,IACA;AAAA,EAEF;AACA,QAAM,SAAS,kCAAkC;AACjD,QAAM,YAAY,sBAAsB,QAAQ,SAAS;AAEzD,QAAM,CAAC,SAAS,KAAK,IAAI;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV;AAEA,QAAM,EAAE,KAAK,IAAI,eAAe,oBAAoB;AAAA,IAClD;AAAA,IACA;AAAA,IACA,aAAa;AAAA;AAAA,IAEb,MAAM,WAAW,CAAC,CAAC;AAAA,EACrB,CAAC;AACD,SAAO,EAAE,MAAM,MAAM;AACvB;",
  "names": []
}
