@newmo/graphql-fake-core 0.25.0 → 0.26.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.
@@ -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,EAER,gBAAgB,EAGhB,QAAQ,EAEX,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,gBAAgB,GAAG;IAC3B,UAAU,EAAE,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;CACxD,GAAG,MAAM,CAAC;AACX,eAAO,MAAM,4BAA4B,GAAI,kBAAkB,gBAAgB,KAAG,MAQjF,CAAC;AACF,eAAO,MAAM,yBAAyB,GAAI,kBAEvC;IACC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAClB,KAAG,MAGH,CAAC;AACF,eAAO,MAAM,2BAA2B,GAAI,qCAIzC;IACC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAClB,KAAG,MAgBH,CAAC;AAyIF,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CA2BpF"}
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,EAER,gBAAgB,EAGhB,QAAQ,EAEX,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,gBAAgB,GAAG;IAC3B,UAAU,EAAE,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;CACxD,GAAG,MAAM,CAAC;AACX,eAAO,MAAM,4BAA4B,GAAI,kBAAkB,gBAAgB,KAAG,MAQjF,CAAC;AACF,eAAO,MAAM,yBAAyB,GAAI,kBAEvC;IACC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAClB,KAAG,MAGH,CAAC;AACF,eAAO,MAAM,2BAA2B,GAAI,qCAIzC;IACC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAClB,KAAG,MAgBH,CAAC;AAoJF,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CA2BpF"}
@@ -80,7 +80,10 @@ ${functionBodyCode}
80
80
  function generateDefaultCode(config, typeInfo) {
81
81
  const { rawName } = typeInfo;
82
82
  if (config.outputType === "commonjs") {
83
- return `const ${rawName} = create${rawName}();
83
+ // Pass depth: maxDepth to prevent recursive expansion of nested object types.
84
+ // This creates scalar-only instances, avoiding exponential memory growth.
85
+ // The server uses @graphql-tools/mock to lazily resolve nested types at query time.
86
+ return `const ${rawName} = create${rawName}({ depth: ${config.mock.maxDepth} });
84
87
  exports.${rawName} = ${rawName};`;
85
88
  }
86
89
  return `export const ${rawName} = create${rawName}();`;
@@ -146,10 +149,18 @@ ${functionBodyCode}
146
149
  }
147
150
  `.trim();
148
151
  }
149
- return `
152
+ if (config.outputType === "commonjs") {
153
+ return `
150
154
  function create${rawName}({ defaultFields, depth = 0, typeVisitCount = Object.create(null) } = {}) {
151
155
  ${functionBodyCode}
152
- }`;
156
+ }
157
+ exports.create${rawName} = create${rawName};`;
158
+ }
159
+ return `
160
+ export function create${rawName}({ defaultFields, depth = 0, typeVisitCount = Object.create(null) } = {}) {
161
+ ${functionBodyCode}
162
+ }
163
+ `.trimStart();
153
164
  }
