From 9bdc352e7db53fd6698e55f6653733e7ea636e42 Mon Sep 17 00:00:00 2001 From: yaacovCR Date: Thu, 24 Oct 2019 19:45:48 -0400 Subject: [PATCH] refactor(utils): consolidate more utils. Consolidate forEachField functions. Move forEachField and forEachDefaultValue to utils folder. Change forEachField, forEachDefaultValue and mergeDeep to no longer use default exports to fit style of other utils files. TODO: streamline use/nonuse of default exports within entire library. --- src/generate/addResolveFunctionsToSchema.ts | 11 ++++-- src/generate/assertResolveFunctionsPresent.ts | 2 +- src/generate/index.ts | 1 - src/makeExecutableSchema.ts | 8 ++-- src/mock.ts | 6 +-- src/stitching/mergeSchemas.ts | 38 +++++-------------- .../forEachDefaultValue.ts | 4 +- src/{generate => utils}/forEachField.ts | 4 +- src/utils/index.ts | 9 +++++ src/utils/mergeDeep.ts | 2 +- 10 files changed, 36 insertions(+), 49 deletions(-) rename src/{generate => utils}/forEachDefaultValue.ts (88%) rename src/{generate => utils}/forEachField.ts (85%) diff --git a/src/generate/addResolveFunctionsToSchema.ts b/src/generate/addResolveFunctionsToSchema.ts index c9fe386a72c..1b0dc06a37b 100644 --- a/src/generate/addResolveFunctionsToSchema.ts +++ b/src/generate/addResolveFunctionsToSchema.ts @@ -18,10 +18,13 @@ import { import SchemaError from './SchemaError'; import checkForResolveTypeResolver from './checkForResolveTypeResolver'; import extendResolversFromInterfaces from './extendResolversFromInterfaces'; -import forEachField from './forEachField'; -import forEachDefaultValue from './forEachDefaultValue'; -import { parseInputValue, serializeInputValue } from '../utils/transformInputValue'; -import { healSchema } from '../utils/heal'; +import { + parseInputValue, + serializeInputValue, + healSchema, + forEachField, + forEachDefaultValue, +} from '../utils'; function addResolveFunctionsToSchema( options: IAddResolveFunctionsToSchemaOptions | GraphQLSchema, diff --git a/src/generate/assertResolveFunctionsPresent.ts b/src/generate/assertResolveFunctionsPresent.ts index 9d170f237a6..ec51b3d0c90 100644 --- a/src/generate/assertResolveFunctionsPresent.ts +++ b/src/generate/assertResolveFunctionsPresent.ts @@ -5,7 +5,7 @@ import { GraphQLScalarType, } from 'graphql'; import { IResolverValidationOptions } from '../Interfaces'; -import forEachField from './forEachField'; +import { forEachField } from '../utils'; import SchemaError from './SchemaError'; function assertResolveFunctionsPresent( diff --git a/src/generate/index.ts b/src/generate/index.ts index 1cabbca287d..f447f981e1d 100644 --- a/src/generate/index.ts +++ b/src/generate/index.ts @@ -10,5 +10,4 @@ export { default as concatenateTypeDefs } from './concatenateTypeDefs'; export { default as decorateWithLogger } from './decorateWithLogger'; export { default as extendResolversFromInterfaces } from './extendResolversFromInterfaces'; export { default as extractExtensionDefinitions } from './extractExtensionDefinitions'; -export { default as forEachField } from './forEachField'; export { default as SchemaError } from './SchemaError'; diff --git a/src/makeExecutableSchema.ts b/src/makeExecutableSchema.ts index deedacd8378..e8fb4120e18 100644 --- a/src/makeExecutableSchema.ts +++ b/src/makeExecutableSchema.ts @@ -2,8 +2,11 @@ import { defaultFieldResolver, GraphQLSchema, GraphQLFieldResolver } from 'graph import { IExecutableSchemaDefinition, ILogger } from './Interfaces'; -import { SchemaDirectiveVisitor } from './utils/SchemaDirectiveVisitor'; -import mergeDeep from './utils/mergeDeep'; +import { + SchemaDirectiveVisitor, + forEachField, + mergeDeep +} from './utils'; import { attachDirectiveResolvers, @@ -13,7 +16,6 @@ import { addSchemaLevelResolveFunction, buildSchemaFromTypeDefinitions, decorateWithLogger, - forEachField, SchemaError } from './generate'; diff --git a/src/mock.ts b/src/mock.ts index 465b763f490..c6dc2a7dae6 100644 --- a/src/mock.ts +++ b/src/mock.ts @@ -16,10 +16,8 @@ import { GraphQLNonNull, } from 'graphql'; import * as uuid from 'uuid'; -import { - forEachField, - buildSchemaFromTypeDefinitions, -} from './makeExecutableSchema'; +import { buildSchemaFromTypeDefinitions } from './makeExecutableSchema'; +import { forEachField } from './utils'; import { IMocks, diff --git a/src/stitching/mergeSchemas.ts b/src/stitching/mergeSchemas.ts index 7ee934b6abc..a6d5977360f 100644 --- a/src/stitching/mergeSchemas.ts +++ b/src/stitching/mergeSchemas.ts @@ -1,6 +1,5 @@ import { DocumentNode, - GraphQLField, GraphQLNamedType, GraphQLObjectType, GraphQLResolveInfo, @@ -36,10 +35,15 @@ import { ExpandAbstractTypes, ReplaceFieldWithFragment, } from '../transforms'; -import mergeDeep from '../utils/mergeDeep'; -import { SchemaDirectiveVisitor } from '../utils/SchemaDirectiveVisitor'; -import { cloneDirective, cloneType } from '../utils/clone'; -import { healSchema, healTypes } from '../utils/heal'; +import { + SchemaDirectiveVisitor, + cloneDirective, + cloneType, + healSchema, + healTypes, + forEachField, + mergeDeep, +} from '../utils'; import { makeMergedType } from './makeMergedType'; type MergeTypeCandidate = { @@ -356,30 +360,6 @@ function createDelegatingResolver({ }; } -type FieldIteratorFn = ( - fieldDef: GraphQLField, - typeName: string, - fieldName: string, -) => void; - -function forEachField(schema: GraphQLSchema, fn: FieldIteratorFn): void { - const typeMap = schema.getTypeMap(); - Object.keys(typeMap).forEach(typeName => { - const type = typeMap[typeName]; - - if ( - !getNamedType(type).name.startsWith('__') && - type instanceof GraphQLObjectType - ) { - const fields = type.getFields(); - Object.keys(fields).forEach(fieldName => { - const field = fields[fieldName]; - fn(field, typeName, fieldName); - }); - } - }); -} - function addTypeCandidate( typeCandidates: { [name: string]: Array }, name: string, diff --git a/src/generate/forEachDefaultValue.ts b/src/utils/forEachDefaultValue.ts similarity index 88% rename from src/generate/forEachDefaultValue.ts rename to src/utils/forEachDefaultValue.ts index ef7655f7f87..189ced660fb 100644 --- a/src/generate/forEachDefaultValue.ts +++ b/src/utils/forEachDefaultValue.ts @@ -1,7 +1,7 @@ import { getNamedType, GraphQLInputObjectType, GraphQLSchema, GraphQLObjectType } from 'graphql'; import { IDefaultValueIteratorFn } from '../Interfaces'; -function forEachDefaultValue(schema: GraphQLSchema, fn: IDefaultValueIteratorFn): void { +export function forEachDefaultValue(schema: GraphQLSchema, fn: IDefaultValueIteratorFn): void { const typeMap = schema.getTypeMap(); Object.keys(typeMap).forEach(typeName => { @@ -27,5 +27,3 @@ function forEachDefaultValue(schema: GraphQLSchema, fn: IDefaultValueIteratorFn) } }); } - -export default forEachDefaultValue; diff --git a/src/generate/forEachField.ts b/src/utils/forEachField.ts similarity index 85% rename from src/generate/forEachField.ts rename to src/utils/forEachField.ts index f48da53a4b7..a75f866244b 100644 --- a/src/generate/forEachField.ts +++ b/src/utils/forEachField.ts @@ -1,7 +1,7 @@ import { getNamedType, GraphQLObjectType, GraphQLSchema } from 'graphql'; import { IFieldIteratorFn } from '../Interfaces'; -function forEachField(schema: GraphQLSchema, fn: IFieldIteratorFn): void { +export function forEachField(schema: GraphQLSchema, fn: IFieldIteratorFn): void { const typeMap = schema.getTypeMap(); Object.keys(typeMap).forEach(typeName => { const type = typeMap[typeName]; @@ -19,5 +19,3 @@ function forEachField(schema: GraphQLSchema, fn: IFieldIteratorFn): void { } }); } - -export default forEachField; diff --git a/src/utils/index.ts b/src/utils/index.ts index cabd47a08d5..7303b6f68fb 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -4,3 +4,12 @@ export { SchemaVisitor } from './SchemaVisitor'; export { SchemaDirectiveVisitor } from './SchemaDirectiveVisitor'; export { visitSchema } from './visitSchema'; export { getResolversFromSchema } from './getResolversFromSchema'; +export { forEachField } from './forEachField'; +export { forEachDefaultValue } from './forEachDefaultValue'; +export { + transformInputValue, + parseInputValue, + parseInputValueLiteral, + serializeInputValue, +} from './transformInputValue'; +export { mergeDeep } from './mergeDeep'; diff --git a/src/utils/mergeDeep.ts b/src/utils/mergeDeep.ts index 599ab656773..37ae2782a46 100644 --- a/src/utils/mergeDeep.ts +++ b/src/utils/mergeDeep.ts @@ -1,4 +1,4 @@ -export default function mergeDeep(target: any, source: any): any { +export function mergeDeep(target: any, source: any): any { let output = Object.assign({}, target); if (isObject(target) && isObject(source)) { Object.keys(source).forEach(key => {