@graphql-inspector/core 4.1.1 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,6 +7,7 @@ const document_js_1 = require("../ast/document.js");
7
7
  const apollo_js_1 = require("../utils/apollo.js");
8
8
  const graphql_js_1 = require("../utils/graphql.js");
9
9
  const alias_count_js_1 = require("./alias-count.js");
10
+ const complexity_1 = require("./complexity");
10
11
  const directive_count_js_1 = require("./directive-count.js");
11
12
  const query_depth_js_1 = require("./query-depth.js");
12
13
  const token_count_js_1 = require("./token-count.js");
@@ -70,6 +71,22 @@ function validate(schema, sources, options) {
70
71
  errors.push(depthError);
71
72
  }
72
73
  }
74
+ if (config.validateComplexityConfig) {
75
+ const complexityScoreError = (0, complexity_1.validateComplexity)({
76
+ source: doc.source,
77
+ doc: transformedDoc,
78
+ maxComplexityScore: config.validateComplexityConfig.maxComplexityScore,
79
+ config: {
80
+ scalarCost: config.validateComplexityConfig.complexityScalarCost,
81
+ objectCost: config.validateComplexityConfig.complexityObjectCost,
82
+ depthCostFactor: config.validateComplexityConfig.complexityDepthCostFactor,
83
+ },
84
+ fragmentGraph: graph,
85
+ });
86
+ if (complexityScoreError) {
87
+ errors.push(complexityScoreError);
88
+ }
89
+ }
73
90
  if (config.maxAliasCount) {
74
91
  const aliasError = (0, alias_count_js_1.validateAliasCount)({
75
92
  source: doc.source,
@@ -4,6 +4,7 @@ import { readDocument } from '../ast/document.js';
4
4
  import { transformDocumentWithApollo, transformSchemaWithApollo } from '../utils/apollo.js';
5
5
  import { findDeprecatedUsages } from '../utils/graphql.js';
6
6
  import { validateAliasCount } from './alias-count.js';
7
+ import { validateComplexity } from './complexity';
7
8
  import { validateDirectiveCount } from './directive-count.js';
8
9
  import { validateQueryDepth } from './query-depth.js';
9
10
  import { validateTokenCount } from './token-count.js';
@@ -67,6 +68,22 @@ export function validate(schema, sources, options) {
67
68
  errors.push(depthError);
68
69
  }
69
70
  }
71
+ if (config.validateComplexityConfig) {
72
+ const complexityScoreError = validateComplexity({
73
+ source: doc.source,
74
+ doc: transformedDoc,
75
+ maxComplexityScore: config.validateComplexityConfig.maxComplexityScore,
76
+ config: {
77
+ scalarCost: config.validateComplexityConfig.complexityScalarCost,
78
+ objectCost: config.validateComplexityConfig.complexityObjectCost,
79
+ depthCostFactor: config.validateComplexityConfig.complexityDepthCostFactor,
80
+ },
81
+ fragmentGraph: graph,
82
+ });
83
+ if (complexityScoreError) {
84
+ errors.push(complexityScoreError);
85
+ }
86
+ }
70
87
  if (config.maxAliasCount) {
71
88
  const aliasError = validateAliasCount({
72
89
  source: doc.source,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graphql-inspector/core",
3
- "version": "4.1.1",
3
+ "version": "4.2.0",
4
4
  "description": "Tooling for GraphQL. Compare GraphQL Schemas, check documents, find breaking changes, find similar types.",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
@@ -6,6 +6,12 @@ export type CalculateOperationComplexityConfig = {
6
6
  objectCost: number;
7
7
  depthCostFactor: number;
8
8
  };
9
+ export type ValidateOperationComplexityConfig = {
10
+ maxComplexityScore: number;
11
+ complexityScalarCost: number;
12
+ complexityObjectCost: number;
13
+ complexityDepthCostFactor: number;
14
+ };
9
15
  export declare function validateComplexity({ source, doc, maxComplexityScore, config, fragmentGraph, }: {
10
16
  source: Source;
11
17
  doc: DocumentNode;
@@ -6,6 +6,12 @@ export type CalculateOperationComplexityConfig = {
6
6
  objectCost: number;
7
7
  depthCostFactor: number;
8
8
  };
9
+ export type ValidateOperationComplexityConfig = {
10
+ maxComplexityScore: number;
11
+ complexityScalarCost: number;
12
+ complexityObjectCost: number;
13
+ complexityDepthCostFactor: number;
14
+ };
9
15
  export declare function validateComplexity({ source, doc, maxComplexityScore, config, fragmentGraph, }: {
10
16
  source: Source;
11
17
  doc: DocumentNode;
@@ -1,4 +1,5 @@
1
1
  import { GraphQLError, GraphQLSchema, Source } from 'graphql';
2
+ import { ValidateOperationComplexityConfig } from './complexity';
2
3
  export interface InvalidDocument {
3
4
  source: Source;
4
5
  errors: GraphQLError[];
@@ -45,5 +46,10 @@ export interface ValidateOptions {
45
46
  * @default Infinity
46
47
  */
47
48
  maxTokenCount?: number;
49
+ /**
50
+ * Fails when complexity score exceeds maximum complexity score (including the referenced fragments).
51
+ * @default Infinity
52
+ */
53
+ validateComplexityConfig?: ValidateOperationComplexityConfig;
48
54
  }
49
55
  export declare function validate(schema: GraphQLSchema, sources: Source[], options?: ValidateOptions): InvalidDocument[];
@@ -1,4 +1,5 @@
1
1
  import { GraphQLError, GraphQLSchema, Source } from 'graphql';
2
+ import { ValidateOperationComplexityConfig } from './complexity';
2
3
  export interface InvalidDocument {
3
4
  source: Source;
4
5
  errors: GraphQLError[];
@@ -45,5 +46,10 @@ export interface ValidateOptions {
45
46
  * @default Infinity
46
47
  */
47
48
  maxTokenCount?: number;
49
+ /**
50
+ * Fails when complexity score exceeds maximum complexity score (including the referenced fragments).
51
+ * @default Infinity
52
+ */
53
+ validateComplexityConfig?: ValidateOperationComplexityConfig;
48
54
  }
49
55
  export declare function validate(schema: GraphQLSchema, sources: Source[], options?: ValidateOptions): InvalidDocument[];