import { EventProperties, EventProperty, SpecDatabase, Event, EventTypeDefinition, ResourceField, Resource, Service } from '@aws-cdk/service-spec-types'; import { jsonschema } from './types'; export interface EventBuilderOptions { readonly source: string; readonly detailType: string; readonly description: string; } interface ObjectWithProperties { properties: EventProperties; } export declare class PropertyBagBuilder { private readonly _propertyBag; protected candidateProperties: EventProperties; protected resourcesField: Array; constructor(_propertyBag: ObjectWithProperties); setProperty(name: string, prop: EventProperty): void; protected addResourceField(resourceField: ResourceField): void; /** * Commit the property and attribute changes to the underlying property bag. */ protected commitProperties(): ObjectWithProperties; private commitProperty; protected mergeProperty(prop: EventProperty, updates: EventProperty): void; /** * Remove settings that are equal to their defaults */ protected simplifyProperty(prop: EventProperty): void; } export declare class EventBuilder extends PropertyBagBuilder { readonly db: SpecDatabase; private readonly schemaName; private readonly options; private event; static allocateEvent(db: SpecDatabase, schemaName: string, options: EventBuilderOptions & { rootProperty: EventTypeDefinition; }): EventBuilder; static createBuilder(db: SpecDatabase, schemaName: string, options: EventBuilderOptions): EventBuilder; private eventTypeDefinitions; private typesCreatedHere; private typesToLink; private resourcesToLink; private serviceToLink?; private constructor(); allocateEvent(rootProperty: EventTypeDefinition): void; linkTypesToEvent(typeDef: EventTypeDefinition): void; linkResourceToEvent(resource: Resource, resourceField: ResourceField): void; linkServiceToEvent(service: Service): void; eventTypeDefinitionBuilder(typeName: string, options?: { description?: string; schema?: jsonschema.RecordLikeObject; }): { eventTypeDefinitionBuilder: EventTypeDefinitionBuilder; freshInDb: boolean; freshInSession: boolean; }; commit(): Event; } export declare class EventTypeDefinitionBuilder extends PropertyBagBuilder { readonly db: SpecDatabase; private readonly typeDef; constructor(db: SpecDatabase, typeDef: EventTypeDefinition); commit(): EventTypeDefinition; } export {};