graphql-data-generator 0.3.1-alpha.0 → 0.3.1-alpha.2
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 +33 -4
- package/package.json +4 -4
- package/script/codegen.js +33 -4
package/esm/codegen.js
CHANGED
|
@@ -45,6 +45,28 @@ const getType = ({ type, ...props }) => {
|
|
|
45
45
|
}, {});
|
|
46
46
|
const value = groupedValues[type.name.value] ?? {};
|
|
47
47
|
delete groupedValues[type.name.value];
|
|
48
|
+
if (def?.[0].kind === "UnionTypeDefinition") {
|
|
49
|
+
def[1].add(type.name.value);
|
|
50
|
+
// This is a terrible solution and we should instead produce a tree that
|
|
51
|
+
// is simplified
|
|
52
|
+
let iface = props.definitions[def[0].types?.[0]?.name.value ?? ""]?.[0];
|
|
53
|
+
if (iface && "interfaces" in iface) {
|
|
54
|
+
iface = props.definitions[iface.interfaces?.[0]?.name.value ?? ""]?.[0];
|
|
55
|
+
}
|
|
56
|
+
const interfaceName = iface?.kind === "InterfaceTypeDefinition"
|
|
57
|
+
? iface.name.value
|
|
58
|
+
: undefined;
|
|
59
|
+
if (interfaceName &&
|
|
60
|
+
groupedValues[interfaceName] &&
|
|
61
|
+
Object.keys(groupedValues).every((k) => k === interfaceName ||
|
|
62
|
+
def[0].types?.some((t) => t.name.value === k))) {
|
|
63
|
+
Object.assign(value, groupedValues[interfaceName]);
|
|
64
|
+
delete groupedValues[interfaceName];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else if (def?.[0].kind === "InterfaceTypeDefinition") {
|
|
68
|
+
def[1].add(type.name.value);
|
|
69
|
+
}
|
|
48
70
|
const nonExhaustive = implementations
|
|
49
71
|
.filter((o) => !(o[0].name.value in groupedValues)).map((o) => o[0].name.value);
|
|
50
72
|
return {
|
|
@@ -473,7 +495,6 @@ export const codegen = (schema, files, { enums = "literals", scalars, includeTyp
|
|
|
473
495
|
}
|
|
474
496
|
handledInputs.add(current);
|
|
475
497
|
}
|
|
476
|
-
// return `type ${type.value} = ${serializeType(inputType)};`;
|
|
477
498
|
}).filter(Boolean)).filter(filterOutputTypes),
|
|
478
499
|
...collection.flatMap((o) => {
|
|
479
500
|
const name = operationDataName(o, operationType);
|
|
@@ -510,13 +531,21 @@ ${collection.map((o) => ` ${o.name}: "${relative(process.cwd(), o.path)}",`).jo
|
|
|
510
531
|
${Array.from(handledInputs).map((i) => ` ${i}: ${rename(i)};`).join("\n")}
|
|
511
532
|
};`, `export const inputs = [${Array.from(handledInputs).map((i) => `"${i}"`).join(", ")}] as const;`);
|
|
512
533
|
}
|
|
534
|
+
// console.log(types["Node"]);
|
|
513
535
|
const usedTypes = Object.entries(types)
|
|
514
536
|
.map(([name, info]) => [name, ...info])
|
|
515
|
-
.filter((data) => data[1].kind === "ObjectTypeDefinition"
|
|
537
|
+
.filter((data) => (data[1].kind === "ObjectTypeDefinition" ||
|
|
538
|
+
data[1].kind === "UnionTypeDefinition" ||
|
|
539
|
+
data[1].kind === "InterfaceTypeDefinition") && data[2].size > 0);
|
|
516
540
|
if (usedTypes.length) {
|
|
517
|
-
serializedTypes.unshift(...usedTypes.map(([name, type, usage]) => `${exports.includes("types") ? "export " : ""}type ${name} = {
|
|
541
|
+
serializedTypes.unshift(...usedTypes.map(([name, type, usage]) => `${exports.includes("types") ? "export " : ""}type ${name} = ${type.kind === "ObjectTypeDefinition"
|
|
542
|
+
? `{
|
|
518
543
|
${includeTypenames ? ` __typename: "${name}";\n` : ""}${type.fields?.filter((f) => usage.has(f.name.value)).map((v) => ` ${v.name.value}: ${serializeType(simpleType(v.type, types))};`).join("\n")}
|
|
519
|
-
}
|
|
544
|
+
}`
|
|
545
|
+
: type.kind === "UnionTypeDefinition"
|
|
546
|
+
? type.types?.map((t) => t.name.value).join(" | ")
|
|
547
|
+
: usedTypes.filter(([, t]) => t.kind === Kind.OBJECT_TYPE_DEFINITION &&
|
|
548
|
+
t.interfaces?.some((i) => i.name.value === name)).map(([name]) => name).join(" | ")};`).filter(filterOutputTypes), `export type Types = {
|
|
520
549
|
${usedTypes.map(([name]) => ` ${name}: ${rename(name)};`).join("\n")}
|
|
521
550
|
};`, `export const types = [${usedTypes.map(([name]) => `"${name}"`).join(", ")}] as const;`);
|
|
522
551
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "graphql-data-generator",
|
|
3
|
-
"version": "0.3.1-alpha.
|
|
3
|
+
"version": "0.3.1-alpha.2",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/voces/graphql-data-generator.git"
|
|
@@ -15,19 +15,19 @@
|
|
|
15
15
|
"exports": {
|
|
16
16
|
".": {
|
|
17
17
|
"import": "./esm/index.js",
|
|
18
|
-
"require": "./
|
|
18
|
+
"require": "./script/index.js",
|
|
19
19
|
"types": "./types/index.d.ts",
|
|
20
20
|
"default": "./esm/index.js"
|
|
21
21
|
},
|
|
22
22
|
"./plugin": {
|
|
23
23
|
"import": "./esm/plugin.cjs",
|
|
24
|
-
"require": "./
|
|
24
|
+
"require": "./script/plugin.cjs",
|
|
25
25
|
"types": "./types/plugin.cjs",
|
|
26
26
|
"default": "./esm/plugin.cjs"
|
|
27
27
|
},
|
|
28
28
|
"./jest": {
|
|
29
29
|
"import": "./esm/jest.js",
|
|
30
|
-
"require": "./
|
|
30
|
+
"require": "./script/jest.js",
|
|
31
31
|
"types": "./types/jest.d.ts",
|
|
32
32
|
"default": "./esm/jest.js"
|
|
33
33
|
}
|
package/script/codegen.js
CHANGED
|
@@ -51,6 +51,28 @@ const getType = ({ type, ...props }) => {
|
|
|
51
51
|
}, {});
|
|
52
52
|
const value = groupedValues[type.name.value] ?? {};
|
|
53
53
|
delete groupedValues[type.name.value];
|
|
54
|
+
if (def?.[0].kind === "UnionTypeDefinition") {
|
|
55
|
+
def[1].add(type.name.value);
|
|
56
|
+
// This is a terrible solution and we should instead produce a tree that
|
|
57
|
+
// is simplified
|
|
58
|
+
let iface = props.definitions[def[0].types?.[0]?.name.value ?? ""]?.[0];
|
|
59
|
+
if (iface && "interfaces" in iface) {
|
|
60
|
+
iface = props.definitions[iface.interfaces?.[0]?.name.value ?? ""]?.[0];
|
|
61
|
+
}
|
|
62
|
+
const interfaceName = iface?.kind === "InterfaceTypeDefinition"
|
|
63
|
+
? iface.name.value
|
|
64
|
+
: undefined;
|
|
65
|
+
if (interfaceName &&
|
|
66
|
+
groupedValues[interfaceName] &&
|
|
67
|
+
Object.keys(groupedValues).every((k) => k === interfaceName ||
|
|
68
|
+
def[0].types?.some((t) => t.name.value === k))) {
|
|
69
|
+
Object.assign(value, groupedValues[interfaceName]);
|
|
70
|
+
delete groupedValues[interfaceName];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (def?.[0].kind === "InterfaceTypeDefinition") {
|
|
74
|
+
def[1].add(type.name.value);
|
|
75
|
+
}
|
|
54
76
|
const nonExhaustive = implementations
|
|
55
77
|
.filter((o) => !(o[0].name.value in groupedValues)).map((o) => o[0].name.value);
|
|
56
78
|
return {
|
|
@@ -479,7 +501,6 @@ const codegen = (schema, files, { enums = "literals", scalars, includeTypenames
|
|
|
479
501
|
}
|
|
480
502
|
handledInputs.add(current);
|
|
481
503
|
}
|
|
482
|
-
// return `type ${type.value} = ${serializeType(inputType)};`;
|
|
483
504
|
}).filter(Boolean)).filter(filterOutputTypes),
|
|
484
505
|
...collection.flatMap((o) => {
|
|
485
506
|
const name = operationDataName(o, operationType);
|
|
@@ -516,13 +537,21 @@ ${collection.map((o) => ` ${o.name}: "${(0, node_path_1.relative)(node_process_
|
|
|
516
537
|
${Array.from(handledInputs).map((i) => ` ${i}: ${rename(i)};`).join("\n")}
|
|
517
538
|
};`, `export const inputs = [${Array.from(handledInputs).map((i) => `"${i}"`).join(", ")}] as const;`);
|
|
518
539
|
}
|
|
540
|
+
// console.log(types["Node"]);
|
|
519
541
|
const usedTypes = Object.entries(types)
|
|
520
542
|
.map(([name, info]) => [name, ...info])
|
|
521
|
-
.filter((data) => data[1].kind === "ObjectTypeDefinition"
|
|
543
|
+
.filter((data) => (data[1].kind === "ObjectTypeDefinition" ||
|
|
544
|
+
data[1].kind === "UnionTypeDefinition" ||
|
|
545
|
+
data[1].kind === "InterfaceTypeDefinition") && data[2].size > 0);
|
|
522
546
|
if (usedTypes.length) {
|
|
523
|
-
serializedTypes.unshift(...usedTypes.map(([name, type, usage]) => `${exports.includes("types") ? "export " : ""}type ${name} = {
|
|
547
|
+
serializedTypes.unshift(...usedTypes.map(([name, type, usage]) => `${exports.includes("types") ? "export " : ""}type ${name} = ${type.kind === "ObjectTypeDefinition"
|
|
548
|
+
? `{
|
|
524
549
|
${includeTypenames ? ` __typename: "${name}";\n` : ""}${type.fields?.filter((f) => usage.has(f.name.value)).map((v) => ` ${v.name.value}: ${serializeType(simpleType(v.type, types))};`).join("\n")}
|
|
525
|
-
}
|
|
550
|
+
}`
|
|
551
|
+
: type.kind === "UnionTypeDefinition"
|
|
552
|
+
? type.types?.map((t) => t.name.value).join(" | ")
|
|
553
|
+
: usedTypes.filter(([, t]) => t.kind === graphql_1.Kind.OBJECT_TYPE_DEFINITION &&
|
|
554
|
+
t.interfaces?.some((i) => i.name.value === name)).map(([name]) => name).join(" | ")};`).filter(filterOutputTypes), `export type Types = {
|
|
526
555
|
${usedTypes.map(([name]) => ` ${name}: ${rename(name)};`).join("\n")}
|
|
527
556
|
};`, `export const types = [${usedTypes.map(([name]) => `"${name}"`).join(", ")}] as const;`);
|
|
528
557
|
}
|