import { DynamoDBSpyEvent } from "../common/spyEvents/DynamoDBSpyEvent.js";
import { EventBridgeRuleSpyEvent } from "../common/spyEvents/EventBridgeRuleSpyEvent.js";
import { EventBridgeSpyEvent } from "../common/spyEvents/EventBridgeSpyEvent.js";
import { FunctionConsoleSpyEvent } from "../common/spyEvents/FunctionConsoleSpyEvent.js";
import { FunctionErrorSpyEvent } from "../common/spyEvents/FunctionErrorSpyEvent.js";
import { FunctionRequestSpyEvent } from "../common/spyEvents/FunctionRequestSpyEvent.js";
import { FunctionResponseSpyEvent } from "../common/spyEvents/FunctionResponseSpyEvent.js";
import { S3SpyEvent } from "../common/spyEvents/S3SpyEvent.js";
import { SnsSubscriptionSpyEvent } from "../common/spyEvents/SnsSubscriptionSpyEvent.js";
import { SnsTopicSpyEvent } from "../common/spyEvents/SnsTopicSpyEvent.js";
import { SqsSpyEvent } from "../common/spyEvents/SqsSpyEvent.js";
import { PrettifyForDisplay } from "./PrettifyForDisplay.js";
import { DynamoDBSpyHandler, EventBridgeRuleSpyHandler, EventBridgeSpyHandler, FunctionConsoleSpyHandler, FunctionErrorSpyHandler, FunctionRequestSpyHandler, FunctionResponseSpyHandler, S3SpyHandler, SnsSubscriptionSpyHandler, SnsTopicSpyHandler, SqsSpyHandler } from "./SpyHandlers.ts.js";
import { WaitForParams } from "./WaitForParams.js";

//#region listener/ServerlessSpyListener.d.ts
type ServerlessSpyListener<TSpyEvents> = { [P in keyof FilterConditionally<TSpyEvents, `DynamoDB#${any}`> & string as `waitFor${P}`]: <T = any>(param?: PrettifyForDisplay<WaitForParams<PrettifyForDisplay<DynamoDBSpyEvent>>>) => Promise<DynamoDBSpyHandler<T>> } & { [P in keyof FilterConditionally<TSpyEvents, `EventBridge#${any}`> & string as `waitFor${P}`]: <T = any>(param?: PrettifyForDisplay<WaitForParams<PrettifyForDisplay<EventBridgeSpyEvent<T>>>>) => Promise<EventBridgeSpyHandler<T>> } & { [P in keyof FilterConditionally<TSpyEvents, `EventBridgeRule#${any}`> & string as `waitFor${P}`]: <T = any>(param?: PrettifyForDisplay<WaitForParams<PrettifyForDisplay<EventBridgeRuleSpyEvent<T>>>>) => Promise<EventBridgeRuleSpyHandler<T>> } & { [P in keyof FilterConditionally<TSpyEvents, `S3#${any}`> & string as `waitFor${P}`]: (param?: PrettifyForDisplay<WaitForParams<PrettifyForDisplay<S3SpyEvent>>>) => Promise<S3SpyHandler> } & { [P in keyof FilterConditionally<TSpyEvents, `SnsSubscription#${any}`> & string as `waitFor${P}`]: <T = any>(param?: PrettifyForDisplay<WaitForParams<PrettifyForDisplay<SnsSubscriptionSpyEvent<T>>>>) => Promise<SnsSubscriptionSpyHandler<T>> } & { [P in keyof FilterConditionally<TSpyEvents, `SnsTopic#${any}`> & string as `waitFor${P}`]: <T = any>(param?: PrettifyForDisplay<WaitForParams<PrettifyForDisplay<SnsTopicSpyEvent<T>>>>) => Promise<SnsTopicSpyHandler<T>> } & { [P in keyof FilterConditionally<TSpyEvents, `Sqs#${any}`> & string as `waitFor${P}`]: <T = any>(param?: PrettifyForDisplay<WaitForParams<PrettifyForDisplay<SqsSpyEvent<T>>>>) => Promise<SqsSpyHandler<T>> } & { [P in keyof FilterConditionally<TSpyEvents, `Function#${any}#Request`> & string as `waitFor${P}`]: <T = any>(param?: PrettifyForDisplay<WaitForParams<PrettifyForDisplay<FunctionRequestSpyEvent<T>>>>) => Promise<FunctionRequestSpyHandler<T>> } & { [P in keyof FilterConditionally<TSpyEvents, `Function#${any}#Console`> & string as `waitFor${P}`]: <T = any>(param?: PrettifyForDisplay<WaitForParams<PrettifyForDisplay<FunctionConsoleSpyEvent<T>>>>) => Promise<FunctionConsoleSpyHandler<T>> } & { [P in keyof FilterConditionally<TSpyEvents, `Function#${any}#Error`> & string as `waitFor${P}`]: <T = any>(param?: PrettifyForDisplay<WaitForParams<PrettifyForDisplay<FunctionErrorSpyEvent<T>>>>) => Promise<FunctionErrorSpyHandler<T>> } & { [P in keyof FilterConditionally<TSpyEvents, `Function#${any}#Response`> & string as `waitFor${P}`]: <T = any>(param?: PrettifyForDisplay<WaitForParams<PrettifyForDisplay<FunctionResponseSpyEvent<T>>>>) => Promise<FunctionResponseSpyHandler<T>> } & {
  stop: () => void;
};
type FilterConditionally<Source, Condition> = Pick<Source, { [K in keyof Source]: Source[K] extends Condition ? K : never }[keyof Source]>;
//#endregion
export { ServerlessSpyListener };
//# sourceMappingURL=ServerlessSpyListener.d.ts.map