@graphql-tools/utils 11.0.0-alpha-20251112101412-7b3e869e04dc287cf268a3275335f28e3490d10a → 11.0.0-alpha-20251224084859-76041a3e34f4ada36bb2f3f1ab3bcd0956d5873f

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.
package/cjs/errors.js CHANGED
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isGraphQLErrorLike = isGraphQLErrorLike;
3
4
  exports.createGraphQLError = createGraphQLError;
5
+ exports.getSchemaCoordinate = getSchemaCoordinate;
6
+ exports.locatedError = locatedError;
4
7
  exports.relocatedError = relocatedError;
5
8
  const graphql_1 = require("graphql");
6
9
  const possibleGraphQLErrorProperties = [
@@ -14,6 +17,7 @@ const possibleGraphQLErrorProperties = [
14
17
  'name',
15
18
  'stack',
16
19
  'extensions',
20
+ 'coordinate',
17
21
  ];
18
22
  function isGraphQLErrorLike(error) {
19
23
  return (error != null &&
@@ -26,12 +30,33 @@ function createGraphQLError(message, options) {
26
30
  isGraphQLErrorLike(options.originalError)) {
27
31
  options.originalError = createGraphQLError(options.originalError.message, options.originalError);
28
32
  }
29
- if (graphql_1.versionInfo.major >= 17) {
30
- return new graphql_1.GraphQLError(message, options);
33
+ // To avoid type error on graphql <16, we have to use an any type here
34
+ const Constructor = graphql_1.GraphQLError;
35
+ const error = graphql_1.versionInfo.major >= 16
36
+ ? new Constructor(message, options)
37
+ : new Constructor(message, options?.nodes, options?.source, options?.positions, options?.path, options?.originalError, options?.extensions);
38
+ if (options?.coordinate && error.coordinate == null) {
39
+ Object.defineProperties(error, {
40
+ coordinate: { value: options.coordinate, enumerable: true, configurable: true },
41
+ });
31
42
  }
32
- return new graphql_1.GraphQLError(message, options?.nodes, options?.source, options?.positions, options?.path, options?.originalError, options?.extensions);
43
+ return error;
33
44
  }
34
- function relocatedError(originalError, path) {
45
+ function getSchemaCoordinate(error) {
46
+ return error.coordinate;
47
+ }
48
+ function locatedError(rawError, nodes, path, info) {
49
+ const error = (0, graphql_1.locatedError)(rawError, nodes, path);
50
+ // `graphql` locatedError is only changing path and nodes if it is not already defined
51
+ if (!error.coordinate && info && error.coordinate == null) {
52
+ const coordinate = `${info.parentType.name}.${info.fieldName}`;
53
+ Object.defineProperties(error, {
54
+ coordinate: { value: coordinate, enumerable: true, configurable: true },
55
+ });
56
+ }
57
+ return error;
58
+ }
59
+ function relocatedError(originalError, path, info) {
35
60
  return createGraphQLError(originalError.message, {
36
61
  nodes: originalError.nodes,
37
62
  source: originalError.source,
@@ -39,5 +64,6 @@ function relocatedError(originalError, path) {
39
64
  path: path == null ? originalError.path : path,
40
65
  originalError,
41
66
  extensions: originalError.extensions,
67
+ coordinate: info ? `${info.parentType.name}.${info.fieldName}` : undefined,
42
68
  });
43
69
  }
package/esm/errors.js CHANGED
@@ -1,4 +1,4 @@
1
- import { GraphQLError, versionInfo } from 'graphql';
1
+ import { locatedError as _locatedError, GraphQLError, versionInfo } from 'graphql';
2
2
  const possibleGraphQLErrorProperties = [
3
3
  'message',
4
4
  'locations',
@@ -10,8 +10,9 @@ const possibleGraphQLErrorProperties = [
10
10
  'name',
11
11
  'stack',
12
12
  'extensions',
13
+ 'coordinate',
13
14
  ];
14
- function isGraphQLErrorLike(error) {
15
+ export function isGraphQLErrorLike(error) {
15
16
  return (error != null &&
16
17
  typeof error === 'object' &&
17
18
  Object.keys(error).every(key => possibleGraphQLErrorProperties.includes(key)));
@@ -22,12 +23,33 @@ export function createGraphQLError(message, options) {
22
23
  isGraphQLErrorLike(options.originalError)) {
23
24
  options.originalError = createGraphQLError(options.originalError.message, options.originalError);
24
25
  }
25
- if (versionInfo.major >= 17) {
26
- return new GraphQLError(message, options);
26
+ // To avoid type error on graphql <16, we have to use an any type here
27
+ const Constructor = GraphQLError;
28
+ const error = versionInfo.major >= 16
29
+ ? new Constructor(message, options)
30
+ : new Constructor(message, options?.nodes, options?.source, options?.positions, options?.path, options?.originalError, options?.extensions);
31
+ if (options?.coordinate && error.coordinate == null) {
32
+ Object.defineProperties(error, {
33
+ coordinate: { value: options.coordinate, enumerable: true, configurable: true },
34
+ });
27
35
  }
28
- return new GraphQLError(message, options?.nodes, options?.source, options?.positions, options?.path, options?.originalError, options?.extensions);
36
+ return error;
29
37
  }
30
- export function relocatedError(originalError, path) {
38
+ export function getSchemaCoordinate(error) {
39
+ return error.coordinate;
40
+ }
41
+ export function locatedError(rawError, nodes, path, info) {
42
+ const error = _locatedError(rawError, nodes, path);
43
+ // `graphql` locatedError is only changing path and nodes if it is not already defined
44
+ if (!error.coordinate && info && error.coordinate == null) {
45
+ const coordinate = `${info.parentType.name}.${info.fieldName}`;
46
+ Object.defineProperties(error, {
47
+ coordinate: { value: coordinate, enumerable: true, configurable: true },
48
+ });
49
+ }
50
+ return error;
51
+ }
52
+ export function relocatedError(originalError, path, info) {
31
53
  return createGraphQLError(originalError.message, {
32
54
  nodes: originalError.nodes,
33
55
  source: originalError.source,
@@ -35,5 +57,6 @@ export function relocatedError(originalError, path) {
35
57
  path: path == null ? originalError.path : path,
36
58
  originalError,
37
59
  extensions: originalError.extensions,
60
+ coordinate: info ? `${info.parentType.name}.${info.fieldName}` : undefined,
38
61
  });
39
62
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graphql-tools/utils",
3
- "version": "11.0.0-alpha-20251112101412-7b3e869e04dc287cf268a3275335f28e3490d10a",
3
+ "version": "11.0.0-alpha-20251224084859-76041a3e34f4ada36bb2f3f1ab3bcd0956d5873f",
4
4
  "description": "Common package containing utils and types for GraphQL tools",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
@@ -32,6 +32,13 @@ export interface ExecutionRequest<TVariables extends Record<string, any> = any,
32
32
  subgraphName?: string;
33
33
  info?: GraphQLResolveInfo;
34
34
  signal?: AbortSignal;
35
+ /**
36
+ * Enable/Disable the addition of field schema coordinate in GraphQL Errors extension
37
+ *
38
+ * Note: Schema Coordinate are exposed using Symbol.for('schemaCoordinate') so that it's not
39
+ * serialized. Exposing schema coordinate can ease the discovery of private schemas.
40
+ */
41
+ schemaCoordinateInErrors?: boolean;
35
42
  }
36
43
  export interface GraphQLParseOptions {
37
44
  noLocation?: boolean;
@@ -32,6 +32,13 @@ export interface ExecutionRequest<TVariables extends Record<string, any> = any,
32
32
  subgraphName?: string;
33
33
  info?: GraphQLResolveInfo;
34
34
  signal?: AbortSignal;
35
+ /**
36
+ * Enable/Disable the addition of field schema coordinate in GraphQL Errors extension
37
+ *
38
+ * Note: Schema Coordinate are exposed using Symbol.for('schemaCoordinate') so that it's not
39
+ * serialized. Exposing schema coordinate can ease the discovery of private schemas.
40
+ */
41
+ schemaCoordinateInErrors?: boolean;
35
42
  }
36
43
  export interface GraphQLParseOptions {
37
44
  noLocation?: boolean;
@@ -9,7 +9,25 @@ interface GraphQLErrorOptions {
9
9
  readonly extensions?: unknown;
10
10
  }>;
11
11
  extensions?: any;
12
+ coordinate?: string;
12
13
  }
14
+ declare module 'graphql' {
15
+ interface GraphQLError {
16
+ /**
17
+ * An optional schema coordinate (e.g. "MyType.myField") associated with this error.
18
+ */
19
+ readonly coordinate?: string;
20
+ }
21
+ }
22
+ export declare function isGraphQLErrorLike(error: any): boolean;
13
23
  export declare function createGraphQLError(message: string, options?: GraphQLErrorOptions): GraphQLError;
14
- export declare function relocatedError(originalError: GraphQLError, path?: ReadonlyArray<string | number>): GraphQLError;
24
+ type SchemaCoordinateInfo = {
25
+ fieldName: string;
26
+ parentType: {
27
+ name: string;
28
+ };
29
+ };
30
+ export declare function getSchemaCoordinate(error: GraphQLError): string | undefined;
31
+ export declare function locatedError(rawError: unknown, nodes: ASTNode | ReadonlyArray<ASTNode> | undefined, path: Maybe<ReadonlyArray<string | number>>, info?: SchemaCoordinateInfo | false | null | undefined): GraphQLError;
32
+ export declare function relocatedError(originalError: GraphQLError, path?: ReadonlyArray<string | number>, info?: SchemaCoordinateInfo | false | null | undefined): GraphQLError;
15
33
  export {};
@@ -9,7 +9,25 @@ interface GraphQLErrorOptions {
9
9
  readonly extensions?: unknown;
10
10
  }>;
11
11
  extensions?: any;
12
+ coordinate?: string;
12
13
  }
14
+ declare module 'graphql' {
15
+ interface GraphQLError {
16
+ /**
17
+ * An optional schema coordinate (e.g. "MyType.myField") associated with this error.
18
+ */
19
+ readonly coordinate?: string;
20
+ }
21
+ }
22
+ export declare function isGraphQLErrorLike(error: any): boolean;
13
23
  export declare function createGraphQLError(message: string, options?: GraphQLErrorOptions): GraphQLError;
14
- export declare function relocatedError(originalError: GraphQLError, path?: ReadonlyArray<string | number>): GraphQLError;
24
+ type SchemaCoordinateInfo = {
25
+ fieldName: string;
26
+ parentType: {
27
+ name: string;
28
+ };
29
+ };
30
+ export declare function getSchemaCoordinate(error: GraphQLError): string | undefined;
31
+ export declare function locatedError(rawError: unknown, nodes: ASTNode | ReadonlyArray<ASTNode> | undefined, path: Maybe<ReadonlyArray<string | number>>, info?: SchemaCoordinateInfo | false | null | undefined): GraphQLError;
32
+ export declare function relocatedError(originalError: GraphQLError, path?: ReadonlyArray<string | number>, info?: SchemaCoordinateInfo | false | null | undefined): GraphQLError;
15
33
  export {};