type BehaviorScope = string[]; interface BehaviorSpec { positive: boolean; scope: BehaviorScope; } export type BehaviorDynamicMethods = { [entityType in keyof GraphileBuild.BehaviorEntities as `${entityType}Matches`]: (entity: GraphileBuild.BehaviorEntities[entityType], filter: keyof GraphileBuild.BehaviorStrings) => boolean | undefined; } & { [entityType in keyof GraphileBuild.BehaviorEntities as `${entityType}Behavior`]: (entity: GraphileBuild.BehaviorEntities[entityType]) => string; }; export declare class Behavior { private behaviorEntities; private behaviorRegistry; behaviorEntityTypes: (keyof GraphileBuild.BehaviorEntities)[]; private globalDefaultBehavior; private resolvedPreset; private build; constructor(resolvedPreset: GraphileConfig.ResolvedPreset, build: GraphileBuild.Build); /** * Forbid registration of more global behavior defaults, behavior entity types, etc. */ freeze(): Behavior & BehaviorDynamicMethods; private registerEntity; private assertEntity; /** * @param entityType - the type of entity whose behaviour is being checked * @param entity - the entity whose behaviour is being checked * @param filter - the behavior the plugin specifies */ entityMatches(entityType: TEntityType, entity: GraphileBuild.BehaviorEntities[TEntityType], filter: TFilter): boolean | undefined; /** * Given the entity `rawEntity` of type `entityType`, this function will * return the final behavior string for this entity, respecting all the * global and entity-specific behaviors. * * This is expensive to compute, so we cache it. * * **IMPORTANT**: `rawEntity` should be a fixed value so that the cache can be * reused. If it is a dynamic value (e.g. it's a combination of multiple * entities) then you should represent it as a tuple and we'll automatically * cache that. */ getBehaviorForEntity(entityType: TEntityType, rawEntity: GraphileBuild.BehaviorEntities[TEntityType]): ResolvedBehavior; getInferredBehaviorForEntity(entityType: TEntityType, rawEntity: GraphileBuild.BehaviorEntities[TEntityType]): ResolvedBehavior; getOverrideBehaviorForEntity(entityType: TEntityType, rawEntity: GraphileBuild.BehaviorEntities[TEntityType]): ResolvedBehavior; getCombinedBehaviorForEntities(entityType: TEntityType, sources: { [entityType in keyof GraphileBuild.BehaviorEntities]?: GraphileBuild.BehaviorEntities[entityType]; }): ResolvedBehavior; getPreferencesAppliedBehaviors(entityType: TEntityType, inferredBehavior: ResolvedBehavior, overrideBehavior: ResolvedBehavior): ResolvedBehavior; /** @deprecated Please use entityMatches or stringMatches instead */ matches(localBehaviorSpecsString: string | string[] | null | undefined, filter: string, defaultBehavior?: string): boolean | undefined; parseBehaviorString(behaviorString: string): BehaviorSpec[]; parseScope(filter: string): BehaviorScope; private resolveBehavior; private validateBehavior; _defaultBehaviorByEntityTypeCache: Map<"string", string>; getDefaultBehaviorFor(entityType: keyof GraphileBuild.BehaviorEntities): string; } export declare function joinBehaviors(strings: ReadonlyArray): GraphileBuild.BehaviorString; export declare function joinResolvedBehaviors(behaviors: ReadonlyArray): ResolvedBehavior; interface StackItem { source: string; prefix: string; suffix: string; } interface ResolvedBehavior { stack: ReadonlyArray; behaviorString: GraphileBuild.BehaviorString; toString(): string; } /** * We're strict with this because we want to be able to expand this in future. * For example I want to allow `@behavior all some` to operate the same as * `@behavior all\n@behavior some`. I also want to be able to add * `@behavior -all` to remove a previously enabled behavior. */ export declare function isValidBehaviorString(behavior: unknown): behavior is GraphileBuild.BehaviorString; export {}; //# sourceMappingURL=behavior.d.ts.map