@newmo/graphql-fake-server 0.18.1 → 0.19.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/cli.d.ts.map +1 -1
- package/dist/esm/cli.js +1 -1
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/createMock.d.ts +0 -0
- package/dist/esm/createMock.d.ts.map +0 -0
- package/dist/esm/createMock.js +39 -0
- package/dist/esm/createMock.js.map +0 -0
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/logger.d.ts.map +1 -1
- package/dist/esm/server.d.ts.map +1 -1
- package/dist/esm/server.js +108 -48
- package/dist/esm/server.js.map +1 -1
- package/package.json +81 -80
- package/src/cli.ts +2 -7
- package/src/index.ts +2 -2
- package/src/server.ts +144 -54
package/dist/esm/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AA0BA,eAAO,MAAM,GAAG;;;;;;;;;CA0Bd,CAAC;AACH,eAAO,MAAM,GAAG,GAAU,cAEvB,OAAO,GAAS,KAAG,OAAO,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB,CA+CA,CAAC"}
|
package/dist/esm/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { parseArgs } from "node:util";
|
|
3
|
-
import { loadConfig, loadFakeServerConfigFromCLI
|
|
3
|
+
import { loadConfig, loadFakeServerConfigFromCLI } from "./config.js";
|
|
4
4
|
import { createFakeServer } from "./index.js";
|
|
5
5
|
import { createLogger } from "./logger.js";
|
|
6
6
|
const HELP = `
|
package/dist/esm/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAiB,MAAM,aAAa,CAAC;AAE1D,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;CAkBZ,CAAC;AACF,kBAAkB;AAClB,MAAM,CAAC,MAAM,GAAG,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE;QACL,GAAG,EAAE;YACD,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,2BAA2B;YACxC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;SACzB;QACD,MAAM,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,uBAAuB;SACvC;QACD,MAAM,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,uBAAuB;SACvC;QACD,QAAQ,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,qCAAqC;YAClD,OAAO,EAAE,MAAM;SAClB;QACD,IAAI,EAAE;YACF,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,WAAW;SAC3B;KACJ;CACJ,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,EACtB,MAAM,MACM,GAAG,EAKhB,EAAE;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QACd,OAAO;YACH,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,CAAC;SACd,CAAC;IACN,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAgC,CAAC;IACzD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,OAAO;YACH,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,oDAAoD;YAC5D,QAAQ,EAAE,CAAC;SACd,CAAC;IACN,CAAC;IACD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC,sCAAsC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;QACxB,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;QAC9D,CAAC,CAAC,2BAA2B,CAAC;YACxB,cAAc;YACd,QAAQ;SACX,CAAC,CAAC;IACT,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;IACjD,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,wCAAwC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,CAAC,yCAAyC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC1E,OAAO;YACH,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,IAAI;SAClB,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO;YACH,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,IAAI,KAAK,CAAC,wBAAwB,EAAE;gBACxC,KAAK,EAAE,KAAK;aACf,CAAC;YACF,QAAQ,EAAE,CAAC;SACd,CAAC;IACN,CAAC;AACL,CAAC,CAAC"}
|
package/dist/esm/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,KAAK,CAAC,EACA;QACI;;;WAGG;QACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC;;;;WAIG;QACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KACrC,GACD,SAAS,CAAC;IAChB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C;;;OAGG;IACH,sBAAsB,CAAC,EAAE,SAAS,CAAC,wBAAwB,CAAC,GAAG,SAAS,CAAC;IACzE;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC;;OAEG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;IACvD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC7C,CAAC;AACF,MAAM,MAAM,wBAAwB,GAAG;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE;QACH,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IAC1C,QAAQ,EAAE,QAAQ,CAAC;IACnB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,KAAK,CAAC,EACA;QACI;;;WAGG;QACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC;;;;WAIG;QACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KACrC,GACD,SAAS,CAAC;IAChB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C;;;OAGG;IACH,sBAAsB,CAAC,EAAE,SAAS,CAAC,wBAAwB,CAAC,GAAG,SAAS,CAAC;IACzE;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC;;OAEG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;IACvD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC7C,CAAC;AACF,MAAM,MAAM,wBAAwB,GAAG;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE;QACH,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IAC1C,QAAQ,EAAE,QAAQ,CAAC;IACnB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,QAAQ,gBAAgB,KAAG,wBAcpE,CAAC;AACF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,gBAAgB,KAAG,gBA+CnE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,GACnB,KAAK,MAAM,EACX,YAAY,MAAM,KACnB,OAAO,CAAC,wBAAwB,CAMlC,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,2BAA2B,GAAI,+BAGzC;IACC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CACnC,KAAG,wBAYH,CAAC"}
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import vm from "node:vm";
|
|
2
|
+
import { generateCode, getTypeInfos, normalizeConfig } from "@newmo/graphql-fake-core";
|
|
3
|
+
import { createLogger } from "./logger.js";
|
|
4
|
+
const cloneAsJSON = (obj) => {
|
|
5
|
+
return JSON.parse(JSON.stringify(obj));
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Create mock object from schema
|
|
9
|
+
* It supports @example directive
|
|
10
|
+
* @param options
|
|
11
|
+
*/
|
|
12
|
+
export const createMock = async (options) => {
|
|
13
|
+
const logger = createLogger(options.logLevel);
|
|
14
|
+
try {
|
|
15
|
+
const normalizedConfig = normalizeConfig({
|
|
16
|
+
maxFieldRecursionDepth: options.maxFieldRecursionDepth ?? 3,
|
|
17
|
+
});
|
|
18
|
+
const typeInfos = getTypeInfos(normalizedConfig, options.schema);
|
|
19
|
+
const code = generateCode({
|
|
20
|
+
...normalizedConfig,
|
|
21
|
+
outputType: "commonjs",
|
|
22
|
+
}, typeInfos);
|
|
23
|
+
logger.debug("Generated code:");
|
|
24
|
+
logger.debug(code);
|
|
25
|
+
// execute code in vm and get all exports
|
|
26
|
+
const exports = {};
|
|
27
|
+
vm.runInNewContext(code, { exports });
|
|
28
|
+
// Apollo Server does not support Function type in mock object
|
|
29
|
+
const plainObject = cloneAsJSON(exports);
|
|
30
|
+
logger.debug("Exports:");
|
|
31
|
+
logger.debug(JSON.stringify(plainObject, null, 2));
|
|
32
|
+
return plainObject;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
logger.error(error);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=createMock.js.map
|
|
File without changes
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { createFakeServer } from "./server.js";
|
|
2
|
-
export type { CreateFakeServerOptions } from "./server.js";
|
|
3
1
|
export type { FakeServerConfig, RequiredFakeServerConfig, } from "./config.js";
|
|
4
2
|
export { normalizeFakeServerConfig, validateFakeServerConfig } from "./config.js";
|
|
3
|
+
export type { CreateFakeServerOptions } from "./server.js";
|
|
4
|
+
export { createFakeServer } from "./server.js";
|
|
5
5
|
//# 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,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACR,gBAAgB,EAChB,wBAAwB,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAClF,YAAY,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/esm/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,eAAO,MAAM,YAAY,GAAI,WAAU,QAAiB;qBAE/B,OAAO,EAAE;oBAKV,OAAO,EAAE;oBAKT,OAAO,EAAE;qBAKR,OAAO,EAAE;CAIjC,CAAC"}
|
package/dist/esm/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAQA,OAAO,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI1D,MAAM,MAAM,uBAAuB,GAAG,wBAAwB,GAAG;IAC7D,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE;QACH,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AA8EF,MAAM,MAAM,4BAA4B,GAAG;IACvC,IAAI,EAAE,eAAe,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACrC,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG;IACpC,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AACF,MAAM,MAAM,uBAAuB,GAAG,4BAA4B,GAAG,yBAAyB,CAAC;AAC/F,MAAM,MAAM,YAAY,GAAG;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE;QACL,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,CAAC;IACF,QAAQ,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,CAAC;CACL,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG;IAC/B,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,YAAY,EAAE,CAAC;CACxB,CAAC;AACF,MAAM,MAAM,yBAAyB,GAC/B;IACI,EAAE,EAAE,IAAI,CAAC;CACZ,GACD;IACI,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAyfR,eAAO,MAAM,gBAAgB,GAAU,SAAS,uBAAuB;;;;;;;;EAoCtE,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,SAAS,kBAAkB;;;;;;;;EAmCzE,CAAC"}
|
package/dist/esm/server.js
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import http from "node:http";
|
|
3
3
|
import { ApolloServer } from "@apollo/server";
|
|
4
|
-
import { expressMiddleware } from "@apollo/server/express4";
|
|
5
4
|
import { ApolloServerPluginDrainHttpServer } from "@apollo/server/plugin/drainHttpServer";
|
|
5
|
+
import { expressMiddleware } from "@as-integrations/express5";
|
|
6
6
|
import { addMocksToSchema } from "@graphql-tools/mock";
|
|
7
7
|
import { makeExecutableSchema } from "@graphql-tools/schema";
|
|
8
8
|
import { serve } from "@hono/node-server";
|
|
9
9
|
import { createMock } from "@newmo/graphql-fake-core";
|
|
10
10
|
import corsExpress from "cors";
|
|
11
11
|
import express from "express";
|
|
12
|
+
import { buildSchema } from "graphql/utilities/index.js";
|
|
12
13
|
// @ts-expect-error -- no types
|
|
13
14
|
import depthLimit from "graphql-depth-limit";
|
|
14
|
-
import { buildSchema } from "graphql/utilities/index.js";
|
|
15
15
|
import { Hono } from "hono";
|
|
16
16
|
import { cors } from "hono/cors";
|
|
17
|
+
import { proxy } from "hono/proxy";
|
|
17
18
|
import { createLogger } from "./logger.js";
|
|
19
|
+
// @ts-expect-error -- biome error
|
|
20
|
+
const ENV_HOSTNAME = process.env.HOSTNAME || "0.0.0.0";
|
|
18
21
|
/**
|
|
19
22
|
* Custom startStandaloneServer with CORS configuration
|
|
20
23
|
* This restricts CORS to only allow localhost, internal network connections, and specified allowed origins
|
|
@@ -53,7 +56,7 @@ const startStandaloneServerWithCORS = async (server, options, allowedCORSOrigins
|
|
|
53
56
|
const port = options.listen.port ?? 4000;
|
|
54
57
|
await new Promise((resolve) => httpServer.listen({ port }, resolve));
|
|
55
58
|
return {
|
|
56
|
-
url: `http
|
|
59
|
+
url: `http://${ENV_HOSTNAME}:${port}`,
|
|
57
60
|
httpServer,
|
|
58
61
|
};
|
|
59
62
|
};
|
|
@@ -138,7 +141,7 @@ const isLocalRequest = (origin) => {
|
|
|
138
141
|
const url = new URL(origin);
|
|
139
142
|
const hostname = url.hostname;
|
|
140
143
|
// localhost and 127.0.0.1 are standard local addresses
|
|
141
|
-
if (hostname === "localhost" || hostname === "127.0.0.1") {
|
|
144
|
+
if (hostname === "localhost" || hostname === "127.0.0.1" || hostname === ENV_HOSTNAME) {
|
|
142
145
|
return true;
|
|
143
146
|
}
|
|
144
147
|
return privateIPRanges.some((range) => range.test(hostname));
|
|
@@ -149,45 +152,72 @@ const isLocalRequest = (origin) => {
|
|
|
149
152
|
};
|
|
150
153
|
const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, allowedCORSOrigins, }) => {
|
|
151
154
|
const logger = createLogger(logLevel);
|
|
155
|
+
const app = new Hono();
|
|
152
156
|
// pass through to apollo server
|
|
153
157
|
const passToApollo = async (c) => {
|
|
158
|
+
logger.debug("passToApollo: starting");
|
|
154
159
|
// remove prefix
|
|
155
160
|
// prefix = /app1/*, path = /app1/a/b
|
|
156
161
|
// => suffix_path = /a/b
|
|
157
162
|
// let path = new URL(c.req.raw.url).pathname
|
|
158
163
|
let path = c.req.path;
|
|
159
|
-
logger.debug("
|
|
164
|
+
logger.debug("passToApollo: got path", {
|
|
160
165
|
path,
|
|
166
|
+
routePath: c.req.routePath,
|
|
161
167
|
});
|
|
162
168
|
path = path.replace(new RegExp(`^${c.req.routePath.replace("*", "")}`), "/");
|
|
163
|
-
let url = `http
|
|
169
|
+
let url = `http://${ENV_HOSTNAME}:${ports.apolloServer}${path}`;
|
|
164
170
|
// add params to URL
|
|
165
171
|
if (c.req.query())
|
|
166
172
|
url = `${url}?${new URLSearchParams(c.req.query())}`;
|
|
173
|
+
logger.debug("passToApollo: built URL", { url });
|
|
167
174
|
const sequenceId = c.req.header("sequence-id");
|
|
175
|
+
logger.debug("passToApollo: getting request body", { sequenceId });
|
|
168
176
|
const requestBody = await c.req.raw.clone().json();
|
|
177
|
+
logger.debug("passToApollo: got request body", { requestBody });
|
|
169
178
|
const operationName = typeof requestBody === "object" &&
|
|
170
179
|
requestBody !== null &&
|
|
171
180
|
"operationName" in requestBody
|
|
172
181
|
? requestBody.operationName
|
|
173
182
|
: undefined;
|
|
174
183
|
// request
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
184
|
+
logger.debug("passToApollo: calling proxy", {
|
|
185
|
+
url,
|
|
186
|
+
sequenceId,
|
|
187
|
+
operationName,
|
|
188
|
+
headers: c.req.header(),
|
|
189
|
+
});
|
|
190
|
+
const proxyResponse = await proxy(url, {
|
|
191
|
+
raw: c.req.raw,
|
|
192
|
+
headers: {
|
|
193
|
+
...c.req.header(),
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
logger.debug("passToApollo: proxy call completed", {
|
|
197
|
+
sequenceId,
|
|
198
|
+
operationName,
|
|
199
|
+
status: proxyResponse.status,
|
|
200
|
+
headers: Object.fromEntries(proxyResponse.headers),
|
|
180
201
|
});
|
|
181
202
|
// log response with pipe
|
|
182
|
-
if (
|
|
183
|
-
return
|
|
203
|
+
if (proxyResponse.status === 101)
|
|
204
|
+
return proxyResponse;
|
|
184
205
|
// save request and response for /called api
|
|
185
206
|
if (sequenceId && typeof operationName === "string") {
|
|
186
|
-
|
|
207
|
+
logger.debug("passToApollo: getting response body for caching");
|
|
208
|
+
const responseBody = (await proxyResponse.clone().json());
|
|
209
|
+
logger.debug("passToApollo: parsed response body", {
|
|
210
|
+
responseBody,
|
|
211
|
+
});
|
|
187
212
|
const cacheKey = createMapKey({
|
|
188
213
|
sequenceId,
|
|
189
214
|
operationName,
|
|
190
215
|
});
|
|
216
|
+
logger.debug("save called result", {
|
|
217
|
+
sequenceId,
|
|
218
|
+
operationName,
|
|
219
|
+
cacheKey,
|
|
220
|
+
});
|
|
191
221
|
sequenceCalledResultLruMap.set(cacheKey, [
|
|
192
222
|
...(sequenceCalledResultLruMap.get(cacheKey) ?? []),
|
|
193
223
|
{
|
|
@@ -197,14 +227,19 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
197
227
|
body: requestBody,
|
|
198
228
|
},
|
|
199
229
|
response: {
|
|
200
|
-
status:
|
|
201
|
-
headers: Object.fromEntries(
|
|
230
|
+
status: proxyResponse.status,
|
|
231
|
+
headers: Object.fromEntries(proxyResponse.headers),
|
|
202
232
|
body: responseBody,
|
|
203
233
|
},
|
|
204
234
|
},
|
|
205
235
|
]);
|
|
206
236
|
}
|
|
207
|
-
|
|
237
|
+
logger.debug("passToApollo: returning proxy response", {
|
|
238
|
+
sequenceId,
|
|
239
|
+
operationName,
|
|
240
|
+
status: proxyResponse.status,
|
|
241
|
+
});
|
|
242
|
+
return proxyResponse;
|
|
208
243
|
};
|
|
209
244
|
// sequenceId x operationName -> FakeResponse
|
|
210
245
|
const sequenceFakeResponseLruMap = new LRUMap({
|
|
@@ -215,7 +250,6 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
215
250
|
const sequenceCalledResultLruMap = new LRUMap({
|
|
216
251
|
maxSize: maxRegisteredSequences,
|
|
217
252
|
});
|
|
218
|
-
const app = new Hono();
|
|
219
253
|
// /fake api does not support CORS
|
|
220
254
|
// because it allows any user to modify the response
|
|
221
255
|
// If you need to support CORS, implement with checking the origin or something
|
|
@@ -291,7 +325,8 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
291
325
|
});
|
|
292
326
|
});
|
|
293
327
|
const fakeGraphQLQuery = async (c) => {
|
|
294
|
-
|
|
328
|
+
logger.debug("fakeGraphQLQuery: starting");
|
|
329
|
+
const _requestTimestamp = Date.now();
|
|
295
330
|
/**
|
|
296
331
|
* Steps:
|
|
297
332
|
* 1. Receive a request for a GraphQL query
|
|
@@ -303,7 +338,11 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
303
338
|
* 5. Return the merged data
|
|
304
339
|
*/
|
|
305
340
|
const sequenceId = c.req.header("sequence-id");
|
|
341
|
+
logger.debug("fakeGraphQLQuery: getting request body", { sequenceId });
|
|
306
342
|
const requestBody = await c.req.raw.clone().json();
|
|
343
|
+
logger.debug("fakeGraphQLQuery: got request body", {
|
|
344
|
+
requestBody,
|
|
345
|
+
});
|
|
307
346
|
const requestOperationName = typeof requestBody === "object" &&
|
|
308
347
|
requestBody !== null &&
|
|
309
348
|
"operationName" in requestBody &&
|
|
@@ -311,26 +350,33 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
311
350
|
typeof requestBody.operationName === "string"
|
|
312
351
|
? requestBody.operationName
|
|
313
352
|
: undefined;
|
|
314
|
-
logger.debug(`operationName: ${requestOperationName} sequenceId: ${sequenceId}`, {
|
|
353
|
+
logger.debug(`fakeGraphQLQuery: operationName: ${requestOperationName} sequenceId: ${sequenceId}`, {
|
|
315
354
|
sequenceId,
|
|
316
355
|
});
|
|
317
356
|
// 2. Does it contain a sequence id?
|
|
318
|
-
if (!sequenceId)
|
|
357
|
+
if (!sequenceId) {
|
|
358
|
+
logger.debug("fakeGraphQLQuery: no sequenceId, passing to Apollo");
|
|
319
359
|
return passToApollo(c);
|
|
320
|
-
|
|
360
|
+
}
|
|
361
|
+
if (!requestOperationName) {
|
|
362
|
+
logger.debug("fakeGraphQLQuery: no operationName, passing to Apollo");
|
|
321
363
|
return passToApollo(c);
|
|
364
|
+
}
|
|
322
365
|
const sequence = sequenceFakeResponseLruMap.get(createMapKey({
|
|
323
366
|
sequenceId,
|
|
324
367
|
operationName: requestOperationName,
|
|
325
368
|
}));
|
|
326
|
-
logger.debug(
|
|
369
|
+
logger.debug(`fakeGraphQLQuery: sequence-id: ${sequenceId} x operationName: ${requestOperationName}, sequence exists: ${Boolean(sequence)}`, {
|
|
327
370
|
sequence,
|
|
328
371
|
sequenceId,
|
|
329
372
|
operationName: requestOperationName,
|
|
330
373
|
});
|
|
331
|
-
if (!sequence)
|
|
374
|
+
if (!sequence) {
|
|
375
|
+
logger.debug("fakeGraphQLQuery: no sequence found, passing to Apollo");
|
|
332
376
|
return passToApollo(c);
|
|
377
|
+
}
|
|
333
378
|
if (requestOperationName !== sequence.operationName) {
|
|
379
|
+
logger.debug("fakeGraphQLQuery: operationName mismatch, returning error");
|
|
334
380
|
return Response.json(JSON.stringify({
|
|
335
381
|
errors: [
|
|
336
382
|
`operationName does not match. operationName: ${requestOperationName} sequenceId: ${sequenceId}`,
|
|
@@ -340,6 +386,7 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
340
386
|
});
|
|
341
387
|
}
|
|
342
388
|
if (sequence.type === "network-error") {
|
|
389
|
+
logger.debug("fakeGraphQLQuery: network-error type, returning error");
|
|
343
390
|
return new Response(JSON.stringify({
|
|
344
391
|
errors: sequence.errors,
|
|
345
392
|
}), {
|
|
@@ -347,32 +394,38 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
347
394
|
});
|
|
348
395
|
}
|
|
349
396
|
// 3. Send a request to Apollo Server
|
|
350
|
-
logger.debug("request to apollo
|
|
397
|
+
logger.debug("fakeGraphQLQuery: sending request to apollo server", {
|
|
351
398
|
sequenceId,
|
|
352
399
|
});
|
|
353
|
-
const
|
|
354
|
-
|
|
355
|
-
headers:
|
|
356
|
-
|
|
357
|
-
|
|
400
|
+
const proxyResponse = await proxy(`http://${ENV_HOSTNAME}:${ports.apolloServer}/graphql`, {
|
|
401
|
+
raw: c.req.raw,
|
|
402
|
+
headers: {
|
|
403
|
+
...c.req.header(),
|
|
404
|
+
},
|
|
358
405
|
});
|
|
359
|
-
logger.debug("
|
|
406
|
+
logger.debug("fakeGraphQLQuery: apollo server response completed", {
|
|
360
407
|
sequenceId,
|
|
361
|
-
|
|
408
|
+
status: proxyResponse.status,
|
|
409
|
+
headers: Object.fromEntries(proxyResponse.headers),
|
|
362
410
|
});
|
|
363
|
-
if (
|
|
364
|
-
return
|
|
365
|
-
// 4.
|
|
366
|
-
|
|
367
|
-
|
|
411
|
+
if (proxyResponse.status === 101)
|
|
412
|
+
return proxyResponse;
|
|
413
|
+
// 4. Get response body
|
|
414
|
+
logger.debug("fakeGraphQLQuery: getting response body");
|
|
415
|
+
const responseBody = (await proxyResponse.json());
|
|
416
|
+
logger.debug("fakeGraphQLQuery: parsed response body", {
|
|
417
|
+
responseBody,
|
|
418
|
+
});
|
|
419
|
+
// 5. Merge the registration data with the response
|
|
368
420
|
const data = sequence.data;
|
|
369
|
-
logger.debug(
|
|
421
|
+
logger.debug(`fakeGraphQLQuery: starting data merge sequence-id: ${sequenceId}`, {
|
|
370
422
|
data,
|
|
371
423
|
responseBody,
|
|
372
424
|
});
|
|
425
|
+
// Use bracket notation for properties from index signature
|
|
426
|
+
const responseData = responseBody["data"];
|
|
373
427
|
const merged = {
|
|
374
|
-
|
|
375
|
-
...responseBody.data,
|
|
428
|
+
...(typeof responseData === "object" && responseData !== null ? responseData : {}),
|
|
376
429
|
...data,
|
|
377
430
|
};
|
|
378
431
|
const cacheKey = createMapKey({
|
|
@@ -388,17 +441,24 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
388
441
|
body: requestBody,
|
|
389
442
|
},
|
|
390
443
|
response: {
|
|
391
|
-
status:
|
|
392
|
-
headers: Object.fromEntries(
|
|
444
|
+
status: proxyResponse.status,
|
|
445
|
+
headers: Object.fromEntries(proxyResponse.headers),
|
|
393
446
|
body: {
|
|
394
447
|
data: merged,
|
|
395
448
|
},
|
|
396
449
|
},
|
|
397
450
|
},
|
|
398
451
|
]);
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
}
|
|
452
|
+
logger.debug("fakeGraphQLQuery: merge completed, returning response");
|
|
453
|
+
// "content-length" should be matched from the response body length
|
|
454
|
+
const responseJson = JSON.stringify({ data: merged });
|
|
455
|
+
return new Response(responseJson, {
|
|
456
|
+
status: proxyResponse.status,
|
|
457
|
+
headers: {
|
|
458
|
+
"Content-Type": "application/json",
|
|
459
|
+
"Content-Length": responseJson.length.toString(),
|
|
460
|
+
},
|
|
461
|
+
});
|
|
402
462
|
};
|
|
403
463
|
// graphql api is for browser and need to support CORS
|
|
404
464
|
app.use("/graphql", cors({
|
|
@@ -468,7 +528,7 @@ export const createFakeServerInternal = async (options) => {
|
|
|
468
528
|
return {
|
|
469
529
|
start: async () => {
|
|
470
530
|
// Replace startStandaloneServer with our custom implementation
|
|
471
|
-
|
|
531
|
+
await startStandaloneServerWithCORS(apolloServer, {
|
|
472
532
|
listen: { port: options.ports.apolloServer },
|
|
473
533
|
}, options.allowedCORSOrigins);
|
|
474
534
|
routerServer = serve({
|
|
@@ -477,8 +537,8 @@ export const createFakeServerInternal = async (options) => {
|
|
|
477
537
|
});
|
|
478
538
|
return {
|
|
479
539
|
urls: {
|
|
480
|
-
fakeServer: `http
|
|
481
|
-
apolloServer: `http
|
|
540
|
+
fakeServer: `http://${ENV_HOSTNAME}:${options.ports.fakeServer}`,
|
|
541
|
+
apolloServer: `http://${ENV_HOSTNAME}:${options.ports.apolloServer}`,
|
|
482
542
|
},
|
|
483
543
|
};
|
|
484
544
|
},
|
package/dist/esm/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,83 +1,84 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
},
|
|
24
|
-
"./cli": {
|
|
25
|
-
"import": {
|
|
26
|
-
"types": "./dist/esm/cli.d.ts",
|
|
27
|
-
"default": "./dist/esm/cli.js"
|
|
28
|
-
}
|
|
29
|
-
}
|
|
2
|
+
"name": "@newmo/graphql-fake-server",
|
|
3
|
+
"version": "0.19.1",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "GraphQL fake server for testing",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"testing",
|
|
8
|
+
"mock",
|
|
9
|
+
"graphql",
|
|
10
|
+
"graphql-code-generator"
|
|
11
|
+
],
|
|
12
|
+
"repository": "https://github.com/newmo-oss/graphql-fake-server.git",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"author": "newmo, Inc.",
|
|
15
|
+
"sideEffects": false,
|
|
16
|
+
"type": "module",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"import": {
|
|
20
|
+
"types": "./dist/esm/index.d.ts",
|
|
21
|
+
"default": "./dist/esm/index.js"
|
|
22
|
+
}
|
|
30
23
|
},
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
"
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
"
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
"
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
24
|
+
"./cli": {
|
|
25
|
+
"import": {
|
|
26
|
+
"types": "./dist/esm/cli.d.ts",
|
|
27
|
+
"default": "./dist/esm/cli.js"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"bin": {
|
|
32
|
+
"@newmo/graphql-fake-server": "./dist/esm/bin.js"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"src/",
|
|
36
|
+
"!src/test",
|
|
37
|
+
"!src/**/*.test.ts",
|
|
38
|
+
"!src/**/__snapshots__",
|
|
39
|
+
"dist/"
|
|
40
|
+
],
|
|
41
|
+
"scripts": {
|
|
42
|
+
"prepare": "npm run build",
|
|
43
|
+
"build": "tsc -p tsconfig.build.json",
|
|
44
|
+
"build:esm": "tsc -p tsconfig.build.json",
|
|
45
|
+
"lint": "tsc --noEmit",
|
|
46
|
+
"test": "vitest run",
|
|
47
|
+
"updateSnapshot": "vitest run -u"
|
|
48
|
+
},
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"@apollo/server": "^4.12.2",
|
|
51
|
+
"@as-integrations/express5": "^1.1.0",
|
|
52
|
+
"@graphql-tools/mock": "^9.0.23",
|
|
53
|
+
"@graphql-tools/schema": "^10.0.23",
|
|
54
|
+
"@hono/node-server": "^1.14.4",
|
|
55
|
+
"@newmo/graphql-fake-core": "0.19.1",
|
|
56
|
+
"cors": "^2.8.5",
|
|
57
|
+
"express": "^5.1.0",
|
|
58
|
+
"graphql-depth-limit": "^1.1.0",
|
|
59
|
+
"hono": "^4.8.0"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@tsconfig/node18": "^18.2.0",
|
|
63
|
+
"@tsconfig/strictest": "^2.0.1",
|
|
64
|
+
"@types/cors": "^2.8.19",
|
|
65
|
+
"@types/eslint": "^9.6.1",
|
|
66
|
+
"@types/express": "^5.0.3",
|
|
67
|
+
"@types/node": "^24.0.3",
|
|
68
|
+
"graphql": "^16.11.0",
|
|
69
|
+
"typescript": "^5.8.3",
|
|
70
|
+
"vitest": "^3.2.4",
|
|
71
|
+
"vitest-github-actions-reporter": "^0.11.1"
|
|
72
|
+
},
|
|
73
|
+
"peerDependencies": {
|
|
74
|
+
"graphql": "^16.8.1"
|
|
75
|
+
},
|
|
76
|
+
"engines": {
|
|
77
|
+
"node": ">=18.0.0"
|
|
78
|
+
},
|
|
79
|
+
"publishConfig": {
|
|
80
|
+
"access": "public",
|
|
81
|
+
"registry": "https://registry.npmjs.org/"
|
|
82
|
+
},
|
|
83
|
+
"gitHead": "0bd15a2a4307c7be9c9ae673bdc305bef561d30c"
|
|
83
84
|
}
|
package/src/cli.ts
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { parseArgs } from "node:util";
|
|
3
|
-
import {
|
|
4
|
-
loadConfig,
|
|
5
|
-
loadFakeServerConfigFromCLI,
|
|
6
|
-
normalizeFakeServerConfig,
|
|
7
|
-
validateFakeServerConfig,
|
|
8
|
-
} from "./config.js";
|
|
3
|
+
import { loadConfig, loadFakeServerConfigFromCLI } from "./config.js";
|
|
9
4
|
import { createFakeServer } from "./index.js";
|
|
10
|
-
import { type LogLevel
|
|
5
|
+
import { createLogger, type LogLevel } from "./logger.js";
|
|
11
6
|
|
|
12
7
|
const HELP = `
|
|
13
8
|
Usage: npx @newmo/graphql-fake-server --schema <path> [options]
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { createFakeServer } from "./server.js";
|
|
2
|
-
export type { CreateFakeServerOptions } from "./server.js";
|
|
3
1
|
export type {
|
|
4
2
|
FakeServerConfig,
|
|
5
3
|
RequiredFakeServerConfig,
|
|
6
4
|
} from "./config.js";
|
|
7
5
|
export { normalizeFakeServerConfig, validateFakeServerConfig } from "./config.js";
|
|
6
|
+
export type { CreateFakeServerOptions } from "./server.js";
|
|
7
|
+
export { createFakeServer } from "./server.js";
|
package/src/server.ts
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import http from "node:http";
|
|
3
3
|
import { ApolloServer } from "@apollo/server";
|
|
4
|
-
import { expressMiddleware } from "@apollo/server/express4";
|
|
5
4
|
import { ApolloServerPluginDrainHttpServer } from "@apollo/server/plugin/drainHttpServer";
|
|
5
|
+
import { expressMiddleware } from "@as-integrations/express5";
|
|
6
6
|
import { addMocksToSchema } from "@graphql-tools/mock";
|
|
7
7
|
import { makeExecutableSchema } from "@graphql-tools/schema";
|
|
8
8
|
import { serve } from "@hono/node-server";
|
|
9
|
-
import { type MockObject
|
|
9
|
+
import { createMock, type MockObject } from "@newmo/graphql-fake-core";
|
|
10
10
|
import corsExpress from "cors";
|
|
11
11
|
import express from "express";
|
|
12
|
-
// @ts-expect-error -- no types
|
|
13
|
-
import depthLimit from "graphql-depth-limit";
|
|
14
12
|
import type { GraphQLSchema } from "graphql/index.js";
|
|
15
13
|
import { buildSchema } from "graphql/utilities/index.js";
|
|
14
|
+
// @ts-expect-error -- no types
|
|
15
|
+
import depthLimit from "graphql-depth-limit";
|
|
16
16
|
import { type Context, Hono } from "hono";
|
|
17
17
|
import { cors } from "hono/cors";
|
|
18
|
+
import { proxy } from "hono/proxy";
|
|
18
19
|
import type { RequiredFakeServerConfig } from "./config.js";
|
|
19
|
-
import { type LogLevel
|
|
20
|
+
import { createLogger, type LogLevel } from "./logger.js";
|
|
20
21
|
|
|
22
|
+
// @ts-expect-error -- biome error
|
|
23
|
+
const ENV_HOSTNAME = process.env.HOSTNAME || "0.0.0.0";
|
|
21
24
|
export type CreateFakeServerOptions = RequiredFakeServerConfig & {
|
|
22
25
|
logLevel?: LogLevel;
|
|
23
26
|
allowedCORSOrigins: string[];
|
|
@@ -92,7 +95,7 @@ const startStandaloneServerWithCORS = async (
|
|
|
92
95
|
await new Promise<void>((resolve) => httpServer.listen({ port }, resolve));
|
|
93
96
|
|
|
94
97
|
return {
|
|
95
|
-
url: `http
|
|
98
|
+
url: `http://${ENV_HOSTNAME}:${port}`,
|
|
96
99
|
httpServer,
|
|
97
100
|
};
|
|
98
101
|
};
|
|
@@ -206,7 +209,10 @@ class LRUMap<K, V> {
|
|
|
206
209
|
const createMapKey = ({
|
|
207
210
|
sequenceId,
|
|
208
211
|
operationName,
|
|
209
|
-
}: {
|
|
212
|
+
}: {
|
|
213
|
+
sequenceId: string;
|
|
214
|
+
operationName: string;
|
|
215
|
+
}) => {
|
|
210
216
|
return `${sequenceId}.${operationName}`;
|
|
211
217
|
};
|
|
212
218
|
|
|
@@ -227,7 +233,7 @@ const isLocalRequest = (origin: string | null): boolean => {
|
|
|
227
233
|
const url = new URL(origin);
|
|
228
234
|
const hostname = url.hostname;
|
|
229
235
|
// localhost and 127.0.0.1 are standard local addresses
|
|
230
|
-
if (hostname === "localhost" || hostname === "127.0.0.1") {
|
|
236
|
+
if (hostname === "localhost" || hostname === "127.0.0.1" || hostname === ENV_HOSTNAME) {
|
|
231
237
|
return true;
|
|
232
238
|
}
|
|
233
239
|
return privateIPRanges.some((range) => range.test(hostname));
|
|
@@ -251,44 +257,81 @@ const createRoutingServer = async ({
|
|
|
251
257
|
allowedCORSOrigins: string[];
|
|
252
258
|
}) => {
|
|
253
259
|
const logger = createLogger(logLevel);
|
|
260
|
+
const app = new Hono();
|
|
254
261
|
// pass through to apollo server
|
|
255
262
|
const passToApollo = async (c: Context) => {
|
|
263
|
+
logger.debug("passToApollo: starting");
|
|
256
264
|
// remove prefix
|
|
257
265
|
// prefix = /app1/*, path = /app1/a/b
|
|
258
266
|
// => suffix_path = /a/b
|
|
259
267
|
// let path = new URL(c.req.raw.url).pathname
|
|
260
268
|
let path = c.req.path;
|
|
261
|
-
logger.debug("
|
|
269
|
+
logger.debug("passToApollo: got path", {
|
|
262
270
|
path,
|
|
271
|
+
routePath: c.req.routePath,
|
|
263
272
|
});
|
|
264
273
|
path = path.replace(new RegExp(`^${c.req.routePath.replace("*", "")}`), "/");
|
|
265
|
-
let url = `http
|
|
274
|
+
let url = `http://${ENV_HOSTNAME}:${ports.apolloServer}${path}`;
|
|
266
275
|
// add params to URL
|
|
267
276
|
if (c.req.query()) url = `${url}?${new URLSearchParams(c.req.query())}`;
|
|
277
|
+
logger.debug("passToApollo: built URL", { url });
|
|
278
|
+
|
|
268
279
|
const sequenceId = c.req.header("sequence-id");
|
|
280
|
+
logger.debug("passToApollo: getting request body", { sequenceId });
|
|
281
|
+
|
|
269
282
|
const requestBody = await c.req.raw.clone().json();
|
|
283
|
+
logger.debug("passToApollo: got request body", { requestBody });
|
|
284
|
+
|
|
270
285
|
const operationName =
|
|
271
286
|
typeof requestBody === "object" &&
|
|
272
287
|
requestBody !== null &&
|
|
273
288
|
"operationName" in requestBody
|
|
274
289
|
? requestBody.operationName
|
|
275
290
|
: undefined;
|
|
291
|
+
|
|
276
292
|
// request
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
293
|
+
logger.debug("passToApollo: calling proxy", {
|
|
294
|
+
url,
|
|
295
|
+
sequenceId,
|
|
296
|
+
operationName,
|
|
297
|
+
headers: c.req.header(),
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
const proxyResponse = await proxy(url, {
|
|
301
|
+
raw: c.req.raw,
|
|
302
|
+
headers: {
|
|
303
|
+
...c.req.header(),
|
|
304
|
+
},
|
|
282
305
|
});
|
|
306
|
+
|
|
307
|
+
logger.debug("passToApollo: proxy call completed", {
|
|
308
|
+
sequenceId,
|
|
309
|
+
operationName,
|
|
310
|
+
status: proxyResponse.status,
|
|
311
|
+
headers: Object.fromEntries(proxyResponse.headers),
|
|
312
|
+
});
|
|
313
|
+
|
|
283
314
|
// log response with pipe
|
|
284
|
-
if (
|
|
315
|
+
if (proxyResponse.status === 101) return proxyResponse;
|
|
316
|
+
|
|
285
317
|
// save request and response for /called api
|
|
286
318
|
if (sequenceId && typeof operationName === "string") {
|
|
287
|
-
|
|
319
|
+
logger.debug("passToApollo: getting response body for caching");
|
|
320
|
+
const responseBody = (await proxyResponse.clone().json()) as Record<string, unknown>;
|
|
321
|
+
logger.debug("passToApollo: parsed response body", {
|
|
322
|
+
responseBody,
|
|
323
|
+
});
|
|
324
|
+
|
|
288
325
|
const cacheKey = createMapKey({
|
|
289
326
|
sequenceId,
|
|
290
327
|
operationName,
|
|
291
328
|
});
|
|
329
|
+
logger.debug("save called result", {
|
|
330
|
+
sequenceId,
|
|
331
|
+
operationName,
|
|
332
|
+
cacheKey,
|
|
333
|
+
});
|
|
334
|
+
|
|
292
335
|
sequenceCalledResultLruMap.set(cacheKey, [
|
|
293
336
|
...(sequenceCalledResultLruMap.get(cacheKey) ?? []),
|
|
294
337
|
{
|
|
@@ -298,14 +341,20 @@ const createRoutingServer = async ({
|
|
|
298
341
|
body: requestBody as Record<string, unknown>,
|
|
299
342
|
},
|
|
300
343
|
response: {
|
|
301
|
-
status:
|
|
302
|
-
headers: Object.fromEntries(
|
|
344
|
+
status: proxyResponse.status,
|
|
345
|
+
headers: Object.fromEntries(proxyResponse.headers),
|
|
303
346
|
body: responseBody,
|
|
304
347
|
},
|
|
305
348
|
},
|
|
306
349
|
]);
|
|
307
350
|
}
|
|
308
|
-
|
|
351
|
+
|
|
352
|
+
logger.debug("passToApollo: returning proxy response", {
|
|
353
|
+
sequenceId,
|
|
354
|
+
operationName,
|
|
355
|
+
status: proxyResponse.status,
|
|
356
|
+
});
|
|
357
|
+
return proxyResponse;
|
|
309
358
|
};
|
|
310
359
|
// sequenceId x operationName -> FakeResponse
|
|
311
360
|
const sequenceFakeResponseLruMap = new LRUMap<string, RegisterSequenceOptions>({
|
|
@@ -316,7 +365,6 @@ const createRoutingServer = async ({
|
|
|
316
365
|
const sequenceCalledResultLruMap = new LRUMap<string, CalledResult[]>({
|
|
317
366
|
maxSize: maxRegisteredSequences,
|
|
318
367
|
});
|
|
319
|
-
const app = new Hono();
|
|
320
368
|
// /fake api does not support CORS
|
|
321
369
|
// because it allows any user to modify the response
|
|
322
370
|
// If you need to support CORS, implement with checking the origin or something
|
|
@@ -410,7 +458,8 @@ const createRoutingServer = async ({
|
|
|
410
458
|
);
|
|
411
459
|
});
|
|
412
460
|
const fakeGraphQLQuery = async (c: Context) => {
|
|
413
|
-
|
|
461
|
+
logger.debug("fakeGraphQLQuery: starting");
|
|
462
|
+
const _requestTimestamp = Date.now();
|
|
414
463
|
/**
|
|
415
464
|
* Steps:
|
|
416
465
|
* 1. Receive a request for a GraphQL query
|
|
@@ -422,7 +471,13 @@ const createRoutingServer = async ({
|
|
|
422
471
|
* 5. Return the merged data
|
|
423
472
|
*/
|
|
424
473
|
const sequenceId = c.req.header("sequence-id");
|
|
474
|
+
|
|
475
|
+
logger.debug("fakeGraphQLQuery: getting request body", { sequenceId });
|
|
425
476
|
const requestBody = await c.req.raw.clone().json();
|
|
477
|
+
logger.debug("fakeGraphQLQuery: got request body", {
|
|
478
|
+
requestBody,
|
|
479
|
+
});
|
|
480
|
+
|
|
426
481
|
const requestOperationName =
|
|
427
482
|
typeof requestBody === "object" &&
|
|
428
483
|
requestBody !== null &&
|
|
@@ -431,12 +486,22 @@ const createRoutingServer = async ({
|
|
|
431
486
|
typeof requestBody.operationName === "string"
|
|
432
487
|
? requestBody.operationName
|
|
433
488
|
: undefined;
|
|
434
|
-
logger.debug(
|
|
435
|
-
sequenceId
|
|
436
|
-
|
|
489
|
+
logger.debug(
|
|
490
|
+
`fakeGraphQLQuery: operationName: ${requestOperationName} sequenceId: ${sequenceId}`,
|
|
491
|
+
{
|
|
492
|
+
sequenceId,
|
|
493
|
+
},
|
|
494
|
+
);
|
|
437
495
|
// 2. Does it contain a sequence id?
|
|
438
|
-
if (!sequenceId)
|
|
439
|
-
|
|
496
|
+
if (!sequenceId) {
|
|
497
|
+
logger.debug("fakeGraphQLQuery: no sequenceId, passing to Apollo");
|
|
498
|
+
return passToApollo(c);
|
|
499
|
+
}
|
|
500
|
+
if (!requestOperationName) {
|
|
501
|
+
logger.debug("fakeGraphQLQuery: no operationName, passing to Apollo");
|
|
502
|
+
return passToApollo(c);
|
|
503
|
+
}
|
|
504
|
+
|
|
440
505
|
const sequence = sequenceFakeResponseLruMap.get(
|
|
441
506
|
createMapKey({
|
|
442
507
|
sequenceId,
|
|
@@ -444,7 +509,7 @@ const createRoutingServer = async ({
|
|
|
444
509
|
}),
|
|
445
510
|
);
|
|
446
511
|
logger.debug(
|
|
447
|
-
|
|
512
|
+
`fakeGraphQLQuery: sequence-id: ${sequenceId} x operationName: ${requestOperationName}, sequence exists: ${Boolean(
|
|
448
513
|
sequence,
|
|
449
514
|
)}`,
|
|
450
515
|
{
|
|
@@ -453,8 +518,13 @@ const createRoutingServer = async ({
|
|
|
453
518
|
operationName: requestOperationName,
|
|
454
519
|
},
|
|
455
520
|
);
|
|
456
|
-
if (!sequence)
|
|
521
|
+
if (!sequence) {
|
|
522
|
+
logger.debug("fakeGraphQLQuery: no sequence found, passing to Apollo");
|
|
523
|
+
return passToApollo(c);
|
|
524
|
+
}
|
|
525
|
+
|
|
457
526
|
if (requestOperationName !== sequence.operationName) {
|
|
527
|
+
logger.debug("fakeGraphQLQuery: operationName mismatch, returning error");
|
|
458
528
|
return Response.json(
|
|
459
529
|
JSON.stringify({
|
|
460
530
|
errors: [
|
|
@@ -466,7 +536,9 @@ const createRoutingServer = async ({
|
|
|
466
536
|
},
|
|
467
537
|
);
|
|
468
538
|
}
|
|
539
|
+
|
|
469
540
|
if (sequence.type === "network-error") {
|
|
541
|
+
logger.debug("fakeGraphQLQuery: network-error type, returning error");
|
|
470
542
|
return new Response(
|
|
471
543
|
JSON.stringify({
|
|
472
544
|
errors: sequence.errors,
|
|
@@ -476,34 +548,47 @@ const createRoutingServer = async ({
|
|
|
476
548
|
},
|
|
477
549
|
);
|
|
478
550
|
}
|
|
551
|
+
|
|
479
552
|
// 3. Send a request to Apollo Server
|
|
480
|
-
logger.debug("request to apollo
|
|
553
|
+
logger.debug("fakeGraphQLQuery: sending request to apollo server", {
|
|
481
554
|
sequenceId,
|
|
482
555
|
});
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
556
|
+
|
|
557
|
+
const proxyResponse = await proxy(`http://${ENV_HOSTNAME}:${ports.apolloServer}/graphql`, {
|
|
558
|
+
raw: c.req.raw,
|
|
559
|
+
headers: {
|
|
560
|
+
...c.req.header(),
|
|
561
|
+
},
|
|
488
562
|
});
|
|
489
|
-
|
|
563
|
+
|
|
564
|
+
logger.debug("fakeGraphQLQuery: apollo server response completed", {
|
|
490
565
|
sequenceId,
|
|
491
|
-
|
|
566
|
+
status: proxyResponse.status,
|
|
567
|
+
headers: Object.fromEntries(proxyResponse.headers),
|
|
568
|
+
});
|
|
569
|
+
|
|
570
|
+
if (proxyResponse.status === 101) return proxyResponse;
|
|
571
|
+
|
|
572
|
+
// 4. Get response body
|
|
573
|
+
logger.debug("fakeGraphQLQuery: getting response body");
|
|
574
|
+
const responseBody = (await proxyResponse.json()) as Record<string, unknown>;
|
|
575
|
+
logger.debug("fakeGraphQLQuery: parsed response body", {
|
|
576
|
+
responseBody,
|
|
492
577
|
});
|
|
493
|
-
|
|
494
|
-
//
|
|
495
|
-
const responseBody = await rep.json();
|
|
496
|
-
// 5. Merge the registration data with the response from 2
|
|
578
|
+
|
|
579
|
+
// 5. Merge the registration data with the response
|
|
497
580
|
const data = sequence.data;
|
|
498
|
-
logger.debug(
|
|
581
|
+
logger.debug(`fakeGraphQLQuery: starting data merge sequence-id: ${sequenceId}`, {
|
|
499
582
|
data,
|
|
500
583
|
responseBody,
|
|
501
584
|
});
|
|
585
|
+
// Use bracket notation for properties from index signature
|
|
586
|
+
const responseData = responseBody["data"] as any;
|
|
502
587
|
const merged = {
|
|
503
|
-
|
|
504
|
-
...responseBody.data,
|
|
588
|
+
...(typeof responseData === "object" && responseData !== null ? responseData : {}),
|
|
505
589
|
...data,
|
|
506
590
|
};
|
|
591
|
+
|
|
507
592
|
const cacheKey = createMapKey({
|
|
508
593
|
sequenceId,
|
|
509
594
|
operationName: requestOperationName,
|
|
@@ -517,20 +602,25 @@ const createRoutingServer = async ({
|
|
|
517
602
|
body: requestBody as Record<string, unknown>,
|
|
518
603
|
},
|
|
519
604
|
response: {
|
|
520
|
-
status:
|
|
521
|
-
headers: Object.fromEntries(
|
|
605
|
+
status: proxyResponse.status,
|
|
606
|
+
headers: Object.fromEntries(proxyResponse.headers),
|
|
522
607
|
body: {
|
|
523
608
|
data: merged,
|
|
524
609
|
},
|
|
525
610
|
},
|
|
526
611
|
},
|
|
527
612
|
]);
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
613
|
+
|
|
614
|
+
logger.debug("fakeGraphQLQuery: merge completed, returning response");
|
|
615
|
+
// "content-length" should be matched from the response body length
|
|
616
|
+
const responseJson = JSON.stringify({ data: merged });
|
|
617
|
+
return new Response(responseJson, {
|
|
618
|
+
status: proxyResponse.status,
|
|
619
|
+
headers: {
|
|
620
|
+
"Content-Type": "application/json",
|
|
621
|
+
"Content-Length": responseJson.length.toString(),
|
|
531
622
|
},
|
|
532
|
-
|
|
533
|
-
);
|
|
623
|
+
});
|
|
534
624
|
};
|
|
535
625
|
// graphql api is for browser and need to support CORS
|
|
536
626
|
app.use(
|
|
@@ -616,7 +706,7 @@ export const createFakeServerInternal = async (options: FakeServerInternal) => {
|
|
|
616
706
|
return {
|
|
617
707
|
start: async () => {
|
|
618
708
|
// Replace startStandaloneServer with our custom implementation
|
|
619
|
-
|
|
709
|
+
await startStandaloneServerWithCORS(
|
|
620
710
|
apolloServer,
|
|
621
711
|
{
|
|
622
712
|
listen: { port: options.ports.apolloServer },
|
|
@@ -629,8 +719,8 @@ export const createFakeServerInternal = async (options: FakeServerInternal) => {
|
|
|
629
719
|
});
|
|
630
720
|
return {
|
|
631
721
|
urls: {
|
|
632
|
-
fakeServer: `http
|
|
633
|
-
apolloServer: `http
|
|
722
|
+
fakeServer: `http://${ENV_HOSTNAME}:${options.ports.fakeServer}`,
|
|
723
|
+
apolloServer: `http://${ENV_HOSTNAME}:${options.ports.apolloServer}`,
|
|
634
724
|
},
|
|
635
725
|
};
|
|
636
726
|
},
|