graphql-data-generator 0.4.3-alpha.0 → 0.4.3

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/esm/codegen.js CHANGED
@@ -170,7 +170,12 @@ const getSelectionsType = (name, selections, definitions, fragments, references,
170
170
  const group = selection.typeCondition?.name.value ??
171
171
  selection.directives?.map((d) => d.name).join(",");
172
172
  selectionTypes.push(...(group
173
- ? subSelection.map(([n, t, g, originalName]) => [n, t, g ? `${group}:${g}` : group, originalName])
173
+ ? subSelection.map(([n, t, g, originalName]) => [
174
+ n,
175
+ t,
176
+ g ? `${group}:${g}` : group,
177
+ originalName,
178
+ ])
174
179
  : subSelection));
175
180
  break;
176
181
  }
@@ -268,7 +273,8 @@ const serializeType = (type, variables = false, depth = 0) => {
268
273
  ].filter(Boolean).join(" & ")}${type.optional ? " | null" : ""}`;
269
274
  }
270
275
  case "Union":
271
- return type.value.map(member => serializeType(member, variables, depth)).join(" | ") +
276
+ return type.value.map((member) => serializeType(member, variables, depth))
277
+ .join(" | ") +
272
278
  (type.optional ? " | null" : "");
273
279
  case "StringLiteral":
274
280
  return `"${type.value}"`;
@@ -307,7 +313,7 @@ const fillOutInput = (input, inputs, references) => {
307
313
  case "Union":
308
314
  return {
309
315
  ...input,
310
- value: input.value.map(member => fillOutInput(member, inputs, references))
316
+ value: input.value.map((member) => fillOutInput(member, inputs, references)),
311
317
  };
312
318
  case "StringLiteral":
313
319
  return input;
@@ -605,7 +611,7 @@ ${usedTypes.map(([name]) => ` ${name}: ${rename(name)};`).join("\n")}
605
611
  enumerable: true,
606
612
  value: {
607
613
  kind: "StringLiteral",
608
- value: group.split(':')[0], // Handle nested groups
614
+ value: group.split(":")[0], // Handle nested groups
609
615
  optional: false,
610
616
  },
611
617
  });
@@ -638,7 +644,7 @@ ${usedTypes.map(([name]) => ` ${name}: ${rename(name)};`).join("\n")}
638
644
  value: unionMembers,
639
645
  optional: false,
640
646
  },
641
- [...new Set(fragmentSelections.map(([name]) => name))]
647
+ [...new Set(fragmentSelections.map(([name]) => name))],
642
648
  ];
643
649
  }
644
650
  else {
@@ -647,7 +653,7 @@ ${usedTypes.map(([name]) => ` ${name}: ${rename(name)};`).join("\n")}
647
653
  fields[name] = type;
648
654
  return fields;
649
655
  }, {});
650
- // Add __typename for object types
656
+ // Add __typename for object types
651
657
  const baseTypeDef = types[fragment.typeCondition.name.value];
652
658
  if (includeTypenames && baseTypeDef?.[0].kind === "ObjectTypeDefinition") {
653
659
  Object.defineProperty(fragmentFields, "__typename", {
@@ -666,25 +672,25 @@ ${usedTypes.map(([name]) => ` ${name}: ${rename(name)};`).join("\n")}
666
672
  value: fragmentFields,
667
673
  optional: false,
668
674
  },
669
- [...new Set(fragmentSelections.map(([name]) => name))]
675
+ [...new Set(fragmentSelections.map(([name]) => name))],
670
676
  ];
671
677
  }
672
678
  });
673
679
  if (fragmentTypes.length) {
674
680
  serializedTypes.unshift(...fragmentTypes.map(([name, type, _fields]) => `${exports.includes("types") ? "export " : ""}type ${name} = ${serializeType(type, false)};`).filter(filterOutputTypes));
675
681
  // Update Types export to include fragments
676
- const typesIndex = serializedTypes.findIndex(line => line?.startsWith("export type Types = {"));
682
+ const typesIndex = serializedTypes.findIndex((line) => line?.startsWith("export type Types = {"));
677
683
  if (typesIndex !== -1) {
678
684
  const existingTypesExport = serializedTypes[typesIndex];
679
685
  const updatedTypesExport = existingTypesExport.replace("export type Types = {", `export type Types = {
680
686
  ${fragmentTypes.map(([name]) => ` ${name}: ${name};`).join("\n")}${usedTypes.length ? "\n" : ""}`);
681
687
  serializedTypes[typesIndex] = updatedTypesExport;
682
688
  }
683
- // Update types const export to include fragments
684
- const typesConstIndex = serializedTypes.findIndex(line => line?.startsWith("export const types = {"));
689
+ // Update types const export to include fragments
690
+ const typesConstIndex = serializedTypes.findIndex((line) => line?.startsWith("export const types = {"));
685
691
  if (typesConstIndex !== -1) {
686
692
  const existingTypesConstExport = serializedTypes[typesConstIndex];
687
- const fragmentTypesConst = fragmentTypes.map(([name, , fields]) => ` ${name}: [${fields.map(f => `"${f}"`).join(", ")}]`).join(",\n");
693
+ const fragmentTypesConst = fragmentTypes.map(([name, , fields]) => ` ${name}: [${fields.map((f) => `"${f}"`).join(", ")}]`).join(",\n");
688
694
  const updatedTypesConstExport = existingTypesConstExport.replace("export const types = {", `export const types = {
689
695
  ${fragmentTypesConst}${usedTypes.length && fragmentTypes.length ? "," : ""}${usedTypes.length ? "\n" : ""}`);
690
696
  serializedTypes[typesConstIndex] = updatedTypesConstExport;
package/esm/proxy.js CHANGED
@@ -161,10 +161,23 @@ const resolveConcreteType = (definitions, definition, patch, prev, selectionSet)
161
161
  if (options.length === 0) {
162
162
  throw new Error(`Could not find concrete type for ${definition.name.value}`);
163
163
  }
164
- // Prefer a type that has a default patch defined
165
- const typeWithDefault = options.find((o) => getDefaultPatch(o.name.value));
166
- if (typeWithDefault)
167
- return typeWithDefault;
164
+ // Check for default patch on the union/interface type itself
165
+ const unionDefault = getDefaultPatch(definition.name.value);
166
+ if (unionDefault && typeof unionDefault === "object") {
167
+ let defaultOptions = [...options];
168
+ for (const field in unionDefault) {
169
+ defaultOptions = defaultOptions.filter((o) => field === "__typename"
170
+ ? o.name.value === unionDefault[field]
171
+ : o.fields?.some((f) => f.name.value === field) ||
172
+ (definition.kind === Kind.INTERFACE_TYPE_DEFINITION &&
173
+ definition.fields?.some((f) => f.name.value === field)));
174
+ if (defaultOptions.length === 1)
175
+ return defaultOptions[0];
176
+ }
177
+ if (defaultOptions.length > 0 && defaultOptions.length < options.length) {
178
+ return defaultOptions[0];
179
+ }
180
+ }
168
181
  return options[0];
169
182
  };
170
183
  const resolveValue = (definitions, scalars, type, ctx) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "graphql-data-generator",
3
- "version": "0.4.3-alpha.0",
3
+ "version": "0.4.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/voces/graphql-data-generator.git"
package/script/codegen.js CHANGED
@@ -176,7 +176,12 @@ const getSelectionsType = (name, selections, definitions, fragments, references,
176
176
  const group = selection.typeCondition?.name.value ??
177
177
  selection.directives?.map((d) => d.name).join(",");
178
178
  selectionTypes.push(...(group
179
- ? subSelection.map(([n, t, g, originalName]) => [n, t, g ? `${group}:${g}` : group, originalName])
179
+ ? subSelection.map(([n, t, g, originalName]) => [
180
+ n,
181
+ t,
182
+ g ? `${group}:${g}` : group,
183
+ originalName,
184
+ ])
180
185
  : subSelection));
181
186
  break;
182
187
  }
@@ -274,7 +279,8 @@ const serializeType = (type, variables = false, depth = 0) => {
274
279
  ].filter(Boolean).join(" & ")}${type.optional ? " | null" : ""}`;
275
280
  }
276
281
  case "Union":
277
- return type.value.map(member => serializeType(member, variables, depth)).join(" | ") +
282
+ return type.value.map((member) => serializeType(member, variables, depth))
283
+ .join(" | ") +
278
284
  (type.optional ? " | null" : "");
279
285
  case "StringLiteral":
280
286
  return `"${type.value}"`;
@@ -313,7 +319,7 @@ const fillOutInput = (input, inputs, references) => {
313
319
  case "Union":
314
320
  return {
315
321
  ...input,
316
- value: input.value.map(member => fillOutInput(member, inputs, references))
322
+ value: input.value.map((member) => fillOutInput(member, inputs, references)),
317
323
  };
318
324
  case "StringLiteral":
319
325
  return input;
@@ -611,7 +617,7 @@ ${usedTypes.map(([name]) => ` ${name}: ${rename(name)};`).join("\n")}
611
617
  enumerable: true,
612
618
  value: {
613
619
  kind: "StringLiteral",
614
- value: group.split(':')[0], // Handle nested groups
620
+ value: group.split(":")[0], // Handle nested groups
615
621
  optional: false,
616
622
  },
617
623
  });
