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 +17 -11
- package/esm/proxy.js +17 -4
- package/package.json +1 -1
- package/script/codegen.js +17 -11
- package/script/proxy.js +17 -4
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]) => [
|
|
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))
|
|
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(
|
|
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
|
-
//
|
|
165
|
-
const
|
|
166
|
-
if (
|
|
167
|
-
|
|
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
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]) => [
|
|
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))
|
|
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(
|
|
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
|
-
//
|
|
169
|
-
const
|
|
170
|
-
if (
|
|
171
|
-
|
|
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) => {
|