@newmo/graphql-fake-server 0.19.0 → 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 +102 -44
- 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 +138 -50
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":"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"}
|
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,19 +1,20 @@
|
|
|
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";
|
|
18
19
|
// @ts-expect-error -- biome error
|
|
19
20
|
const ENV_HOSTNAME = process.env.HOSTNAME || "0.0.0.0";
|
|
@@ -55,7 +56,7 @@ const startStandaloneServerWithCORS = async (server, options, allowedCORSOrigins
|
|
|
55
56
|
const port = options.listen.port ?? 4000;
|
|
56
57
|
await new Promise((resolve) => httpServer.listen({ port }, resolve));
|
|
57
58
|
return {
|
|
58
|
-
url: `http://${ENV_HOSTNAME}:${port}
|
|
59
|
+
url: `http://${ENV_HOSTNAME}:${port}`,
|
|
59
60
|
httpServer,
|
|
60
61
|
};
|
|
61
62
|
};
|
|
@@ -151,45 +152,72 @@ const isLocalRequest = (origin) => {
|
|
|
151
152
|
};
|
|
152
153
|
const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, allowedCORSOrigins, }) => {
|
|
153
154
|
const logger = createLogger(logLevel);
|
|
155
|
+
const app = new Hono();
|
|
154
156
|
// pass through to apollo server
|
|
155
157
|
const passToApollo = async (c) => {
|
|
158
|
+
logger.debug("passToApollo: starting");
|
|
156
159
|
// remove prefix
|
|
157
160
|
// prefix = /app1/*, path = /app1/a/b
|
|
158
161
|
// => suffix_path = /a/b
|
|
159
162
|
// let path = new URL(c.req.raw.url).pathname
|
|
160
163
|
let path = c.req.path;
|
|
161
|
-
logger.debug("
|
|
164
|
+
logger.debug("passToApollo: got path", {
|
|
162
165
|
path,
|
|
166
|
+
routePath: c.req.routePath,
|
|
163
167
|
});
|
|
164
168
|
path = path.replace(new RegExp(`^${c.req.routePath.replace("*", "")}`), "/");
|
|
165
169
|
let url = `http://${ENV_HOSTNAME}:${ports.apolloServer}${path}`;
|
|
166
170
|
// add params to URL
|
|
167
171
|
if (c.req.query())
|
|
168
172
|
url = `${url}?${new URLSearchParams(c.req.query())}`;
|
|
173
|
+
logger.debug("passToApollo: built URL", { url });
|
|
169
174
|
const sequenceId = c.req.header("sequence-id");
|
|
175
|
+
logger.debug("passToApollo: getting request body", { sequenceId });
|
|
170
176
|
const requestBody = await c.req.raw.clone().json();
|
|
177
|
+
logger.debug("passToApollo: got request body", { requestBody });
|
|
171
178
|
const operationName = typeof requestBody === "object" &&
|
|
172
179
|
requestBody !== null &&
|
|
173
180
|
"operationName" in requestBody
|
|
174
181
|
? requestBody.operationName
|
|
175
182
|
: undefined;
|
|
176
183
|
// request
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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),
|
|
182
201
|
});
|
|
183
202
|
// log response with pipe
|
|
184
|
-
if (
|
|
185
|
-
return
|
|
203
|
+
if (proxyResponse.status === 101)
|
|
204
|
+
return proxyResponse;
|
|
186
205
|
// save request and response for /called api
|
|
187
206
|
if (sequenceId && typeof operationName === "string") {
|
|
188
|
-
|
|
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
|
+
});
|
|
189
212
|
const cacheKey = createMapKey({
|
|
190
213
|
sequenceId,
|
|
191
214
|
operationName,
|
|
192
215
|
});
|
|
216
|
+
logger.debug("save called result", {
|
|
217
|
+
sequenceId,
|
|
218
|
+
operationName,
|
|
219
|
+
cacheKey,
|
|
220
|
+
});
|
|
193
221
|
sequenceCalledResultLruMap.set(cacheKey, [
|
|
194
222
|
...(sequenceCalledResultLruMap.get(cacheKey) ?? []),
|
|
195
223
|
{
|
|
@@ -199,14 +227,19 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
199
227
|
body: requestBody,
|
|
200
228
|
},
|
|
201
229
|
response: {
|
|
202
|
-
status:
|
|
203
|
-
headers: Object.fromEntries(
|
|
230
|
+
status: proxyResponse.status,
|
|
231
|
+
headers: Object.fromEntries(proxyResponse.headers),
|
|
204
232
|
body: responseBody,
|
|
205
233
|
},
|
|
206
234
|
},
|
|
207
235
|
]);
|
|
208
236
|
}
|
|
209
|
-
|
|
237
|
+
logger.debug("passToApollo: returning proxy response", {
|
|
238
|
+
sequenceId,
|
|
239
|
+
operationName,
|
|
240
|
+
status: proxyResponse.status,
|
|
241
|
+
});
|
|
242
|
+
return proxyResponse;
|
|
210
243
|
};
|
|
211
244
|
// sequenceId x operationName -> FakeResponse
|
|
212
245
|
const sequenceFakeResponseLruMap = new LRUMap({
|
|
@@ -217,7 +250,6 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
217
250
|
const sequenceCalledResultLruMap = new LRUMap({
|
|
218
251
|
maxSize: maxRegisteredSequences,
|
|
219
252
|
});
|
|
220
|
-
const app = new Hono();
|
|
221
253
|
// /fake api does not support CORS
|
|
222
254
|
// because it allows any user to modify the response
|
|
223
255
|
// If you need to support CORS, implement with checking the origin or something
|
|
@@ -293,7 +325,8 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
293
325
|
});
|
|
294
326
|
});
|
|
295
327
|
const fakeGraphQLQuery = async (c) => {
|
|
296
|
-
|
|
328
|
+
logger.debug("fakeGraphQLQuery: starting");
|
|
329
|
+
const _requestTimestamp = Date.now();
|
|
297
330
|
/**
|
|
298
331
|
* Steps:
|
|
299
332
|
* 1. Receive a request for a GraphQL query
|
|
@@ -305,7 +338,11 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
305
338
|
* 5. Return the merged data
|
|
306
339
|
*/
|
|
307
340
|
const sequenceId = c.req.header("sequence-id");
|
|
341
|
+
logger.debug("fakeGraphQLQuery: getting request body", { sequenceId });
|
|
308
342
|
const requestBody = await c.req.raw.clone().json();
|
|
343
|
+
logger.debug("fakeGraphQLQuery: got request body", {
|
|
344
|
+
requestBody,
|
|
345
|
+
});
|
|
309
346
|
const requestOperationName = typeof requestBody === "object" &&
|
|
310
347
|
requestBody !== null &&
|
|
311
348
|
"operationName" in requestBody &&
|
|
@@ -313,26 +350,33 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
313
350
|
typeof requestBody.operationName === "string"
|
|
314
351
|
? requestBody.operationName
|
|
315
352
|
: undefined;
|
|
316
|
-
logger.debug(`operationName: ${requestOperationName} sequenceId: ${sequenceId}`, {
|
|
353
|
+
logger.debug(`fakeGraphQLQuery: operationName: ${requestOperationName} sequenceId: ${sequenceId}`, {
|
|
317
354
|
sequenceId,
|
|
318
355
|
});
|
|
319
356
|
// 2. Does it contain a sequence id?
|
|
320
|
-
if (!sequenceId)
|
|
357
|
+
if (!sequenceId) {
|
|
358
|
+
logger.debug("fakeGraphQLQuery: no sequenceId, passing to Apollo");
|
|
321
359
|
return passToApollo(c);
|
|
322
|
-
|
|
360
|
+
}
|
|
361
|
+
if (!requestOperationName) {
|
|
362
|
+
logger.debug("fakeGraphQLQuery: no operationName, passing to Apollo");
|
|
323
363
|
return passToApollo(c);
|
|
364
|
+
}
|
|
324
365
|
const sequence = sequenceFakeResponseLruMap.get(createMapKey({
|
|
325
366
|
sequenceId,
|
|
326
367
|
operationName: requestOperationName,
|
|
327
368
|
}));
|
|
328
|
-
logger.debug(
|
|
369
|
+
logger.debug(`fakeGraphQLQuery: sequence-id: ${sequenceId} x operationName: ${requestOperationName}, sequence exists: ${Boolean(sequence)}`, {
|
|
329
370
|
sequence,
|
|
330
371
|
sequenceId,
|
|
331
372
|
operationName: requestOperationName,
|
|
332
373
|
});
|
|
333
|
-
if (!sequence)
|
|
374
|
+
if (!sequence) {
|
|
375
|
+
logger.debug("fakeGraphQLQuery: no sequence found, passing to Apollo");
|
|
334
376
|
return passToApollo(c);
|
|
377
|
+
}
|
|
335
378
|
if (requestOperationName !== sequence.operationName) {
|
|
379
|
+
logger.debug("fakeGraphQLQuery: operationName mismatch, returning error");
|
|
336
380
|
return Response.json(JSON.stringify({
|
|
337
381
|
errors: [
|
|
338
382
|
`operationName does not match. operationName: ${requestOperationName} sequenceId: ${sequenceId}`,
|
|
@@ -342,6 +386,7 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
342
386
|
});
|
|
343
387
|
}
|
|
344
388
|
if (sequence.type === "network-error") {
|
|
389
|
+
logger.debug("fakeGraphQLQuery: network-error type, returning error");
|
|
345
390
|
return new Response(JSON.stringify({
|
|
346
391
|
errors: sequence.errors,
|
|
347
392
|
}), {
|
|
@@ -349,32 +394,38 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
349
394
|
});
|
|
350
395
|
}
|
|
351
396
|
// 3. Send a request to Apollo Server
|
|
352
|
-
logger.debug("request to apollo
|
|
397
|
+
logger.debug("fakeGraphQLQuery: sending request to apollo server", {
|
|
353
398
|
sequenceId,
|
|
354
399
|
});
|
|
355
|
-
const
|
|
356
|
-
|
|
357
|
-
headers:
|
|
358
|
-
|
|
359
|
-
|
|
400
|
+
const proxyResponse = await proxy(`http://${ENV_HOSTNAME}:${ports.apolloServer}/graphql`, {
|
|
401
|
+
raw: c.req.raw,
|
|
402
|
+
headers: {
|
|
403
|
+
...c.req.header(),
|
|
404
|
+
},
|
|
360
405
|
});
|
|
361
|
-
logger.debug("
|
|
406
|
+
logger.debug("fakeGraphQLQuery: apollo server response completed", {
|
|
362
407
|
sequenceId,
|
|
363
|
-
|
|
408
|
+
status: proxyResponse.status,
|
|
409
|
+
headers: Object.fromEntries(proxyResponse.headers),
|
|
364
410
|
});
|
|
365
|
-
if (
|
|
366
|
-
return
|
|
367
|
-
// 4.
|
|
368
|
-
|
|
369
|
-
|
|
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
|
|
370
420
|
const data = sequence.data;
|
|
371
|
-
logger.debug(
|
|
421
|
+
logger.debug(`fakeGraphQLQuery: starting data merge sequence-id: ${sequenceId}`, {
|
|
372
422
|
data,
|
|
373
423
|
responseBody,
|
|
374
424
|
});
|
|
425
|
+
// Use bracket notation for properties from index signature
|
|
426
|
+
const responseData = responseBody["data"];
|
|
375
427
|
const merged = {
|
|
376
|
-
|
|
377
|
-
...responseBody.data,
|
|
428
|
+
...(typeof responseData === "object" && responseData !== null ? responseData : {}),
|
|
378
429
|
...data,
|
|
379
430
|
};
|
|
380
431
|
const cacheKey = createMapKey({
|
|
@@ -390,17 +441,24 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
390
441
|
body: requestBody,
|
|
391
442
|
},
|
|
392
443
|
response: {
|
|
393
|
-
status:
|
|
394
|
-
headers: Object.fromEntries(
|
|
444
|
+
status: proxyResponse.status,
|
|
445
|
+
headers: Object.fromEntries(proxyResponse.headers),
|
|
395
446
|
body: {
|
|
396
447
|
data: merged,
|
|
397
448
|
},
|
|
398
449
|
},
|
|
399
450
|
},
|
|
400
451
|
]);
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
}
|
|
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
|
+
});
|
|
404
462
|
};
|
|
405
463
|
// graphql api is for browser and need to support CORS
|
|
406
464
|
app.use("/graphql", cors({
|
|
@@ -470,7 +528,7 @@ export const createFakeServerInternal = async (options) => {
|
|
|
470
528
|
return {
|
|
471
529
|
start: async () => {
|
|
472
530
|
// Replace startStandaloneServer with our custom implementation
|
|
473
|
-
|
|
531
|
+
await startStandaloneServerWithCORS(apolloServer, {
|
|
474
532
|
listen: { port: options.ports.apolloServer },
|
|
475
533
|
}, options.allowedCORSOrigins);
|
|
476
534
|
routerServer = serve({
|
package/dist/esm/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,iCAAiC,EAAE,MAAM,uCAAuC,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAmB,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,WAAW,MAAM,MAAM,CAAC;AAC/B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,+BAA+B;AAC/B,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAgB,IAAI,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAiB,YAAY,EAAE,MAAM,aAAa,CAAC;AAE1D,kCAAkC;AAClC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC;AAoBvD;;;GAGG;AACH,MAAM,6BAA6B,GAAG,KAAK,EACvC,MAAoB,EACpB,OAEC,EACD,qBAA+B,EAAE,EACnC,EAAE;IACA,oDAAoD;IACpD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAE1C,yCAAyC;IACzC,MAAM,CAAC,SAAS,CAAC,iCAAiC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAEpE,2BAA2B;IAC3B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAErB,wEAAwE;IACxE,GAAG,CAAC,GAAG,CACH,GAAG,EACH,WAAW,CAAC;QACR,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YACzB,8DAA8D;YAC9D,IAAI,CAAC,MAAM;gBAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAEzC,sEAAsE;YACtE,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAChC,CAAC;YAED,sDAAsD;YACtD,IAAI,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtC,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAChC,CAAC;YAED,yBAAyB;YACzB,OAAO,QAAQ,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC;QACnC,WAAW,EAAE,KAAK;KACrB,CAAC,EACF,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC/B,4EAA4E;IAC5E,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CACrC,CAAC;IAEF,mBAAmB;IACnB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;IACzC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAE3E,OAAO;QACH,GAAG,EAAE,UAAU,YAAY,IAAI,IAAI,GAAG;QACtC,UAAU;KACb,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAA2B,EAAE,EAAE;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAC5B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpD,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC,CACL,CAAC;IACF,OAAO,IAAI,YAAY,CAAC;QACpB,MAAM,EAAE,gBAAgB,CAAC;YACrB,MAAM,EAAE,oBAAoB,CAAC;gBACzB,QAAQ,EAAE,OAAO,CAAC,MAAM;aAC3B,CAAC;YACF,KAAK;SACR,CAAC;QACF,eAAe,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;KACvD,CAAC,CAAC;AACP,CAAC,CAAC;AAqCF,MAAM,4BAA4B,GAAG,CAAC,IAAa,EAAmC,EAAE;IACpF,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5D,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClD,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAChC,OAAO,CACH,QAAQ,IAAI,IAAI;gBAChB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC1B,oBAAoB,IAAI,IAAI;gBAC5B,OAAO,IAAI,CAAC,kBAAkB,KAAK,QAAQ;gBAC3C,eAAe,IAAI,IAAI;gBACvB,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CACzC,CAAC;QACN,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC5B,OAAO,CACH,MAAM,IAAI,IAAI;gBACd,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAC7B,eAAe,IAAI,IAAI;gBACvB,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CACzC,CAAC;QACN,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,MAAM;IACA,GAAG,GAAG,IAAI,GAAG,EAAQ,CAAC;IACtB,IAAI,GAAQ,EAAE,CAAC;IACf,OAAO,CAAS;IAExB,YAAY,EAAE,OAAO,EAAuB;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ;QAChB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,SAAS,EAAE,CAAC;gBACZ,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC;IACL,CAAC;IAED,GAAG,CAAC,GAAM;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACJ;AAED,wCAAwC;AACxC,kFAAkF;AAClF,qDAAqD;AACrD,wFAAwF;AACxF,MAAM,YAAY,GAAG,CAAC,EAClB,UAAU,EACV,aAAa,GAC+B,EAAE,EAAE;IAChD,OAAO,GAAG,UAAU,IAAI,aAAa,EAAE,CAAC;AAC5C,CAAC,CAAC;AAEF,gDAAgD;AAChD,8CAA8C;AAC9C,MAAM,eAAe,GAAG;IACpB,8BAA8B,EAAE,iBAAiB;IACjD,iCAAiC,EAAE,aAAa;IAChD,8CAA8C,EAAE,gBAAgB;CACnE,CAAC;AACF;;;GAGG;AACH,MAAM,cAAc,GAAG,CAAC,MAAqB,EAAW,EAAE;IACtD,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC9B,uDAAuD;QACvD,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YACpF,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,KAAK,EAAE,EAC/B,QAAQ,EACR,KAAK,EACL,sBAAsB,EACtB,kBAAkB,GASrB,EAAE,EAAE;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtC,gCAAgC;IAChC,MAAM,YAAY,GAAG,KAAK,EAAE,CAAU,EAAE,EAAE;QACtC,gBAAgB;QAChB,qCAAqC;QACrC,wBAAwB;QACxB,6CAA6C;QAC7C,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;YAClC,IAAI;SACP,CAAC,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7E,IAAI,GAAG,GAAG,UAAU,YAAY,IAAI,KAAK,CAAC,YAAY,GAAG,IAAI,EAAE,CAAC;QAChE,oBAAoB;QACpB,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE;YAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;QACxE,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,aAAa,GACf,OAAO,WAAW,KAAK,QAAQ;YAC/B,WAAW,KAAK,IAAI;YACpB,eAAe,IAAI,WAAW;YAC1B,CAAC,CAAC,WAAW,CAAC,aAAa;YAC3B,CAAC,CAAC,SAAS,CAAC;QACpB,UAAU;QACV,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YACzB,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM;YACpB,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO;YAC1B,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;YACpB,MAAM,EAAE,MAAM;SACjB,CAAC,CAAC;QACH,yBAAyB;QACzB,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,GAAG,CAAC;QACnC,4CAA4C;QAC5C,IAAI,UAAU,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YAClD,MAAM,YAAY,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAA4B,CAAC;YAC3E,MAAM,QAAQ,GAAG,YAAY,CAAC;gBAC1B,UAAU;gBACV,aAAa;aAChB,CAAC,CAAC;YACH,0BAA0B,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACrC,GAAG,CAAC,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnD;oBACI,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE;oBAC5B,OAAO,EAAE;wBACL,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;wBAC9C,IAAI,EAAE,WAAsC;qBAC/C;oBACD,QAAQ,EAAE;wBACN,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;wBACxC,IAAI,EAAE,YAAY;qBACrB;iBACJ;aACJ,CAAC,CAAC;QACP,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC;IACF,6CAA6C;IAC7C,MAAM,0BAA0B,GAAG,IAAI,MAAM,CAAkC;QAC3E,OAAO,EAAE,sBAAsB;KAClC,CAAC,CAAC;IACH,8CAA8C;IAC9C,gFAAgF;IAChF,MAAM,0BAA0B,GAAG,IAAI,MAAM,CAAyB;QAClE,OAAO,EAAE,sBAAsB;KAClC,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,kCAAkC;IAClC,oDAAoD;IACpD,+EAA+E;IAC/E,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO,QAAQ,CAAC,IAAI,CAChB,IAAI,CAAC,SAAS,CAAC;gBACX,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,CAAC,yBAAyB,CAAC;aACtC,CAAC,EACF;gBACI,MAAM,EAAE,GAAG;aACd,CACJ,CAAC;QACN,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;YACjC,UAAU;YACV,IAAI;SACP,CAAC,CAAC;QACH,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,EAAE;gBAC/E,MAAM,EAAE,GAAG;aACd,CAAC,CAAC;QACP,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE;YAChC,UAAU;YACV,IAAI,EAAE,IAAI,CAAC,IAAI;SAClB,CAAC,CAAC;QACH,0BAA0B,CAAC,GAAG,CAC1B,YAAY,CAAC;YACT,UAAU;YACV,aAAa;SAChB,CAAC,EACF,IAAI,CACP,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;YAC/C,MAAM,EAAE,GAAG;SACd,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAChC,qDAAqD;QACrD,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO,QAAQ,CAAC,IAAI,CAChB,IAAI,CAAC,SAAS,CAAC;gBACX,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,CAAC,yBAAyB,CAAC;aACtC,CAAC,EACF;gBACI,MAAM,EAAE,GAAG;aACd,CACJ,CAAC;QACN,CAAC;QACD,6BAA6B;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,OAAO,QAAQ,CAAC,IAAI,CAChB,IAAI,CAAC,SAAS,CAAC;gBACX,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,CAAC,2BAA2B,CAAC;aACxC,CAAC,EACF;gBACI,MAAM,EAAE,GAAG;aACd,CACJ,CAAC;QACN,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC;YACrB,UAAU;YACV,aAAa;SAChB,CAAC,CAAC;QACH,mCAAmC;QACnC,MAAM,MAAM,GAAG,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,QAAQ,CAAC,IAAI,CAChB,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EACtB;gBACI,MAAM,EAAE,GAAG;aACd,CACJ,CAAC;QACN,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,CAChB,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAC1B;YACI,MAAM,EAAE,GAAG;SACd,CACJ,CAAC;IACN,CAAC,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,KAAK,EAAE,CAAU,EAAE,EAAE;QAC1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC;;;;;;;;;WASG;QACH,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,oBAAoB,GACtB,OAAO,WAAW,KAAK,QAAQ;YAC/B,WAAW,KAAK,IAAI;YACpB,eAAe,IAAI,WAAW;YAC9B,WAAW,CAAC,aAAa;YACzB,OAAO,WAAW,CAAC,aAAa,KAAK,QAAQ;YACzC,CAAC,CAAC,WAAW,CAAC,aAAa;YAC3B,CAAC,CAAC,SAAS,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,kBAAkB,oBAAoB,gBAAgB,UAAU,EAAE,EAAE;YAC7E,UAAU;SACb,CAAC,CAAC;QACH,oCAAoC;QACpC,IAAI,CAAC,UAAU;YAAE,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,oBAAoB;YAAE,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,0BAA0B,CAAC,GAAG,CAC3C,YAAY,CAAC;YACT,UAAU;YACV,aAAa,EAAE,oBAAoB;SACtC,CAAC,CACL,CAAC;QACF,MAAM,CAAC,KAAK,CACR,wBAAwB,UAAU,qBAAqB,oBAAoB,sBAAsB,OAAO,CACpG,QAAQ,CACX,EAAE,EACH;YACI,QAAQ;YACR,UAAU;YACV,aAAa,EAAE,oBAAoB;SACtC,CACJ,CAAC;QACF,IAAI,CAAC,QAAQ;YAAE,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,oBAAoB,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;YAClD,OAAO,QAAQ,CAAC,IAAI,CAChB,IAAI,CAAC,SAAS,CAAC;gBACX,MAAM,EAAE;oBACJ,gDAAgD,oBAAoB,gBAAgB,UAAU,EAAE;iBACnG;aACJ,CAAC,EACF;gBACI,MAAM,EAAE,GAAG;aACd,CACJ,CAAC;QACN,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACpC,OAAO,IAAI,QAAQ,CACf,IAAI,CAAC,SAAS,CAAC;gBACX,MAAM,EAAE,QAAQ,CAAC,MAAM;aAC1B,CAAC,EACF;gBACI,MAAM,EAAE,QAAQ,CAAC,kBAAkB;aACtC,CACJ,CAAC;QACN,CAAC;QACD,qCAAqC;QACrC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE;YACrC,UAAU;SACb,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,UAAU,YAAY,IAAI,KAAK,CAAC,YAAY,UAAU,EAAE;YAC5E,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM;YACpB,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO;YAC1B,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;YACpB,MAAM,EAAE,MAAM;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE;YAChD,UAAU;YACV,GAAG;SACN,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,GAAG,CAAC;QACnC,6CAA6C;QAC7C,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACtC,0DAA0D;QAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,8BAA8B,UAAU,EAAE,EAAE;YACrD,IAAI;YACJ,YAAY;SACf,CAAC,CAAC;QACH,MAAM,MAAM,GAAG;YACX,kBAAkB;YAClB,GAAG,YAAY,CAAC,IAAI;YACpB,GAAG,IAAI;SACV,CAAC;QACF,MAAM,QAAQ,GAAG,YAAY,CAAC;YAC1B,UAAU;YACV,aAAa,EAAE,oBAAoB;SACtC,CAAC,CAAC;QACH,0BAA0B,CAAC,GAAG,CAAC,QAAQ,EAAE;YACrC,GAAG,CAAC,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnD;gBACI,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE;gBAC5B,OAAO,EAAE;oBACL,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;oBAC9C,IAAI,EAAE,WAAsC;iBAC/C;gBACD,QAAQ,EAAE;oBACN,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;oBACxC,IAAI,EAAE;wBACF,IAAI,EAAE,MAAM;qBACf;iBACJ;aACJ;SACJ,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAChB;YACI,IAAI,EAAE,MAAM;SACf,EACD,GAAG,CACN,CAAC;IACN,CAAC,CAAC;IACF,sDAAsD;IACtD,GAAG,CAAC,GAAG,CACH,UAAU,EACV,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO,MAAM,CAAC;YAClB,CAAC;YACD,IAAI,MAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChD,OAAO,MAAM,CAAC;YAClB,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;KACJ,CAAC,CACL,CAAC;IACF,GAAG,CAAC,GAAG,CACH,QAAQ,EACR,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO,MAAM,CAAC;YAClB,CAAC;YACD,IAAI,MAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChD,OAAO,MAAM,CAAC;YAClB,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;KACJ,CAAC,CACL,CAAC;IACF,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACtC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IACpC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC3B,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,OAAgC,EAAE,EAAE;IACvE,MAAM,EACF,QAAQ,EACR,sBAAsB,EACtB,aAAa,EACb,sBAAsB,EACtB,KAAK,EACL,cAAc,EACd,aAAa,EACb,kBAAkB,GACrB,GAAG,OAAO,CAAC;IACZ,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC;QAChC,MAAM;QACN,sBAAsB;QACtB,aAAa;KAChB,CAAC,CAAC;IACH,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,4BAA4B,EAAE;YAC1C,KAAK,EAAE,UAAU,CAAC,KAAK;SAC1B,CAAC,CAAC;IACP,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IACnD,OAAO,wBAAwB,CAAC;QAC5B,KAAK;QACL,MAAM;QACN,UAAU,EAAE,UAAU,CAAC,IAAI;QAC3B,aAAa;QACb,sBAAsB;QACtB,sBAAsB;QACtB,QAAQ,EAAE,QAAQ,IAAI,MAAM;QAC5B,kBAAkB;KACrB,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,OAA2B,EAAE,EAAE;IAC1E,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC;QAC5C,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;QACtD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;KACjD,CAAC,CAAC;IACH,IAAI,YAAY,GAAoC,IAAI,CAAC;IACzD,OAAO;QACH,KAAK,EAAE,KAAK,IAAI,EAAE;YACd,+DAA+D;YAC/D,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,6BAA6B,CAC/C,YAAY,EACZ;gBACI,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE;aAC/C,EACD,OAAO,CAAC,kBAAkB,CAC7B,CAAC;YACF,YAAY,GAAG,KAAK,CAAC;gBACjB,KAAK,EAAE,aAAa,CAAC,KAAK;gBAC1B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;aACjC,CAAC,CAAC;YACH,OAAO;gBACH,IAAI,EAAE;oBACF,UAAU,EAAE,UAAU,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE;oBAChE,YAAY,EAAE,UAAU,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE;iBACvE;aACJ,CAAC;QACN,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACP,YAAY,CAAC,IAAI,EAAE,CAAC;YACpB,YAAY,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;KACJ,CAAC;AACN,CAAC,CAAC"}
|
|
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,22 +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
|
-
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
|
|
|
21
22
|
// @ts-expect-error -- biome error
|
|
22
23
|
const ENV_HOSTNAME = process.env.HOSTNAME || "0.0.0.0";
|
|
@@ -94,7 +95,7 @@ const startStandaloneServerWithCORS = async (
|
|
|
94
95
|
await new Promise<void>((resolve) => httpServer.listen({ port }, resolve));
|
|
95
96
|
|
|
96
97
|
return {
|
|
97
|
-
url: `http://${ENV_HOSTNAME}:${port}
|
|
98
|
+
url: `http://${ENV_HOSTNAME}:${port}`,
|
|
98
99
|
httpServer,
|
|
99
100
|
};
|
|
100
101
|
};
|
|
@@ -208,7 +209,10 @@ class LRUMap<K, V> {
|
|
|
208
209
|
const createMapKey = ({
|
|
209
210
|
sequenceId,
|
|
210
211
|
operationName,
|
|
211
|
-
}: {
|
|
212
|
+
}: {
|
|
213
|
+
sequenceId: string;
|
|
214
|
+
operationName: string;
|
|
215
|
+
}) => {
|
|
212
216
|
return `${sequenceId}.${operationName}`;
|
|
213
217
|
};
|
|
214
218
|
|
|
@@ -253,44 +257,81 @@ const createRoutingServer = async ({
|
|
|
253
257
|
allowedCORSOrigins: string[];
|
|
254
258
|
}) => {
|
|
255
259
|
const logger = createLogger(logLevel);
|
|
260
|
+
const app = new Hono();
|
|
256
261
|
// pass through to apollo server
|
|
257
262
|
const passToApollo = async (c: Context) => {
|
|
263
|
+
logger.debug("passToApollo: starting");
|
|
258
264
|
// remove prefix
|
|
259
265
|
// prefix = /app1/*, path = /app1/a/b
|
|
260
266
|
// => suffix_path = /a/b
|
|
261
267
|
// let path = new URL(c.req.raw.url).pathname
|
|
262
268
|
let path = c.req.path;
|
|
263
|
-
logger.debug("
|
|
269
|
+
logger.debug("passToApollo: got path", {
|
|
264
270
|
path,
|
|
271
|
+
routePath: c.req.routePath,
|
|
265
272
|
});
|
|
266
273
|
path = path.replace(new RegExp(`^${c.req.routePath.replace("*", "")}`), "/");
|
|
267
274
|
let url = `http://${ENV_HOSTNAME}:${ports.apolloServer}${path}`;
|
|
268
275
|
// add params to URL
|
|
269
276
|
if (c.req.query()) url = `${url}?${new URLSearchParams(c.req.query())}`;
|
|
277
|
+
logger.debug("passToApollo: built URL", { url });
|
|
278
|
+
|
|
270
279
|
const sequenceId = c.req.header("sequence-id");
|
|
280
|
+
logger.debug("passToApollo: getting request body", { sequenceId });
|
|
281
|
+
|
|
271
282
|
const requestBody = await c.req.raw.clone().json();
|
|
283
|
+
logger.debug("passToApollo: got request body", { requestBody });
|
|
284
|
+
|
|
272
285
|
const operationName =
|
|
273
286
|
typeof requestBody === "object" &&
|
|
274
287
|
requestBody !== null &&
|
|
275
288
|
"operationName" in requestBody
|
|
276
289
|
? requestBody.operationName
|
|
277
290
|
: undefined;
|
|
291
|
+
|
|
278
292
|
// request
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
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
|
+
},
|
|
284
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
|
+
|
|
285
314
|
// log response with pipe
|
|
286
|
-
if (
|
|
315
|
+
if (proxyResponse.status === 101) return proxyResponse;
|
|
316
|
+
|
|
287
317
|
// save request and response for /called api
|
|
288
318
|
if (sequenceId && typeof operationName === "string") {
|
|
289
|
-
|
|
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
|
+
|
|
290
325
|
const cacheKey = createMapKey({
|
|
291
326
|
sequenceId,
|
|
292
327
|
operationName,
|
|
293
328
|
});
|
|
329
|
+
logger.debug("save called result", {
|
|
330
|
+
sequenceId,
|
|
331
|
+
operationName,
|
|
332
|
+
cacheKey,
|
|
333
|
+
});
|
|
334
|
+
|
|
294
335
|
sequenceCalledResultLruMap.set(cacheKey, [
|
|
295
336
|
...(sequenceCalledResultLruMap.get(cacheKey) ?? []),
|
|
296
337
|
{
|
|
@@ -300,14 +341,20 @@ const createRoutingServer = async ({
|
|
|
300
341
|
body: requestBody as Record<string, unknown>,
|
|
301
342
|
},
|
|
302
343
|
response: {
|
|
303
|
-
status:
|
|
304
|
-
headers: Object.fromEntries(
|
|
344
|
+
status: proxyResponse.status,
|
|
345
|
+
headers: Object.fromEntries(proxyResponse.headers),
|
|
305
346
|
body: responseBody,
|
|
306
347
|
},
|
|
307
348
|
},
|
|
308
349
|
]);
|
|
309
350
|
}
|
|
310
|
-
|
|
351
|
+
|
|
352
|
+
logger.debug("passToApollo: returning proxy response", {
|
|
353
|
+
sequenceId,
|
|
354
|
+
operationName,
|
|
355
|
+
status: proxyResponse.status,
|
|
356
|
+
});
|
|
357
|
+
return proxyResponse;
|
|
311
358
|
};
|
|
312
359
|
// sequenceId x operationName -> FakeResponse
|
|
313
360
|
const sequenceFakeResponseLruMap = new LRUMap<string, RegisterSequenceOptions>({
|
|
@@ -318,7 +365,6 @@ const createRoutingServer = async ({
|
|
|
318
365
|
const sequenceCalledResultLruMap = new LRUMap<string, CalledResult[]>({
|
|
319
366
|
maxSize: maxRegisteredSequences,
|
|
320
367
|
});
|
|
321
|
-
const app = new Hono();
|
|
322
368
|
// /fake api does not support CORS
|
|
323
369
|
// because it allows any user to modify the response
|
|
324
370
|
// If you need to support CORS, implement with checking the origin or something
|
|
@@ -412,7 +458,8 @@ const createRoutingServer = async ({
|
|
|
412
458
|
);
|
|
413
459
|
});
|
|
414
460
|
const fakeGraphQLQuery = async (c: Context) => {
|
|
415
|
-
|
|
461
|
+
logger.debug("fakeGraphQLQuery: starting");
|
|
462
|
+
const _requestTimestamp = Date.now();
|
|
416
463
|
/**
|
|
417
464
|
* Steps:
|
|
418
465
|
* 1. Receive a request for a GraphQL query
|
|
@@ -424,7 +471,13 @@ const createRoutingServer = async ({
|
|
|
424
471
|
* 5. Return the merged data
|
|
425
472
|
*/
|
|
426
473
|
const sequenceId = c.req.header("sequence-id");
|
|
474
|
+
|
|
475
|
+
logger.debug("fakeGraphQLQuery: getting request body", { sequenceId });
|
|
427
476
|
const requestBody = await c.req.raw.clone().json();
|
|
477
|
+
logger.debug("fakeGraphQLQuery: got request body", {
|
|
478
|
+
requestBody,
|
|
479
|
+
});
|
|
480
|
+
|
|
428
481
|
const requestOperationName =
|
|
429
482
|
typeof requestBody === "object" &&
|
|
430
483
|
requestBody !== null &&
|
|
@@ -433,12 +486,22 @@ const createRoutingServer = async ({
|
|
|
433
486
|
typeof requestBody.operationName === "string"
|
|
434
487
|
? requestBody.operationName
|
|
435
488
|
: undefined;
|
|
436
|
-
logger.debug(
|
|
437
|
-
sequenceId
|
|
438
|
-
|
|
489
|
+
logger.debug(
|
|
490
|
+
`fakeGraphQLQuery: operationName: ${requestOperationName} sequenceId: ${sequenceId}`,
|
|
491
|
+
{
|
|
492
|
+
sequenceId,
|
|
493
|
+
},
|
|
494
|
+
);
|
|
439
495
|
// 2. Does it contain a sequence id?
|
|
440
|
-
if (!sequenceId)
|
|
441
|
-
|
|
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
|
+
|
|
442
505
|
const sequence = sequenceFakeResponseLruMap.get(
|
|
443
506
|
createMapKey({
|
|
444
507
|
sequenceId,
|
|
@@ -446,7 +509,7 @@ const createRoutingServer = async ({
|
|
|
446
509
|
}),
|
|
447
510
|
);
|
|
448
511
|
logger.debug(
|
|
449
|
-
|
|
512
|
+
`fakeGraphQLQuery: sequence-id: ${sequenceId} x operationName: ${requestOperationName}, sequence exists: ${Boolean(
|
|
450
513
|
sequence,
|
|
451
514
|
)}`,
|
|
452
515
|
{
|
|
@@ -455,8 +518,13 @@ const createRoutingServer = async ({
|
|
|
455
518
|
operationName: requestOperationName,
|
|
456
519
|
},
|
|
457
520
|
);
|
|
458
|
-
if (!sequence)
|
|
521
|
+
if (!sequence) {
|
|
522
|
+
logger.debug("fakeGraphQLQuery: no sequence found, passing to Apollo");
|
|
523
|
+
return passToApollo(c);
|
|
524
|
+
}
|
|
525
|
+
|
|
459
526
|
if (requestOperationName !== sequence.operationName) {
|
|
527
|
+
logger.debug("fakeGraphQLQuery: operationName mismatch, returning error");
|
|
460
528
|
return Response.json(
|
|
461
529
|
JSON.stringify({
|
|
462
530
|
errors: [
|
|
@@ -468,7 +536,9 @@ const createRoutingServer = async ({
|
|
|
468
536
|
},
|
|
469
537
|
);
|
|
470
538
|
}
|
|
539
|
+
|
|
471
540
|
if (sequence.type === "network-error") {
|
|
541
|
+
logger.debug("fakeGraphQLQuery: network-error type, returning error");
|
|
472
542
|
return new Response(
|
|
473
543
|
JSON.stringify({
|
|
474
544
|
errors: sequence.errors,
|
|
@@ -478,34 +548,47 @@ const createRoutingServer = async ({
|
|
|
478
548
|
},
|
|
479
549
|
);
|
|
480
550
|
}
|
|
551
|
+
|
|
481
552
|
// 3. Send a request to Apollo Server
|
|
482
|
-
logger.debug("request to apollo
|
|
553
|
+
logger.debug("fakeGraphQLQuery: sending request to apollo server", {
|
|
483
554
|
sequenceId,
|
|
484
555
|
});
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
556
|
+
|
|
557
|
+
const proxyResponse = await proxy(`http://${ENV_HOSTNAME}:${ports.apolloServer}/graphql`, {
|
|
558
|
+
raw: c.req.raw,
|
|
559
|
+
headers: {
|
|
560
|
+
...c.req.header(),
|
|
561
|
+
},
|
|
490
562
|
});
|
|
491
|
-
|
|
563
|
+
|
|
564
|
+
logger.debug("fakeGraphQLQuery: apollo server response completed", {
|
|
492
565
|
sequenceId,
|
|
493
|
-
|
|
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,
|
|
494
577
|
});
|
|
495
|
-
|
|
496
|
-
//
|
|
497
|
-
const responseBody = await rep.json();
|
|
498
|
-
// 5. Merge the registration data with the response from 2
|
|
578
|
+
|
|
579
|
+
// 5. Merge the registration data with the response
|
|
499
580
|
const data = sequence.data;
|
|
500
|
-
logger.debug(
|
|
581
|
+
logger.debug(`fakeGraphQLQuery: starting data merge sequence-id: ${sequenceId}`, {
|
|
501
582
|
data,
|
|
502
583
|
responseBody,
|
|
503
584
|
});
|
|
585
|
+
// Use bracket notation for properties from index signature
|
|
586
|
+
const responseData = responseBody["data"] as any;
|
|
504
587
|
const merged = {
|
|
505
|
-
|
|
506
|
-
...responseBody.data,
|
|
588
|
+
...(typeof responseData === "object" && responseData !== null ? responseData : {}),
|
|
507
589
|
...data,
|
|
508
590
|
};
|
|
591
|
+
|
|
509
592
|
const cacheKey = createMapKey({
|
|
510
593
|
sequenceId,
|
|
511
594
|
operationName: requestOperationName,
|
|
@@ -519,20 +602,25 @@ const createRoutingServer = async ({
|
|
|
519
602
|
body: requestBody as Record<string, unknown>,
|
|
520
603
|
},
|
|
521
604
|
response: {
|
|
522
|
-
status:
|
|
523
|
-
headers: Object.fromEntries(
|
|
605
|
+
status: proxyResponse.status,
|
|
606
|
+
headers: Object.fromEntries(proxyResponse.headers),
|
|
524
607
|
body: {
|
|
525
608
|
data: merged,
|
|
526
609
|
},
|
|
527
610
|
},
|
|
528
611
|
},
|
|
529
612
|
]);
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
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(),
|
|
533
622
|
},
|
|
534
|
-
|
|
535
|
-
);
|
|
623
|
+
});
|
|
536
624
|
};
|
|
537
625
|
// graphql api is for browser and need to support CORS
|
|
538
626
|
app.use(
|
|
@@ -618,7 +706,7 @@ export const createFakeServerInternal = async (options: FakeServerInternal) => {
|
|
|
618
706
|
return {
|
|
619
707
|
start: async () => {
|
|
620
708
|
// Replace startStandaloneServer with our custom implementation
|
|
621
|
-
|
|
709
|
+
await startStandaloneServerWithCORS(
|
|
622
710
|
apolloServer,
|
|
623
711
|
{
|
|
624
712
|
listen: { port: options.ports.apolloServer },
|