relay-runtime
Version:
A core runtime for building GraphQL-driven applications.
293 lines (255 loc) • 8.65 kB
Flow
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict-local
* @format
* @oncall relay
*/
;
import type {ResolverFunction, ResolverModule} from './ReaderNode';
import type {ConcreteRequest, ProvidedVariableType} from './RelayConcreteNode';
import type {JSResourceReference} from 'JSResourceReference';
/**
* Represents a single operation used to processing and normalize runtime
* request results.
*/
export type NormalizationOperation = {
readonly kind: 'Operation',
readonly name: string,
readonly argumentDefinitions: ReadonlyArray<NormalizationLocalArgumentDefinition>,
readonly selections: ReadonlyArray<NormalizationSelection>,
readonly clientAbstractTypes?: {
readonly [string]: ReadonlyArray<string>,
},
readonly has_server_to_client_resolvers?: boolean,
readonly use_exec_time_resolvers?: boolean,
readonly exec_time_resolvers_enabled_provider?: ProvidedVariableType,
readonly use_experimental_provider?: ProvidedVariableType,
};
export type NormalizationHandle =
| NormalizationScalarHandle
| NormalizationLinkedHandle;
export type NormalizationLinkedHandle = {
readonly kind: 'LinkedHandle',
readonly alias?: ?string,
readonly name: string,
readonly args?: ?ReadonlyArray<NormalizationArgument>,
readonly handle: string,
readonly key: string,
// NOTE: this property is optional because it's expected to be rarely used
readonly dynamicKey?: ?NormalizationArgument,
readonly filters?: ?ReadonlyArray<string>,
readonly handleArgs?: ReadonlyArray<NormalizationArgument>,
};
export type NormalizationScalarHandle = {
readonly kind: 'ScalarHandle',
readonly alias?: ?string,
readonly name: string,
readonly args?: ?ReadonlyArray<NormalizationArgument>,
readonly handle: string,
readonly key: string,
// NOTE: this property is optional because it's expected to be rarely used
readonly dynamicKey?: ?NormalizationArgument,
readonly filters?: ?ReadonlyArray<string>,
readonly handleArgs?: ReadonlyArray<NormalizationArgument>,
};
export type NormalizationArgument =
| NormalizationListValueArgument
| NormalizationLiteralArgument
| NormalizationObjectValueArgument
| NormalizationVariableArgument;
export type NormalizationCondition = {
readonly kind: 'Condition',
readonly passingValue: boolean,
readonly condition: string,
readonly selections: ReadonlyArray<NormalizationSelection>,
};
export type NormalizationClientExtension = {
readonly kind: 'ClientExtension',
readonly selections: ReadonlyArray<NormalizationSelection>,
};
export type NormalizationField =
| NormalizationResolverField
| NormalizationLiveResolverField
| NormalizationScalarField
| NormalizationLinkedField;
export type NormalizationInlineFragment = {
readonly kind: 'InlineFragment',
readonly selections: ReadonlyArray<NormalizationSelection>,
readonly type: string,
readonly abstractKey?: ?string,
};
export type NormalizationFragmentSpread = {
readonly kind: 'FragmentSpread',
readonly fragment: NormalizationSplitOperation,
readonly args?: ?ReadonlyArray<NormalizationArgument>,
};
export type NormalizationLinkedField = {
readonly kind: 'LinkedField',
readonly alias?: ?string,
readonly name: string,
readonly storageKey?: ?string,
readonly args?: ?ReadonlyArray<NormalizationArgument>,
readonly concreteType?: ?string,
readonly plural: boolean,
readonly selections: ReadonlyArray<NormalizationSelection>,
};
export type NormalizationActorChange = {
readonly kind: 'ActorChange',
readonly linkedField: NormalizationLinkedField,
};
export type NormalizationModuleImport = {
readonly args?: ?ReadonlyArray<NormalizationArgument>,
readonly kind: 'ModuleImport',
readonly documentName: string,
readonly fragmentPropName: string,
readonly fragmentName: string,
readonly componentModuleProvider?: () =>
| unknown
| Promise<unknown>
| JSResourceReference<unknown>,
readonly operationModuleProvider?: () =>
| NormalizationRootNode
| Promise<NormalizationRootNode>
| JSResourceReference<NormalizationRootNode>,
};
export type NormalizationListValueArgument = {
readonly kind: 'ListValue',
readonly name: string,
readonly items: ReadonlyArray<NormalizationArgument | null>,
};
export type NormalizationLiteralArgument = {
readonly kind: 'Literal',
readonly name: string,
readonly type?: ?string,
readonly value: unknown,
};
export type NormalizationLocalArgumentDefinition = {
readonly kind: 'LocalArgument',
readonly name: string,
readonly defaultValue: unknown,
};
export type NormalizationNode =
| NormalizationClientExtension
| NormalizationCondition
| NormalizationDefer
| NormalizationInlineFragment
| NormalizationLinkedField
| NormalizationOperation
| NormalizationSplitOperation
| NormalizationStream;
export type NormalizationScalarField = {
readonly kind: 'ScalarField',
readonly alias?: ?string,
readonly name: string,
readonly args?: ?ReadonlyArray<NormalizationArgument>,
readonly storageKey?: ?string,
};
export type ResolverReference = {
readonly fieldType: string,
readonly resolverFunctionName: string,
};
export type ResolverInfo = {
readonly resolverFunction: ResolverFunction,
readonly rootFragment?: ?NormalizationSplitOperation,
};
type ResolverData =
| {readonly resolverModule?: ResolverModule}
| {readonly resolverReference?: ResolverReference}
| {readonly resolverInfo?: ResolverInfo};
export type NormalizationResolverField = {
readonly kind: 'RelayResolver',
readonly name: string,
readonly args?: ?ReadonlyArray<NormalizationArgument>,
readonly fragment?: ?NormalizationInlineFragment,
readonly storageKey?: ?string,
readonly isOutputType: boolean,
...ResolverData,
};
export type NormalizationLiveResolverField = {
readonly kind: 'RelayLiveResolver',
readonly name: string,
readonly args?: ?ReadonlyArray<NormalizationArgument>,
readonly fragment?: ?NormalizationInlineFragment,
readonly storageKey?: ?string,
readonly isOutputType: boolean,
...ResolverData,
};
export type NormalizationModelResolvers = {
[string]: {
readonly resolverModule: ResolverModule,
},
};
export type NormalizationClientEdgeToClientObject = {
readonly kind: 'ClientEdgeToClientObject',
readonly linkedField: NormalizationLinkedField,
readonly backingField:
| NormalizationResolverField
| NormalizationLiveResolverField,
readonly modelResolvers?: NormalizationModelResolvers | null,
};
export type NormalizationClientComponent = {
readonly args?: ?ReadonlyArray<NormalizationArgument>,
readonly kind: 'ClientComponent',
readonly fragment: NormalizationNode,
};
export type NormalizationTypeDiscriminator = {
readonly kind: 'TypeDiscriminator',
readonly abstractKey: string,
};
export type NormalizationSelection =
| NormalizationCondition
| NormalizationClientComponent
| NormalizationClientExtension
| NormalizationClientEdgeToClientObject
| NormalizationDefer
| NormalizationField
| NormalizationFragmentSpread
| NormalizationHandle
| NormalizationInlineFragment
| NormalizationModuleImport
| NormalizationStream
| NormalizationActorChange
| NormalizationTypeDiscriminator;
export type NormalizationSplitOperation = {
readonly argumentDefinitions?: ReadonlyArray<NormalizationLocalArgumentDefinition>,
readonly kind: 'SplitOperation',
readonly name: string,
readonly metadata?: ?{readonly [key: string]: unknown, ...},
readonly selections: ReadonlyArray<NormalizationSelection>,
};
export type NormalizationStream = {
readonly if: string | null,
readonly kind: 'Stream',
readonly label: string,
readonly selections: ReadonlyArray<NormalizationSelection>,
};
export type NormalizationDefer = {
readonly if: string | null,
readonly kind: 'Defer',
readonly label: string,
readonly selections: ReadonlyArray<NormalizationSelection>,
};
export type NormalizationVariableArgument = {
readonly kind: 'Variable',
readonly name: string,
readonly type?: ?string,
readonly variableName: string,
};
export type NormalizationObjectValueArgument = {
readonly kind: 'ObjectValue',
readonly name: string,
readonly fields: ReadonlyArray<NormalizationArgument>,
};
export type NormalizationSelectableNode =
| NormalizationDefer
| NormalizationLinkedField
| NormalizationOperation
| NormalizationSplitOperation
| NormalizationStream;
export type NormalizationRootNode =
| ConcreteRequest
| NormalizationSplitOperation;