@graphql-codegen/visitor-plugin-common 6.2.0-alpha-20251119131248-4aa0bce27decc294509fae591f5c2236858abdbb → 6.2.1

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.
@@ -175,15 +175,17 @@ class BaseResolversVisitor extends base_visitor_js_1.BaseVisitor {
175
175
  const isMapped = this.config.mappers[typeName];
176
176
  const isScalar = this.config.scalars[typeName];
177
177
  const hasDefaultMapper = !!this.config.defaultMapper?.type;
178
- if (isRootType) {
179
- prev[typeName] = applyWrapper(this.config.rootValueType.type);
180
- return prev;
181
- }
178
+ // Check for mappers first, even for root types, to allow overriding rootValueType
182
179
  if (isMapped && this.config.mappers[typeName].type && !hasPlaceholder(this.config.mappers[typeName].type)) {
183
180
  this.markMapperAsUsed(typeName);
184
181
  prev[typeName] = applyWrapper(this.config.mappers[typeName].type);
182
+ return prev;
183
+ }
184
+ if (isRootType) {
185
+ prev[typeName] = applyWrapper(this.config.rootValueType.type);
186
+ return prev;
185
187
  }
186
- else if ((0, graphql_1.isEnumType)(schemaType) && this.config.enumValues[typeName]) {
188
+ if ((0, graphql_1.isEnumType)(schemaType) && this.config.enumValues[typeName]) {
187
189
  const isExternalFile = !!this.config.enumValues[typeName].sourceFile;
188
190
  prev[typeName] = isExternalFile
189
191
  ? this.convertName(this.config.enumValues[typeName].typeIdentifier, {
@@ -683,7 +683,20 @@ class SelectionSetToObject {
683
683
  buildParentFieldName(typeName, parentName) {
684
684
  // queries/mutations/fragments are guaranteed to be unique type names,
685
685
  // so we can skip affixing the field names with typeName
686
- return operationTypes.includes(typeName) ? parentName : `${parentName}_${typeName}`;
686
+ if (operationTypes.includes(typeName)) {
687
+ return parentName;
688
+ }
689
+ // When the parent schema type is an interface, use the interface name instead of the concrete type
690
+ // BUT only if we're not inside a fragment (fragments explicitly target specific types)
691
+ const schemaType = this._schema.getType(typeName);
692
+ const isInFragment = parentName.includes('Fragment');
693
+ if ((0, graphql_1.isObjectType)(schemaType) &&
694
+ this._parentSchemaType &&
695
+ (0, graphql_1.isInterfaceType)(this._parentSchemaType) &&
696
+ !isInFragment) {
697
+ return `${parentName}_${this._parentSchemaType.name}`;
698
+ }
699
+ return `${parentName}_${typeName}`;
687
700
  }
688
701
  }
689
702
  exports.SelectionSetToObject = SelectionSetToObject;
@@ -171,15 +171,17 @@ export class BaseResolversVisitor extends BaseVisitor {
171
171
  const isMapped = this.config.mappers[typeName];
172
172
  const isScalar = this.config.scalars[typeName];
173
173
  const hasDefaultMapper = !!this.config.defaultMapper?.type;
174
- if (isRootType) {
175
- prev[typeName] = applyWrapper(this.config.rootValueType.type);
176
- return prev;
177
- }
174
+ // Check for mappers first, even for root types, to allow overriding rootValueType
178
175
  if (isMapped && this.config.mappers[typeName].type && !hasPlaceholder(this.config.mappers[typeName].type)) {
179
176
  this.markMapperAsUsed(typeName);
180
177
  prev[typeName] = applyWrapper(this.config.mappers[typeName].type);
178
+ return prev;
179
+ }
180
+ if (isRootType) {
181
+ prev[typeName] = applyWrapper(this.config.rootValueType.type);
182
+ return prev;
181
183
  }
182
- else if (isEnumType(schemaType) && this.config.enumValues[typeName]) {
184
+ if (isEnumType(schemaType) && this.config.enumValues[typeName]) {
183
185
  const isExternalFile = !!this.config.enumValues[typeName].sourceFile;
184
186
  prev[typeName] = isExternalFile
185
187
  ? this.convertName(this.config.enumValues[typeName].typeIdentifier, {
@@ -679,7 +679,20 @@ export class SelectionSetToObject {
679
679
  buildParentFieldName(typeName, parentName) {
680
680
  // queries/mutations/fragments are guaranteed to be unique type names,
681
681
  // so we can skip affixing the field names with typeName
682
- return operationTypes.includes(typeName) ? parentName : `${parentName}_${typeName}`;
682
+ if (operationTypes.includes(typeName)) {
683
+ return parentName;
684
+ }
685
+ // When the parent schema type is an interface, use the interface name instead of the concrete type
686
+ // BUT only if we're not inside a fragment (fragments explicitly target specific types)
687
+ const schemaType = this._schema.getType(typeName);
688
+ const isInFragment = parentName.includes('Fragment');
689
+ if (isObjectType(schemaType) &&
690
+ this._parentSchemaType &&
691
+ isInterfaceType(this._parentSchemaType) &&
692
+ !isInFragment) {
693
+ return `${parentName}_${this._parentSchemaType.name}`;
694
+ }
695
+ return `${parentName}_${typeName}`;
683
696
  }
684
697
  }
685
698
  function formatUnion(members) {
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@graphql-codegen/visitor-plugin-common",
3
- "version": "6.2.0-alpha-20251119131248-4aa0bce27decc294509fae591f5c2236858abdbb",
3
+ "version": "6.2.1",
4
4
  "peerDependencies": {
5
5
  "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
6
6
  },
7
7
  "dependencies": {
8
8
  "@graphql-tools/optimize": "^2.0.0",
9
- "@graphql-codegen/plugin-helpers": "6.1.0-alpha-20251119131248-4aa0bce27decc294509fae591f5c2236858abdbb",
9
+ "@graphql-codegen/plugin-helpers": "^6.1.0",
10
10
  "@graphql-tools/relay-operation-optimizer": "^7.0.0",
11
11
  "@graphql-tools/utils": "^10.0.0",
12
12
  "auto-bind": "~4.0.0",