interface PluginMock < Sp , St > { setup ( ) : Sp ; start ( ) : St ; } /**
 * The SearchSpec interface contains settings for creating a new SearchService, like
 * username and password.
 */ export interface SearchSpec { /**
     * Stores the username. Duh,
     */ username : string ; /**
     * Stores the password. I hope it's encrypted!
     */ password : string ; } /**
 * The type of search language.
 */ export enum SearchLanguage { /**
     * The SQL SearchLanguage type
     */ SQL , /**
     * The EQL SearchLanguage type. Support sequences.
     */ EQL , /**
     * The ES DSL SearchLanguage type. It's the default.
     */ ES_DSL } /**
 * Access start functionality from your plugin's start function by adding the example
 * plugin as a dependency.
 *
 * ```ts
 * Class MyPlugin {
 *   start(core: CoreDependencies, { example }: PluginDependencies) {
 *     // Here you can access this functionality.
 *     example.getSearchLanguage();
 *   }
 * }
 * ```
 */ export interface Start { returns The currently selected  SearchLanguage getSearchLanguage : ( ) => SearchLanguage ; internal anInternalStartFn : ( ) => string ; } /**
 * Access setup functionality from your plugin's setup function by adding the example
 * plugin as a dependency.
 *
 * ```ts
 * Class MyPlugin {
 *   setup(core: CoreDependencies, { example }: PluginDependencies) {
 *     // Here you can access this functionality.
 *     example.getSearchService();
 *   }
 * }
 * ```
 */ export interface Setup { param searchSpec returns beta getSearchService : ( searchSpec : SearchSpec ) => string ; /**
     * This uses an inlined object type rather than referencing an exported type, which is discouraged.
     * prefer the way  getSearchService is typed.
     *
     *  param searchSpec getSearchService2 : ( searchSpec : { username : string ; password : string ; } ) => string ; param thingOne param thingTwo param thingThree deprecated doTheThing : ( thingOne : number , thingTwo : string , thingThree : { nestedVar : number ; } ) => void ; param obj returns fnWithInlineParams : ( obj : { fn : ( foo : { param : string ; } ) => number ; } ) => ( ) => { retFoo : ( ) => string ; } ; /**
     * Hi, I'm a comment for an id string!
     */ id : string ; } /**
 * This comment won't show up in the API docs.
 */ function getSearchService ( ) { return 'hi' ; } function fnWithInlineParams ( ) { return ( ) => ( { retFoo : ( ) => 'hi' } ) ; } /**
 * The example search plugin is a fake plugin that is built only to test our api documentation system.
 *
 */ export class PluginA implements PluginMock < Setup , Start > { setup ( ) { return { doTheThing : ( ) => { } , fnWithInlineParams , getSearchService , getSearchService2 : getSearchService , registerSearch : ( ) => { } , id : '123' } ; } start ( ) { return { getSearchLanguage : ( ) => SearchLanguage . EQL , anInternalStartFn : ( ) => 'ho' } ; } }