UNPKG

16.2 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/graphql.ts","../src/utilities.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DocumentNode,\n SelectionSetNode,\n FieldNode,\n FragmentDefinitionNode,\n InlineFragmentNode,\n} from 'graphql';\n\nimport {\n getMainDefinition,\n getFragmentDefinitions,\n createFragmentMap,\n FragmentMap,\n DirectiveInfo,\n shouldInclude,\n getDirectiveInfoFromField,\n isField,\n isInlineFragment,\n resultKeyNameFromField,\n argumentsObjectFromField,\n} from 'apollo-utilities';\n\nexport type Resolver = (\n fieldName: string,\n rootValue: any,\n args: any,\n context: any,\n info: ExecInfo,\n) => any;\n\nexport type VariableMap = { [name: string]: any };\n\nexport type ResultMapper = (\n values: { [fieldName: string]: any },\n rootValue: any,\n) => any;\nexport type FragmentMatcher = (\n rootValue: any,\n typeCondition: string,\n context: any,\n) => boolean;\n\nexport type ExecContext = {\n fragmentMap: FragmentMap;\n contextValue: any;\n variableValues: VariableMap;\n resultMapper: ResultMapper;\n resolver: Resolver;\n fragmentMatcher: FragmentMatcher;\n};\n\nexport type ExecInfo = {\n isLeaf: boolean;\n resultKey: string;\n directives: DirectiveInfo;\n field: FieldNode;\n};\n\nexport type ExecOptions = {\n resultMapper?: ResultMapper;\n fragmentMatcher?: FragmentMatcher;\n};\n\n/* Based on graphql function from graphql-js:\n *\n * graphql(\n * schema: GraphQLSchema,\n * requestString: string,\n * rootValue?: ?any,\n * contextValue?: ?any,\n * variableValues?: ?{[key: string]: any},\n * operationName?: ?string\n * ): Promise<GraphQLResult>\n *\n * The default export as of graphql-anywhere is sync as of 4.0,\n * but below is an exported alternative that is async.\n * In the 5.0 version, this will be the only export again\n * and it will be async\n */\nexport function graphql(\n resolver: Resolver,\n document: DocumentNode,\n rootValue?: any,\n contextValue?: any,\n variableValues: VariableMap = {},\n execOptions: ExecOptions = {},\n) {\n const mainDefinition = getMainDefinition(document);\n\n const fragments = getFragmentDefinitions(document);\n const fragmentMap = createFragmentMap(fragments);\n\n const resultMapper = execOptions.resultMapper;\n\n // Default matcher always matches all fragments\n const fragmentMatcher = execOptions.fragmentMatcher || (() => true);\n\n const execContext: ExecContext = {\n fragmentMap,\n contextValue,\n variableValues,\n resultMapper,\n resolver,\n fragmentMatcher,\n };\n\n return executeSelectionSet(\n mainDefinition.selectionSet as SelectionSetNode,\n rootValue,\n execContext,\n );\n}\n\nfunction executeSelectionSet(\n selectionSet: SelectionSetNode,\n rootValue: any,\n execContext: ExecContext,\n) {\n const { fragmentMap, contextValue, variableValues: variables } = execContext;\n\n const result = {};\n\n selectionSet.selections.forEach(selection => {\n if (variables && !shouldInclude(selection, variables)) {\n // Skip selection sets which we're able to determine should not be run\n return;\n }\n\n if (isField(selection)) {\n const fieldResult = executeField(selection, rootValue, execContext);\n\n const resultFieldKey = resultKeyNameFromField(selection);\n\n if (fieldResult !== undefined) {\n if (result[resultFieldKey] === undefined) {\n result[resultFieldKey] = fieldResult;\n } else {\n merge(result[resultFieldKey], fieldResult);\n }\n }\n } else {\n let fragment: InlineFragmentNode | FragmentDefinitionNode;\n\n if (isInlineFragment(selection)) {\n fragment = selection;\n } else {\n // This is a named fragment\n fragment = fragmentMap[selection.name.value] as FragmentDefinitionNode;\n\n if (!fragment) {\n throw new Error(`No fragment named ${selection.name.value}`);\n }\n }\n\n const typeCondition = fragment.typeCondition.name.value;\n\n if (execContext.fragmentMatcher(rootValue, typeCondition, contextValue)) {\n const fragmentResult = executeSelectionSet(\n fragment.selectionSet,\n rootValue,\n execContext,\n );\n\n merge(result, fragmentResult);\n }\n }\n });\n\n if (execContext.resultMapper) {\n return execContext.resultMapper(result, rootValue);\n }\n\n return result;\n}\n\nfunction executeField(\n field: FieldNode,\n rootValue: any,\n execContext: ExecContext,\n): any {\n const { variableValues: variables, contextValue, resolver } = execContext;\n\n const fieldName = field.name.value;\n const args = argumentsObjectFromField(field, variables);\n\n const info: ExecInfo = {\n isLeaf: !field.selectionSet,\n resultKey: resultKeyNameFromField(field),\n directives: getDirectiveInfoFromField(field, variables),\n field,\n };\n\n const result = resolver(fieldName, rootValue, args, contextValue, info);\n\n // Handle all scalar types here\n if (!field.selectionSet) {\n return result;\n }\n\n // From here down, the field has a selection set, which means it's trying to\n // query a GraphQLObjectType\n if (result == null) {\n // Basically any field in a GraphQL response can be null, or missing\n return result;\n }\n\n if (Array.isArray(result)) {\n return executeSubSelectedArray(field, result, execContext);\n }\n\n // Returned value is an object, and the query has a sub-selection. Recurse.\n return executeSelectionSet(field.selectionSet, result, execContext);\n}\n\nfunction executeSubSelectedArray(field, result, execContext) {\n return result.map(item => {\n // null value in array\n if (item === null) {\n return null;\n }\n\n // This is a nested array, recurse\n if (Array.isArray(item)) {\n return executeSubSelectedArray(field, item, execContext);\n }\n\n // This is an object, run the selection set on it\n return executeSelectionSet(field.selectionSet, item, execContext);\n });\n}\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nexport function merge(dest, src) {\n if (src !== null && typeof src === 'object') {\n Object.keys(src).forEach(key => {\n const srcVal = src[key];\n if (!hasOwn.call(dest, key)) {\n dest[key] = srcVal;\n } else {\n merge(dest[key], srcVal);\n }\n });\n }\n}\n","import { DocumentNode, DirectiveNode } from 'graphql';\n\nimport { getInclusionDirectives } from 'apollo-utilities';\n\nimport { graphql, VariableMap, ExecInfo, ExecContext } from './graphql';\n\nimport { invariant } from 'ts-invariant';\n\nconst { hasOwnProperty } = Object.prototype;\n\nexport function filter<FD = any, D extends FD = any>(\n doc: DocumentNode,\n data: D,\n variableValues: VariableMap = {},\n): FD {\n if (data === null) return data;\n\n const resolver = (\n fieldName: string,\n root: any,\n args: Object,\n context: ExecContext,\n info: ExecInfo,\n ) => {\n return root[info.resultKey];\n };\n\n return Array.isArray(data)\n ? data.map(dataObj => graphql(resolver, doc, dataObj, null, variableValues))\n : graphql(resolver, doc, data, null, variableValues);\n}\n\n// TODO: we should probably make check call propType and then throw,\n// rather than the other way round, to avoid constructing stack traces\n// for things like oneOf uses in React. At this stage I doubt many people\n// are using this like that, but in the future, who knows?\nexport function check(\n doc: DocumentNode,\n data: any,\n variables: VariableMap = {},\n): void {\n const resolver = (\n fieldName: string,\n root: any,\n args: any,\n context: any,\n info: any,\n ) => {\n // When variables is null, fields with @include/skip directives that\n // reference variables are considered optional.\n invariant(\n hasOwnProperty.call(root, info.resultKey) ||\n (!variables && hasVariableInclusions(info.field.directives)),\n `${info.resultKey} missing on ${JSON.stringify(root)}`,\n );\n return root[info.resultKey];\n };\n\n graphql(resolver, doc, data, {}, variables, {\n fragmentMatcher: () => false,\n });\n}\n\nfunction hasVariableInclusions(\n directives: ReadonlyArray<DirectiveNode>,\n): boolean {\n return getInclusionDirectives(directives).some(\n ({ ifArgument }) =>\n ifArgument.value && ifArgument.value.kind === 'Variable',\n );\n}\n\n// Lifted/adapted from\n// https://github.com/facebook/react/blob/master/src/isomorphic/classic/types/ReactPropTypes.js\nconst ANONYMOUS = '<<anonymous>>';\nfunction PropTypeError(message) {\n this.message = message;\n this.stack = '';\n}\n// Make `instanceof Error` still work for returned errors.\nPropTypeError.prototype = Error.prototype;\n\nconst reactPropTypeLocationNames = {\n prop: 'prop',\n context: 'context',\n childContext: 'child context',\n};\n\nfunction createChainableTypeChecker(validate) {\n function checkType(\n isRequired,\n props,\n propName,\n componentName,\n location,\n propFullName,\n ) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n if (props[propName] == null) {\n const locationName = reactPropTypeLocationNames[location];\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError(\n `The ${locationName} \\`${propFullName}\\` is marked as required ` +\n `in \\`${componentName}\\`, but its value is \\`null\\`.`,\n );\n }\n return new PropTypeError(\n `The ${locationName} \\`${propFullName}\\` is marked as required in ` +\n `\\`${componentName}\\`, but its value is \\`undefined\\`.`,\n );\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n const chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n}\n\nexport function propType(\n doc: DocumentNode,\n mapPropsToVariables = props => null,\n) {\n return createChainableTypeChecker((props, propName) => {\n const prop = props[propName];\n try {\n if (!prop.loading) {\n check(doc, prop, mapPropsToVariables(props));\n }\n return null;\n } catch (e) {\n // Need a much better error.\n // Also we aren't checking for extra fields\n return e;\n }\n });\n}\n"]}
\No newline at end of file