@@ -644,7 +650,7 @@ ${usedTypes.map(([name]) => ` ${name}: ${rename(name)};`).join("\n")}
644
650
  value: unionMembers,
645
651
  optional: false,
646
652
  },
647
- [...new Set(fragmentSelections.map(([name]) => name))]
653
+ [...new Set(fragmentSelections.map(([name]) => name))],
648
654
  ];
649
655
  }
650
656
  else {
@@ -653,7 +659,7 @@ ${usedTypes.map(([name]) => ` ${name}: ${rename(name)};`).join("\n")}
653
659
  fields[name] = type;
654
660
  return fields;
655
661
  }, {});
656
- // Add __typename for object types
662
+ // Add __typename for object types
657
663
  const baseTypeDef = types[fragment.typeCondition.name.value];
658
664
  if (includeTypenames && baseTypeDef?.[0].kind === "ObjectTypeDefinition") {
659
665
  Object.defineProperty(fragmentFields, "__typename", {
@@ -672,25 +678,25 @@ ${usedTypes.map(([name]) => ` ${name}: ${rename(name)};`).join("\n")}
672
678
  value: fragmentFields,
673
679
  optional: false,
674
680
  },
675
- [...new Set(fragmentSelections.map(([name]) => name))]
681
+ [...new Set(fragmentSelections.map(([name]) => name))],
676
682
  ];
677
683
  }
