diff --git a/packages/app-api/src/routing/RouteResolver.ts b/packages/app-api/src/routing/RouteResolver.ts index a5d266b2e4..f33c3886e3 100644 --- a/packages/app-api/src/routing/RouteResolver.ts +++ b/packages/app-api/src/routing/RouteResolver.ts @@ -21,15 +21,11 @@ import { AnyParams, RouteFunc, routeRefType, -} from './types'; -import { - RouteRef, - ExternalRouteRef, - SubRouteRef, isRouteRef, isSubRouteRef, isExternalRouteRef, -} from '@backstage/plugin-api'; +} from './types'; +import { RouteRef, ExternalRouteRef, SubRouteRef } from '@backstage/plugin-api'; // Joins a list of paths together, avoiding trailing and duplicate slashes function joinPaths(...paths: string[]): string { diff --git a/packages/app-api/src/routing/types.ts b/packages/app-api/src/routing/types.ts index d379f43324..9a2d2cd9d7 100644 --- a/packages/app-api/src/routing/types.ts +++ b/packages/app-api/src/routing/types.ts @@ -17,7 +17,8 @@ import { RouteRef, SubRouteRef, ExternalRouteRef } from '@backstage/plugin-api'; import { getOrCreateGlobalSingleton } from '../lib/globalObject'; -export const routeRefType: unique symbol = getOrCreateGlobalSingleton( +type RouteRefType = Exclude; +export const routeRefType: RouteRefType = getOrCreateGlobalSingleton( 'route-ref-type', () => Symbol('route-ref-type'), ); @@ -46,3 +47,33 @@ export interface BackstageRouteObject { path: string; routeRefs: Set; } + +export function isRouteRef( + routeRef: + | RouteRef + | SubRouteRef + | ExternalRouteRef, +): routeRef is RouteRef { + return routeRef[routeRefType] === 'absolute'; +} + +export function isSubRouteRef( + routeRef: + | RouteRef + | SubRouteRef + | ExternalRouteRef, +): routeRef is SubRouteRef { + return routeRef[routeRefType] === 'sub'; +} + +export function isExternalRouteRef< + Params extends AnyParams, + Optional extends boolean +>( + routeRef: + | RouteRef + | SubRouteRef + | ExternalRouteRef, +): routeRef is ExternalRouteRef { + return routeRef[routeRefType] === 'external'; +} diff --git a/packages/plugin-api/src/routing/ExternalRouteRef.test.ts b/packages/plugin-api/src/routing/ExternalRouteRef.test.ts index ffe2fdf241..68dbc531c4 100644 --- a/packages/plugin-api/src/routing/ExternalRouteRef.test.ts +++ b/packages/plugin-api/src/routing/ExternalRouteRef.test.ts @@ -15,9 +15,7 @@ */ import { AnyParams, ExternalRouteRef } from './types'; -import { createExternalRouteRef, isExternalRouteRef } from './ExternalRouteRef'; -import { isSubRouteRef } from './SubRouteRef'; -import { isRouteRef } from './RouteRef'; +import { createExternalRouteRef } from './ExternalRouteRef'; describe('ExternalRouteRef', () => { it('should be created', () => { @@ -27,11 +25,6 @@ describe('ExternalRouteRef', () => { expect(routeRef.params).toEqual([]); expect(routeRef.optional).toBe(false); expect(String(routeRef)).toBe('routeRef{type=external,id=my-route-ref}'); - expect(isRouteRef(routeRef)).toBe(false); - expect(isSubRouteRef(routeRef)).toBe(false); - expect(isExternalRouteRef(routeRef)).toBe(true); - - expect(isRouteRef({} as ExternalRouteRef)).toBe(false); }); it('should be created as optional', () => { diff --git a/packages/plugin-api/src/routing/ExternalRouteRef.ts b/packages/plugin-api/src/routing/ExternalRouteRef.ts index e6af9cf8a7..c2b1fd2a03 100644 --- a/packages/plugin-api/src/routing/ExternalRouteRef.ts +++ b/packages/plugin-api/src/routing/ExternalRouteRef.ts @@ -15,8 +15,6 @@ */ import { - RouteRef, - SubRouteRef, ExternalRouteRef, routeRefType, AnyParams, @@ -70,15 +68,3 @@ export function createExternalRouteRef< Boolean(options.optional) as Optional, ); } - -export function isExternalRouteRef< - Params extends AnyParams, - Optional extends boolean ->( - routeRef: - | RouteRef - | SubRouteRef - | ExternalRouteRef, -): routeRef is ExternalRouteRef { - return routeRef[routeRefType] === 'external'; -} diff --git a/packages/plugin-api/src/routing/RouteRef.test.ts b/packages/plugin-api/src/routing/RouteRef.test.ts index 4683e157b5..db42f71730 100644 --- a/packages/plugin-api/src/routing/RouteRef.test.ts +++ b/packages/plugin-api/src/routing/RouteRef.test.ts @@ -15,9 +15,7 @@ */ import { AnyParams, RouteRef } from './types'; -import { createRouteRef, isRouteRef } from './RouteRef'; -import { isSubRouteRef } from './SubRouteRef'; -import { isExternalRouteRef } from './ExternalRouteRef'; +import { createRouteRef } from './RouteRef'; describe('RouteRef', () => { it('should be created', () => { @@ -26,11 +24,6 @@ describe('RouteRef', () => { }); expect(routeRef.params).toEqual([]); expect(String(routeRef)).toBe('routeRef{type=absolute,id=my-route-ref}'); - expect(isRouteRef(routeRef)).toBe(true); - expect(isSubRouteRef(routeRef)).toBe(false); - expect(isExternalRouteRef(routeRef)).toBe(false); - - expect(isRouteRef({} as RouteRef)).toBe(false); }); it('should be created with params', () => { diff --git a/packages/plugin-api/src/routing/RouteRef.ts b/packages/plugin-api/src/routing/RouteRef.ts index 5c641e971a..2cd18794b6 100644 --- a/packages/plugin-api/src/routing/RouteRef.ts +++ b/packages/plugin-api/src/routing/RouteRef.ts @@ -16,8 +16,6 @@ import { RouteRef, - SubRouteRef, - ExternalRouteRef, routeRefType, AnyParams, ParamKeys, @@ -60,12 +58,3 @@ export function createRouteRef< (config.params ?? []) as ParamKeys>, ); } - -export function isRouteRef( - routeRef: - | RouteRef - | SubRouteRef - | ExternalRouteRef, -): routeRef is RouteRef { - return routeRef[routeRefType] === 'absolute'; -} diff --git a/packages/plugin-api/src/routing/SubRouteRef.test.ts b/packages/plugin-api/src/routing/SubRouteRef.test.ts index 6d62810907..2c2eb2ac7e 100644 --- a/packages/plugin-api/src/routing/SubRouteRef.test.ts +++ b/packages/plugin-api/src/routing/SubRouteRef.test.ts @@ -15,9 +15,8 @@ */ import { AnyParams, SubRouteRef } from './types'; -import { createSubRouteRef, isSubRouteRef } from './SubRouteRef'; -import { createRouteRef, isRouteRef } from './RouteRef'; -import { isExternalRouteRef } from './ExternalRouteRef'; +import { createSubRouteRef } from './SubRouteRef'; +import { createRouteRef } from './RouteRef'; const parent = createRouteRef({ id: 'parent' }); const parentX = createRouteRef({ id: 'parent-x', params: ['x'] }); @@ -33,11 +32,6 @@ describe('SubRouteRef', () => { expect(routeRef.parent).toBe(parent); expect(routeRef.params).toEqual([]); expect(String(routeRef)).toBe('routeRef{type=sub,id=my-route-ref}'); - expect(isRouteRef(routeRef)).toBe(false); - expect(isSubRouteRef(routeRef)).toBe(true); - expect(isExternalRouteRef(routeRef)).toBe(false); - - expect(isRouteRef({} as SubRouteRef)).toBe(false); }); it('should be created with params', () => { diff --git a/packages/plugin-api/src/routing/SubRouteRef.ts b/packages/plugin-api/src/routing/SubRouteRef.ts index 7ddfc89c80..ca5d060164 100644 --- a/packages/plugin-api/src/routing/SubRouteRef.ts +++ b/packages/plugin-api/src/routing/SubRouteRef.ts @@ -16,7 +16,6 @@ import { AnyParams, - ExternalRouteRef, OptionalParams, ParamKeys, RouteRef, @@ -117,12 +116,3 @@ export function createSubRouteRef< // type checking of the parent parameter overlap is tricky to express. return subRouteRef as any; } - -export function isSubRouteRef( - routeRef: - | RouteRef - | SubRouteRef - | ExternalRouteRef, -): routeRef is SubRouteRef { - return routeRef[routeRefType] === 'sub'; -} diff --git a/packages/plugin-api/src/routing/index.ts b/packages/plugin-api/src/routing/index.ts index cb4c0c26f2..3ac657ee8e 100644 --- a/packages/plugin-api/src/routing/index.ts +++ b/packages/plugin-api/src/routing/index.ts @@ -15,7 +15,7 @@ */ export type { RouteRef, SubRouteRef, ExternalRouteRef } from './types'; -export { createRouteRef, isRouteRef } from './RouteRef'; -export { createSubRouteRef, isSubRouteRef } from './SubRouteRef'; -export { createExternalRouteRef, isExternalRouteRef } from './ExternalRouteRef'; +export { createRouteRef } from './RouteRef'; +export { createSubRouteRef } from './SubRouteRef'; +export { createExternalRouteRef } from './ExternalRouteRef'; export { useRouteRef } from './useRouteRef';