@newmo/graphql-fake-core 0.4.0 → 0.5.1
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/dist/esm/code-generator.d.ts +5 -0
- package/dist/esm/code-generator.d.ts.map +1 -1
- package/dist/esm/code-generator.js +33 -4
- package/dist/esm/code-generator.js.map +1 -1
- package/dist/esm/createMock.d.ts +21 -0
- package/dist/esm/createMock.d.ts.map +1 -0
- package/dist/esm/createMock.js +41 -0
- package/dist/esm/createMock.js.map +1 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/schema-scanner.d.ts +7 -1
- package/dist/esm/schema-scanner.d.ts.map +1 -1
- package/dist/esm/schema-scanner.js +64 -9
- package/dist/esm/schema-scanner.js.map +1 -1
- package/package.json +2 -2
- package/src/code-generator.ts +41 -5
- package/src/createMock.ts +60 -0
- package/src/index.ts +2 -0
- package/src/schema-scanner.ts +93 -7
|
@@ -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,
|
|
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
|
-
|
|
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}
|
|
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 +=
|
|
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":"AAMA,MAAM,aAAa,GAAG,CAAC,gBAAkC,EAAU,EAAE;IACjE,IAAI,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,YAAY,IAAI,gBAAgB,EAAE,CAAC;QACnC,OAAO,gBAAgB,CAAC,UAAU,CAAC;IACvC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AACpF,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,EACxC,SAAS,EACT,QAAQ,EACR,MAAM,GAKT,EAAU,EAAE;IACT;;;;;;OAMG;IACH,OAAO,YAAY,MAAM,CAAC,sBAAsB,YAAY,QAAQ,oCAAoC,SAAS,0CAA0C,CAAC;AAChK,CAAC,CAAC;AAEF,SAAS,mBAAmB,CAAC,MAAwB,EAAE,QAAwB;IAC3E,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,KAAK,YAAY,CAAC;IACxD,MAAM,gBAAgB,GAAG;EAC3B,MAAM;EACN,QAAQ,CAAC,MAAM;SACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACX,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAC3E,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,GAAG,CAAC;IAC1D,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC;EACb,MAAM;CACP,CAAC,IAAI,EAAE,CAAC;IACL,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO;iBACE,IAAI;EACnB,gBAAgB;;gBAEF,IAAI,YAAY,IAAI;CACnC,CAAC,IAAI,EAAE,CAAC;IACL,CAAC;IACD,OAAO;wBACa,IAAI,gCACpB,YAAY,CAAC,CAAC,CAAC,+BAA+B,IAAI,qBAAqB,CAAC,CAAC,CAAC,EAC9E,SAAS,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,
|
|
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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -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
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -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
|
package/dist/esm/index.js.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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({
|
|
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.
|
|
3
|
+
"version": "0.5.1",
|
|
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": "
|
|
68
|
+
"gitHead": "10149a9103737905ab3d0d8e9225493474e573c2"
|
|
69
69
|
}
|
package/src/code-generator.ts
CHANGED
|
@@ -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
|
-
|
|
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}
|
|
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 +=
|
|
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
|
+
};
|
package/src/index.ts
CHANGED
package/src/schema-scanner.ts
CHANGED
|
@@ -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
|
-
|
|
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({
|
|
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
|
}
|