From dd75e37865c2f8aedd3bcf0c888c7de551231b16 Mon Sep 17 00:00:00 2001 From: calebmer Date: Mon, 26 Sep 2016 11:47:18 -0400 Subject: [PATCH] fix(graphql): fix compile errors --- .../collection/createCollectionQueryFieldEntries.ts | 11 ++++++++++- src/graphql/schema/collection/getCollectionType.ts | 5 ++++- src/graphql/schema/createConnectionField.ts | 12 ++++++++++-- src/graphql/schema/node/createNodeFieldEntry.ts | 12 ++++++++---- src/interface/collection/Collection.ts | 2 +- 5 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/graphql/schema/collection/createCollectionQueryFieldEntries.ts b/src/graphql/schema/collection/createCollectionQueryFieldEntries.ts index 3a56879df1..dcaf9f129f 100644 --- a/src/graphql/schema/collection/createCollectionQueryFieldEntries.ts +++ b/src/graphql/schema/collection/createCollectionQueryFieldEntries.ts @@ -1,5 +1,5 @@ import { GraphQLFieldConfig, GraphQLNonNull, GraphQLID, GraphQLArgumentConfig } from 'graphql' -import { Collection, CollectionKey, ObjectType } from '../../../interface' +import { Context, Collection, CollectionKey, ObjectType } from '../../../interface' import { formatName, idSerde, buildObject } from '../../utils' import BuildToken from '../BuildToken' import getType from '../getType' @@ -78,6 +78,9 @@ function createCollectionPrimaryKeyField ( }, async resolve (source, args, context): Promise { + if (!(context instanceof Context)) + throw new Error('GraphQL context must be an instance of `Context`.') + const { name, key } = idSerde.deserialize(args[options.nodeIdFieldName] as string) if (name !== collection.name) @@ -119,6 +122,9 @@ function createCollectionKeyField ( ) ), async resolve (source, args, context): Promise { + if (!(context instanceof Context)) + throw new Error('GraphQL context must be an instance of `Context`.') + if (!keyType.isTypeOf(args)) throw new Error('The provided arguments are not the correct type.') @@ -139,6 +145,9 @@ function createCollectionKeyField ( }, }, async resolve (source, args, context): Promise { + if (!(context instanceof Context)) + throw new Error('GraphQL context must be an instance of `Context`.') + const key: mixed = args['input'] if (!keyType.isTypeOf(key)) diff --git a/src/graphql/schema/collection/getCollectionType.ts b/src/graphql/schema/collection/getCollectionType.ts index aa7a02e646..c021fd4c47 100644 --- a/src/graphql/schema/collection/getCollectionType.ts +++ b/src/graphql/schema/collection/getCollectionType.ts @@ -1,5 +1,5 @@ import { GraphQLObjectType, GraphQLFieldConfig, GraphQLNonNull, GraphQLID, GraphQLOutputType } from 'graphql' -import { Collection, ObjectType, Relation } from '../../../interface' +import { Context, Collection, ObjectType, Relation } from '../../../interface' import { memoize2, formatName, buildObject, idSerde } from '../../utils' import getNodeInterfaceType from '../node/getNodeInterfaceType' import getType from '../getType' @@ -91,6 +91,9 @@ function createCollectionType (buildToken: BuildToken, collection: Collection): type: getCollectionType(buildToken, headCollection), async resolve (value, args, context): Promise { + if (!(context instanceof Context)) + throw new Error('GraphQL context must be an instance of `Context`.') + const key = relation.getHeadKeyFromTailValue(value) const headValue = await headCollectionKey.read!(context, key) diff --git a/src/graphql/schema/createConnectionField.ts b/src/graphql/schema/createConnectionField.ts index 58da689383..d0a1f31806 100644 --- a/src/graphql/schema/createConnectionField.ts +++ b/src/graphql/schema/createConnectionField.ts @@ -17,7 +17,7 @@ import { Kind, } from 'graphql' -import { Paginator, Condition, Type } from '../../interface' +import { Context, Paginator, Condition, Type } from '../../interface' import { buildObject, formatName, memoize2 } from '../utils' import getType from './getType' import BuildToken from './BuildToken' @@ -83,6 +83,9 @@ export default function createConnectionField , ): Promise> { + if (!(context instanceof Context)) + throw new Error('GraphQL context must be an instance of `Context`.') + const { orderBy: ordering = paginator.defaultOrdering, before: beforeCursor, @@ -163,7 +166,12 @@ export function _createConnectionType paginator.count(context, condition), + resolve: ({ paginator, condition }, args, context) => { + if (!(context instanceof Context)) + throw new Error('GraphQL context must be an instance of `Context`.') + + return paginator.count(context, condition) + }, // TODO: description }, edges: { diff --git a/src/graphql/schema/node/createNodeFieldEntry.ts b/src/graphql/schema/node/createNodeFieldEntry.ts index 792d3c52bb..bff6ea7a36 100644 --- a/src/graphql/schema/node/createNodeFieldEntry.ts +++ b/src/graphql/schema/node/createNodeFieldEntry.ts @@ -1,4 +1,5 @@ import { GraphQLFieldConfig, GraphQLNonNull, GraphQLID } from 'graphql' +import { Context } from '../../../interface' import idSerde from '../../utils/idSerde' import BuildToken from '../BuildToken' import getNodeInterfaceType from './getNodeInterfaceType' @@ -15,7 +16,10 @@ export default function createNodeFieldEntry (buildToken: BuildToken): [string, type: new GraphQLNonNull(GraphQLID), }, }, - resolve (source, args) { + resolve (source, args, context) { + if (!(context instanceof Context)) + throw new Error('GraphQL context must be an instance of `Context`.') + const { name, key } = idSerde.deserialize(args[options.nodeIdFieldName]) const collection = inventory.getCollection(name) @@ -24,10 +28,10 @@ export default function createNodeFieldEntry (buildToken: BuildToken): [string, const primaryKey = collection.primaryKey - if (!primaryKey) - throw new Error(`Invalid id, no primary key on collection named '${name}'.`) + if (!primaryKey || !primaryKey.read) + throw new Error(`Invalid id, no readable primary key on collection named '${name}'.`) - return primaryKey.read(key) + return primaryKey.read(context, key) }, }] } diff --git a/src/interface/collection/Collection.ts b/src/interface/collection/Collection.ts index e0ac4f9fa4..dd0a7c1b13 100644 --- a/src/interface/collection/Collection.ts +++ b/src/interface/collection/Collection.ts @@ -54,7 +54,7 @@ interface Collection { * the same `Type` as the `Collection`. This isn’t a hard requirement and * things might work fine if they’re different, but it may not work forever. */ - readonly paginator?: Paginator | null + readonly paginator?: Paginator | null /** * Creates a value in our collection. Returns the newly created value.