678
684
  });
679
685
  if (fragmentTypes.length) {
680
686
  serializedTypes.unshift(...fragmentTypes.map(([name, type, _fields]) => `${exports.includes("types") ? "export " : ""}type ${name} = ${serializeType(type, false)};`).filter(filterOutputTypes));
681
687
  // Update Types export to include fragments
682
- const typesIndex = serializedTypes.findIndex(line => line?.startsWith("export type Types = {"));
688
+ const typesIndex = serializedTypes.findIndex((line) => line?.startsWith("export type Types = {"));
683
689
  if (typesIndex !== -1) {
684
690
  const existingTypesExport = serializedTypes[typesIndex];
685
691
  const updatedTypesExport = existingTypesExport.replace("export type Types = {", `export type Types = {
686
692
  ${fragmentTypes.map(([name]) => ` ${name}: ${name};`).join("\n")}${usedTypes.length ? "\n" : ""}`);
687
693
  serializedTypes[typesIndex] = updatedTypesExport;
688
694
  }
689
- // Update types const export to include fragments
690
- const typesConstIndex = serializedTypes.findIndex(line => line?.startsWith("export const types = {"));
695
+ // Update types const export to include fragments
696
+ const typesConstIndex = serializedTypes.findIndex((line) => line?.startsWith("export const types = {"));
691
697
  if (typesConstIndex !== -1) {
692
698
  const existingTypesConstExport = serializedTypes[typesConstIndex];
693
- const fragmentTypesConst = fragmentTypes.map(([name, , fields]) => ` ${name}: [${fields.map(f => `"${f}"`).join(", ")}]`).join(",\n");
699
+ const fragmentTypesConst = fragmentTypes.map(([name, , fields]) => ` ${name}: [${fields.map((f) => `"${f}"`).join(", ")}]`).join(",\n");
694
700
  const updatedTypesConstExport = existingTypesConstExport.replace("export const types = {", `export const types = {
695
701
  ${fragmentTypesConst}${usedTypes.length && fragmentTypes.length ? "," : ""}${usedTypes.length ? "\n" : ""}`);
696
702
  serializedTypes[typesConstIndex] = updatedTypesConstExport;
package/script/proxy.js CHANGED
@@ -165,10 +165,23 @@ const resolveConcreteType = (definitions, definition, patch, prev, selectionSet)
165
165
  if (options.length === 0) {
166
166
  throw new Error(`Could not find concrete type for ${definition.name.value}`);
167
167
  }
168
- // Prefer a type that has a default patch defined
169
- const typeWithDefault = options.find((o) => getDefaultPatch(o.name.value));
170
- if (typeWithDefault)
171
- return typeWithDefault;
168
+ // Check for default patch on the union/interface type itself
169
+ const unionDefault = getDefaultPatch(definition.name.value);
170
+ if (unionDefault && typeof unionDefault === "object") {
171
+ let defaultOptions = [...options];
172
+ for (const field in unionDefault) {
173
+ defaultOptions = defaultOptions.filter((o) => field === "__typename"
174
+ ? o.name.value === unionDefault[field]
175
+ : o.fields?.some((f) => f.name.value === field) ||
176
+ (definition.kind === graphql_1.Kind.INTERFACE_TYPE_DEFINITION &&
177
+ definition.fields?.some((f) => f.name.value === field)));
178
+ if (defaultOptions.length === 1)
179
+ return defaultOptions[0];
180
+ }
181
+ if (defaultOptions.length > 0 && defaultOptions.length < options.length) {
182
+ return defaultOptions[0];
183
+ }
184
+ }
172
185
  return options[0];
173
186
  };
174
187
  const resolveValue = (definitions, scalars, type, ctx) => {