UNPKG

relay-runtime

Version:

A core runtime for building GraphQL-driven applications.

289 lines (251 loc) • 7.58 kB
/** * 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 */ 'use strict'; 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 = { +kind: 'Operation', +name: string, +argumentDefinitions: $ReadOnlyArray<NormalizationLocalArgumentDefinition>, +selections: $ReadOnlyArray<NormalizationSelection>, +clientAbstractTypes?: { +[string]: $ReadOnlyArray<string>, }, +use_exec_time_resolvers?: boolean, +exec_time_resolvers_enabled_provider?: ProvidedVariableType, }; export type NormalizationHandle = | NormalizationScalarHandle | NormalizationLinkedHandle; export type NormalizationLinkedHandle = { +kind: 'LinkedHandle', +alias?: ?string, +name: string, +args?: ?$ReadOnlyArray<NormalizationArgument>, +handle: string, +key: string, // NOTE: this property is optional because it's expected to be rarely used +dynamicKey?: ?NormalizationArgument, +filters?: ?$ReadOnlyArray<string>, +handleArgs?: $ReadOnlyArray<NormalizationArgument>, }; export type NormalizationScalarHandle = { +kind: 'ScalarHandle', +alias?: ?string, +name: string, +args?: ?$ReadOnlyArray<NormalizationArgument>, +handle: string, +key: string, // NOTE: this property is optional because it's expected to be rarely used +dynamicKey?: ?NormalizationArgument, +filters?: ?$ReadOnlyArray<string>, +handleArgs?: $ReadOnlyArray<NormalizationArgument>, }; export type NormalizationArgument = | NormalizationListValueArgument | NormalizationLiteralArgument | NormalizationObjectValueArgument | NormalizationVariableArgument; export type NormalizationCondition = { +kind: 'Condition', +passingValue: boolean, +condition: string, +selections: $ReadOnlyArray<NormalizationSelection>, }; export type NormalizationClientExtension = { +kind: 'ClientExtension', +selections: $ReadOnlyArray<NormalizationSelection>, }; export type NormalizationField = | NormalizationResolverField | NormalizationLiveResolverField | NormalizationScalarField | NormalizationLinkedField; export type NormalizationInlineFragment = { +kind: 'InlineFragment', +selections: $ReadOnlyArray<NormalizationSelection>, +type: string, +abstractKey?: ?string, }; export type NormalizationFragmentSpread = { +kind: 'FragmentSpread', +fragment: NormalizationSplitOperation, +args?: ?$ReadOnlyArray<NormalizationArgument>, }; export type NormalizationLinkedField = { +kind: 'LinkedField', +alias?: ?string, +name: string, +storageKey?: ?string, +args?: ?$ReadOnlyArray<NormalizationArgument>, +concreteType?: ?string, +plural: boolean, +selections: $ReadOnlyArray<NormalizationSelection>, }; export type NormalizationActorChange = { +kind: 'ActorChange', +linkedField: NormalizationLinkedField, }; export type NormalizationModuleImport = { +args?: ?$ReadOnlyArray<NormalizationArgument>, +kind: 'ModuleImport', +documentName: string, +fragmentPropName: string, +fragmentName: string, +componentModuleProvider?: () => | mixed | Promise<mixed> | JSResourceReference<mixed>, +operationModuleProvider?: () => | NormalizationRootNode | Promise<NormalizationRootNode> | JSResourceReference<NormalizationRootNode>, }; export type NormalizationListValueArgument = { +kind: 'ListValue', +name: string, +items: $ReadOnlyArray<NormalizationArgument | null>, }; export type NormalizationLiteralArgument = { +kind: 'Literal', +name: string, +type?: ?string, +value: mixed, }; export type NormalizationLocalArgumentDefinition = { +kind: 'LocalArgument', +name: string, +defaultValue: mixed, }; export type NormalizationNode = | NormalizationClientExtension | NormalizationCondition | NormalizationDefer | NormalizationInlineFragment | NormalizationLinkedField | NormalizationOperation | NormalizationSplitOperation | NormalizationStream; export type NormalizationScalarField = { +kind: 'ScalarField', +alias?: ?string, +name: string, +args?: ?$ReadOnlyArray<NormalizationArgument>, +storageKey?: ?string, }; export type ResolverReference = { +fieldType: string, +resolverFunctionName: string, }; export type ResolverInfo = { +resolverFunction: ResolverFunction, +rootFragment?: ?NormalizationSplitOperation, }; type ResolverData = | {+resolverModule?: ResolverModule} | {+resolverReference?: ResolverReference} | {+resolverInfo?: ResolverInfo}; export type NormalizationResolverField = { +kind: 'RelayResolver', +name: string, +args?: ?$ReadOnlyArray<NormalizationArgument>, +fragment?: ?NormalizationInlineFragment, +storageKey?: ?string, +isOutputType: boolean, ...ResolverData, }; export type NormalizationLiveResolverField = { +kind: 'RelayLiveResolver', +name: string, +args?: ?$ReadOnlyArray<NormalizationArgument>, +fragment?: ?NormalizationInlineFragment, +storageKey?: ?string, +isOutputType: boolean, ...ResolverData, }; export type NormalizationModelResolvers = { [string]: { +resolverModule: ResolverModule, }, }; export type NormalizationClientEdgeToClientObject = { +kind: 'ClientEdgeToClientObject', +linkedField: NormalizationLinkedField, +backingField: NormalizationResolverField | NormalizationLiveResolverField, +modelResolvers?: NormalizationModelResolvers | null, }; export type NormalizationClientComponent = { +args?: ?$ReadOnlyArray<NormalizationArgument>, +kind: 'ClientComponent', +fragment: NormalizationNode, }; export type NormalizationTypeDiscriminator = { +kind: 'TypeDiscriminator', +abstractKey: string, }; export type NormalizationSelection = | NormalizationCondition | NormalizationClientComponent | NormalizationClientExtension | NormalizationClientEdgeToClientObject | NormalizationDefer | NormalizationField | NormalizationFragmentSpread | NormalizationHandle | NormalizationInlineFragment | NormalizationModuleImport | NormalizationStream | NormalizationActorChange | NormalizationTypeDiscriminator; export type NormalizationSplitOperation = { +argumentDefinitions?: $ReadOnlyArray<NormalizationLocalArgumentDefinition>, +kind: 'SplitOperation', +name: string, +metadata?: ?{+[key: string]: mixed, ...}, +selections: $ReadOnlyArray<NormalizationSelection>, }; export type NormalizationStream = { +if: string | null, +kind: 'Stream', +label: string, +selections: $ReadOnlyArray<NormalizationSelection>, }; export type NormalizationDefer = { +if: string | null, +kind: 'Defer', +label: string, +selections: $ReadOnlyArray<NormalizationSelection>, }; export type NormalizationVariableArgument = { +kind: 'Variable', +name: string, +type?: ?string, +variableName: string, }; export type NormalizationObjectValueArgument = { +kind: 'ObjectValue', +name: string, +fields: $ReadOnlyArray<NormalizationArgument>, }; export type NormalizationSelectableNode = | NormalizationDefer | NormalizationLinkedField | NormalizationOperation | NormalizationSplitOperation | NormalizationStream; export type NormalizationRootNode = | ConcreteRequest | NormalizationSplitOperation;