diff --git a/packages/core/src/api/apis/ApiProvider.test.tsx b/packages/core/src/api/apis/ApiProvider.test.tsx index f572907c2f..e79e83a1ed 100644 --- a/packages/core/src/api/apis/ApiProvider.test.tsx +++ b/packages/core/src/api/apis/ApiProvider.test.tsx @@ -15,9 +15,9 @@ */ import React from 'react'; -import ApiProvider, { useApi, withApis } from './ApiProvider'; -import ApiRef from './ApiRef'; -import ApiRegistry from './ApiRegistry'; +import { ApiProvider, useApi, withApis } from './ApiProvider'; +import { ApiRef } from './ApiRef'; +import { ApiRegistry } from './ApiRegistry'; import { render } from '@testing-library/react'; import { withLogCollector } from '@backstage/test-utils-core'; diff --git a/packages/core/src/api/apis/ApiProvider.tsx b/packages/core/src/api/apis/ApiProvider.tsx index db87cc1610..46f89cfa0d 100644 --- a/packages/core/src/api/apis/ApiProvider.tsx +++ b/packages/core/src/api/apis/ApiProvider.tsx @@ -16,7 +16,7 @@ import React, { FC, createContext, useContext, ReactNode } from 'react'; import PropTypes from 'prop-types'; -import ApiRef from './ApiRef'; +import { ApiRef } from './ApiRef'; import { ApiHolder, TypesToApiRefs } from './types'; type Props = { @@ -26,7 +26,7 @@ type Props = { const Context = createContext(undefined); -const ApiProvider: FC = ({ apis, children }) => { +export const ApiProvider: FC = ({ apis, children }) => { return ; }; @@ -53,7 +53,7 @@ export function withApis(apis: TypesToApiRefs) { return function withApisWrapper

( WrappedComponent: React.ComponentType

, ) { - const Hoc: FC> = props => { + const Hoc: FC> = (props) => { const apiHolder = useContext(Context); if (!apiHolder) { @@ -84,5 +84,3 @@ export function withApis(apis: TypesToApiRefs) { return Hoc; }; } - -export default ApiProvider; diff --git a/packages/core/src/api/apis/ApiRef.test.ts b/packages/core/src/api/apis/ApiRef.test.ts index b592e327b0..93ca639b46 100644 --- a/packages/core/src/api/apis/ApiRef.test.ts +++ b/packages/core/src/api/apis/ApiRef.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import ApiRef from './ApiRef'; +import { ApiRef } from './ApiRef'; describe('ApiRef', () => { it('should be created', () => { diff --git a/packages/core/src/api/apis/ApiRef.ts b/packages/core/src/api/apis/ApiRef.ts index b3f4d48428..c346f89685 100644 --- a/packages/core/src/api/apis/ApiRef.ts +++ b/packages/core/src/api/apis/ApiRef.ts @@ -19,7 +19,7 @@ export type ApiRefConfig = { description: string; }; -export default class ApiRef { +export class ApiRef { constructor(private readonly config: ApiRefConfig) { if (!config.id.match(/^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)*$/)) { throw new Error( @@ -45,3 +45,7 @@ export default class ApiRef { return `apiRef{${this.config.id}}`; } } + +export function createApiRef(config: ApiRefConfig) { + return new ApiRef(config); +} diff --git a/packages/core/src/api/apis/ApiRegistry.test.ts b/packages/core/src/api/apis/ApiRegistry.test.ts index 6eb78892b2..a4043bbe1e 100644 --- a/packages/core/src/api/apis/ApiRegistry.test.ts +++ b/packages/core/src/api/apis/ApiRegistry.test.ts @@ -14,8 +14,8 @@ * limitations under the License. */ -import ApiRegistry from './ApiRegistry'; -import ApiRef from './ApiRef'; +import { ApiRegistry } from './ApiRegistry'; +import { ApiRef } from './ApiRef'; describe('ApiRegistry', () => { const x1Ref = new ApiRef({ id: 'x', description: '' }); diff --git a/packages/core/src/api/apis/ApiRegistry.ts b/packages/core/src/api/apis/ApiRegistry.ts index 4149365806..0a9d14a4e7 100644 --- a/packages/core/src/api/apis/ApiRegistry.ts +++ b/packages/core/src/api/apis/ApiRegistry.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import ApiRef from './ApiRef'; +import { ApiRef } from './ApiRef'; import { ApiHolder } from './types'; type ApiImpl = readonly [ApiRef, T]; @@ -33,7 +33,7 @@ class ApiRegistryBuilder { } } -export default class ApiRegistry implements ApiHolder { +export class ApiRegistry implements ApiHolder { static builder() { return new ApiRegistryBuilder(); } diff --git a/packages/core/src/api/apis/ApiTestRegistry.test.ts b/packages/core/src/api/apis/ApiTestRegistry.test.ts index 6974daa3a7..6ae7a83d7e 100644 --- a/packages/core/src/api/apis/ApiTestRegistry.test.ts +++ b/packages/core/src/api/apis/ApiTestRegistry.test.ts @@ -14,8 +14,8 @@ * limitations under the License. */ -import ApiTestRegistry from './ApiTestRegistry'; -import ApiRef from './ApiRef'; +import { ApiTestRegistry } from './ApiTestRegistry'; +import { ApiRef } from './ApiRef'; describe('ApiTestRegistry', () => { const aRef = new ApiRef({ id: 'a', description: '' }); diff --git a/packages/core/src/api/apis/ApiTestRegistry.ts b/packages/core/src/api/apis/ApiTestRegistry.ts index 2af2058fbc..eacc4962ce 100644 --- a/packages/core/src/api/apis/ApiTestRegistry.ts +++ b/packages/core/src/api/apis/ApiTestRegistry.ts @@ -14,10 +14,10 @@ * limitations under the License. */ -import ApiRef from './ApiRef'; +import { ApiRef } from './ApiRef'; import { TypesToApiRefs, AnyApiRef, ApiHolder, ApiFactory } from './types'; -export default class ApiTestRegistry implements ApiHolder { +export class ApiTestRegistry implements ApiHolder { private readonly apis = new Map(); private factories = new Map< AnyApiRef, diff --git a/packages/core/src/api/apis/definitions/alert.ts b/packages/core/src/api/apis/definitions/alert.ts index 133255c719..e5d7001b56 100644 --- a/packages/core/src/api/apis/definitions/alert.ts +++ b/packages/core/src/api/apis/definitions/alert.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import ApiRef from '../ApiRef'; +import { ApiRef } from '../ApiRef'; export type AlertMessage = { message: string; diff --git a/packages/core/src/api/apis/definitions/error.ts b/packages/core/src/api/apis/definitions/error.ts index f2a8509558..7d9816426e 100644 --- a/packages/core/src/api/apis/definitions/error.ts +++ b/packages/core/src/api/apis/definitions/error.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import ApiRef from '../ApiRef'; +import { ApiRef } from '../ApiRef'; /** * Mirrors the javascript Error class, for the purpose of diff --git a/packages/core/src/api/apis/definitions/featureFlags.ts b/packages/core/src/api/apis/definitions/featureFlags.ts index 926fe091d5..8636c1f5c1 100644 --- a/packages/core/src/api/apis/definitions/featureFlags.ts +++ b/packages/core/src/api/apis/definitions/featureFlags.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import ApiRef from '../ApiRef'; +import { ApiRef } from '../ApiRef'; import { UserFlags, FeatureFlagsRegistry, diff --git a/packages/core/src/api/apis/index.ts b/packages/core/src/api/apis/index.ts index 9ab9a25e50..332636580c 100644 --- a/packages/core/src/api/apis/index.ts +++ b/packages/core/src/api/apis/index.ts @@ -14,10 +14,10 @@ * limitations under the License. */ -export { default as ApiProvider, useApi } from './ApiProvider'; -export { default as ApiRegistry } from './ApiRegistry'; -export { default as ApiTestRegistry } from './ApiTestRegistry'; -export { default as ApiRef } from './ApiRef'; +export { ApiProvider, useApi } from './ApiProvider'; +export { ApiRegistry } from './ApiRegistry'; +export { ApiTestRegistry } from './ApiTestRegistry'; +export * from './ApiRef'; export * from './types'; export * from './helpers'; export * from './definitions'; diff --git a/packages/core/src/api/apis/types.ts b/packages/core/src/api/apis/types.ts index c44fd804a5..4ee9b39ca9 100644 --- a/packages/core/src/api/apis/types.ts +++ b/packages/core/src/api/apis/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import ApiRef from './ApiRef'; +import { ApiRef } from './ApiRef'; export type AnyApiRef = ApiRef; diff --git a/packages/core/src/api/app/AppBuilder.tsx b/packages/core/src/api/app/AppBuilder.tsx index 57c4eccf16..f9055a0bf7 100644 --- a/packages/core/src/api/app/AppBuilder.tsx +++ b/packages/core/src/api/app/AppBuilder.tsx @@ -18,7 +18,7 @@ import React, { ComponentType } from 'react'; import { Route, Switch, Redirect } from 'react-router-dom'; import { AppContextProvider } from './AppContext'; import { App } from './types'; -import BackstagePlugin from '../plugin/Plugin'; +import { BackstagePlugin } from '../plugin'; import { FeatureFlagsRegistryItem } from './FeatureFlags'; import { featureFlagsApiRef } from '../apis/definitions/featureFlags'; import ErrorPage from '../../layout/ErrorPage'; @@ -40,7 +40,7 @@ class AppImpl implements App { } } -export default class AppBuilder { +export class AppBuilder { private apis?: ApiHolder; private systemIcons = { ...defaultSystemIcons }; private readonly plugins = new Set(); @@ -145,3 +145,7 @@ export default class AppBuilder { return () => ; } } + +export function createApp() { + return new AppBuilder(); +} diff --git a/packages/core/src/api/api.ts b/packages/core/src/api/app/index.ts similarity index 58% rename from packages/core/src/api/api.ts rename to packages/core/src/api/app/index.ts index cafd0af126..156c9870b8 100644 --- a/packages/core/src/api/api.ts +++ b/packages/core/src/api/app/index.ts @@ -14,18 +14,7 @@ * limitations under the License. */ -import ApiRef, { ApiRefConfig } from './apis/ApiRef'; -import AppBuilder from './app/AppBuilder'; -import BackstagePlugin, { PluginConfig } from './plugin/Plugin'; - -export function createApp() { - return new AppBuilder(); -} - -export function createApiRef(config: ApiRefConfig) { - return new ApiRef(config); -} - -export function createPlugin(config: PluginConfig): BackstagePlugin { - return new BackstagePlugin(config); -} +export { createApp } from './AppBuilder'; +export { FeatureFlags } from './FeatureFlags'; +export { useApp } from './AppContext'; +export * from './types'; diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 8c8972c72c..0f111b26ba 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -14,8 +14,7 @@ * limitations under the License. */ -export * from './api'; export * from './apis'; +export * from './app'; export * from './navTargets'; -export { FeatureFlags } from './app/FeatureFlags'; -export { useApp } from './app/AppContext'; +export * from './plugin'; diff --git a/packages/core/src/api/plugin/Plugin.tsx b/packages/core/src/api/plugin/Plugin.tsx index d4f4aed2a6..74aeaaa523 100644 --- a/packages/core/src/api/plugin/Plugin.tsx +++ b/packages/core/src/api/plugin/Plugin.tsx @@ -20,6 +20,7 @@ import { RoutePath, RouteOptions, FeatureFlagName, + BackstagePlugin, } from './types'; import { validateBrowserCompat, validateFlagName } from '../app/FeatureFlags'; import { NavTarget } from '../navTargets'; @@ -58,10 +59,7 @@ export type FeatureFlagsHooks = { register(name: FeatureFlagName): void; }; -export const registerSymbol = Symbol('plugin-register'); -export const outputSymbol = Symbol('plugin-output'); - -export default class Plugin { +export class PluginImpl { private storedOutput?: PluginOutput[]; constructor(private readonly config: PluginConfig) {} @@ -114,3 +112,7 @@ export default class Plugin { return `plugin{${this.config.id}}`; } } + +export function createPlugin(config: PluginConfig): BackstagePlugin { + return new PluginImpl(config); +} diff --git a/packages/core/src/api/plugin/index.ts b/packages/core/src/api/plugin/index.ts new file mode 100644 index 0000000000..79b0575755 --- /dev/null +++ b/packages/core/src/api/plugin/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { createPlugin } from './Plugin'; +export * from './types'; diff --git a/packages/core/src/api/plugin/types.ts b/packages/core/src/api/plugin/types.ts index 2c471f5aca..859813356a 100644 --- a/packages/core/src/api/plugin/types.ts +++ b/packages/core/src/api/plugin/types.ts @@ -57,3 +57,8 @@ export type PluginOutput = | RouteTargetOutput | RedirectRouteOutput | FeatureFlagOutput; + +export type BackstagePlugin = { + getId(): string; + output(): PluginOutput[]; +};