@newmo/graphql-fake-server 0.1.1 → 0.2.0

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/README.md CHANGED
@@ -11,7 +11,66 @@ GraphQL Fake Server.
11
11
 
12
12
  ## Installation
13
13
 
14
- - [ ] Describe the installation process
14
+ 1. Add `@exampleID`, `@exampleString`, `@exampleInt`, `@exampleFloat`, `@exampleBoolean` directive to your schema.
15
+
16
+ ```graphql
17
+ """
18
+ @exampleID directive specifies an example value for a ID field.
19
+ This example value is used in the fake data.
20
+ ID value will be unique between all ID fake data.
21
+ """
22
+ directive @exampleID(
23
+ """
24
+ The value of the ID field.
25
+ @exampleID(value: "id")
26
+ """
27
+ value: ID!
28
+ ) on FIELD_DEFINITION
29
+ """
30
+ @exampleString directive specifies an example value for a String field.
31
+ This example value is used in the fake data.
32
+ """
33
+ directive @exampleString(
34
+ """
35
+ The value of the String field.
36
+ @exampleString(value: "example")
37
+ """
38
+ value: String!
39
+ ) on FIELD_DEFINITION
40
+ """
41
+ @exampleInt directive specifies an example value for a Inf field.
42
+ This example value is used in the fake data.
43
+ """
44
+ directive @exampleInt(
45
+ """
46
+ The value of the Int field.
47
+ @exampleInt(value: 1)
48
+ """
49
+ value: Int!
50
+ ) on FIELD_DEFINITION
51
+ """
52
+ @exampleFloat directive specifies an example value for a Float field.
53
+ This example value is used in the fake data.
54
+ """
55
+ directive @exampleFloat(
56
+ """
57
+ The value of the Float field.
58
+ @exampleFloat(value: 1.0)
59
+ """
60
+ value: Float!
61
+ ) on FIELD_DEFINITION
62
+ """
63
+ @exampleBoolean directive specifies an example value for a Boolean field.
64
+ This example value is used in the fake data.
65
+ """
66
+ directive @exampleBoolean(
67
+ """
68
+ The value of the Boolean field.
69
+ @exampleBoolean(value: true)
70
+ """
71
+ value: Boolean!
72
+ ) on FIELD_DEFINITION
73
+ ```
15
74
 
16
75
  ## Usage
17
76
 
@@ -1 +1 @@
1
- {"version":3,"file":"schema-scanner.d.ts","sourceRoot":"","sources":["../../src/schema-scanner.ts"],"names":[],"mappings":"AACA,OAAO,EAIH,aAAa,EAWhB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAqCrC,KAAK,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AACvD,KAAK,UAAU,GAAG,cAAc,EAAE,CAAC;AACnC,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,UAAU,CAAC,CAAC;AAC/D,MAAM,MAAM,qBAAqB,GAAG;IAChC,KAAK,EAAE,cAAc,GAAG,UAAU,GAAG,WAAW,CAAA;CACnD,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAA;CACrB,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,GAAG,yBAAyB,CAAC;AAkJjF,KAAK,SAAS,GAAG;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAC1C,CAAA;AACD,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,EAAE,CAAC;CACvB,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;CACzC,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAEzD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,QAAQ,EAAE,CAqE9E"}
1
+ {"version":3,"file":"schema-scanner.d.ts","sourceRoot":"","sources":["../../src/schema-scanner.ts"],"names":[],"mappings":"AACA,OAAO,EAIH,aAAa,EAWhB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AA8CrC,KAAK,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AACvD,KAAK,UAAU,GAAG,cAAc,EAAE,CAAC;AACnC,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,UAAU,CAAC,CAAC;AAC/D,MAAM,MAAM,qBAAqB,GAAG;IAChC,KAAK,EAAE,cAAc,GAAG,UAAU,GAAG,WAAW,CAAA;CACnD,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAA;CACrB,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,GAAG,yBAAyB,CAAC;AA2LjF,KAAK,SAAS,GAAG;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAC1C,CAAA;AACD,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,EAAE,CAAC;CACvB,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;CACzC,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAEzD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,QAAQ,EAAE,CAsE9E"}
@@ -9,6 +9,14 @@ function convertName(node, config) {
9
9
  convertedName += config.typesSuffix;
10
10
  return convertedName;
11
11
  }
