From 00fee0b11da431c9dfa46d954ed910715ff082fa Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 11 Sep 2021 13:03:05 +0200 Subject: [PATCH] version-bridge: remove getGlobalSingleton Signed-off-by: Patrik Oldsberg --- .../src/apis/system/ApiProvider.test.tsx | 13 ++++------ .../core-app-api/src/app/AppContext.test.tsx | 12 +++------ .../src/routing/RoutingProvider.test.tsx | 18 ++++--------- packages/version-bridge/api-report.md | 3 --- .../src/lib/globalObject.test.ts | 25 +------------------ .../version-bridge/src/lib/globalObject.ts | 14 ----------- packages/version-bridge/src/lib/index.ts | 2 +- 7 files changed, 16 insertions(+), 71 deletions(-) diff --git a/packages/core-app-api/src/apis/system/ApiProvider.test.tsx b/packages/core-app-api/src/apis/system/ApiProvider.test.tsx index f3a0a67263..d1793f890e 100644 --- a/packages/core-app-api/src/apis/system/ApiProvider.test.tsx +++ b/packages/core-app-api/src/apis/system/ApiProvider.test.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import React, { Context, useContext } from 'react'; +import React from 'react'; import { useApi, createApiRef, @@ -26,7 +26,7 @@ import { ApiProvider } from './ApiProvider'; import { ApiRegistry } from './ApiRegistry'; import { render } from '@testing-library/react'; import { withLogCollector } from '@backstage/test-utils-core'; -import { getGlobalSingleton, VersionedValue } from '@backstage/version-bridge'; +import { useVersionedContext } from '@backstage/version-bridge'; describe('ApiProvider', () => { type Api = () => string; @@ -184,13 +184,10 @@ describe('ApiProvider', () => { }); describe('v1 consumer', () => { - const ApiContext = - getGlobalSingleton>>( - 'api-context', - ); - function useMockApiV1(apiRef: ApiRef): T { - const impl = useContext(ApiContext)?.atVersion(1)?.get(apiRef); + const impl = useVersionedContext<{ 1: ApiHolder }>('api-context') + ?.atVersion(1) + ?.get(apiRef); if (!impl) { throw new Error('no impl'); } diff --git a/packages/core-app-api/src/app/AppContext.test.tsx b/packages/core-app-api/src/app/AppContext.test.tsx index 3397eb4620..a1131969f2 100644 --- a/packages/core-app-api/src/app/AppContext.test.tsx +++ b/packages/core-app-api/src/app/AppContext.test.tsx @@ -14,20 +14,16 @@ * limitations under the License. */ -import React, { useContext, Context } from 'react'; +import React from 'react'; import { renderHook } from '@testing-library/react-hooks'; -import { getGlobalSingleton, VersionedValue } from '@backstage/version-bridge'; +import { useVersionedContext } from '@backstage/version-bridge'; import { AppContext as AppContextV1 } from './types'; import { AppContextProvider } from './AppContext'; describe('v1 consumer', () => { - const AppContext = - getGlobalSingleton>>( - 'app-context', - ); - function useMockAppV1(): AppContextV1 { - const impl = useContext(AppContext)?.atVersion(1); + const impl = + useVersionedContext<{ 1: AppContextV1 }>('app-context')?.atVersion(1); if (!impl) { throw new Error('no impl'); } diff --git a/packages/core-app-api/src/routing/RoutingProvider.test.tsx b/packages/core-app-api/src/routing/RoutingProvider.test.tsx index bf6d06aaf7..397217e34a 100644 --- a/packages/core-app-api/src/routing/RoutingProvider.test.tsx +++ b/packages/core-app-api/src/routing/RoutingProvider.test.tsx @@ -14,16 +14,11 @@ * limitations under the License. */ -import React, { - PropsWithChildren, - ReactElement, - useContext, - Context, -} from 'react'; +import React, { PropsWithChildren, ReactElement } from 'react'; import { MemoryRouter, Routes } from 'react-router-dom'; import { render } from '@testing-library/react'; import { renderHook } from '@testing-library/react-hooks'; -import { VersionedValue, getGlobalSingleton } from '@backstage/version-bridge'; +import { useVersionedContext } from '@backstage/version-bridge'; import { childDiscoverer, routeElementDiscoverer, @@ -330,16 +325,13 @@ describe('discovery', () => { }); describe('v1 consumer', () => { - const RoutingContext = - getGlobalSingleton>>( - 'routing-context', - ); - function useMockRouteRefV1( routeRef: AnyRouteRef, location: string, ): RouteFunc | undefined { - const resolver = useContext(RoutingContext)?.atVersion(1); + const resolver = useVersionedContext<{ + 1: RouteResolver; + }>('routing-context')?.atVersion(1); if (!resolver) { throw new Error('no impl'); } diff --git a/packages/version-bridge/api-report.md b/packages/version-bridge/api-report.md index 367c2da102..1d14412f10 100644 --- a/packages/version-bridge/api-report.md +++ b/packages/version-bridge/api-report.md @@ -25,9 +25,6 @@ export function createVersionedValueMap< }, >(versions: Versions): VersionedValue; -// @public -export function getGlobalSingleton(id: string): T; - // @public export function getOrCreateGlobalSingleton(id: string, supplier: () => T): T; diff --git a/packages/version-bridge/src/lib/globalObject.test.ts b/packages/version-bridge/src/lib/globalObject.test.ts index 13634f1f08..9c12ae1dfa 100644 --- a/packages/version-bridge/src/lib/globalObject.test.ts +++ b/packages/version-bridge/src/lib/globalObject.test.ts @@ -14,33 +14,10 @@ * limitations under the License. */ -import { getGlobalSingleton, getOrCreateGlobalSingleton } from './globalObject'; +import { getOrCreateGlobalSingleton } from './globalObject'; const anyGlobal = global as any; -describe('getGlobalSingleton', () => { - beforeEach(() => { - delete anyGlobal['__@backstage/my-thing__']; - }); - - it('should return an existing value', () => { - const myThing = {}; - const myOtherThing = {}; - - anyGlobal['__@backstage/my-thing__'] = myThing; - expect(getGlobalSingleton('my-thing')).toBe(myThing); - expect(getGlobalSingleton('my-thing')).toBe(myThing); - anyGlobal['__@backstage/my-thing__'] = myOtherThing; - expect(getGlobalSingleton('my-thing')).toBe(myOtherThing); - }); - - it('should throw if the value is not set', () => { - expect(() => getGlobalSingleton('my-thing')).toThrow( - 'Global my-thing is not set', - ); - }); -}); - describe('getOrCreateGlobalSingleton', () => { beforeEach(() => { delete anyGlobal['__@backstage/my-thing__']; diff --git a/packages/version-bridge/src/lib/globalObject.ts b/packages/version-bridge/src/lib/globalObject.ts index 765bc62822..b29e81e4a0 100644 --- a/packages/version-bridge/src/lib/globalObject.ts +++ b/packages/version-bridge/src/lib/globalObject.ts @@ -30,20 +30,6 @@ const globalObject = getGlobalObject(); const makeKey = (id: string) => `__@backstage/${id}__`; -/** - * Used to access a global singleton value, failing if it is not already set. - * - * @public - */ -export function getGlobalSingleton(id: string): T { - const key = makeKey(id); - if (!(key in globalObject)) { - throw new Error(`Global ${id} is not set`); - } - - return globalObject[key]; -} - /** * Serializes access to a global singleton value, with the first caller creating the value. * diff --git a/packages/version-bridge/src/lib/index.ts b/packages/version-bridge/src/lib/index.ts index 7e3e1cc0ae..191abe7444 100644 --- a/packages/version-bridge/src/lib/index.ts +++ b/packages/version-bridge/src/lib/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -export { getGlobalSingleton, getOrCreateGlobalSingleton } from './globalObject'; +export { getOrCreateGlobalSingleton } from './globalObject'; export { createVersionedContextForTesting, useVersionedContext,