11import Parse from 'parse/node' ;
22import { GraphQLSchema , GraphQLObjectType , DocumentNode , GraphQLNamedType } from 'graphql' ;
33import { stitchSchemas } from '@graphql-tools/stitch' ;
4+ import stableStringify from 'json-stable-stringify' ;
45import { SchemaDirectiveVisitor } from '@graphql-tools/utils' ;
56import requiredParameter from '../requiredParameter' ;
67import * as defaultGraphQLTypes from './loaders/defaultGraphQLTypes' ;
@@ -93,15 +94,12 @@ class ParseGraphQLSchema {
9394 async load ( ) {
9495 const { parseGraphQLConfig } = await this . _initializeSchemaAndConfig ( ) ;
9596 const parseClasses = await this . _getClassesForSchema ( parseGraphQLConfig ) ;
96- const parseClassesString = JSON . stringify ( parseClasses ) ;
9797 const functionNames = await this . _getFunctionNames ( ) ;
9898 const functionNamesString = JSON . stringify ( functionNames ) ;
9999
100100 if (
101- this . graphQLSchema &&
102101 ! this . _hasSchemaInputChanged ( {
103102 parseClasses,
104- parseClassesString,
105103 parseGraphQLConfig,
106104 functionNamesString,
107105 } )
@@ -110,7 +108,6 @@ class ParseGraphQLSchema {
110108 }
111109
112110 this . parseClasses = parseClasses ;
113- this . parseClassesString = parseClassesString ;
114111 this . parseGraphQLConfig = parseGraphQLConfig ;
115112 this . functionNames = functionNames ;
116113 this . functionNamesString = functionNamesString ;
@@ -497,26 +494,35 @@ class ParseGraphQLSchema {
497494 */
498495 _hasSchemaInputChanged ( params : {
499496 parseClasses : any ,
500- parseClassesString : string ,
501497 parseGraphQLConfig : ?ParseGraphQLConfig ,
502498 functionNamesString : string ,
503499 } ) : boolean {
504- const { parseClasses , parseClassesString , parseGraphQLConfig , functionNamesString } = params ;
500+ const { parseClasses , parseGraphQLConfig , functionNamesString } = params ;
501+
502+ // First init
503+ if ( ! this . parseClassesString || ! this . graphQLSchema ) {
504+ const thisParseClassesObj = parseClasses . reduce ( ( acc , clzz ) => {
505+ acc [ clzz . className ] = clzz ;
506+ return acc ;
507+ } , { } ) ;
508+ this . parseClassesString = stableStringify ( thisParseClassesObj ) ;
509+ return true ;
510+ }
505511
512+ const parseClassesObj = parseClasses . reduce ( ( acc , clzz ) => {
513+ acc [ clzz . className ] = clzz ;
514+ return acc ;
515+ } , { } ) ;
516+ const newParseClassesString = stableStringify ( parseClassesObj ) ;
506517 if (
507518 JSON . stringify ( this . parseGraphQLConfig ) === JSON . stringify ( parseGraphQLConfig ) &&
508- this . functionNamesString === functionNamesString
519+ this . functionNamesString === functionNamesString &&
520+ this . parseClassesString === newParseClassesString
509521 ) {
510- if ( this . parseClasses === parseClasses ) {
511- return false ;
512- }
513-
514- if ( this . parseClassesString === parseClassesString ) {
515- this . parseClasses = parseClasses ;
516- return false ;
517- }
522+ return false ;
518523 }
519524
525+ this . parseClassesString = newParseClassesString ;
520526 return true ;
521527 }
522528}
0 commit comments