packages/relay-runtime/util/NormalizationNode.js (185 lines of code) (raw):
/**
* 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
*/
// flowlint ambiguous-object-type:error
'use strict';
import type {ConcreteRequest} from './RelayConcreteNode';
/**
* 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>,
|};
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 =
| NormalizationFlightField
| 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,
|};
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 NormalizationFlightField = {|
+kind: 'FlightField',
+alias: ?string,
+name: string,
+args: ?$ReadOnlyArray<NormalizationArgument>,
+storageKey: ?string,
|};
export type NormalizationClientComponent = {|
+args?: ?$ReadOnlyArray<NormalizationArgument>,
+kind: 'ClientComponent',
+fragment: NormalizationNode,
|};
export type NormalizationTypeDiscriminator = {|
+kind: 'TypeDiscriminator',
+abstractKey: string,
|};
export type NormalizationSelection =
| NormalizationCondition
| NormalizationClientComponent
| NormalizationClientExtension
| NormalizationDefer
| NormalizationField
| NormalizationFlightField
| 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;