From 8104bd6b4a5c93ad5463ed2dc1f3a595f9197ba5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus-Peter=20H=C3=BCbner?= Date: Mon, 27 Feb 2023 20:02:41 +0100 Subject: [PATCH] multi singleton instance handling depending on endpoint --- .../src/federation/client/GraphQLGetClient.ts | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/backend/src/federation/client/GraphQLGetClient.ts b/backend/src/federation/client/GraphQLGetClient.ts index 7e2d89b6c..8086a95fa 100644 --- a/backend/src/federation/client/GraphQLGetClient.ts +++ b/backend/src/federation/client/GraphQLGetClient.ts @@ -1,8 +1,14 @@ import { GraphQLClient } from 'graphql-request' import { PatchedRequestInit } from 'graphql-request/dist/types' +type ClientInstance = { + url: string + // eslint-disable-next-line no-use-before-define + client: GraphQLGetClient +} + export class GraphQLGetClient extends GraphQLClient { - private static instance: GraphQLGetClient + private static instanceArray: ClientInstance[] = [] /** * The Singleton's constructor should always be private to prevent direct @@ -20,16 +26,19 @@ export class GraphQLGetClient extends GraphQLClient { * just one instance of each subclass around. */ public static getInstance(url: string): GraphQLGetClient { - if (!GraphQLGetClient.instance) { - GraphQLGetClient.instance = new GraphQLGetClient(url, { - method: 'GET', - jsonSerializer: { - parse: JSON.parse, - stringify: JSON.stringify, - }, - }) - } - - return GraphQLGetClient.instance + GraphQLGetClient.instanceArray.forEach(function (instance) { + if (instance.url === url) { + return instance.client + } + }) + const client = new GraphQLGetClient(url, { + method: 'GET', + jsonSerializer: { + parse: JSON.parse, + stringify: JSON.stringify, + }, + }) + GraphQLGetClient.instanceArray.push({ url, client } as ClientInstance) + return client } }