import { InjectionToken } from '@angular/core';
import { ApplicationType } from '@c8y/client';
import { GenericHookType, GenericHookOptions } from '../common';
/**
 * An extension HOOK can use either a pure value:
 * ```typescript
 *  { provide: HOOK_X, useValue: { ...hookValue }, multi: true }
 * ```
 *
 * Or an array to directly register multiple:
 * ```typescript
 *  { provide: HOOK_X, useValue: [{ ...hookValues }], multi: true }
 * ```
 *
 * Or an ExtensionFactory which allows to define a get() function. This function
 * gets called on each navigation with the current route and can return values
 * async (observable or promise).
 * ```typescript
 *  { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }
 * ```
 * @deprecated Consider using the `hookVersion` function instead.
 */
export declare const HOOK_VERSION: InjectionToken<Version[]>;
export declare const VERSION_MODULE_CONFIG: InjectionToken<VersionModuleConfig>;
/**
 * You can either provide a single `Version` as parameter:
 * ```typescript
 *  hookVersion(...)
 * ```
 *
 * Or an array to directly register multiple:
 * ```typescript
 *  hookVersion([...])
 * ```
 *
 * Or you provide an Service that implements `ExtensionFactory<Version>`
 * ```typescript
 *  export class MyVersionFactory implements ExtensionFactory<Version> {...}
 *  ...
 *  hookVersion(MyVersionFactory)
 * ```
 * A typed alternative to `HOOK_VERSION`.
 * @param versions The `Version`'s or `ExtensionFactory` to be provided.
 * @returns An `Provider` to be provided in your module.
 */
export declare function hookVersion(versions: GenericHookType<Version>, options?: Partial<GenericHookOptions>): import("@angular/core").ValueProvider | import("@angular/core").ClassProvider | import("@angular/core").ExistingProvider;
export interface Version extends CleanedVersion {
    /** Influences the order of the version within the list of versions */
    priority?: number;
    /** Will hide the version in the whole UI (only included in download platform information) */
    hidden?: boolean;
}
export interface CleanedVersion {
    /** Label of the version */
    label: string;
    /** The version */
    version: string;
    /**
     * Type of the version.
     * The JSON that can be copied to the clipboard will group the versions by type.
     * Types could e.g. be `MICROSERVICE` and `HOSTED` for apps
     */
    type: ApplicationType | string;
    /**
     * Allows to provide any custom properties.
     * These will be part of the JSON structure that will be copied to clipboard.
     */
    custom?: {
        [key: string]: any;
    };
}
export interface VersionModuleConfig {
    /** Will disable the `WebSDKVersionFactory` in case it is set to true */
    disableWebSDKVersionFactory?: boolean;
    /** Will disable the `WebSDKPluginVersionFactory` in case it is set to true */
    disableWebSDKPluginVersionFactory?: boolean;
    /** Will disable the `BackendVersionFactory` in case it is set to true */
    disableBackendVersionFactory?: boolean;
}
//# sourceMappingURL=version.model.d.ts.map