Skip to content

Commit abc0dad

Browse files
committed
fix: graphql schema cache system
1 parent 66e25db commit abc0dad

File tree

3 files changed

+35
-15
lines changed

3 files changed

+35
-15
lines changed

package-lock.json

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"graphql-tag": "2.12.5",
4040
"graphql-upload": "11.0.0",
4141
"intersect": "1.0.1",
42+
"json-stable-stringify": "1.0.1",
4243
"jsonwebtoken": "8.5.1",
4344
"jwks-rsa": "1.12.3",
4445
"ldapjs": "2.3.1",

src/GraphQL/ParseGraphQLSchema.js

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Parse from 'parse/node';
22
import { GraphQLSchema, GraphQLObjectType, DocumentNode, GraphQLNamedType } from 'graphql';
33
import { stitchSchemas } from '@graphql-tools/stitch';
4+
import stableStringify from 'json-stable-stringify';
45
import { SchemaDirectiveVisitor } from '@graphql-tools/utils';
56
import requiredParameter from '../requiredParameter';
67
import * 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

Comments
 (0)