import { BackendFeature } from '../types';
import { BackendModuleRegistrationPoints, BackendPluginRegistrationPoints, ExtensionPoint } from './types';
/**
 * The configuration options passed to {@link createExtensionPoint}.
 *
 * @public
 * @see {@link https://backstage.io/docs/backend-system/architecture/extension-points | The architecture of extension points}
 * @see {@link https://backstage.io/docs/backend-system/architecture/naming-patterns | Recommended naming patterns}
 */
export interface ExtensionPointConfig {
    /**
     * The ID of this extension point.
     *
     * @see {@link https://backstage.io/docs/backend-system/architecture/naming-patterns | Recommended naming patterns}
     */
    id: string;
}
/**
 * Creates a new backend extension point.
 *
 * @public
 * @see {@link https://backstage.io/docs/backend-system/architecture/extension-points | The architecture of extension points}
 */
export declare function createExtensionPoint<T>(config: ExtensionPointConfig): ExtensionPoint<T>;
/**
 * The configuration options passed to {@link createBackendPlugin}.
 *
 * @public
 * @see {@link https://backstage.io/docs/backend-system/architecture/plugins | The architecture of plugins}
 * @see {@link https://backstage.io/docs/backend-system/architecture/naming-patterns | Recommended naming patterns}
 */
export interface BackendPluginConfig {
    /**
     * The ID of this plugin.
     *
     * @see {@link https://backstage.io/docs/backend-system/architecture/naming-patterns | Recommended naming patterns}
     */
    pluginId: string;
    register(reg: BackendPluginRegistrationPoints): void;
}
/**
 * Creates a new backend plugin.
 *
 * @public
 * @see {@link https://backstage.io/docs/backend-system/architecture/plugins | The architecture of plugins}
 * @see {@link https://backstage.io/docs/backend-system/architecture/naming-patterns | Recommended naming patterns}
 */
export declare function createBackendPlugin(config: BackendPluginConfig): () => BackendFeature;
/**
 * The configuration options passed to {@link createBackendModule}.
 *
 * @public
 * @see {@link https://backstage.io/docs/backend-system/architecture/modules | The architecture of modules}
 * @see {@link https://backstage.io/docs/backend-system/architecture/naming-patterns | Recommended naming patterns}
 */
export interface BackendModuleConfig {
    /**
     * Should exactly match the `id` of the plugin that the module extends.
     *
     * @see {@link https://backstage.io/docs/backend-system/architecture/naming-patterns | Recommended naming patterns}
     */
    pluginId: string;
    /**
     * The ID of this module, used to identify the module and ensure that it is not installed twice.
     */
    moduleId: string;
    register(reg: BackendModuleRegistrationPoints): void;
}
/**
 * Creates a new backend module for a given plugin.
 *
 * @public
 * @see {@link https://backstage.io/docs/backend-system/architecture/modules | The architecture of modules}
 * @see {@link https://backstage.io/docs/backend-system/architecture/naming-patterns | Recommended naming patterns}
 */
export declare function createBackendModule(config: BackendModuleConfig): () => BackendFeature;