12
+ const createIDFactory = () => {
13
+ const idMap = new Map();
14
+ return (name) => {
15
+ const count = idMap.get(name) ?? 0;
16
+ idMap.set(name, count + 1);
17
+ return `${name}${count}`;
18
+ };
19
+ };
12
20
  const parseTypeNodeStructure = (node) => {
13
21
  if (node.kind === Kind.NON_NULL_TYPE) {
14
22
  return parseTypeNodeStructure(node.type);
@@ -78,7 +86,7 @@ function valueOf(value) {
78
86
  // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
79
87
  throw new Error(`Unknown kind of value ${value}`);
80
88
  }
81
- const typeToFunction = (type, config) => {
89
+ const typeToFunction = (type, config, idFactory) => {
82
90
  switch (type) {
83
91
  case "String":
84
92
  return `"${config.defaultValues.String}"`;
@@ -89,71 +97,101 @@ const typeToFunction = (type, config) => {
89
97
  case "Boolean":
90
98
  return `${config.defaultValues.Boolean ? "true" : "false"}`;
91
99
  case "ID":
92
- return `"${config.defaultValues.ID}"`;
100
+ return `"${idFactory(config.defaultValues.ID)}"`;
93
101
  default:
94
102
  // reference to the object
95
103
  return `${type}`;
96
104
  }
97
105
  };
98
- const typeToFunctionWithArray = (type, config) => {
99
- return `Array.from({ length: ${config.defaultValues.listLength} }).map(() => ${typeToFunction(type, config)})`;
106
+ const typeToFunctionWithArray = (type, config, idFactory) => {
107
+ return `Array.from({ length: ${config.defaultValues.listLength} }).map(() => ${typeToFunction(type, config, idFactory)})`;
100
108
  };
101
109
  // NamedType/ListType handling
102
- const nodeToExpression = ({ currentNode, isArray = false, config }) => {
110
+ const nodeToExpression = ({ currentNode, isArray = false, config, idFactory }) => {
103
111
  if (currentNode.kind === "NonNullType") {
104
112
  return nodeToExpression({
105
- currentNode: currentNode.type, isArray, config
113
+ currentNode: currentNode.type,
114
+ isArray,
115
+ config,
116
+ idFactory
106
117
  });
107
118
  }
108
119
  else if (currentNode.kind === "NamedType") {
109
120
  if (isArray) {
110
121
  return {
111
- expression: typeToFunctionWithArray(currentNode.name.value, config)
122
+ expression: typeToFunctionWithArray(currentNode.name.value, config, idFactory)
112
123
  };
113
124
  }
114
125
  else {
115
126
  return {
116
- expression: typeToFunction(currentNode.name.value, config)
127
+ expression: typeToFunction(currentNode.name.value, config, idFactory)
117
128
  };
118
129
  }
119
130
  }
120
131
  else if (currentNode.kind === "ListType") {
121
- return nodeToExpression({ currentNode: currentNode.type, isArray: true, config });
132
+ return nodeToExpression({ currentNode: currentNode.type, isArray: true, config, idFactory });
122
133
  }
123
134
  throw new Error("Unknown node kind");
124
135
  };
125
- function parseFieldOrInputValueDefinition(node, convertedTypeName, config) {
126
- const exampleDirective = node.directives?.find(d => d.name.value === "example");
136
+ const SUPPORTED_EXAMPLE_DIRECTIVES = ["exampleID", "exampleString", "exampleInt", "exampleFloat", "exampleBoolean"];
137
+ const isIdType = (node) => {
138
+ if (node.kind === "NonNullType") {
139
+ return isIdType(node.type);
140
+ }
141
+ else if (node.kind === "NamedType") {
142
+ return node.name.value === "ID";
143
+ }
144
+ else if (node.kind === "ListType") {
145
+ return false;
146
+ }
147
+ return false;
148
+ };
149
+ function parseFieldOrInputValueDefinition({ node, convertedTypeName, config, idFactory }) {
150
+ const exampleDirective = node.directives?.find(d => {
151
+ return SUPPORTED_EXAMPLE_DIRECTIVES.includes(d.name.value);
152
+ });
127
153
  // fake
128
154
  // if @example directive is not found, return random value for the scalar type
129
155
  if (!exampleDirective) {
130
156
  return {
131
- example: nodeToExpression({ currentNode: node.type, config })
157
+ example: nodeToExpression({ currentNode: node.type, config, idFactory })
132
158
  };
133
159
  }
134
160
  if (!exampleDirective.arguments) {
135
161
  throw new Error("@example directive must have arguments");
136
162
  }
137
163
  /**
138
- * @example(value: "value")
164
+ * @exampleID(value: "id")
165
+ * -> { value: "id1" }
166
+ * @exampleString(value: "value")
139
167
  * -> { value: "value" }
168
+ * @exampleInt(value: 1)
169
+ * -> { value: 1 }
170
+ * @exampleFloat(value: 1.1)
171
+ * -> { value: 1.1 }
172
+ * @exampleBoolean(value: true)
173
+ * -> { value: true }
140
174
  */
141
175
  const value = exampleDirective.arguments.find(a => a.name.value === "value");
142
- if (value) {
143
- // if node type is not equal to the value type, throw an error
144
- const rawValue = valueOf(value.value);
145
- const nodeType = parseTypeNodeStructure(node.type);
146
- const fieldName = node.name.value;
147
- // array, object, string, number, boolean, null
148
- const rawValueType = Object.prototype.toString.call(rawValue).slice(8, -1).toLowerCase();
149
- if (nodeType !== rawValueType) {
150
- throw new Error(`${convertedTypeName}.${fieldName}: @example directive value type must be ${nodeType}. @example(value: ${nodeType})`);
151
- }
152
- return { example: { value: rawValue } };
176
+ if (!value) {
177
+ throw new Error(`@${exampleDirective.name.value} directive must have value argument.`);
178
+ }
179
+ const rawValue = valueOf(value.value);
180
+ // if node type is not equal to the value type, throw an error
181
+ const nodeType = parseTypeNodeStructure(node.type);
182
+ const fieldName = node.name.value;
183
+ // array, object, string, number, boolean, null
184
+ const rawValueType = Object.prototype.toString.call(rawValue).slice(8, -1).toLowerCase();
185
+ if (nodeType !== rawValueType) {
186
+ throw new Error(`${convertedTypeName}.${fieldName}: @${exampleDirective.name.value} directive value type must be ${nodeType}. Got ${rawValueType}`);
153
187
  }
154
- throw new Error(`@example directive must have value argument. @example(value: "value")`);
188
+ // if ID type, add idFactory() to the value
189
+ // e.g. @exampleID(value: "id") -> { value: "id1" }
190
+ const isExampleIdDirective = exampleDirective.name.value === "exampleID";
191
+ const exampleValue = isExampleIdDirective && typeof rawValue === "string" ? `${idFactory(rawValue)}` : rawValue;
192
+ return { example: { value: exampleValue } };
155
193
  }
156
- function parseObjectTypeOrInputObjectTypeDefinition(node, config) {
194
+ function parseObjectTypeOrInputObjectTypeDefinition({ node, config, idFactory }) {
157
195
  const originalTypeName = node.name.value;
158
196
  const convertedTypeName = convertName(originalTypeName, config);
159
197
  return {
@@ -162,13 +200,19 @@ function parseObjectTypeOrInputObjectTypeDefinition(node, config) {
162
200
  fields: [
163
201
  ...(node.fields ?? []).map((field) => ({
164
202
  name: field.name.value,
165
- ...parseFieldOrInputValueDefinition(field, convertedTypeName, config),
203
+ ...parseFieldOrInputValueDefinition({
204
+ node: field,
205
+ convertedTypeName,
206
+ config,
207
+ idFactory
208
+ }),
166
209
  })),
167
210
  ],
168
211
  };
169
212
  }
170
213
  export function getTypeInfos(config, schema) {
171
214
  const types = Object.values(schema.getTypeMap());
215
+ const idFactory = createIDFactory();
172
216
  const userDefinedTypeDefinitions = types
173
217
  .map((type) => type.astNode)
174
218
  .filter((node) => {
@@ -196,7 +240,7 @@ export function getTypeInfos(config, schema) {
196
240
  })
197
241
  .map((node) => {
198
242
  if (node?.kind === Kind.OBJECT_TYPE_DEFINITION || node?.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION) {
199
- return parseObjectTypeOrInputObjectTypeDefinition(node, config);
243
+ return parseObjectTypeOrInputObjectTypeDefinition({ node, config, idFactory });
200
244
  }
201
245
  else if (node?.kind === Kind.INTERFACE_TYPE_DEFINITION) {
202
246
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"schema-scanner.js","sourceRoot":"","sources":["../../src/schema-scanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema-scanner.js","sourceRoot":"","sources":["../../src/schema-scanner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@newmo/graphql-fake-server",
3
3
  "description": "GraphQL fake server for testing",
4
- "version": "0.1.1",
4
+ "version": "0.2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "repository": "https://github.com/newmo-oss/graphql-fake-server.git",
@@ -27,6 +27,15 @@ function convertName(node: ASTNode | string, config: Config): string {
27
27
  return convertedName;
28
28
  }
29
29
 
30
+ const createIDFactory = () => {
31
+ const idMap = new Map<string, number>();
32
+ return (name: string) => {
33
+ const count = idMap.get(name) ?? 0;
34
+ idMap.set(name, count + 1);
35
+ return `${name}${count}`;
36
+ }
37
+ }
38
+
30
39
  const parseTypeNodeStructure = (node: TypeNode): string => {
31
40
  if (node.kind === Kind.NON_NULL_TYPE) {
32
41
  return parseTypeNodeStructure(node.type);
@@ -106,7 +115,7 @@ function valueOf(value: ConstValueNode): ValuePrimitive | ValueArray | ValueObje
106
115
  throw new Error(`Unknown kind of value ${value satisfies never}`)
107
116
  }
108
117
 
109
- const typeToFunction = (type: string, config: Config): string => {
118
+ const typeToFunction = (type: string, config: Config, idFactory: ReturnType<typeof createIDFactory>): string => {
110
119
  switch (type) {
111
120
  case "String":
112
121
  return `"${config.defaultValues.String}"`
@@ -117,81 +126,117 @@ const typeToFunction = (type: string, config: Config): string => {
117
126
  case "Boolean":
118
127
  return `${config.defaultValues.Boolean ? "true" : "false"}`
119
128
  case "ID":
120
- return `"${config.defaultValues.ID}"`
129
+ return `"${idFactory(config.defaultValues.ID)}"`
121
130
  default:
122
131
  // reference to the object
123
132
  return `${type}`;
124
133
  }
125
134
  }
126
- const typeToFunctionWithArray = (type: string, config: Config): string => {
127
- return `Array.from({ length: ${config.defaultValues.listLength} }).map(() => ${typeToFunction(type, config)})`
135
+ const typeToFunctionWithArray = (type: string, config: Config, idFactory: ReturnType<typeof createIDFactory>): string => {
136
+ return `Array.from({ length: ${config.defaultValues.listLength} }).map(() => ${typeToFunction(type, config, idFactory)})`
128
137
  }
129
138
  // NamedType/ListType handling
130
- const nodeToExpression = ({ currentNode, isArray = false, config }: {
139
+ const nodeToExpression = ({ currentNode, isArray = false, config, idFactory }: {
131
140
  currentNode: NonNullTypeNode | NamedTypeNode | ListTypeNode,
132
141
  config: Config
133
142
  isArray?: boolean,
143
+ idFactory: ReturnType<typeof createIDFactory>
134
144
  }): ExampleDirectionExpresion => {
135
145
  if (currentNode.kind === "NonNullType") {
136
146
  return nodeToExpression({
137
147
  currentNode:
138
- currentNode.type, isArray, config
148
+ currentNode.type,
149
+ isArray,
150
+ config,
151
+ idFactory
139
152
  });
140
153
  } else if (currentNode.kind === "NamedType") {
141
154
  if (isArray) {
142
155
  return {
143
- expression: typeToFunctionWithArray(currentNode.name.value, config)
156
+ expression: typeToFunctionWithArray(currentNode.name.value, config, idFactory)
144
157
  }
145
158
  } else {
146
159
  return {
147
- expression: typeToFunction(currentNode.name.value, config)
160
+ expression: typeToFunction(currentNode.name.value, config, idFactory)
148
161
  }
149
162
  }
150
163
  } else if (currentNode.kind === "ListType") {
151
- return nodeToExpression({ currentNode: currentNode.type, isArray: true, config })
164
+ return nodeToExpression({ currentNode: currentNode.type, isArray: true, config, idFactory })
152
165
  }
153
166
  throw new Error("Unknown node kind")
154
167
  }
155
168
 
169
+ const SUPPORTED_EXAMPLE_DIRECTIVES = ["exampleID", "exampleString", "exampleInt", "exampleFloat", "exampleBoolean"];
170
+ const isIdType = (node: NonNullTypeNode | NamedTypeNode | ListTypeNode): boolean => {
171
+ if (node.kind === "NonNullType") {
172
+ return isIdType(node.type)
173
+ } else if (node.kind === "NamedType") {
174
+ return node.name.value === "ID"
175
+ } else if (node.kind === "ListType") {
176
+ return false
177
+ }
178
+ return false
179
+ }
180
+
156
181
  function parseFieldOrInputValueDefinition(
157
- node: FieldDefinitionNode | InputValueDefinitionNode,
158
- convertedTypeName: string,
159
- config: Config,
182
+ { node, convertedTypeName, config, idFactory }: {
183
+ node: FieldDefinitionNode | InputValueDefinitionNode,
184
+ convertedTypeName: string,
185
+ config: Config;
186
+ idFactory: ReturnType<typeof createIDFactory>
187
+ },
160
188
  ): { example?: ExampleDirective | undefined } {
161
- const exampleDirective = node.directives?.find(d => d.name.value === "example");
189
+ const exampleDirective = node.directives?.find(d => {
190
+ return SUPPORTED_EXAMPLE_DIRECTIVES.includes(d.name.value)
191
+ });
162
192
  // fake
163
193
  // if @example directive is not found, return random value for the scalar type
164
194
  if (!exampleDirective) {
165
195
  return {
166
- example: nodeToExpression({ currentNode: node.type, config })
196
+ example: nodeToExpression({ currentNode: node.type, config, idFactory })
167
197
  };
168
198
  }
169
199
  if (!exampleDirective.arguments) {
170
200
  throw new Error("@example directive must have arguments")
171
201
  }
172
202
  /**
173
- * @example(value: "value")
203
+ * @exampleID(value: "id")
204
+ * -> { value: "id1" }
205
+ * @exampleString(value: "value")
174
206
  * -> { value: "value" }
207
+ * @exampleInt(value: 1)
208
+ * -> { value: 1 }
209
+ * @exampleFloat(value: 1.1)
210
+ * -> { value: 1.1 }
211
+ * @exampleBoolean(value: true)
212
+ * -> { value: true }
175
213
  */
176
214
  const value = exampleDirective.arguments.find(a => a.name.value === "value");
177
- if (value) {
178
- // if node type is not equal to the value type, throw an error
179
- const rawValue = valueOf(value.value);
180
- const nodeType = parseTypeNodeStructure(node.type);
181
- const fieldName = node.name.value;
182
- // array, object, string, number, boolean, null
183
- const rawValueType = Object.prototype.toString.call(rawValue).slice(8, -1).toLowerCase();
184
- if (nodeType !== rawValueType) {
185
- throw new Error(`${convertedTypeName}.${fieldName}: @example directive value type must be ${nodeType}. @example(value: ${nodeType})`)
186
- }
187
- return { example: { value: rawValue } }
215
+ if (!value) {
216
+ throw new Error(`@${exampleDirective.name.value} directive must have value argument.`)
217
+ }
218
+ const rawValue = valueOf(value.value);
219
+ // if node type is not equal to the value type, throw an error
220
+ const nodeType = parseTypeNodeStructure(node.type);
221
+ const fieldName = node.name.value;
222
+ // array, object, string, number, boolean, null
223
+ const rawValueType = Object.prototype.toString.call(rawValue).slice(8, -1).toLowerCase();
224
+ if (nodeType !== rawValueType) {
225
+ throw new Error(`${convertedTypeName}.${fieldName}: @${exampleDirective.name.value} directive value type must be ${nodeType}. Got ${rawValueType}`)
188
226
  }
189
- throw new Error(`@example directive must have value argument. @example(value: "value")`)
227
+ // if ID type, add idFactory() to the value
228
+ // e.g. @exampleID(value: "id") -> { value: "id1" }
229
+ const isExampleIdDirective = exampleDirective.name.value === "exampleID";
230
+ const exampleValue = isExampleIdDirective && typeof rawValue === "string" ? `${idFactory(rawValue)}` : rawValue;
231
+ return { example: { value: exampleValue } }
190
232
  }
191
233
 
192
234
  function parseObjectTypeOrInputObjectTypeDefinition(
193
- node: ObjectTypeDefinitionNode | InputObjectTypeDefinitionNode,
194
- config: Config,
235
+ { node, config, idFactory }: {
236
+ node: ObjectTypeDefinitionNode | InputObjectTypeDefinitionNode,
237
+ config: Config;
238
+ idFactory: ReturnType<typeof createIDFactory>
239
+ },
195
240
  ): ObjectTypeInfo {
196
241
  const originalTypeName = node.name.value;
197
242
  const convertedTypeName = convertName(originalTypeName, config);
@@ -201,7 +246,12 @@ function parseObjectTypeOrInputObjectTypeDefinition(
201
246
  fields: [
202
247
  ...(node.fields ?? []).map((field) => ({
203
248
  name: field.name.value,
204
- ...parseFieldOrInputValueDefinition(field, convertedTypeName, config),
249
+ ...parseFieldOrInputValueDefinition({
250
+ node: field,
251
+ convertedTypeName,
252
+ config,
253
+ idFactory
254
+ }),
205
255
  })),
206
256
  ],
207
257
  };
@@ -228,6 +278,7 @@ export type TypeInfo = ObjectTypeInfo | AbstractTypeInfo;
228
278
  export function getTypeInfos(config: Config, schema: GraphQLSchema): TypeInfo[] {
229
279
  const types = Object.values(schema.getTypeMap());
230
280
 
281
+ const idFactory = createIDFactory();
231
282
  const userDefinedTypeDefinitions = types
232
283
  .map((type) => type.astNode)
233
284
  .filter(
@@ -273,7 +324,7 @@ export function getTypeInfos(config: Config, schema: GraphQLSchema): TypeInfo[]
273
324
  )
274
325
  .map((node) => {
275
326
  if (node?.kind === Kind.OBJECT_TYPE_DEFINITION || node?.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION) {
276
- return parseObjectTypeOrInputObjectTypeDefinition(node, config);
327
+ return parseObjectTypeOrInputObjectTypeDefinition({ node, config, idFactory });
277
328
  } else if (node?.kind === Kind.INTERFACE_TYPE_DEFINITION) {
278
329
  return {
279
330
  type: 'abstract',