UNPKG

graplix

Version:

Authorization framework for implementing Relation-based Access Control (ReBAC) with the Resolver (Inspired by [GraphQL](https://graphql.org))

38 lines (36 loc) 1.2 kB
import type { BaseEntityTypeMap } from "./BaseEntityTypeMap"; import type { Arrayable, Nullable } from "./utils"; export type GraplixResolverDefinition< Context extends {}, EntityTypeMap extends BaseEntityTypeMap, SelectedNodeTypeName extends Extract<keyof EntityTypeMap, string>, TargetNodeTypeName extends Extract<keyof EntityTypeMap, string>, > = TargetNodeTypeName extends Extract<keyof EntityTypeMap, string> ? { type: TargetNodeTypeName; resolve: ( entity: EntityTypeMap[SelectedNodeTypeName], context: Context, ) => | Promise<Nullable<EntityTypeMap[TargetNodeTypeName]>> | Promise<Array<EntityTypeMap[TargetNodeTypeName]>>; } : never; export type GraplixResolvers< Context extends {}, EntityTypeMap extends BaseEntityTypeMap, > = { [SelectedNodeTypeName in Extract<keyof EntityTypeMap, string>]: { identify: (entity: EntityTypeMap[SelectedNodeTypeName]) => string; relations?: { [relationName: string]: Arrayable< GraplixResolverDefinition< Context, EntityTypeMap, SelectedNodeTypeName, Extract<keyof EntityTypeMap, string> > >; }; }; };