@newmo/graphql-fake-core 0.5.0 → 0.6.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.
@@ -3,6 +3,11 @@ import type { TypeInfo } from "./schema-scanner.js";
3
3
  export type ConfigWithOutput = {
4
4
  outputType: "typescript" | "javascript" | "commonjs";
5
5
  } & Config;
6
+ export declare const generateEnumReferenceCode: ({ typeName, }: {
7
+ fieldName: string;
8
+ typeName: string;
9
+ config: Config;
10
+ }) => string;
6
11
  export declare const generateCreateReferenceCode: ({ fieldName, typeName, config, }: {
7
12
  fieldName: string;
8
13
  typeName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/code-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAoC,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEtF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,UAAU,EAAE,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;CACxD,GAAG,MAAM,CAAC;AAUX,eAAO,MAAM,2BAA2B,qCAIrC;IACC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAClB,KAAG,MASH,CAAC;AAqEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAiBpF"}
1
+ {"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/code-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAkD,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpG,MAAM,MAAM,gBAAgB,GAAG;IAC3B,UAAU,EAAE,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;CACxD,GAAG,MAAM,CAAC;AAUX,eAAO,MAAM,yBAAyB,kBAEnC;IACC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAClB,KAAG,MAGH,CAAC;AACF,eAAO,MAAM,2BAA2B,qCAIrC;IACC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAClB,KAAG,MASH,CAAC;AAyFF,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAuBpF"}
@@ -7,6 +7,10 @@ const handleExample = (exampleDirective) => {
7
7
  }
8
8
  throw new Error(`Invalid example directive${JSON.stringify(exampleDirective)}`);
9
9
  };
10
+ export const generateEnumReferenceCode = ({ typeName, }) => {
11
+ // always return the first value of the enum
12
+ return `Object.values(${typeName})[0]`;
13
+ };
10
14
  export const generateCreateReferenceCode = ({ fieldName, typeName, config, }) => {
11
15
  /**
12
16
  * function createAuthor({ defaultFields, depth = 0 }: { defaultFields?: Partial<Author>, depth?: number } = {}): Author {
@@ -17,7 +21,26 @@ export const generateCreateReferenceCode = ({ fieldName, typeName, config, }) =>
17
21
  */
18
22
  return `(depth < ${config.maxFieldRecursionDepth} ? create${typeName}({ defaultFields: defaultFields?.${fieldName} ?? {}, depth: depth + 1 }) : undefined)`;
19
23
  };
20
- function generateExampleCode(config, typeInfo) {
24
+ // GraphQL AST Limitations
25
+ // GraphQL ASTs do not distinguish between object references and enum references.
26
+ // https://astexplorer.net/#/gist/bbfe3f7414a904b453e173d82e836525/bab0cc96ffb951909dc3cf67a67bd67d09948be6
27
+ // so, we need to use same interface for both enum and object types
28
+ function generateEnumFactoryCode(config, typeInfo) {
29
+ const { name } = typeInfo;
30
+ const indent = " ";
31
+ const isTypescript = config.outputType === "typescript";
32
+ return `
33
+ const ${name} = {
34
+ ${typeInfo.fields
35
+ .map((value) => {
36
+ const example = value.example ? handleExample(value.example) : "undefined";
37
+ return `${indent}${value.name}: ${example},`;
38
+ })
39
+ .join("\n")}
40
+ }${isTypescript ? " as const" : ""};
41
+ `.trimStart();
42
+ }
43
+ function generateFactoryCode(config, typeInfo) {
21
44
  const { name } = typeInfo;
22
45
  const indent = " ";
23
46
  const isTypescript = config.outputType === "typescript";
@@ -40,7 +63,7 @@ exports.create${name} = create${name};
40
63
  `.trim();
41
64
  }
42
65
  return `
43
- export function create${name}({ defaultFields, depth = 0 }${isTypescript ? `: { defaultFields?: Partial<${name}>, depth?: number }` : ""} = {})${isTypescript ? `: ${name}Type` : ""} {
66
+ export function create${name}({ defaultFields, depth = 0 }${isTypescript ? `: { defaultFields?: Partial<${name}>, depth?: number }` : ""} = {})${isTypescript ? `: ${name}` : ""} {
44
67
  ${functionBodyCode}
45
68
  }
46
69
  `.trimStart();
@@ -71,7 +94,7 @@ function idGeneratorCode(config) {
71
94
  const isTypescript = config.outputType === "typescript";
72
95
  return `
73
96
  const __idCountMap = new Map${isTypescript ? "<string, number>" : ""}()
74
- function __id({ name, key, depth }${isTypescript ? "{ name: string; key: string; depth: number; }" : ""})${isTypescript ? ": string" : ""} {
97
+ function __id({ name, key, depth }${isTypescript ? ": { name: string; key: string; depth: number; }" : ""})${isTypescript ? ": string" : ""} {
75
98
  const count = __idCountMap.get(key) ?? 0;
76
99
  __idCountMap.set(key, count + 1);
77
100
  return name + String(depth) + String(count);
@@ -85,9 +108,15 @@ export function generateCode(config, typeInfos) {
85
108
  }
86
109
  code += idGeneratorCode(config);
87
110
  code += "\n";
111
+ for (const typeInfo of typeInfos) {
112
+ if (typeInfo.type === "enum") {
113
+ code += generateEnumFactoryCode(config, typeInfo);
114
+ code += "\n";
115
+ }
116
+ }
88
117
  for (const typeInfo of typeInfos) {
89
118
  if (typeInfo.type === "object") {
90
- code += generateExampleCode(config, typeInfo);
119
+ code += generateFactoryCode(config, typeInfo);
91
120
  code += "\n";
92
121
  code += generateDefaultCode(config, typeInfo);
93
122
  code += "\n";
@@ -1 +1 @@
1
- {"version":3,"file":"code-generator.js","sourceRoot":"","sources":["../../src/code-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code-generator.js","sourceRoot":"","sources":["../../src/code-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { GraphQLSchema } from "graphql/index.js";
2
+ export type MockObject = Record<string, unknown>;
3
+ export type CreateMockOptions = {
4
+ schema: GraphQLSchema;
5
+ maxFieldRecursionDepth?: number | undefined;
6
+ };
7
+ export type CreateMockResult = {
8
+ ok: true;
9
+ code: string;
10
+ mock: MockObject;
11
+ } | {
12
+ ok: false;
13
+ code: string;
14
+ error: Error;
15
+ };
16
+ /**
17
+ * Create mock object from schema
18
+ * It supports @example directive
19
+ */
20
+ export declare const createMock: (options: CreateMockOptions) => Promise<CreateMockResult>;
21
+ //# sourceMappingURL=createMock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createMock.d.ts","sourceRoot":"","sources":["../../src/createMock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKtD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACjD,MAAM,MAAM,iBAAiB,GAAG;IAC5B,MAAM,EAAE,aAAa,CAAC;IACtB,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/C,CAAC;AAIF,MAAM,MAAM,gBAAgB,GACtB;IACI,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CACpB,GACD;IACI,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;CAChB,CAAC;AACR;;;GAGG;AACH,eAAO,MAAM,UAAU,YAAmB,iBAAiB,KAAG,QAAQ,gBAAgB,CA8BrF,CAAC"}
@@ -0,0 +1,41 @@
1
+ import vm from "node:vm";
2
+ import { generateCode } from "./code-generator.js";
3
+ import { normalizeConfig } from "./config.js";
4
+ import { getTypeInfos } from "./schema-scanner.js";
5
+ const cloneAsJSON = (obj) => {
6
+ return JSON.parse(JSON.stringify(obj));
7
+ };
8
+ /**
9
+ * Create mock object from schema
10
+ * It supports @example directive
11
+ */
12
+ export const createMock = async (options) => {
13
+ const normalizedConfig = normalizeConfig({
14
+ maxFieldRecursionDepth: options.maxFieldRecursionDepth ?? 3,
15
+ });
16
+ const typeInfos = getTypeInfos(normalizedConfig, options.schema);
17
+ const code = generateCode({
18
+ ...normalizedConfig,
19
+ outputType: "commonjs",
20
+ }, typeInfos);
21
+ try {
22
+ // execute code in vm and get all exports
23
+ const exports = {};
24
+ vm.runInNewContext(code, { exports });
25
+ // Apollo Server does not support Function type in mock object
26
+ const plainObject = cloneAsJSON(exports);
27
+ return {
28
+ ok: true,
29
+ code,
30
+ mock: plainObject,
31
+ };
32
+ }
33
+ catch (error) {
34
+ return {
35
+ ok: false,
36
+ code,
37
+ error: error,
38
+ };
39
+ }
40
+ };
41
+ //# sourceMappingURL=createMock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createMock.js","sourceRoot":"","sources":["../../src/createMock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOnD,MAAM,WAAW,GAAG,CAAC,GAAY,EAAE,EAAE;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC;AAYF;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,OAA0B,EAA6B,EAAE;IACtF,MAAM,gBAAgB,GAAG,eAAe,CAAC;QACrC,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,IAAI,CAAC;KAC9D,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,YAAY,CACrB;QACI,GAAG,gBAAgB;QACnB,UAAU,EAAE,UAAU;KACzB,EACD,SAAS,CACZ,CAAC;IACF,IAAI,CAAC;QACD,yCAAyC;QACzC,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACtC,8DAA8D;QAC9D,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO;YACH,EAAE,EAAE,IAAI;YACR,IAAI;YACJ,IAAI,EAAE,WAAW;SACpB,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO;YACH,EAAE,EAAE,KAAK;YACT,IAAI;YACJ,KAAK,EAAE,KAAc;SACxB,CAAC;IACN,CAAC;AACL,CAAC,CAAC"}
@@ -1,3 +1,3 @@
1
- export declare const EXAMPLE_DIRECTIVE = "\n\"\"\"\n@exampleID directive specifies an example value for a ID field.\nThis example value is used in the fake data.\nID value will be unique between all ID fake data.\n\"\"\"\ndirective @exampleID(\n \"\"\"\n The value of the ID field.\n @exampleID(value: \"id\")\n \"\"\"\n value: ID!\n) on FIELD_DEFINITION\n\"\"\"\n@exampleString directive specifies an example value for a String field.\nThis example value is used in the fake data.\n\"\"\"\ndirective @exampleString(\n \"\"\"\n The value of the String field.\n @exampleString(value: \"example\")\n \"\"\"\n value: String!\n) on FIELD_DEFINITION\n\"\"\"\n@exampleInt directive specifies an example value for a Inf field.\nThis example value is used in the fake data.\n\"\"\"\ndirective @exampleInt(\n \"\"\"\n The value of the Int field.\n @exampleInt(value: 1)\n \"\"\"\n value: Int!\n) on FIELD_DEFINITION\n\"\"\"\n@exampleFloat directive specifies an example value for a Float field.\nThis example value is used in the fake data.\n\"\"\"\ndirective @exampleFloat(\n \"\"\"\n The value of the Float field.\n @exampleFloat(value: 1.0)\n \"\"\"\n value: Float!\n) on FIELD_DEFINITION\n\"\"\"\n@exampleBoolean directive specifies an example value for a Boolean field.\nThis example value is used in the fake data.\n\"\"\"\ndirective @exampleBoolean(\n \"\"\"\n The value of the Boolean field.\n @exampleBoolean(value: true)\n \"\"\"\n value: Boolean!\n) on FIELD_DEFINITION\n";
1
+ export declare const EXAMPLE_DIRECTIVE = "\n\"\"\"\n@exampleID directive specifies an example value for a ID field.\nThis example value is used in the fake data.\nID value will be unique between all ID fake data.\n\"\"\"\ndirective @exampleID(\n \"\"\"\n The value of the ID field.\n @exampleID(value: \"id\")\n \"\"\"\n value: ID!\n) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION\n\"\"\"\n@exampleString directive specifies an example value for a String field.\nThis example value is used in the fake data.\n\"\"\"\ndirective @exampleString(\n \"\"\"\n The value of the String field.\n @exampleString(value: \"example\")\n \"\"\"\n value: String!\n) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION\n\"\"\"\n@exampleInt directive specifies an example value for a Inf field.\nThis example value is used in the fake data.\n\"\"\"\ndirective @exampleInt(\n \"\"\"\n The value of the Int field.\n @exampleInt(value: 1)\n \"\"\"\n value: Int!\n) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION\n\"\"\"\n@exampleFloat directive specifies an example value for a Float field.\nThis example value is used in the fake data.\n\"\"\"\ndirective @exampleFloat(\n \"\"\"\n The value of the Float field.\n @exampleFloat(value: 1.0)\n \"\"\"\n value: Float!\n) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION\n\"\"\"\n@exampleBoolean directive specifies an example value for a Boolean field.\nThis example value is used in the fake data.\n\"\"\"\ndirective @exampleBoolean(\n \"\"\"\n The value of the Boolean field.\n @exampleBoolean(value: true)\n \"\"\"\n value: Boolean!\n) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION\n";
2
2
  export declare const extendSchema: (schema: string) => string;
3
3
  //# sourceMappingURL=extend-schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extend-schema.d.ts","sourceRoot":"","sources":["../../src/extend-schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,q7CAyD7B,CAAC;AACF,eAAO,MAAM,YAAY,WAAY,MAAM,WAE1C,CAAC"}
1
+ {"version":3,"file":"extend-schema.d.ts","sourceRoot":"","sources":["../../src/extend-schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,ktDAyD7B,CAAC;AACF,eAAO,MAAM,YAAY,WAAY,MAAM,WAE1C,CAAC"}
@@ -5,56 +5,56 @@ This example value is used in the fake data.
5
5
  ID value will be unique between all ID fake data.
6
6
  """
7
7
  directive @exampleID(
8
- """
9
- The value of the ID field.
10
- @exampleID(value: "id")
11
- """
12
- value: ID!
13
- ) on FIELD_DEFINITION
8
+ """
9
+ The value of the ID field.
10
+ @exampleID(value: "id")
11
+ """
12
+ value: ID!
13
+ ) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION
14
14
  """
15
15
  @exampleString directive specifies an example value for a String field.
16
16
  This example value is used in the fake data.
17
17
  """
18
18
  directive @exampleString(
19
- """
20
- The value of the String field.
21
- @exampleString(value: "example")
22
- """
23
- value: String!
24
- ) on FIELD_DEFINITION
19
+ """
20
+ The value of the String field.
21
+ @exampleString(value: "example")
22
+ """
23
+ value: String!
24
+ ) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION
25
25
  """
26
26
  @exampleInt directive specifies an example value for a Inf field.
27
27
  This example value is used in the fake data.
28
28
  """
29
29
  directive @exampleInt(
30
- """
31
- The value of the Int field.
32
- @exampleInt(value: 1)
33
- """
34
- value: Int!
35
- ) on FIELD_DEFINITION
30
+ """
31
+ The value of the Int field.
32
+ @exampleInt(value: 1)
33
+ """
34
+ value: Int!
35
+ ) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION
36
36
  """
37
37
  @exampleFloat directive specifies an example value for a Float field.
38
38
  This example value is used in the fake data.
39
39
  """
40
40
  directive @exampleFloat(
41
- """
42
- The value of the Float field.
43
- @exampleFloat(value: 1.0)
44
- """
45
- value: Float!
46
- ) on FIELD_DEFINITION
41
+ """
42
+ The value of the Float field.
43
+ @exampleFloat(value: 1.0)
44
+ """
45
+ value: Float!
46
+ ) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION
47
47
  """
48
48
  @exampleBoolean directive specifies an example value for a Boolean field.
49
49
  This example value is used in the fake data.
50
50
  """
51
51
  directive @exampleBoolean(
52
- """
53
- The value of the Boolean field.
54
- @exampleBoolean(value: true)
55
- """
56
- value: Boolean!
57
- ) on FIELD_DEFINITION
52
+ """
53
+ The value of the Boolean field.
54
+ @exampleBoolean(value: true)
55
+ """
56
+ value: Boolean!
57
+ ) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION
58
58
  `;
59
59
  export const extendSchema = (schema) => {
60
60
  return EXAMPLE_DIRECTIVE + schema;
@@ -5,4 +5,6 @@ export type { Config, RawConfig } from "./config.js";
5
5
  export { extendSchema, EXAMPLE_DIRECTIVE } from "./extend-schema.js";
6
6
  export { getTypeInfos } from "./schema-scanner.js";
7
7
  export type { TypeInfo, AbstractTypeInfo, ObjectTypeInfo, ExampleDirective, ExampleDirectiveValue, ExampleDirectionExpression, } from "./schema-scanner.js";
8
+ export { createMock } from "./createMock.js";
9
+ export type { CreateMockResult, MockObject, CreateMockOptions } from "./createMock.js";
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9D,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EACR,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,GAC7B,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9D,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EACR,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/esm/index.js CHANGED
@@ -2,4 +2,5 @@ export { generateCode } from "./code-generator.js";
2
2
  export { normalizeConfig, validateConfig } from "./config.js";
3
3
  export { extendSchema, EXAMPLE_DIRECTIVE } from "./extend-schema.js";
4
4
  export { getTypeInfos } from "./schema-scanner.js";
5
+ export { createMock } from "./createMock.js";
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AASnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -19,6 +19,11 @@ export type ObjectTypeInfo = {
19
19
  name: string;
20
20
  fields: FieldInfo[];
21
21
  };
22
+ export type EnumTypeInfo = {
23
+ type: "enum";
24
+ name: string;
25
+ fields: FieldInfo[];
26
+ };
22
27
  export type AbstractTypeInfo = {
23
28
  type: "abstract";
24
29
  name: string;
@@ -26,7 +31,8 @@ export type AbstractTypeInfo = {
26
31
  comment?: string | undefined;
27
32
  example?: ExampleDirective | undefined;
28
33
  };
29
- export type TypeInfo = ObjectTypeInfo | AbstractTypeInfo;
34
+ export type TypeInfo = ObjectTypeInfo | AbstractTypeInfo | EnumTypeInfo;
35
+ export type EnumMap = Map<string, TypeInfo>;
30
36
  export declare function getTypeInfos(config: Config, schema: GraphQLSchema): TypeInfo[];
31
37
  export {};
32
38
  //# sourceMappingURL=schema-scanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-scanner.d.ts","sourceRoot":"","sources":["../../src/schema-scanner.ts"],"names":[],"mappings":"AACA,OAAO,EAIH,KAAK,aAAa,EAWrB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAgD1C,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;IAEhC,KAAK,EAAE,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;CACpD,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG;IACrC,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,GAAG,0BAA0B,CAAC;AA0RlF,KAAK,SAAS,GAAG;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAC1C,CAAC;AACF,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,CAAC;CAC1C,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAEzD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,QAAQ,EAAE,CAiF9E"}
1
+ {"version":3,"file":"schema-scanner.d.ts","sourceRoot":"","sources":["../../src/schema-scanner.ts"],"names":[],"mappings":"AACA,OAAO,EAKH,KAAK,aAAa,EAWrB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAgD1C,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;IAEhC,KAAK,EAAE,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;CACpD,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG;IACrC,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,GAAG,0BAA0B,CAAC;AAoTlF,KAAK,SAAS,GAAG;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAC1C,CAAC;AACF,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,YAAY,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,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,CAAC;CAC1C,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,gBAAgB,GAAG,YAAY,CAAC;AACxE,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAoI5C,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,QAAQ,EAAE,CAI9E"}
@@ -1,6 +1,6 @@
1
1
  import { convertFactory, transformComment } from "@graphql-codegen/visitor-plugin-common";
2
2
  import { Kind, } from "graphql";
3
- import { generateCreateReferenceCode } from "./code-generator.js";
3
+ import { generateCreateReferenceCode, generateEnumReferenceCode } from "./code-generator.js";
4
4
  function convertName(node, config) {
5
5
  const convert = config.namingConvention
6
6
  ? convertFactory({ namingConvention: config.namingConvention })
@@ -87,7 +87,7 @@ function valueOfNode(value) {
87
87
  // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
88
88
  throw new Error(`Unknown kind of value ${value}`);
89
89
  }
90
- const typeToFunction = ({ convertedTypeName, fieldName, type, config, idFactory, }) => {
90
+ const typeToFunction = ({ convertedTypeName, fieldName, type, config, idFactory, enumMap, }) => {
91
91
  switch (type) {
92
92
  case "String":
93
93
  return `"${config.defaultValues.String}"`;
@@ -101,12 +101,21 @@ const typeToFunction = ({ convertedTypeName, fieldName, type, config, idFactory,
101
101
  const pathOfField = `${convertedTypeName}.${fieldName}`;
102
102
  return `${idFactory(config.defaultValues.ID, pathOfField)}`;
103
103
  }
104
- default:
104
+ default: {
105
+ // if enum type(name is equaled) is defined, reference to the enum
106
+ if (enumMap.has(type)) {
107
+ return `${generateEnumReferenceCode({
108
+ fieldName,
109
+ typeName: type,
110
+ config: config,
111
+ })}`;
112
+ }
105
113
  // reference to the object
106
114
  return `${generateCreateReferenceCode({ fieldName, typeName: type, config: config })}`;
115
+ }
107
116
  }
108
117
  };
109
- const typeToFunctionWithArray = ({ convertedTypeName, fieldName, type, config, idFactory, }) => {
118
+ const typeToFunctionWithArray = ({ convertedTypeName, fieldName, type, config, idFactory, enumMap, }) => {
110
119
  // Avoid [null, null, null]
111
120
  // Mock server can't handle null values in the array
112
121
  return `(depth < ${config.maxFieldRecursionDepth}) ? Array.from({ length: ${config.defaultValues.listLength} }).map(() => ${typeToFunction({
@@ -115,10 +124,11 @@ const typeToFunctionWithArray = ({ convertedTypeName, fieldName, type, config, i
115
124
  type: type,
116
125
  config: config,
117
126
  idFactory: idFactory,
127
+ enumMap,
118
128
  })}) : []`;
119
129
  };
120
130
  // NamedType/ListType handling
121
- const nodeToExpression = ({ convertedTypeName, fieldName, currentNode, isArray = false, config, idFactory, }) => {
131
+ const nodeToExpression = ({ convertedTypeName, fieldName, currentNode, isArray = false, config, idFactory, enumMap, }) => {
122
132
  if (currentNode.kind === "NonNullType") {
123
133
  return nodeToExpression({
124
134
  convertedTypeName,
@@ -127,6 +137,7 @@ const nodeToExpression = ({ convertedTypeName, fieldName, currentNode, isArray =
127
137
  isArray,
128
138
  config,
129
139
  idFactory,
140
+ enumMap,
130
141
  });
131
142
  }
132
143
  if (currentNode.kind === "NamedType") {
@@ -138,6 +149,7 @@ const nodeToExpression = ({ convertedTypeName, fieldName, currentNode, isArray =
138
149
  type: currentNode.name.value,
139
150
  config: config,
140
151
  idFactory: idFactory,
152
+ enumMap,
141
153
  }),
142
154
  };
143
155
  }
@@ -148,6 +160,7 @@ const nodeToExpression = ({ convertedTypeName, fieldName, currentNode, isArray =
148
160
  type: currentNode.name.value,
149
161
  config: config,
150
162
  idFactory: idFactory,
163
+ enumMap,
151
164
  }),
152
165
  };
153
166
  }
@@ -159,6 +172,7 @@ const nodeToExpression = ({ convertedTypeName, fieldName, currentNode, isArray =
159
172
  isArray: true,
160
173
  config,
161
174
  idFactory,
175
+ enumMap,
162
176
  });
163
177
  }
164
178
  throw new Error("Unknown node kind");
@@ -182,7 +196,7 @@ const isIdType = (node) => {
182
196
  }
183
197
  return false;
184
198
  };
185
- function parseFieldOrInputValueDefinition({ node, convertedTypeName, config, idFactory, }) {
199
+ function parseFieldOrInputValueDefinition({ node, convertedTypeName, config, idFactory, enumMap, }) {
186
200
  const fieldName = node.name.value;
187
201
  const comment = node.description ? transformComment(node.description) : undefined;
188
202
  const exampleDirective = node.directives?.find((d) => {
@@ -198,6 +212,7 @@ function parseFieldOrInputValueDefinition({ node, convertedTypeName, config, idF
198
212
  currentNode: node.type,
199
213
  config,
200
214
  idFactory,
215
+ enumMap,
201
216
  }),
202
217
  };
203
218
  }
@@ -237,7 +252,7 @@ function parseFieldOrInputValueDefinition({ node, convertedTypeName, config, idF
237
252
  }
238
253
  return { comment, example: { value: rawValue } };
239
254
  }
240
- function parseObjectTypeOrInputObjectTypeDefinition({ node, config, idFactory, }) {
255
+ function parseObjectTypeOrInputObjectTypeDefinition({ node, config, idFactory, enumMap, }) {
241
256
  const originalTypeName = node.name.value;
242
257
  const convertedTypeName = convertName(originalTypeName, config);
243
258
  return {
@@ -251,12 +266,13 @@ function parseObjectTypeOrInputObjectTypeDefinition({ node, config, idFactory, }
251
266
  convertedTypeName,
252
267
  config,
253
268
  idFactory,
269
+ enumMap,
254
270
  }),
255
271
  })),
256
272
  ],
257
273
  };
258
274
  }
259
- export function getTypeInfos(config, schema) {
275
+ const createObjectTypeInfo = ({ config, schema, enumMap, }) => {
260
276
  const types = Object.values(schema.getTypeMap());
261
277
  const idFactory = createIDFactory();
262
278
  const userDefinedTypeDefinitions = types
@@ -287,7 +303,12 @@ export function getTypeInfos(config, schema) {
287
303
  .map((node) => {
288
304
  if (node?.kind === Kind.OBJECT_TYPE_DEFINITION ||
289
305
  node?.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION) {
290
- return parseObjectTypeOrInputObjectTypeDefinition({ node, config, idFactory });
306
+ return parseObjectTypeOrInputObjectTypeDefinition({
307
+ node,
308
+ config,
309
+ idFactory,
310
+ enumMap,
311
+ });
291
312
  }
292
313
  if (node?.kind === Kind.INTERFACE_TYPE_DEFINITION) {
293
314
  return {
@@ -306,5 +327,39 @@ export function getTypeInfos(config, schema) {
306
327
  comment: node.description ? transformComment(node.description) : undefined,
307
328
  };
308
329
  });
330
+ };
331
+ const createEnumTypeInfo = ({ config, schema, }) => {
332
+ // GraphQL AST does not represent enum values
333
+ // https://astexplorer.net/#/gist/bbfe3f7414a904b453e173d82e836525/bab0cc96ffb951909dc3cf67a67bd67d09948be6
334
+ // Therefore, We need to create "object" type from EnumTypeDefinitionNode
335
+ // enum Color { RED, GREEN, BLUE }
336
+ // -> object Color { RED: "RED", GREEN: "GREEN", BLUE: "BLUE" }
337
+ const types = Object.values(schema.getTypeMap());
338
+ const userDefinedEnumTypeDefinitions = types
339
+ .map((type) => type.astNode)
340
+ .filter((node) => {
341
+ if (!node)
342
+ return false;
343
+ return node.kind === Kind.ENUM_TYPE_DEFINITION;
344
+ });
345
+ return userDefinedEnumTypeDefinitions.map((node) => {
346
+ return {
347
+ type: "enum",
348
+ name: convertName(node.name.value, config),
349
+ fields: node?.values?.map((value) => {
350
+ return {
351
+ name: value.name.value,
352
+ example: {
353
+ value: value.name.value,
354
+ },
355
+ };
356
+ }) ?? [],
357
+ };
358
+ });
359
+ };
360
+ export function getTypeInfos(config, schema) {
361
+ const enumTypeInfo = createEnumTypeInfo({ config: config, schema: schema });
362
+ const enumMap = new Map(enumTypeInfo.map((info) => [info.name, info]));
363
+ return [...enumTypeInfo, ...createObjectTypeInfo({ config: config, schema: schema, enumMap })];
309
364
  }
310
365
  //# sourceMappingURL=schema-scanner.js.map
@@ -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,6 +1,6 @@
1
1
  {
2
2
  "name": "@newmo/graphql-fake-core",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "private": false,
5
5
  "description": "GraphQL fake core library",
6
6
  "keywords": [
@@ -65,5 +65,5 @@
65
65
  "access": "public",
66
66
  "registry": "https://registry.npmjs.org/"
67
67
  },
68
- "gitHead": "1e88ed12568a98b30277f4e98e7b65501f778782"
68
+ "gitHead": "e1336c09d42fde202328f4338514809d8d422247"
69
69
  }
@@ -1,5 +1,5 @@
1
1
  import type { Config } from "./config.js";
2
- import type { ExampleDirective, ObjectTypeInfo, TypeInfo } from "./schema-scanner.js";
2
+ import type { EnumTypeInfo, ExampleDirective, ObjectTypeInfo, TypeInfo } from "./schema-scanner.js";
3
3
 
4
4
  export type ConfigWithOutput = {
5
5
  outputType: "typescript" | "javascript" | "commonjs";
@@ -13,6 +13,16 @@ const handleExample = (exampleDirective: ExampleDirective): string => {
13
13
  }
14
14
  throw new Error(`Invalid example directive${JSON.stringify(exampleDirective)}`);
15
15
  };
16
+ export const generateEnumReferenceCode = ({
17
+ typeName,
18
+ }: {
19
+ fieldName: string;
20
+ typeName: string;
21
+ config: Config;
22
+ }): string => {
23
+ // always return the first value of the enum
24
+ return `Object.values(${typeName})[0]`;
25
+ };
16
26
  export const generateCreateReferenceCode = ({
17
27
  fieldName,
18
28
  typeName,
@@ -32,7 +42,27 @@ export const generateCreateReferenceCode = ({
32
42
  return `(depth < ${config.maxFieldRecursionDepth} ? create${typeName}({ defaultFields: defaultFields?.${fieldName} ?? {}, depth: depth + 1 }) : undefined)`;
33
43
  };
34
44
 
35
- function generateExampleCode(config: ConfigWithOutput, typeInfo: ObjectTypeInfo): string {
45
+ // GraphQL AST Limitations
46
+ // GraphQL ASTs do not distinguish between object references and enum references.
47
+ // https://astexplorer.net/#/gist/bbfe3f7414a904b453e173d82e836525/bab0cc96ffb951909dc3cf67a67bd67d09948be6
48
+ // so, we need to use same interface for both enum and object types
49
+ function generateEnumFactoryCode(config: ConfigWithOutput, typeInfo: EnumTypeInfo): string {
50
+ const { name } = typeInfo;
51
+ const indent = " ";
52
+ const isTypescript = config.outputType === "typescript";
53
+ return `
54
+ const ${name} = {
55
+ ${typeInfo.fields
56
+ .map((value) => {
57
+ const example = value.example ? handleExample(value.example) : "undefined";
58
+ return `${indent}${value.name}: ${example},`;
59
+ })
60
+ .join("\n")}
61
+ }${isTypescript ? " as const" : ""};
62
+ `.trimStart();
63
+ }
64
+
65
+ function generateFactoryCode(config: ConfigWithOutput, typeInfo: ObjectTypeInfo): string {
36
66
  const { name } = typeInfo;
37
67
  const indent = " ";
38
68
  const isTypescript = config.outputType === "typescript";
@@ -57,7 +87,7 @@ exports.create${name} = create${name};
57
87
  return `
58
88
  export function create${name}({ defaultFields, depth = 0 }${
59
89
  isTypescript ? `: { defaultFields?: Partial<${name}>, depth?: number }` : ""
60
- } = {})${isTypescript ? `: ${name}Type` : ""} {
90
+ } = {})${isTypescript ? `: ${name}` : ""} {
61
91
  ${functionBodyCode}
62
92
  }
63
93
  `.trimStart();
@@ -91,7 +121,7 @@ function idGeneratorCode(config: ConfigWithOutput): string {
91
121
  return `
92
122
  const __idCountMap = new Map${isTypescript ? "<string, number>" : ""}()
93
123
  function __id({ name, key, depth }${
94
- isTypescript ? "{ name: string; key: string; depth: number; }" : ""
124
+ isTypescript ? ": { name: string; key: string; depth: number; }" : ""
95
125
  })${isTypescript ? ": string" : ""} {
96
126
  const count = __idCountMap.get(key) ?? 0;
97
127
  __idCountMap.set(key, count + 1);
@@ -107,9 +137,15 @@ export function generateCode(config: ConfigWithOutput, typeInfos: TypeInfo[]): s
107
137
  }
108
138
  code += idGeneratorCode(config);
109
139
  code += "\n";
140
+ for (const typeInfo of typeInfos) {
141
+ if (typeInfo.type === "enum") {
142
+ code += generateEnumFactoryCode(config, typeInfo);
143
+ code += "\n";
144
+ }
145
+ }
110
146
  for (const typeInfo of typeInfos) {
111
147
  if (typeInfo.type === "object") {
112
- code += generateExampleCode(config, typeInfo);
148
+ code += generateFactoryCode(config, typeInfo);
113
149
  code += "\n";
114
150
  code += generateDefaultCode(config, typeInfo);
115
151
  code += "\n";
@@ -0,0 +1,60 @@
1
+ import vm from "node:vm";
2
+ import type { GraphQLSchema } from "graphql/index.js";
3
+ import { generateCode } from "./code-generator.js";
4
+ import { normalizeConfig } from "./config.js";
5
+ import { getTypeInfos } from "./schema-scanner.js";
6
+
7
+ export type MockObject = Record<string, unknown>;
8
+ export type CreateMockOptions = {
9
+ schema: GraphQLSchema;
10
+ maxFieldRecursionDepth?: number | undefined;
11
+ };
12
+ const cloneAsJSON = (obj: unknown) => {
13
+ return JSON.parse(JSON.stringify(obj));
14
+ };
15
+ export type CreateMockResult =
16
+ | {
17
+ ok: true;
18
+ code: string;
19
+ mock: MockObject;
20
+ }
21
+ | {
22
+ ok: false;
23
+ code: string;
24
+ error: Error;
25
+ };
26
+ /**
27
+ * Create mock object from schema
28
+ * It supports @example directive
29
+ */
30
+ export const createMock = async (options: CreateMockOptions): Promise<CreateMockResult> => {
31
+ const normalizedConfig = normalizeConfig({
32
+ maxFieldRecursionDepth: options.maxFieldRecursionDepth ?? 3,
33
+ });
34
+ const typeInfos = getTypeInfos(normalizedConfig, options.schema);
35
+ const code = generateCode(
36
+ {
37
+ ...normalizedConfig,
38
+ outputType: "commonjs",
39
+ },
40
+ typeInfos,
41
+ );
42
+ try {
43
+ // execute code in vm and get all exports
44
+ const exports = {};
45
+ vm.runInNewContext(code, { exports });
46
+ // Apollo Server does not support Function type in mock object
47
+ const plainObject = cloneAsJSON(exports);
48
+ return {
49
+ ok: true,
50
+ code,
51
+ mock: plainObject,
52
+ };
53
+ } catch (error) {
54
+ return {
55
+ ok: false,
56
+ code,
57
+ error: error as Error,
58
+ };
59
+ }
60
+ };
@@ -5,56 +5,56 @@ This example value is used in the fake data.
5
5
  ID value will be unique between all ID fake data.
6
6
  """
7
7
  directive @exampleID(
8
- """
9
- The value of the ID field.
10
- @exampleID(value: "id")
11
- """
12
- value: ID!
13
- ) on FIELD_DEFINITION
8
+ """
9
+ The value of the ID field.
10
+ @exampleID(value: "id")
11
+ """
12
+ value: ID!
13
+ ) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION
14
14
  """
15
15
  @exampleString directive specifies an example value for a String field.
16
16
  This example value is used in the fake data.
17
17
  """
18
18
  directive @exampleString(
19
- """
20
- The value of the String field.
21
- @exampleString(value: "example")
22
- """
23
- value: String!
24
- ) on FIELD_DEFINITION
19
+ """
20
+ The value of the String field.
21
+ @exampleString(value: "example")
22
+ """
23
+ value: String!
24
+ ) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION
25
25
  """
26
26
  @exampleInt directive specifies an example value for a Inf field.
27
27
  This example value is used in the fake data.
28
28
  """
29
29
  directive @exampleInt(
30
- """
31
- The value of the Int field.
32
- @exampleInt(value: 1)
33
- """
34
- value: Int!
35
- ) on FIELD_DEFINITION
30
+ """
31
+ The value of the Int field.
32
+ @exampleInt(value: 1)
33
+ """
34
+ value: Int!
35
+ ) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION
36
36
  """
37
37
  @exampleFloat directive specifies an example value for a Float field.
38
38
  This example value is used in the fake data.
39
39
  """
40
40
  directive @exampleFloat(
41
- """
42
- The value of the Float field.
43
- @exampleFloat(value: 1.0)
44
- """
45
- value: Float!
46
- ) on FIELD_DEFINITION
41
+ """
42
+ The value of the Float field.
43
+ @exampleFloat(value: 1.0)
44
+ """
45
+ value: Float!
46
+ ) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION
47
47
  """
48
48
  @exampleBoolean directive specifies an example value for a Boolean field.
49
49
  This example value is used in the fake data.
50
50
  """
51
51
  directive @exampleBoolean(
52
- """
53
- The value of the Boolean field.
54
- @exampleBoolean(value: true)
55
- """
56
- value: Boolean!
57
- ) on FIELD_DEFINITION
52
+ """
53
+ The value of the Boolean field.
54
+ @exampleBoolean(value: true)
55
+ """
56
+ value: Boolean!
57
+ ) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION
58
58
  `;
59
59
  export const extendSchema = (schema: string) => {
60
60
  return EXAMPLE_DIRECTIVE + schema;
package/src/index.ts CHANGED
@@ -12,3 +12,5 @@ export type {
12
12
  ExampleDirectiveValue,
13
13
  ExampleDirectionExpression,
14
14
  } from "./schema-scanner.js";
15
+ export { createMock } from "./createMock.js";
16
+ export type { CreateMockResult, MockObject, CreateMockOptions } from "./createMock.js";
@@ -2,6 +2,7 @@ import { convertFactory, transformComment } from "@graphql-codegen/visitor-plugi
2
2
  import {
3
3
  type ASTNode,
4
4
  type ConstValueNode,
5
+ type EnumTypeDefinitionNode,
5
6
  type FieldDefinitionNode,
6
7
  type GraphQLSchema,
7
8
  type InputObjectTypeDefinitionNode,
@@ -15,7 +16,7 @@ import {
15
16
  type TypeNode,
16
17
  type UnionTypeDefinitionNode,
17
18
  } from "graphql";
18
- import { generateCreateReferenceCode } from "./code-generator.js";
19
+ import { generateCreateReferenceCode, generateEnumReferenceCode } from "./code-generator.js";
19
20
  import type { Config } from "./config.js";
20
21
 
21
22
  function convertName(node: ASTNode | string, config: Config): string {
@@ -125,12 +126,14 @@ const typeToFunction = ({
125
126
  type,
126
127
  config,
127
128
  idFactory,
129
+ enumMap,
128
130
  }: {
129
131
  convertedTypeName: string;
130
132
  fieldName: string;
131
133
  type: string;
132
134
  config: Config;
133
135
  idFactory: ReturnType<typeof createIDFactory>;
136
+ enumMap: EnumMap;
134
137
  }): string => {
135
138
  switch (type) {
136
139
  case "String":
@@ -145,9 +148,18 @@ const typeToFunction = ({
145
148
  const pathOfField = `${convertedTypeName}.${fieldName}`;
146
149
  return `${idFactory(config.defaultValues.ID, pathOfField)}`;
147
150
  }
148
- default:
151
+ default: {
152
+ // if enum type(name is equaled) is defined, reference to the enum
153
+ if (enumMap.has(type)) {
154
+ return `${generateEnumReferenceCode({
155
+ fieldName,
156
+ typeName: type,
157
+ config: config,
158
+ })}`;
159
+ }
149
160
  // reference to the object
150
161
  return `${generateCreateReferenceCode({ fieldName, typeName: type, config: config })}`;
162
+ }
151
163
  }
152
164
  };
153
165
  const typeToFunctionWithArray = ({
@@ -156,12 +168,14 @@ const typeToFunctionWithArray = ({
156
168
  type,
157
169
  config,
158
170
  idFactory,
171
+ enumMap,
159
172
  }: {
160
173
  convertedTypeName: string;
161
174
  fieldName: string;
162
175
  type: string;
163
176
  config: Config;
164
177
  idFactory: ReturnType<typeof createIDFactory>;
178
+ enumMap: EnumMap;
165
179
  }): string => {
166
180
  // Avoid [null, null, null]
167
181
  // Mock server can't handle null values in the array
@@ -173,6 +187,7 @@ const typeToFunctionWithArray = ({
173
187
  type: type,
174
188
  config: config,
175
189
  idFactory: idFactory,
190
+ enumMap,
176
191
  })}) : []`;
177
192
  };
178
193
  // NamedType/ListType handling
@@ -183,6 +198,7 @@ const nodeToExpression = ({
183
198
  isArray = false,
184
199
  config,
185
200
  idFactory,
201
+ enumMap,
186
202
  }: {
187
203
  convertedTypeName: string;
188
204
  fieldName: string;
@@ -190,6 +206,7 @@ const nodeToExpression = ({
190
206
  config: Config;
191
207
  isArray?: boolean;
192
208
  idFactory: ReturnType<typeof createIDFactory>;
209
+ enumMap: EnumMap;
193
210
  }): ExampleDirectionExpression => {
194
211
  if (currentNode.kind === "NonNullType") {
195
212
  return nodeToExpression({
@@ -199,6 +216,7 @@ const nodeToExpression = ({
199
216
  isArray,
200
217
  config,
201
218
  idFactory,
219
+ enumMap,
202
220
  });
203
221
  }
204
222
  if (currentNode.kind === "NamedType") {
@@ -210,6 +228,7 @@ const nodeToExpression = ({
210
228
  type: currentNode.name.value,
211
229
  config: config,
212
230
  idFactory: idFactory,
231
+ enumMap,
213
232
  }),
214
233
  };
215
234
  }
@@ -220,6 +239,7 @@ const nodeToExpression = ({
220
239
  type: currentNode.name.value,
221
240
  config: config,
222
241
  idFactory: idFactory,
242
+ enumMap,
223
243
  }),
224
244
  };
225
245
  }
@@ -231,6 +251,7 @@ const nodeToExpression = ({
231
251
  isArray: true,
232
252
  config,
233
253
  idFactory,
254
+ enumMap,
234
255
  });
235
256
  }
236
257
  throw new Error("Unknown node kind");
@@ -261,11 +282,13 @@ function parseFieldOrInputValueDefinition({
261
282
  convertedTypeName,
262
283
  config,
263
284
  idFactory,
285
+ enumMap,
264
286
  }: {
265
287
  node: FieldDefinitionNode | InputValueDefinitionNode;
266
288
  convertedTypeName: string;
267
289
  config: Config;
268
290
  idFactory: ReturnType<typeof createIDFactory>;
291
+ enumMap: EnumMap;
269
292
  }): { comment?: string | undefined; example?: ExampleDirective | undefined } {
270
293
  const fieldName = node.name.value;
271
294
  const comment = node.description ? transformComment(node.description) : undefined;
@@ -282,6 +305,7 @@ function parseFieldOrInputValueDefinition({
282
305
  currentNode: node.type,
283
306
  config,
284
307
  idFactory,
308
+ enumMap,
285
309
  }),
286
310
  };
287
311
  }
@@ -332,10 +356,12 @@ function parseObjectTypeOrInputObjectTypeDefinition({
332
356
  node,
333
357
  config,
334
358
  idFactory,
359
+ enumMap,
335
360
  }: {
336
361
  node: ObjectTypeDefinitionNode | InputObjectTypeDefinitionNode;
337
362
  config: Config;
338
363
  idFactory: ReturnType<typeof createIDFactory>;
364
+ enumMap: EnumMap;
339
365
  }): ObjectTypeInfo {
340
366
  const originalTypeName = node.name.value;
341
367
  const convertedTypeName = convertName(originalTypeName, config);
@@ -350,6 +376,7 @@ function parseObjectTypeOrInputObjectTypeDefinition({
350
376
  convertedTypeName,
351
377
  config,
352
378
  idFactory,
379
+ enumMap,
353
380
  }),
354
381
  })),
355
382
  ],
@@ -365,6 +392,11 @@ export type ObjectTypeInfo = {
365
392
  name: string;
366
393
  fields: FieldInfo[];
367
394
  };
395
+ export type EnumTypeInfo = {
396
+ type: "enum";
397
+ name: string;
398
+ fields: FieldInfo[];
399
+ };
368
400
  export type AbstractTypeInfo = {
369
401
  type: "abstract";
370
402
  name: string;
@@ -372,11 +404,18 @@ export type AbstractTypeInfo = {
372
404
  comment?: string | undefined;
373
405
  example?: ExampleDirective | undefined;
374
406
  };
375
- export type TypeInfo = ObjectTypeInfo | AbstractTypeInfo;
376
-
377
- export function getTypeInfos(config: Config, schema: GraphQLSchema): TypeInfo[] {
407
+ export type TypeInfo = ObjectTypeInfo | AbstractTypeInfo | EnumTypeInfo;
408
+ export type EnumMap = Map<string, TypeInfo>;
409
+ const createObjectTypeInfo = ({
410
+ config,
411
+ schema,
412
+ enumMap,
413
+ }: {
414
+ config: Config;
415
+ schema: GraphQLSchema;
416
+ enumMap: EnumMap;
417
+ }): TypeInfo[] => {
378
418
  const types = Object.values(schema.getTypeMap());
379
-
380
419
  const idFactory = createIDFactory();
381
420
  const userDefinedTypeDefinitions = types
382
421
  .map((type) => type.astNode)
@@ -428,7 +467,12 @@ export function getTypeInfos(config: Config, schema: GraphQLSchema): TypeInfo[]
428
467
  node?.kind === Kind.OBJECT_TYPE_DEFINITION ||
429
468
  node?.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION
430
469
  ) {
431
- return parseObjectTypeOrInputObjectTypeDefinition({ node, config, idFactory });
470
+ return parseObjectTypeOrInputObjectTypeDefinition({
471
+ node,
472
+ config,
473
+ idFactory,
474
+ enumMap,
475
+ });
432
476
  }
433
477
  if (node?.kind === Kind.INTERFACE_TYPE_DEFINITION) {
434
478
  return {
@@ -455,4 +499,46 @@ export function getTypeInfos(config: Config, schema: GraphQLSchema): TypeInfo[]
455
499
  comment: node.description ? transformComment(node.description) : undefined,
456
500
  };
457
501
  });
502
+ };
503
+
504
+ const createEnumTypeInfo = ({
505
+ config,
506
+ schema,
507
+ }: {
508
+ config: Config;
509
+ schema: GraphQLSchema;
510
+ }): TypeInfo[] => {
511
+ // GraphQL AST does not represent enum values
512
+ // https://astexplorer.net/#/gist/bbfe3f7414a904b453e173d82e836525/bab0cc96ffb951909dc3cf67a67bd67d09948be6
513
+ // Therefore, We need to create "object" type from EnumTypeDefinitionNode
514
+ // enum Color { RED, GREEN, BLUE }
515
+ // -> object Color { RED: "RED", GREEN: "GREEN", BLUE: "BLUE" }
516
+ const types = Object.values(schema.getTypeMap());
517
+ const userDefinedEnumTypeDefinitions = types
518
+ .map((type) => type.astNode)
519
+ .filter((node): node is EnumTypeDefinitionNode => {
520
+ if (!node) return false;
521
+ return node.kind === Kind.ENUM_TYPE_DEFINITION;
522
+ });
523
+ return userDefinedEnumTypeDefinitions.map((node) => {
524
+ return {
525
+ type: "enum",
526
+ name: convertName(node.name.value, config),
527
+ fields:
528
+ node?.values?.map((value) => {
529
+ return {
530
+ name: value.name.value,
531
+ example: {
532
+ value: value.name.value,
533
+ },
534
+ };
535
+ }) ?? [],
536
+ };
537
+ });
538
+ };
539
+
540
+ export function getTypeInfos(config: Config, schema: GraphQLSchema): TypeInfo[] {
541
+ const enumTypeInfo = createEnumTypeInfo({ config: config, schema: schema });
542
+ const enumMap = new Map(enumTypeInfo.map((info) => [info.name, info]));
543
+ return [...enumTypeInfo, ...createObjectTypeInfo({ config: config, schema: schema, enumMap })];
458
544
  }