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 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" && data[2].size > 0);
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
- };`).filter(filterOutputTypes), `export type Types = {
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.0",
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": "./esm/index.js",
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": "./esm/plugin.cjs",
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": "./esm/jest.js",
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" && data[2].size > 0);
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
- };`).filter(filterOutputTypes), `export type Types = {
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
  }