Guide Développeur : Générateur de Types de Résolveurs TypeScript depuis GraphQL SDL
Générez des interfaces de résolveurs TypeScript strictement typées, des arguments de requêtes/mutations et des types de contexte depuis vos schémas GraphQL SDL.
/* =============================================================================
* AUTOMATICALLY GENERATED GRAPHQL RESOLVER TYPES
* Engine: ToolsAA GraphQL-to-TypeScript Resolvers V3
* Mode: APOLLO / Pure Client-Side Type Synthesis
* ============================================================================= */
Maybe<T> = T | null | undefined;
Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };
MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };
RequireFields<T, K extends keyof T> = Omit<T, K> & { [P in K]-?: NonNullable<T[P]> };
ResolverFn<TResult, TParent, TContext, TArgs> = (
parent: TParent,
args: TArgs,
context: TContext,
info: any
) => Promise<TResult> | TResult;
Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
| ResolverFn<TResult, TParent, TContext, TArgs>
| { resolve: ResolverFn<TResult, TParent, TContext, TArgs> };
SubscriptionSubscribeFn<TResult, TParent, TContext, TArgs> = (
parent: TParent,
args: TArgs,
context: TContext,
info: any
) => AsyncIterator<TResult> | Promise<AsyncIterator<TResult>>;
SubscriptionResolveFn<TResult, TParent, TContext, TArgs> = (
parent: TParent,
args: TArgs,
context: TContext,
info: any
) => TResult | Promise<TResult>;
SubscriptionSubscriberObject<TResult, TKey extends string, TParent, TContext, TArgs> {
subscribe: SubscriptionSubscribeFn<{ [key in TKey]: TResult }, TParent, TContext, TArgs>;
resolve?: SubscriptionResolveFn<TResult, { [key in TKey]: TResult }, TContext, TArgs>;
}
SubscriptionResolver<TResult, TKey extends string, TParent = {}, TContext = {}, TArgs = {}> =
| ((...args: any[]) => SubscriptionSubscriberObject<TResult, TKey, TParent, TContext, TArgs>)
| SubscriptionSubscriberObject<TResult, TKey, TParent, TContext, TArgs>;
TypeResolveFn<TTypes, TParent = {}, TContext = {}> = (
parent: TParent,
context: TContext,
info: any
) => Maybe<TTypes> | Promise<Maybe<TTypes>>;
IsTypeOfResolverFn<T = {}, TContext = {}> = (
obj: T,
context: TContext,
info: any
) => boolean | Promise<boolean>;
/** All built-in and configured custom scalar mapping */
Scalars = {
ID: { input: string; output: string };
String: { input: string; output: string };
Boolean: { input: boolean; output: boolean };
Int: { input: number; output: number };
Float: { input: number; output: number };
DateTime: { input: Date | string; output: Date | string };
Date: { input: Date | string; output: Date | string };
Time: { input: string; output: string };
JSON: { input: any; output: any };
JSONObject: { input: Record<string, any>; output: Record<string, any> };
Decimal: { input: string | number; output: string | number };
UUID: { input: string; output: string };
Upload: { input: File | Blob; output: File | Blob };
};
/* ==================== ENUMS ==================== */
UserRole {
ADMIN = 'ADMIN',
CUSTOMER = 'CUSTOMER',
FULFILLMENT = 'FULFILLMENT',
}
OrderStatus {
PENDING = 'PENDING',
PROCESSING = 'PROCESSING',
SHIPPED = 'SHIPPED',
DELIVERED = 'DELIVERED',
CANCELLED = 'CANCELLED',
}
/* ==================== TYPE MAPPERS ==================== */
/** Mapping of GraphQL types to internal resolver return types */
ResolversTypes = {
ID: Scalars['ID']['output'];
String: Scalars['String']['output'];
Boolean: Scalars['Boolean']['output'];
Int: Scalars['Int']['output'];
Float: Scalars['Float']['output'];
DateTime: Scalars['DateTime']['output'];
Date: Scalars['Date']['output'];
Time: Scalars['Time']['output'];
JSON: Scalars['JSON']['output'];
JSONObject: Scalars['JSONObject']['output'];
Decimal: Scalars['Decimal']['output'];
UUID: Scalars['UUID']['output'];
Upload: Scalars['Upload']['output'];
UserRole: UserRole;
OrderStatus: OrderStatus;
SearchResult: ResolversTypes['Product'] | ResolversTypes['User'] | ResolversTypes['Order'];
Node: ResolversTypes['User'] | ResolversTypes['Product'] | ResolversTypes['Order'];
Timestamps: ResolversTypes['User'] | ResolversTypes['Product'] | ResolversTypes['Order'];
User: UserModel;
Product: ProductModel;
Order: OrderModel;
OrderItem: OrderItemModel;
Address: AddressModel;
Query: {};
Mutation: {};
};
/** Mapping of GraphQL types to parent/root argument types passed to field resolvers */
ResolversParentTypes = {
ID: Scalars['ID']['output'];
String: Scalars['String']['output'];
Boolean: Scalars['Boolean']['output'];
Int: Scalars['Int']['output'];
Float: Scalars['Float']['output'];
DateTime: Scalars['DateTime']['output'];
Date: Scalars['Date']['output'];
Time: Scalars['Time']['output'];
JSON: Scalars['JSON']['output'];
JSONObject: Scalars['JSONObject']['output'];
Decimal: Scalars['Decimal']['output'];
UUID: Scalars['UUID']['output'];
Upload: Scalars['Upload']['output'];
UserRole: UserRole;
OrderStatus: OrderStatus;
SearchResult: ResolversParentTypes['Product'] | ResolversParentTypes['User'] | ResolversParentTypes['Order'];
Node: ResolversParentTypes['User'] | ResolversParentTypes['Product'] | ResolversParentTypes['Order'];
Timestamps: ResolversParentTypes['User'] | ResolversParentTypes['Product'] | ResolversParentTypes['Order'];
User: UserModel;
Product: ProductModel;
Order: OrderModel;
OrderItem: OrderItemModel;
Address: AddressModel;
Query: {};
Mutation: {};
};
/* ==================== ENTITY MODEL INTERFACES ==================== */
/** Represents a customer or admin account in the storefront. */
UserModel {
id: Scalars['ID']['output'];
email: Scalars['String']['output'];
displayName: Scalars['String']['output'];
role: UserRole;
orders: Array<ResolversTypes['Order']>;
defaultAddress?: Maybe<ResolversTypes['Address']>;
createdAt: Scalars['DateTime']['output'];
updatedAt?: Maybe<Scalars['DateTime']['output']>;
}
ProductModel {
id: Scalars['ID']['output'];
sku: Scalars['String']['output'];
title: Scalars['String']['output'];
price: Scalars['Float']['output'];
inventoryCount: Scalars['Int']['output'];
tags: Array<Scalars['String']['output']>;
createdAt: Scalars['DateTime']['output'];
updatedAt?: Maybe<Scalars['DateTime']['output']>;
}
OrderModel {
id: Scalars['ID']['output'];
orderNumber: Scalars['String']['output'];
customer: ResolversTypes['User'];
status: OrderStatus;
items: Array<ResolversTypes['OrderItem']>;
totalAmount: Scalars['Float']['output'];
shippingAddress: ResolversTypes['Address'];
createdAt: Scalars['DateTime']['output'];
updatedAt?: Maybe<Scalars['DateTime']['output']>;
}
OrderItemModel {
id: Scalars['ID']['output'];
product: ResolversTypes['Product'];
quantity: Scalars['Int']['output'];
unitPrice: Scalars['Float']['output'];
}
AddressModel {
street: Scalars['String']['output'];
city: Scalars['String']['output'];
postalCode: Scalars['String']['output'];
country: Scalars['String']['output'];
}
/* ==================== RESOLVERS INTERFACES ==================== */
/** Represents a customer or admin account in the storefront. */
UserResolvers<ContextType = AppContext, ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User']> {
id?: Resolver<Scalars['ID']['output'], ParentType, ContextType, {}>;
email?: Resolver<Scalars['String']['output'], ParentType, ContextType, {}>;
displayName?: Resolver<Scalars['String']['output'], ParentType, ContextType, {}>;
role?: Resolver<UserRole, ParentType, ContextType, {}>;
orders?: Resolver<Array<ResolversTypes['Order']>, ParentType, ContextType, UserOrdersArgs>;
defaultAddress?: Resolver<Maybe<ResolversTypes['Address']>, ParentType, ContextType, {}>;
createdAt?: Resolver<Scalars['DateTime']['output'], ParentType, ContextType, {}>;
updatedAt?: Resolver<Maybe<Scalars['DateTime']['output']>, ParentType, ContextType, {}>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
}
ProductResolvers<ContextType = AppContext, ParentType extends ResolversParentTypes['Product'] = ResolversParentTypes['Product']> {
id?: Resolver<Scalars['ID']['output'], ParentType, ContextType, {}>;
sku?: Resolver<Scalars['String']['output'], ParentType, ContextType, {}>;
title?: Resolver<Scalars['String']['output'], ParentType, ContextType, {}>;
price?: Resolver<Scalars['Float']['output'], ParentType, ContextType, {}>;
inventoryCount?: Resolver<Scalars['Int']['output'], ParentType, ContextType, {}>;
tags?: Resolver<Array<Scalars['String']['output']>, ParentType, ContextType, {}>;
createdAt?: Resolver<Scalars['DateTime']['output'], ParentType, ContextType, {}>;
updatedAt?: Resolver<Maybe<Scalars['DateTime']['output']>, ParentType, ContextType, {}>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
}
OrderResolvers<ContextType = AppContext, ParentType extends ResolversParentTypes['Order'] = ResolversParentTypes['Order']> {
id?: Resolver<Scalars['ID']['output'], ParentType, ContextType, {}>;
orderNumber?: Resolver<Scalars['String']['output'], ParentType, ContextType, {}>;
customer?: Resolver<ResolversTypes['User'], ParentType, ContextType, {}>;
status?: Resolver<OrderStatus, ParentType, ContextType, {}>;
items?: Resolver<Array<ResolversTypes['OrderItem']>, ParentType, ContextType, {}>;
totalAmount?: Resolver<Scalars['Float']['output'], ParentType, ContextType, {}>;
shippingAddress?: Resolver<ResolversTypes['Address'], ParentType, ContextType, {}>;
createdAt?: Resolver<Scalars['DateTime']['output'], ParentType, ContextType, {}>;
updatedAt?: Resolver<Maybe<Scalars['DateTime']['output']>, ParentType, ContextType, {}>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
}
OrderItemResolvers<ContextType = AppContext, ParentType extends ResolversParentTypes['OrderItem'] = ResolversParentTypes['OrderItem']> {
id?: Resolver<Scalars['ID']['output'], ParentType, ContextType, {}>;
product?: Resolver<ResolversTypes['Product'], ParentType, ContextType, {}>;
quantity?: Resolver<Scalars['Int']['output'], ParentType, ContextType, {}>;
unitPrice?: Resolver<Scalars['Float']['output'], ParentType, ContextType, {}>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
}
AddressResolvers<ContextType = AppContext, ParentType extends ResolversParentTypes['Address'] = ResolversParentTypes['Address']> {
street?: Resolver<Scalars['String']['output'], ParentType, ContextType, {}>;
city?: Resolver<Scalars['String']['output'], ParentType, ContextType, {}>;
postalCode?: Resolver<Scalars['String']['output'], ParentType, ContextType, {}>;
country?: Resolver<Scalars['String']['output'], ParentType, ContextType, {}>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
}
QueryResolvers<ContextType = AppContext, ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query']> {
me?: Resolver<Maybe<ResolversTypes['User']>, ParentType, ContextType, {}>;
user?: Resolver<Maybe<ResolversTypes['User']>, ParentType, ContextType, RequireFields<QueryUserArgs, 'id'>>;
product?: Resolver<Maybe<ResolversTypes['Product']>, ParentType, ContextType, RequireFields<QueryProductArgs, 'id'>>;
products?: Resolver<Array<ResolversTypes['Product']>, ParentType, ContextType, QueryProductsArgs>;
search?: Resolver<Array<ResolversTypes['SearchResult']>, ParentType, ContextType, RequireFields<QuerySearchArgs, 'query'>>;
}
MutationResolvers<ContextType = AppContext, ParentType extends ResolversParentTypes['Mutation'] = ResolversParentTypes['Mutation']> {
createProduct?: Resolver<ResolversTypes['Product'], ParentType, ContextType, RequireFields<MutationCreateProductArgs, 'input'>>;
checkoutCart?: Resolver<ResolversTypes['Order'], ParentType, ContextType, RequireFields<MutationCheckoutCartArgs, 'input'>>;
cancelOrder?: Resolver<ResolversTypes['Order'], ParentType, ContextType, RequireFields<MutationCancelOrderArgs, 'orderId'>>;
}
SearchResultResolvers<ContextType = AppContext, ParentType extends ResolversParentTypes['SearchResult'] = ResolversParentTypes['SearchResult']> {
__resolveType: TypeResolveFn<'Product' | 'User' | 'Order', ParentType, ContextType>;
}
NodeResolvers<ContextType = AppContext, ParentType extends ResolversParentTypes['Node'] = ResolversParentTypes['Node']> {
__resolveType: TypeResolveFn<'User' | 'Product' | 'Order', ParentType, ContextType>;
}
TimestampsResolvers<ContextType = AppContext, ParentType extends ResolversParentTypes['Timestamps'] = ResolversParentTypes['Timestamps']> {
__resolveType: TypeResolveFn<'User' | 'Product' | 'Order', ParentType, ContextType>;
}
/** Top-level combined resolvers map passed to your GraphQL server setup */
Resolvers<ContextType = AppContext> {
User?: UserResolvers<ContextType>;
Product?: ProductResolvers<ContextType>;
Order?: OrderResolvers<ContextType>;
OrderItem?: OrderItemResolvers<ContextType>;
Address?: AddressResolvers<ContextType>;
Query?: QueryResolvers<ContextType>;
Mutation?: MutationResolvers<ContextType>;
SearchResult?: SearchResultResolvers<ContextType>;
Node?: NodeResolvers<ContextType>;
Timestamps?: TimestampsResolvers<ContextType>;
}
Conformité Totale aux Spécifications GraphQL
Analyse fidèlement les queries, mutations, subscriptions, inputs, interfaces, unions et directives personnalisées.
Synthèse de Types Locale sans Latence
L'analyse lexicale et la génération TypeScript s'exécutent entièrement dans le navigateur.
Intégration Prête pour la Production
Prend en charge Apollo Server, GraphQL Yoga et Mercurius avec mappers de parents et typage d'arguments.