154
165
  export function generateCode(config, typeInfos) {
155
166
  let code = "";
@@ -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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"}
@@ -2,6 +2,15 @@ import type { GraphQLSchema } from "graphql/index.js";
2
2
  import { type RawConfig } from "./config.js";
3
3
  import { type TypeInfo } from "./schema-scanner.js";
4
4
  export type MockObject = Record<string, unknown>;
5
+ /**
6
+ * Factory function that creates a mock instance for a type.
7
+ * Each call generates a fresh instance with unique IDs.
8
+ * Pass `{ depth: maxDepth }` or higher to get scalar-only fields without recursive expansion.
9
+ */
10
+ export type MockFactory = (opts?: {
11
+ depth?: number;
12
+ defaultFields?: Record<string, unknown>;
13
+ }) => Record<string, unknown>;
5
14
  export type CreateMockOptions = {
6
15
  schema: GraphQLSchema;
7
16
  } & Partial<RawConfig>;
@@ -9,6 +18,18 @@ export type CreateMockResult = {
9
18
  ok: true;
10
19
  code: string;
11
20
  mock: MockObject;
21
+ /**
22
+ * Factory functions keyed by type name (e.g., "Organization").
23
+ * Each factory creates a fresh mock instance with unique IDs.
24
+ * Used by the server for lazy mock resolution with @graphql-tools/mock.
25
+ */
26
+ factories: Record<string, MockFactory>;
27
+ /**
28
+ * Fields that are intentionally empty arrays (e.g., @error directive).
29
+ * Map of typeName -> Set of fieldNames.
30
+ * The server should NOT generate list resolvers for these fields.
31
+ */
32
+ emptyListFields: Map<string, Set<string>>;
12
33
  } | {
13
34
  ok: false;
14
35
  code: string;
@@ -1 +1 @@
1
- {"version":3,"file":"createMock.d.ts","sourceRoot":"","sources":["../../src/createMock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACjD,MAAM,MAAM,iBAAiB,GAAG;IAC5B,MAAM,EAAE,aAAa,CAAC;CACzB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAIvB,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,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;CAChB,CAAC;AACR;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAU,SAAS,iBAAiB,KAAG,OAAO,CAAC,gBAAgB,CA+BrF,CAAC"}
1
+ {"version":3,"file":"createMock.d.ts","sourceRoot":"","sources":["../../src/createMock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACjD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,EAAE;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9B,MAAM,MAAM,iBAAiB,GAAG;IAC5B,MAAM,EAAE,aAAa,CAAC;CACzB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAmBvB,MAAM,MAAM,gBAAgB,GACtB;IACI,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC;;;;OAIG;IACH,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CAC7C,GACD;IACI,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;CAChB,CAAC;AACR;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAU,SAAS,iBAAiB,KAAG,OAAO,CAAC,gBAAgB,CAiErF,CAAC"}
@@ -3,7 +3,22 @@ import { generateCode } from "./code-generator.js";
3
3
  import { normalizeConfig } from "./config.js";
4
4
  import { getTypeInfos } from "./schema-scanner.js";
5
5
  const cloneAsJSON = (obj) => {
6
- return JSON.parse(JSON.stringify(obj));
6
+ if (obj === null || typeof obj !== "object") {
7
+ return obj;
8
+ }
9
+ if (Array.isArray(obj)) {
10
+ return obj.map((item) => cloneAsJSON(item));
11
+ }
12
+ const result = Object.create(null);
13
+ for (const key of Object.keys(obj)) {
14
+ const value = obj[key];
15
+ // JSON.stringify と同じ: function と undefined をスキップ
16
+ if (typeof value === "function" || typeof value === "undefined") {
17
+ continue;
18
+ }
19
+ result[key] = cloneAsJSON(value);
20
+ }
21
+ return result;
7
22
  };
8
23
  /**
9
24
  * Create mock object from schema
@@ -21,12 +36,42 @@ export const createMock = async (options) => {
21
36
  // execute code in vm and get all exports
22
37
  const exports = {};
23
38
  vm.runInNewContext(code, { exports });
24
- // Apollo Server does not support Function type in mock object
39
+ // Separate factory functions and static instances from exports
40
+ const factories = {};
41
+ for (const [key, value] of Object.entries(exports)) {
42
+ if (typeof value === "function" && key.startsWith("create")) {
43
+ const typeName = key.slice("create".length);
44
+ factories[typeName] = value;
45
+ }
46
+ }
47
+ // Detect fields intentionally set to empty arrays (e.g., @error directive).
48
+ // These should not be overridden by lazy list resolvers in the server.
49
+ const emptyListFields = new Map();
50
+ for (const typeInfo of typeInfos) {
51
+ if (typeInfo.type !== "object")
52
+ continue;
53
+ for (const field of typeInfo.fields) {
54
+ if (field.example &&
55
+ "value" in field.example &&
56
+ Array.isArray(field.example.value) &&
57
+ field.example.value.length === 0) {
58
+ let fieldSet = emptyListFields.get(typeInfo.rawName);
59
+ if (!fieldSet) {
60
+ fieldSet = new Set();
61
+ emptyListFields.set(typeInfo.rawName, fieldSet);
62
+ }
63
+ fieldSet.add(field.name);
64
+ }
65
+ }
66
+ }
67
+ // Static instances: strip functions/undefined for backward compatibility
25
68
  const plainObject = cloneAsJSON(exports);
26
69
  return {
27
70
  ok: true,
28
71
  code,
29
72
  mock: plainObject,
73
+ factories,
74
+ emptyListFields,
30
75
  };
31
76
  }
32
77
  catch (error) {
@@ -1 +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,EAAkB,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAiB,MAAM,qBAAqB,CAAC;AAMlE,MAAM,WAAW,GAAG,CAAC,GAAY,EAAE,EAAE;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC;AAaF;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,OAA0B,EAA6B,EAAE;IACtF,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC;IACzC,MAAM,gBAAgB,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,YAAY,CACrB;QACI,GAAG,gBAAgB;QACnB,UAAU,EAAE,UAAU;KACzB,EACD,SAAS,CACZ,CAAC;IAEF,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,SAAS;YACT,KAAK,EAAE,KAAc;SACxB,CAAC;IACN,CAAC;AACL,CAAC,CAAC"}
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,EAAkB,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAiB,MAAM,qBAAqB,CAAC;AAelE,MAAM,WAAW,GAAG,CAAC,GAAY,EAAW,EAAE;IAC1C,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,GAAG,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,MAAM,GAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,KAAK,GAAI,GAA+B,CAAC,GAAG,CAAC,CAAC;QACpD,iDAAiD;QACjD,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE,CAAC;YAC9D,SAAS;QACb,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAyBF;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,OAA0B,EAA6B,EAAE;IACtF,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC;IACzC,MAAM,gBAAgB,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,YAAY,CACrB;QACI,GAAG,gBAAgB;QACnB,UAAU,EAAE,UAAU;KACzB,EACD,SAAS,CACZ,CAAC;IAEF,IAAI,CAAC;QACD,yCAAyC;QACzC,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAEtC,+DAA+D;QAC/D,MAAM,SAAS,GAAgC,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACjD,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1D,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC5C,SAAS,CAAC,QAAQ,CAAC,GAAG,KAAoB,CAAC;YAC/C,CAAC;QACL,CAAC;QAED,4EAA4E;QAC5E,uEAAuE;QACvE,MAAM,eAAe,GAAG,IAAI,GAAG,EAAuB,CAAC;QACvD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YACzC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAClC,IACI,KAAK,CAAC,OAAO;oBACb,OAAO,IAAI,KAAK,CAAC,OAAO;oBACxB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;oBAClC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAClC,CAAC;oBACC,IAAI,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACZ,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;wBACrB,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;oBACpD,CAAC;oBACD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;YACL,CAAC;QACL,CAAC;QAED,yEAAyE;QACzE,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAe,CAAC;QACvD,OAAO;YACH,EAAE,EAAE,IAAI;YACR,IAAI;YACJ,IAAI,EAAE,WAAW;YACjB,SAAS;YACT,eAAe;SAClB,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO;YACH,EAAE,EAAE,KAAK;YACT,IAAI;YACJ,SAAS;YACT,KAAK,EAAE,KAAc;SACxB,CAAC;IACN,CAAC;AACL,CAAC,CAAC"}
@@ -2,7 +2,7 @@ export type { ConfigWithOutput } from "./code-generator.js";
2
2
  export { generateCode } from "./code-generator.js";
3
3
  export type { Config, MockConfig, RawConfig, RawMockConfig } from "./config.js";
4
4
  export { DefaultValues, MockDefaults, normalizeConfig, validateConfig } from "./config.js";
5
- export type { CreateMockOptions, CreateMockResult, MockObject } from "./createMock.js";
5
+ export type { CreateMockOptions, CreateMockResult, MockFactory, MockObject } from "./createMock.js";
6
6
  export { createMock } from "./createMock.js";
7
7
  export { EXAMPLE_DIRECTIVE, extendSchema } from "./extend-schema.js";
8
8
  export type { ExampleDirectionExpression, ExampleDirective, ExampleDirectiveValue, InterfaceTypeInfo, ObjectTypeInfo, TypeInfo, } from "./schema-scanner.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EACR,0BAA0B,EAC1B,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,QAAQ,GACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACpG,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EACR,0BAA0B,EAC1B,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,QAAQ,GACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newmo/graphql-fake-core",
3
- "version": "0.25.0",
3
+ "version": "0.26.0",
4
4
  "private": false,
5
5
  "description": "GraphQL fake core library",
6
6
  "keywords": [
@@ -63,5 +63,5 @@
63
63
  "access": "public",
64
64
  "registry": "https://registry.npmjs.org/"
65
65
  },
66
- "gitHead": "d86dc669a3978f3c46f86c0d2e84b4d2c8f9311a"
66
+ "gitHead": "1e1e1da1f5b88fe3c5355a2e68aa8ad27998dd96"
67
67
  }
@@ -112,7 +112,10 @@ ${functionBodyCode}
112
112
  function generateDefaultCode(config: ConfigWithOutput, typeInfo: ObjectTypeInfo): string {
113
113
  const { rawName } = typeInfo;
114
114
  if (config.outputType === "commonjs") {
115
- return `const ${rawName} = create${rawName}();
115
+ // Pass depth: maxDepth to prevent recursive expansion of nested object types.
116
+ // This creates scalar-only instances, avoiding exponential memory growth.
117
+ // The server uses @graphql-tools/mock to lazily resolve nested types at query time.
118
+ return `const ${rawName} = create${rawName}({ depth: ${config.mock.maxDepth} });
116
119
  exports.${rawName} = ${rawName};`;
117
120
  }
118
121
  return `export const ${rawName} = create${rawName}();`;
@@ -185,10 +188,18 @@ ${functionBodyCode}
185
188
  }
186
189
  `.trim();
187
190
  }
188
- return `
191
+ if (config.outputType === "commonjs") {
192
+ return `
189
193
  function create${rawName}({ defaultFields, depth = 0, typeVisitCount = Object.create(null) } = {}) {
190
194
  ${functionBodyCode}
191
- }`;
195
+ }
196
+ exports.create${rawName} = create${rawName};`;
197
+ }
198
+ return `
199
+ export function create${rawName}({ defaultFields, depth = 0, typeVisitCount = Object.create(null) } = {}) {
200
+ ${functionBodyCode}
201
+ }
202
+ `.trimStart();
192
203
  }
193
204
 
194
205
  export function generateCode(config: ConfigWithOutput, typeInfos: TypeInfo[]): string {
package/src/createMock.ts CHANGED
@@ -5,17 +5,53 @@ import { normalizeConfig, type RawConfig } from "./config.js";
5
5
  import { getTypeInfos, type TypeInfo } from "./schema-scanner.js";
6
6
 
7
7
  export type MockObject = Record<string, unknown>;
8
+ /**
9
+ * Factory function that creates a mock instance for a type.
10
+ * Each call generates a fresh instance with unique IDs.
11
+ * Pass `{ depth: maxDepth }` or higher to get scalar-only fields without recursive expansion.
12
+ */
13
+ export type MockFactory = (opts?: {
14
+ depth?: number;
15
+ defaultFields?: Record<string, unknown>;
16
+ }) => Record<string, unknown>;
8
17
  export type CreateMockOptions = {
9
18
  schema: GraphQLSchema;
10
19
  } & Partial<RawConfig>;
11
- const cloneAsJSON = (obj: unknown) => {
12
- return JSON.parse(JSON.stringify(obj));
20
+ const cloneAsJSON = (obj: unknown): unknown => {
21
+ if (obj === null || typeof obj !== "object") {
22
+ return obj;
23
+ }
24
+ if (Array.isArray(obj)) {
25
+ return obj.map((item) => cloneAsJSON(item));
26
+ }
27
+ const result: Record<string, unknown> = Object.create(null);
28
+ for (const key of Object.keys(obj)) {
29
+ const value = (obj as Record<string, unknown>)[key];
30
+ // JSON.stringify と同じ: function と undefined をスキップ
31
+ if (typeof value === "function" || typeof value === "undefined") {
32
+ continue;
33
+ }
34
+ result[key] = cloneAsJSON(value);
35
+ }
36
+ return result;
13
37
  };
14
38
  export type CreateMockResult =
15
39
  | {
16
40
  ok: true;
17
41
  code: string;
18
42
  mock: MockObject;
43
+ /**
44
+ * Factory functions keyed by type name (e.g., "Organization").
45
+ * Each factory creates a fresh mock instance with unique IDs.
46
+ * Used by the server for lazy mock resolution with @graphql-tools/mock.
47
+ */
48
+ factories: Record<string, MockFactory>;
49
+ /**
50
+ * Fields that are intentionally empty arrays (e.g., @error directive).
51
+ * Map of typeName -> Set of fieldNames.
52
+ * The server should NOT generate list resolvers for these fields.
53
+ */
54
+ emptyListFields: Map<string, Set<string>>;
19
55
  }
20
56
  | {
21
57
  ok: false;
@@ -41,14 +77,48 @@ export const createMock = async (options: CreateMockOptions): Promise<CreateMock
41
77
 
42
78
  try {
43
79
  // execute code in vm and get all exports
44
- const exports = {};
80
+ const exports: Record<string, unknown> = {};
45
81
  vm.runInNewContext(code, { exports });
46
- // Apollo Server does not support Function type in mock object
47
- const plainObject = cloneAsJSON(exports);
82
+
83
+ // Separate factory functions and static instances from exports
84
+ const factories: Record<string, MockFactory> = {};
85
+ for (const [key, value] of Object.entries(exports)) {
86
+ if (typeof value === "function" && key.startsWith("create")) {
87
+ const typeName = key.slice("create".length);
88
+ factories[typeName] = value as MockFactory;
89
+ }
90
+ }
91
+
92
+ // Detect fields intentionally set to empty arrays (e.g., @error directive).
93
+ // These should not be overridden by lazy list resolvers in the server.
94
+ const emptyListFields = new Map<string, Set<string>>();
95
+ for (const typeInfo of typeInfos) {
96
+ if (typeInfo.type !== "object") continue;
97
+ for (const field of typeInfo.fields) {
98
+ if (
99
+ field.example &&
100
+ "value" in field.example &&
101
+ Array.isArray(field.example.value) &&
102
+ field.example.value.length === 0
103
+ ) {
104
+ let fieldSet = emptyListFields.get(typeInfo.rawName);
105
+ if (!fieldSet) {
106
+ fieldSet = new Set();
107
+ emptyListFields.set(typeInfo.rawName, fieldSet);
108
+ }
109
+ fieldSet.add(field.name);
110
+ }
111
+ }
112
+ }
113
+
114
+ // Static instances: strip functions/undefined for backward compatibility
115
+ const plainObject = cloneAsJSON(exports) as MockObject;
48
116
  return {
49
117
  ok: true,
50
118
  code,
51
119
  mock: plainObject,
120
+ factories,
121
+ emptyListFields,
52
122
  };
53
123
  } catch (error) {
54
124
  return {
package/src/index.ts CHANGED
@@ -2,7 +2,7 @@ export type { ConfigWithOutput } from "./code-generator.js";
2
2
  export { generateCode } from "./code-generator.js";
3
3
  export type { Config, MockConfig, RawConfig, RawMockConfig } from "./config.js";
4
4
  export { DefaultValues, MockDefaults, normalizeConfig, validateConfig } from "./config.js";
5
- export type { CreateMockOptions, CreateMockResult, MockObject } from "./createMock.js";
5
+ export type { CreateMockOptions, CreateMockResult, MockFactory, MockObject } from "./createMock.js";
6
6
  export { createMock } from "./createMock.js";
7
7
  export { EXAMPLE_DIRECTIVE, extendSchema } from "./extend-schema.js";
8
8
  export type {