openapi-to-graphql-harshith
Version:
Generates a GraphQL schema for a given OpenAPI Specification (OAS)
84 lines (83 loc) • 3.44 kB
TypeScript
/**
* Functions to create resolve functions.
*/
import { ParameterObject } from './types/oas3';
import { ConnectOptions } from './types/options';
import { Operation } from './types/operation';
import { SubscriptionContext } from './types/graphql';
import { PreprocessingData } from './types/preprocessing_data';
import { RequestOptions, FileUploadOptions } from './types/options';
import crossFetch from 'cross-fetch';
import { GraphQLFieldResolver } from 'graphql';
export declare const OPENAPI_TO_GRAPHQL = "_openAPIToGraphQL";
declare type GetResolverParams<TSource, TContext, TArgs> = {
operation: Operation;
argsFromLink?: {
[key: string]: any;
};
payloadName?: string;
responseName?: string;
data: PreprocessingData<TSource, TContext, TArgs>;
baseUrl?: string | any;
requestOptions?: Partial<RequestOptions<TSource, TContext, TArgs>>;
fileUploadOptions?: FileUploadOptions;
fetch: typeof crossFetch;
};
declare type GetSubscribeParams<TSource, TContext, TArgs> = {
operation: Operation;
argsFromLink?: {
[key: string]: string;
};
payloadName?: string;
data: PreprocessingData<TSource, TContext, TArgs>;
baseUrl?: string;
connectOptions?: ConnectOptions;
};
declare type ResolveData<TSource, TContext, TArgs> = {
url: string;
usedParams: any;
usedPayload: any;
usedRequestOptions: RequestOptions<TSource, TContext, TArgs>;
usedStatusCode: string;
responseHeaders: HeadersInit;
};
declare type OpenAPIToGraphQLRoot<TSource, TContext, TArgs> = {
data?: {
[identifier: string]: ResolveData<TSource, TContext, TArgs>;
};
/**
* TODO: We can define more specific types. See getProcessedSecuritySchemes().
*
* Is it related TArgs?
*/
security: {
[saneProtocolName: string]: any;
};
};
declare type OpenAPIToGraphQLSource<TSource, TContext, TArgs> = {
_openAPIToGraphQL: OpenAPIToGraphQLRoot<TSource, TContext, TArgs>;
};
export declare function getSubscribe<TSource, TContext, TArgs>({ operation, payloadName, data, baseUrl, connectOptions }: GetSubscribeParams<TSource, TContext, TArgs>): GraphQLFieldResolver<TSource, SubscriptionContext, TArgs>;
export declare function getPublishResolver<TSource, TContext, TArgs>({ operation, responseName, data }: GetResolverParams<TSource, TContext, TArgs>): GraphQLFieldResolver<TSource, TContext, TArgs>;
/**
* If the operation type is Query or Mutation, create and return a resolver
* function that performs API requests for the given GraphQL query
*/
export declare function getResolver<TSource, TContext, TArgs>({ operation, argsFromLink, payloadName, data, baseUrl, requestOptions, fileUploadOptions, fetch }: GetResolverParams<TSource, TContext, TArgs>): GraphQLFieldResolver<TSource & OpenAPIToGraphQLSource<TSource, TContext, TArgs>, TContext, TArgs>;
/**
* Extracts data from the GraphQL arguments of a particular field
*
* Replaces the path parameter in the given path with values in the given args.
* Furthermore adds the query parameters for a request.
*/
export declare function extractRequestDataFromArgs<TSource, TContext, TArgs>(path: string, parameters: ParameterObject[], args: TArgs, // NOTE: argument keys are sanitized!
data: PreprocessingData<TSource, TContext, TArgs>): {
path: string;
qs: {
[key: string]: string;
};
headers: {
[key: string]: string;
};
};
export {};