@newmo/graphql-fake-server 0.20.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -43
- package/dist/esm/cli.js +0 -0
- package/dist/esm/server.d.ts +3 -4
- package/dist/esm/server.d.ts.map +1 -1
- package/dist/esm/server.js +86 -206
- package/dist/esm/server.js.map +1 -1
- package/package.json +3 -3
- package/src/server.ts +94 -256
- package/dist/esm/createMock.d.ts +0 -0
- package/dist/esm/createMock.d.ts.map +0 -0
- package/dist/esm/createMock.js +0 -39
- package/dist/esm/createMock.js.map +0 -0
package/README.md
CHANGED
|
@@ -109,38 +109,10 @@ You can register fake responses with conditions that determine when they should
|
|
|
109
109
|
|
|
110
110
|
#### Supported Conditions
|
|
111
111
|
|
|
112
|
-
- **Count condition**: Return a specific response on the nth call
|
|
113
112
|
- **Variables condition**: Return a specific response when variables match exactly
|
|
114
113
|
|
|
115
114
|
#### Examples
|
|
116
115
|
|
|
117
|
-
**Count-based condition:**
|
|
118
|
-
|
|
119
|
-
```js
|
|
120
|
-
// Register a fake that only returns on the 2nd call
|
|
121
|
-
await fetch(`${urls.fakeServer}/fake`, {
|
|
122
|
-
method: "POST",
|
|
123
|
-
headers: {
|
|
124
|
-
"Content-Type": "application/json",
|
|
125
|
-
"sequence-id": sequenceId,
|
|
126
|
-
},
|
|
127
|
-
body: JSON.stringify({
|
|
128
|
-
type: "operation",
|
|
129
|
-
operationName: "GetUser",
|
|
130
|
-
requestCondition: {
|
|
131
|
-
type: "count",
|
|
132
|
-
value: 2,
|
|
133
|
-
},
|
|
134
|
-
data: {
|
|
135
|
-
user: {
|
|
136
|
-
id: "user123",
|
|
137
|
-
name: "Second Call User",
|
|
138
|
-
},
|
|
139
|
-
},
|
|
140
|
-
}),
|
|
141
|
-
});
|
|
142
|
-
```
|
|
143
|
-
|
|
144
116
|
**Variables-based condition:**
|
|
145
117
|
|
|
146
118
|
```js
|
|
@@ -172,26 +144,12 @@ When no condition matches, the server falls back to the declarative fake data de
|
|
|
172
144
|
|
|
173
145
|
#### Condition Restrictions
|
|
174
146
|
|
|
175
|
-
To ensure predictable behavior,
|
|
176
|
-
|
|
177
|
-
- **Count + Default**: Cannot mix count conditions with default (no condition) responses
|
|
178
|
-
- **Count + Variables**: Cannot mix count conditions with variables conditions
|
|
147
|
+
To ensure predictable behavior, variables-based conditions and default (no condition) responses can coexist for the same operation within a sequence.
|
|
179
148
|
|
|
180
149
|
✅ **Allowed combinations:**
|
|
181
150
|
|
|
182
151
|
- Variables + Default: You can have both variables-specific responses and a default fallback
|
|
183
152
|
- Multiple Variables: Different variables conditions can coexist
|
|
184
|
-
- Multiple Count: Different count values can coexist
|
|
185
|
-
|
|
186
|
-
❌ **Rejected combinations:**
|
|
187
|
-
|
|
188
|
-
```js
|
|
189
|
-
// This will be rejected with an error response
|
|
190
|
-
// 1. Register default response
|
|
191
|
-
await fetch("/fake", { body: { operationName: "GetUser", data: {...} } });
|
|
192
|
-
// 2. Try to register count condition - ERROR!
|
|
193
|
-
await fetch("/fake", { body: { operationName: "GetUser", requestCondition: { type: "count", value: 1 }, data: {...} } });
|
|
194
|
-
```
|
|
195
153
|
|
|
196
154
|
## Config
|
|
197
155
|
|
package/dist/esm/cli.js
CHANGED
|
File without changes
|
package/dist/esm/server.d.ts
CHANGED
|
@@ -20,8 +20,7 @@ type FakeServerInternal = {
|
|
|
20
20
|
allowedCORSOrigins: string[];
|
|
21
21
|
};
|
|
22
22
|
export type ConditionRule = {
|
|
23
|
-
type: "
|
|
24
|
-
value: number;
|
|
23
|
+
type: "always";
|
|
25
24
|
} | {
|
|
26
25
|
type: "variables";
|
|
27
26
|
value: Record<string, unknown>;
|
|
@@ -47,13 +46,13 @@ export type RegisterSequenceNetworkError = {
|
|
|
47
46
|
operationName: string;
|
|
48
47
|
responseStatusCode: number;
|
|
49
48
|
errors: Record<string, unknown>[];
|
|
50
|
-
requestCondition
|
|
49
|
+
requestCondition: ConditionRule;
|
|
51
50
|
};
|
|
52
51
|
export type RegisterSequenceOperation = {
|
|
53
52
|
type: "operation";
|
|
54
53
|
operationName: string;
|
|
55
54
|
data: Record<string, unknown>;
|
|
56
|
-
requestCondition
|
|
55
|
+
requestCondition: ConditionRule;
|
|
57
56
|
};
|
|
58
57
|
export type RegisterSequenceOptions = RegisterSequenceNetworkError | RegisterSequenceOperation;
|
|
59
58
|
export declare const createFakeServer: (options: CreateFakeServerOptions) => Promise<{
|
package/dist/esm/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AASA,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;AAsFF,MAAM,MAAM,aAAa,GACnB;IACI,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AASA,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;AAsFF,MAAM,MAAM,aAAa,GACnB;IACI,IAAI,EAAE,QAAQ,CAAC;CAClB,GACD;IACI,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAGR,MAAM,MAAM,YAAY,GAAG;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE;QACL,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,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,MAAM,CAAC,CAAC;QAChC,IAAI,EAAE,OAAO,CAAC;KACjB,CAAC;CACL,CAAC;AAGF,MAAM,MAAM,oBAAoB,GAAG;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,YAAY,EAAE,CAAC;CACxB,CAAC;AAEF,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;IAElC,gBAAgB,EAAE,aAAa,CAAC;CACnC,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;IAE9B,gBAAgB,EAAE,aAAa,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,uBAAuB,GAAG,4BAA4B,GAAG,yBAAyB,CAAC;AA0qB/F,eAAO,MAAM,gBAAgB,GAAU,SAAS,uBAAuB;;;;;;;;EAoCtE,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,SAAS,kBAAkB;;;;;;;;EAmCzE,CAAC"}
|
package/dist/esm/server.js
CHANGED
|
@@ -76,95 +76,7 @@ const creteApolloServer = async (options) => {
|
|
|
76
76
|
});
|
|
77
77
|
};
|
|
78
78
|
// Allowed condition types
|
|
79
|
-
const ALLOWED_CONDITION_TYPES = ["
|
|
80
|
-
/**
|
|
81
|
-
* Check if two condition types are conflicting and return specific error message
|
|
82
|
-
* Only the following combinations are allowed:
|
|
83
|
-
* - count + count
|
|
84
|
-
* - variables + variables
|
|
85
|
-
* - variables + no condition (undefined)
|
|
86
|
-
* - no condition (undefined) + no condition (undefined)
|
|
87
|
-
* All other combinations are conflicting
|
|
88
|
-
*/
|
|
89
|
-
const areConditionTypesConflicting = (conditionType1, conditionType2) => {
|
|
90
|
-
// Define allowed combinations with their descriptions
|
|
91
|
-
const allowedCombinations = new Map([
|
|
92
|
-
// Multiple count conditions for the same operation (e.g., 1st call, 2nd call)
|
|
93
|
-
["count,count", "Multiple count-based conditions are allowed for different call counts"],
|
|
94
|
-
// Multiple variables conditions for the same operation (e.g., different variable sets)
|
|
95
|
-
[
|
|
96
|
-
"variables,variables",
|
|
97
|
-
"Multiple variable-based conditions are allowed for different variable sets",
|
|
98
|
-
],
|
|
99
|
-
// Variables condition can coexist with default fallback
|
|
100
|
-
["variables,undefined", "Variable-based condition can coexist with default fallback"],
|
|
101
|
-
// Default fallback can coexist with variables condition
|
|
102
|
-
["undefined,variables", "Default fallback can coexist with variable-based condition"],
|
|
103
|
-
// Multiple default conditions - overwrite with the last one
|
|
104
|
-
["undefined,undefined", "Multiple default conditions are allowed (latest will be used)"],
|
|
105
|
-
]);
|
|
106
|
-
const combinationKey = `${conditionType1 ?? "undefined"},${conditionType2 ?? "undefined"}`;
|
|
107
|
-
// If the combination is allowed, return no conflict
|
|
108
|
-
if (allowedCombinations.has(combinationKey)) {
|
|
109
|
-
return { isConflicting: false };
|
|
110
|
-
}
|
|
111
|
-
// Generate specific error message for conflicting combinations
|
|
112
|
-
const getTypeDescription = (type) => {
|
|
113
|
-
switch (type) {
|
|
114
|
-
case "count":
|
|
115
|
-
return "count-based condition (e.g., { type: 'count', value: 1 })";
|
|
116
|
-
case "variables":
|
|
117
|
-
return "variables-based condition (e.g., { type: 'variables', value: {...} })";
|
|
118
|
-
case undefined:
|
|
119
|
-
return "default condition (no requestCondition specified)";
|
|
120
|
-
default:
|
|
121
|
-
return `unknown condition type: ${type}`;
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
const type1Desc = getTypeDescription(conditionType1);
|
|
125
|
-
const type2Desc = getTypeDescription(conditionType2);
|
|
126
|
-
// Specific error messages for common problematic combinations
|
|
127
|
-
if ((conditionType1 === "count" && conditionType2 === "variables") ||
|
|
128
|
-
(conditionType1 === "variables" && conditionType2 === "count")) {
|
|
129
|
-
const errorMessage = "Cannot mix count-based and variables-based conditions for the same operation. " +
|
|
130
|
-
"Use either multiple count conditions (for different call numbers) or multiple variables conditions (for different variable sets), " +
|
|
131
|
-
`but not both. Current conflict: ${type1Desc} vs ${type2Desc}`;
|
|
132
|
-
return { isConflicting: true, errorMessage };
|
|
133
|
-
}
|
|
134
|
-
const errorMessage = `Conflicting condition types detected: ${type1Desc} vs ${type2Desc}. ` +
|
|
135
|
-
"Allowed combinations are: count+count, variables+variables, variables+default, or default+default.";
|
|
136
|
-
return { isConflicting: true, errorMessage };
|
|
137
|
-
};
|
|
138
|
-
/**
|
|
139
|
-
* Get condition type from a RegisterSequenceOptions
|
|
140
|
-
*/
|
|
141
|
-
const getConditionType = (fake) => {
|
|
142
|
-
return fake.requestCondition?.type;
|
|
143
|
-
};
|
|
144
|
-
/**
|
|
145
|
-
* Check for condition conflicts in existing fakes for the same operation
|
|
146
|
-
*/
|
|
147
|
-
const checkConditionConflicts = (newFake, existingConditionalFakes, existingDefaultFake) => {
|
|
148
|
-
const errors = [];
|
|
149
|
-
const newConditionType = getConditionType(newFake);
|
|
150
|
-
// Check conflicts with existing conditional fakes
|
|
151
|
-
for (const existingFake of existingConditionalFakes) {
|
|
152
|
-
const existingConditionType = getConditionType(existingFake);
|
|
153
|
-
const conflictResult = areConditionTypesConflicting(newConditionType, existingConditionType);
|
|
154
|
-
if (conflictResult.isConflicting && conflictResult.errorMessage) {
|
|
155
|
-
errors.push(conflictResult.errorMessage);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
// Check conflicts with existing default fake (no condition)
|
|
159
|
-
if (existingDefaultFake) {
|
|
160
|
-
const existingConditionType = getConditionType(existingDefaultFake);
|
|
161
|
-
const conflictResult = areConditionTypesConflicting(newConditionType, existingConditionType);
|
|
162
|
-
if (conflictResult.isConflicting && conflictResult.errorMessage) {
|
|
163
|
-
errors.push(conflictResult.errorMessage);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return errors;
|
|
167
|
-
};
|
|
79
|
+
const ALLOWED_CONDITION_TYPES = ["always", "variables"];
|
|
168
80
|
/**
|
|
169
81
|
* Validate condition rule structure
|
|
170
82
|
*/
|
|
@@ -185,22 +97,14 @@ const validateConditionRule = (condition) => {
|
|
|
185
97
|
error: `Unknown condition type '${condition.type}'. Allowed types: ${ALLOWED_CONDITION_TYPES.join(", ")}`,
|
|
186
98
|
};
|
|
187
99
|
}
|
|
188
|
-
if (!("value" in condition)) {
|
|
189
|
-
return { ok: false, error: "Condition must have a 'value' field" };
|
|
190
|
-
}
|
|
191
100
|
switch (condition.type) {
|
|
192
|
-
case "
|
|
193
|
-
|
|
194
|
-
return { ok: false, error: "Count condition value must be a number" };
|
|
195
|
-
}
|
|
196
|
-
if (condition.value <= 0) {
|
|
197
|
-
return {
|
|
198
|
-
ok: false,
|
|
199
|
-
error: "Count condition value must be greater than 0",
|
|
200
|
-
};
|
|
201
|
-
}
|
|
101
|
+
case "always":
|
|
102
|
+
// Always condition doesn't need a value
|
|
202
103
|
return { ok: true, data: condition };
|
|
203
104
|
case "variables":
|
|
105
|
+
if (!("value" in condition)) {
|
|
106
|
+
return { ok: false, error: "Variables condition must have a 'value' field" };
|
|
107
|
+
}
|
|
204
108
|
if (typeof condition.value !== "object" || condition.value === null) {
|
|
205
109
|
return {
|
|
206
110
|
ok: false,
|
|
@@ -225,15 +129,23 @@ const validateSequenceRegistration = (data) => {
|
|
|
225
129
|
if (typeof data !== "object" || data === null) {
|
|
226
130
|
return { ok: false, error: "Request body must be an object" };
|
|
227
131
|
}
|
|
228
|
-
// Validate request condition
|
|
229
|
-
|
|
230
|
-
|
|
132
|
+
// Validate request condition (default to "always" if not provided)
|
|
133
|
+
const requestCondition = "requestCondition" in data ? data.requestCondition : { type: "always" };
|
|
134
|
+
if (requestCondition !== undefined) {
|
|
135
|
+
const conditionResult = validateConditionRule(requestCondition);
|
|
231
136
|
if (!conditionResult.ok) {
|
|
232
137
|
return {
|
|
233
138
|
ok: false,
|
|
234
|
-
error: `Invalid request
|
|
139
|
+
error: `Invalid request conditions: ${conditionResult.error}`,
|
|
235
140
|
};
|
|
236
141
|
}
|
|
142
|
+
return {
|
|
143
|
+
ok: true,
|
|
144
|
+
data: {
|
|
145
|
+
...data,
|
|
146
|
+
requestCondition: conditionResult.data,
|
|
147
|
+
},
|
|
148
|
+
};
|
|
237
149
|
}
|
|
238
150
|
if (!("type" in data) || typeof data.type !== "string") {
|
|
239
151
|
return {
|
|
@@ -269,6 +181,12 @@ const validateSequenceRegistration = (data) => {
|
|
|
269
181
|
error: "Operation type must have a 'data' field of type object",
|
|
270
182
|
};
|
|
271
183
|
}
|
|
184
|
+
if (Array.isArray(data.data)) {
|
|
185
|
+
return {
|
|
186
|
+
ok: false,
|
|
187
|
+
error: "Array responses are no longer supported. Use single object responses instead.",
|
|
188
|
+
};
|
|
189
|
+
}
|
|
272
190
|
return { ok: true, data: data };
|
|
273
191
|
}
|
|
274
192
|
return {
|
|
@@ -430,10 +348,6 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
430
348
|
const conditionalFakeResponseMap = new LRUMap({
|
|
431
349
|
maxSize: maxRegisteredSequences,
|
|
432
350
|
});
|
|
433
|
-
// Track call count
|
|
434
|
-
const callCountMap = new LRUMap({
|
|
435
|
-
maxSize: maxRegisteredSequences,
|
|
436
|
-
});
|
|
437
351
|
// sequenceId x operationName -> Called Result
|
|
438
352
|
// CalledResult is first request is index 0, second request is index 1 and so on
|
|
439
353
|
const sequenceCalledResultLruMap = new LRUMap({
|
|
@@ -474,42 +388,30 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
474
388
|
sequenceId,
|
|
475
389
|
operationName,
|
|
476
390
|
});
|
|
477
|
-
//
|
|
478
|
-
const
|
|
479
|
-
|
|
480
|
-
const conflictErrors = checkConditionConflicts(validationResult.data, existingConditionalFakes, existingDefaultFake);
|
|
481
|
-
if (conflictErrors.length > 0) {
|
|
482
|
-
return Response.json({ ok: false, errors: conflictErrors }, {
|
|
483
|
-
status: 400,
|
|
484
|
-
});
|
|
485
|
-
}
|
|
486
|
-
// Register as conditional fake if request condition exists
|
|
487
|
-
if (validationResult.data.requestCondition) {
|
|
391
|
+
// Determine if this has specific conditions (not just "always")
|
|
392
|
+
const hasSpecificConditions = validationResult.data.requestCondition.type !== "always";
|
|
393
|
+
if (hasSpecificConditions) {
|
|
488
394
|
const existingConditionalFakes = conditionalFakeResponseMap.get(baseKey) || [];
|
|
489
395
|
// Overwrite if same condition exists, otherwise add new
|
|
490
|
-
const existingIndex = existingConditionalFakes.findIndex((fake) => fake.requestCondition
|
|
491
|
-
JSON.stringify(
|
|
492
|
-
JSON.stringify(validationResult.data.requestCondition));
|
|
396
|
+
const existingIndex = existingConditionalFakes.findIndex((fake) => JSON.stringify(fake.requestCondition) ===
|
|
397
|
+
JSON.stringify(validationResult.data.requestCondition));
|
|
493
398
|
if (existingIndex >= 0) {
|
|
494
399
|
existingConditionalFakes[existingIndex] = validationResult.data;
|
|
495
400
|
}
|
|
496
401
|
else {
|
|
497
402
|
existingConditionalFakes.push(validationResult.data);
|
|
498
403
|
}
|
|
499
|
-
// Sort by condition specificity
|
|
404
|
+
// Sort by condition specificity for deterministic ordering
|
|
500
405
|
existingConditionalFakes.sort((a, b) => {
|
|
501
|
-
const scoreA = a.requestCondition
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
? calculateConditionSpecificity(b.requestCondition)
|
|
506
|
-
: 0;
|
|
507
|
-
return scoreB - scoreA; // Descending order
|
|
406
|
+
const scoreA = calculateConditionSpecificity(a.requestCondition);
|
|
407
|
+
const scoreB = calculateConditionSpecificity(b.requestCondition);
|
|
408
|
+
// Sort by specificity (descending)
|
|
409
|
+
return scoreB - scoreA;
|
|
508
410
|
});
|
|
509
411
|
conditionalFakeResponseMap.set(baseKey, existingConditionalFakes);
|
|
510
412
|
}
|
|
511
413
|
else {
|
|
512
|
-
// Without condition, use traditional approach
|
|
414
|
+
// Without condition or with "always" condition, use traditional approach
|
|
513
415
|
sequenceFakeResponseLruMap.set(baseKey, validationResult.data);
|
|
514
416
|
}
|
|
515
417
|
return Response.json({ ok: true }, {
|
|
@@ -562,9 +464,7 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
562
464
|
* 2. Does it contain a sequence id?
|
|
563
465
|
* - if Yes: type is network error → return an error
|
|
564
466
|
* - if No: Pass through to Apollo Server -> exit
|
|
565
|
-
* 3.
|
|
566
|
-
* 4. Merge the registration data with the response from 3
|
|
567
|
-
* 5. Return the merged data
|
|
467
|
+
* 3. Return the fake data directly
|
|
568
468
|
*/
|
|
569
469
|
const sequenceId = c.req.header("sequence-id");
|
|
570
470
|
logger.debug("fakeGraphQLQuery: getting request body", { sequenceId });
|
|
@@ -595,9 +495,6 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
595
495
|
sequenceId,
|
|
596
496
|
operationName: requestOperationName,
|
|
597
497
|
});
|
|
598
|
-
// Increment call count
|
|
599
|
-
const currentCallCount = (callCountMap.get(baseKey) || 0) + 1;
|
|
600
|
-
callCountMap.set(baseKey, currentCallCount);
|
|
601
498
|
// Get request variables
|
|
602
499
|
const requestVariables = typeof requestBody === "object" &&
|
|
603
500
|
requestBody !== null &&
|
|
@@ -608,11 +505,20 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
608
505
|
: undefined;
|
|
609
506
|
// Check conditional fakes first
|
|
610
507
|
const conditionalFakes = conditionalFakeResponseMap.get(baseKey);
|
|
611
|
-
|
|
508
|
+
logger.debug("fakeGraphQLQuery: conditional fakes check", {
|
|
509
|
+
sequenceId,
|
|
510
|
+
operationName: requestOperationName,
|
|
511
|
+
conditionalFakesCount: conditionalFakes?.length || 0,
|
|
512
|
+
conditionalFakes: conditionalFakes?.map((fake) => ({
|
|
513
|
+
type: fake.type,
|
|
514
|
+
requestCondition: fake.requestCondition,
|
|
515
|
+
})),
|
|
516
|
+
requestVariables,
|
|
517
|
+
});
|
|
518
|
+
// Find the first matching conditional fake based on variables
|
|
612
519
|
// If no conditional fake matches, use the default fake from sequenceFakeResponseLruMap
|
|
613
520
|
const matchedFake = findMatchedConditionalFake({
|
|
614
521
|
conditionalFakes: conditionalFakes,
|
|
615
|
-
currentCallCount: currentCallCount,
|
|
616
522
|
requestVariables: requestVariables,
|
|
617
523
|
logger: logger,
|
|
618
524
|
sequenceId: sequenceId,
|
|
@@ -622,7 +528,6 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
622
528
|
matchedFake,
|
|
623
529
|
sequenceId,
|
|
624
530
|
operationName: requestOperationName,
|
|
625
|
-
callCount: currentCallCount,
|
|
626
531
|
});
|
|
627
532
|
if (!matchedFake) {
|
|
628
533
|
logger.debug("fakeGraphQLQuery: no fake found, passing to Apollo");
|
|
@@ -668,41 +573,13 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
668
573
|
status: matchedFake.responseStatusCode,
|
|
669
574
|
});
|
|
670
575
|
}
|
|
671
|
-
// 3.
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
const proxyResponse = await proxy(`http://${ENV_HOSTNAME}:${ports.apolloServer}/graphql`, {
|
|
676
|
-
raw: c.req.raw,
|
|
677
|
-
headers: {
|
|
678
|
-
...c.req.header(),
|
|
679
|
-
},
|
|
576
|
+
// 3. Return the fake data directly (no need to call Apollo Server)
|
|
577
|
+
const fakeData = matchedFake.data;
|
|
578
|
+
logger.debug(`fakeGraphQLQuery: returning fake data sequence-id: ${sequenceId}`, {
|
|
579
|
+
fakeData,
|
|
680
580
|
});
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
status: proxyResponse.status,
|
|
684
|
-
headers: Object.fromEntries(proxyResponse.headers),
|
|
685
|
-
});
|
|
686
|
-
if (proxyResponse.status === 101)
|
|
687
|
-
return proxyResponse;
|
|
688
|
-
// 4. Get response body
|
|
689
|
-
logger.debug("fakeGraphQLQuery: getting response body");
|
|
690
|
-
const responseBody = (await proxyResponse.json());
|
|
691
|
-
logger.debug("fakeGraphQLQuery: parsed response body", {
|
|
692
|
-
responseBody,
|
|
693
|
-
});
|
|
694
|
-
// 5. Merge the registration data with the response
|
|
695
|
-
const data = matchedFake.data;
|
|
696
|
-
logger.debug(`fakeGraphQLQuery: starting data merge sequence-id: ${sequenceId}`, {
|
|
697
|
-
data,
|
|
698
|
-
responseBody,
|
|
699
|
-
});
|
|
700
|
-
// Use bracket notation for properties from index signature
|
|
701
|
-
const responseData = responseBody["data"];
|
|
702
|
-
const merged = {
|
|
703
|
-
...(typeof responseData === "object" && responseData !== null ? responseData : {}),
|
|
704
|
-
...data,
|
|
705
|
-
};
|
|
581
|
+
// Handle single response
|
|
582
|
+
const responseData = fakeData;
|
|
706
583
|
const cacheKey = createMapKey({
|
|
707
584
|
sequenceId,
|
|
708
585
|
operationName: requestOperationName,
|
|
@@ -716,22 +593,21 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
716
593
|
body: requestBody,
|
|
717
594
|
},
|
|
718
595
|
response: {
|
|
719
|
-
status:
|
|
720
|
-
headers:
|
|
596
|
+
status: 200,
|
|
597
|
+
headers: { "Content-Type": "application/json" },
|
|
721
598
|
body: {
|
|
722
|
-
data:
|
|
599
|
+
data: responseData,
|
|
723
600
|
},
|
|
724
601
|
},
|
|
725
602
|
},
|
|
726
603
|
]);
|
|
727
|
-
logger.debug("fakeGraphQLQuery:
|
|
728
|
-
//
|
|
729
|
-
const responseJson = JSON.stringify({ data:
|
|
604
|
+
logger.debug("fakeGraphQLQuery: returning fake response");
|
|
605
|
+
// Let the server automatically calculate Content-Length to avoid issues with multi-byte characters
|
|
606
|
+
const responseJson = JSON.stringify({ data: responseData });
|
|
730
607
|
return new Response(responseJson, {
|
|
731
|
-
status:
|
|
608
|
+
status: 200,
|
|
732
609
|
headers: {
|
|
733
610
|
"Content-Type": "application/json",
|
|
734
|
-
"Content-Length": responseJson.length.toString(),
|
|
735
611
|
},
|
|
736
612
|
});
|
|
737
613
|
};
|
|
@@ -760,7 +636,7 @@ const createRoutingServer = async ({ logLevel, ports, maxRegisteredSequences, al
|
|
|
760
636
|
}));
|
|
761
637
|
app.use("/graphql", fakeGraphQLQuery);
|
|
762
638
|
app.use("/query", fakeGraphQLQuery);
|
|
763
|
-
app.all("*", passToApollo);
|
|
639
|
+
app.all("*", (c) => passToApollo(c));
|
|
764
640
|
return app;
|
|
765
641
|
};
|
|
766
642
|
export const createFakeServer = async (options) => {
|
|
@@ -828,8 +704,8 @@ export const createFakeServerInternal = async (options) => {
|
|
|
828
704
|
*/
|
|
829
705
|
const evaluateCondition = (condition, context) => {
|
|
830
706
|
switch (condition.type) {
|
|
831
|
-
case "
|
|
832
|
-
return
|
|
707
|
+
case "always":
|
|
708
|
+
return true;
|
|
833
709
|
case "variables":
|
|
834
710
|
if (!context.variables)
|
|
835
711
|
return false;
|
|
@@ -843,8 +719,8 @@ const evaluateCondition = (condition, context) => {
|
|
|
843
719
|
*/
|
|
844
720
|
const calculateConditionSpecificity = (condition) => {
|
|
845
721
|
switch (condition.type) {
|
|
846
|
-
case "
|
|
847
|
-
return
|
|
722
|
+
case "always":
|
|
723
|
+
return 0; // always conditions have lowest priority
|
|
848
724
|
case "variables":
|
|
849
725
|
return 20; // variables conditions have high priority
|
|
850
726
|
default:
|
|
@@ -852,28 +728,32 @@ const calculateConditionSpecificity = (condition) => {
|
|
|
852
728
|
}
|
|
853
729
|
};
|
|
854
730
|
/**
|
|
855
|
-
* Find a matching conditional fake based on the
|
|
731
|
+
* Find a matching conditional fake based on the request variables
|
|
856
732
|
*/
|
|
857
|
-
const findMatchedConditionalFake = ({ conditionalFakes,
|
|
733
|
+
const findMatchedConditionalFake = ({ conditionalFakes, requestVariables, logger, sequenceId, requestOperationName, }) => {
|
|
858
734
|
if (conditionalFakes && conditionalFakes.length > 0) {
|
|
859
735
|
// Find matching fake (already sorted by specificity in descending order)
|
|
860
736
|
for (const fake of conditionalFakes) {
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
});
|
|
874
|
-
return fake;
|
|
875
|
-
}
|
|
737
|
+
const context = {
|
|
738
|
+
...(requestVariables && { variables: requestVariables }),
|
|
739
|
+
};
|
|
740
|
+
if (evaluateCondition(fake.requestCondition, context)) {
|
|
741
|
+
logger.debug("fakeGraphQLQuery: matched conditional fake", {
|
|
742
|
+
sequenceId,
|
|
743
|
+
operationName: requestOperationName,
|
|
744
|
+
requestCondition: fake.requestCondition,
|
|
745
|
+
variables: requestVariables,
|
|
746
|
+
evaluationContext: context,
|
|
747
|
+
});
|
|
748
|
+
return fake;
|
|
876
749
|
}
|
|
750
|
+
logger.debug("fakeGraphQLQuery: conditional fake did not match", {
|
|
751
|
+
sequenceId,
|
|
752
|
+
operationName: requestOperationName,
|
|
753
|
+
requestCondition: fake.requestCondition,
|
|
754
|
+
variables: requestVariables,
|
|
755
|
+
evaluationContext: context,
|
|
756
|
+
});
|
|
877
757
|
}
|
|
878
758
|
}
|
|
879
759
|
return undefined;
|
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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@newmo/graphql-fake-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "GraphQL fake server for testing",
|
|
6
6
|
"keywords": [
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"@graphql-tools/mock": "^9.0.23",
|
|
53
53
|
"@graphql-tools/schema": "^10.0.23",
|
|
54
54
|
"@hono/node-server": "^1.14.4",
|
|
55
|
-
"@newmo/graphql-fake-core": "0.
|
|
55
|
+
"@newmo/graphql-fake-core": "0.21.0",
|
|
56
56
|
"cors": "^2.8.5",
|
|
57
57
|
"express": "^5.1.0",
|
|
58
58
|
"graphql-depth-limit": "^1.1.0",
|
|
@@ -80,5 +80,5 @@
|
|
|
80
80
|
"access": "public",
|
|
81
81
|
"registry": "https://registry.npmjs.org/"
|
|
82
82
|
},
|
|
83
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "251e1b4311a0f070af89abc7e49f6aa1e9b075c0"
|
|
84
84
|
}
|
package/src/server.ts
CHANGED
|
@@ -118,7 +118,7 @@ const creteApolloServer = async (options: FakeServerInternal) => {
|
|
|
118
118
|
});
|
|
119
119
|
};
|
|
120
120
|
// Allowed condition types
|
|
121
|
-
const ALLOWED_CONDITION_TYPES = ["
|
|
121
|
+
const ALLOWED_CONDITION_TYPES = ["always", "variables"] as const;
|
|
122
122
|
type AllowedConditionType = (typeof ALLOWED_CONDITION_TYPES)[number];
|
|
123
123
|
|
|
124
124
|
// Validation result type for better error messages
|
|
@@ -127,9 +127,8 @@ type ValidationResult<T> = { ok: true; data: T } | { ok: false; error: string };
|
|
|
127
127
|
// Condition rules for conditional fake responses
|
|
128
128
|
export type ConditionRule =
|
|
129
129
|
| {
|
|
130
|
-
type: "
|
|
131
|
-
|
|
132
|
-
} // Match based on call count (nth call)
|
|
130
|
+
type: "always";
|
|
131
|
+
} // Always match (default condition)
|
|
133
132
|
| {
|
|
134
133
|
type: "variables";
|
|
135
134
|
value: Record<string, unknown>;
|
|
@@ -160,134 +159,18 @@ export type RegisterSequenceNetworkError = {
|
|
|
160
159
|
operationName: string;
|
|
161
160
|
responseStatusCode: number;
|
|
162
161
|
errors: Record<string, unknown>[];
|
|
163
|
-
//
|
|
164
|
-
requestCondition
|
|
162
|
+
// Request condition is now required (defaults to "always" if not specified)
|
|
163
|
+
requestCondition: ConditionRule;
|
|
165
164
|
};
|
|
166
165
|
export type RegisterSequenceOperation = {
|
|
167
166
|
type: "operation";
|
|
168
167
|
operationName: string;
|
|
169
168
|
data: Record<string, unknown>;
|
|
170
|
-
//
|
|
171
|
-
requestCondition
|
|
169
|
+
// Request condition is now required (defaults to "always" if not specified)
|
|
170
|
+
requestCondition: ConditionRule;
|
|
172
171
|
};
|
|
173
172
|
export type RegisterSequenceOptions = RegisterSequenceNetworkError | RegisterSequenceOperation;
|
|
174
173
|
|
|
175
|
-
/**
|
|
176
|
-
* Check if two condition types are conflicting and return specific error message
|
|
177
|
-
* Only the following combinations are allowed:
|
|
178
|
-
* - count + count
|
|
179
|
-
* - variables + variables
|
|
180
|
-
* - variables + no condition (undefined)
|
|
181
|
-
* - no condition (undefined) + no condition (undefined)
|
|
182
|
-
* All other combinations are conflicting
|
|
183
|
-
*/
|
|
184
|
-
const areConditionTypesConflicting = (
|
|
185
|
-
conditionType1: ConditionRule["type"] | undefined,
|
|
186
|
-
conditionType2: ConditionRule["type"] | undefined,
|
|
187
|
-
): { isConflicting: boolean; errorMessage?: string } => {
|
|
188
|
-
// Define allowed combinations with their descriptions
|
|
189
|
-
const allowedCombinations = new Map<string, string>([
|
|
190
|
-
// Multiple count conditions for the same operation (e.g., 1st call, 2nd call)
|
|
191
|
-
["count,count", "Multiple count-based conditions are allowed for different call counts"],
|
|
192
|
-
// Multiple variables conditions for the same operation (e.g., different variable sets)
|
|
193
|
-
[
|
|
194
|
-
"variables,variables",
|
|
195
|
-
"Multiple variable-based conditions are allowed for different variable sets",
|
|
196
|
-
],
|
|
197
|
-
// Variables condition can coexist with default fallback
|
|
198
|
-
["variables,undefined", "Variable-based condition can coexist with default fallback"],
|
|
199
|
-
// Default fallback can coexist with variables condition
|
|
200
|
-
["undefined,variables", "Default fallback can coexist with variable-based condition"],
|
|
201
|
-
// Multiple default conditions - overwrite with the last one
|
|
202
|
-
["undefined,undefined", "Multiple default conditions are allowed (latest will be used)"],
|
|
203
|
-
]);
|
|
204
|
-
|
|
205
|
-
const combinationKey = `${conditionType1 ?? "undefined"},${conditionType2 ?? "undefined"}`;
|
|
206
|
-
|
|
207
|
-
// If the combination is allowed, return no conflict
|
|
208
|
-
if (allowedCombinations.has(combinationKey)) {
|
|
209
|
-
return { isConflicting: false };
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
// Generate specific error message for conflicting combinations
|
|
213
|
-
const getTypeDescription = (type: ConditionRule["type"] | undefined): string => {
|
|
214
|
-
switch (type) {
|
|
215
|
-
case "count":
|
|
216
|
-
return "count-based condition (e.g., { type: 'count', value: 1 })";
|
|
217
|
-
case "variables":
|
|
218
|
-
return "variables-based condition (e.g., { type: 'variables', value: {...} })";
|
|
219
|
-
case undefined:
|
|
220
|
-
return "default condition (no requestCondition specified)";
|
|
221
|
-
default:
|
|
222
|
-
return `unknown condition type: ${type}`;
|
|
223
|
-
}
|
|
224
|
-
};
|
|
225
|
-
|
|
226
|
-
const type1Desc = getTypeDescription(conditionType1);
|
|
227
|
-
const type2Desc = getTypeDescription(conditionType2);
|
|
228
|
-
|
|
229
|
-
// Specific error messages for common problematic combinations
|
|
230
|
-
if (
|
|
231
|
-
(conditionType1 === "count" && conditionType2 === "variables") ||
|
|
232
|
-
(conditionType1 === "variables" && conditionType2 === "count")
|
|
233
|
-
) {
|
|
234
|
-
const errorMessage =
|
|
235
|
-
"Cannot mix count-based and variables-based conditions for the same operation. " +
|
|
236
|
-
"Use either multiple count conditions (for different call numbers) or multiple variables conditions (for different variable sets), " +
|
|
237
|
-
`but not both. Current conflict: ${type1Desc} vs ${type2Desc}`;
|
|
238
|
-
return { isConflicting: true, errorMessage };
|
|
239
|
-
}
|
|
240
|
-
const errorMessage =
|
|
241
|
-
`Conflicting condition types detected: ${type1Desc} vs ${type2Desc}. ` +
|
|
242
|
-
"Allowed combinations are: count+count, variables+variables, variables+default, or default+default.";
|
|
243
|
-
return { isConflicting: true, errorMessage };
|
|
244
|
-
};
|
|
245
|
-
|
|
246
|
-
/**
|
|
247
|
-
* Get condition type from a RegisterSequenceOptions
|
|
248
|
-
*/
|
|
249
|
-
const getConditionType = (fake: RegisterSequenceOptions): ConditionRule["type"] | undefined => {
|
|
250
|
-
return fake.requestCondition?.type;
|
|
251
|
-
};
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* Check for condition conflicts in existing fakes for the same operation
|
|
255
|
-
*/
|
|
256
|
-
const checkConditionConflicts = (
|
|
257
|
-
newFake: RegisterSequenceOptions,
|
|
258
|
-
existingConditionalFakes: RegisterSequenceOptions[],
|
|
259
|
-
existingDefaultFake: RegisterSequenceOptions | undefined,
|
|
260
|
-
): string[] => {
|
|
261
|
-
const errors: string[] = [];
|
|
262
|
-
const newConditionType = getConditionType(newFake);
|
|
263
|
-
|
|
264
|
-
// Check conflicts with existing conditional fakes
|
|
265
|
-
for (const existingFake of existingConditionalFakes) {
|
|
266
|
-
const existingConditionType = getConditionType(existingFake);
|
|
267
|
-
const conflictResult = areConditionTypesConflicting(
|
|
268
|
-
newConditionType,
|
|
269
|
-
existingConditionType,
|
|
270
|
-
);
|
|
271
|
-
if (conflictResult.isConflicting && conflictResult.errorMessage) {
|
|
272
|
-
errors.push(conflictResult.errorMessage);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
// Check conflicts with existing default fake (no condition)
|
|
277
|
-
if (existingDefaultFake) {
|
|
278
|
-
const existingConditionType = getConditionType(existingDefaultFake);
|
|
279
|
-
const conflictResult = areConditionTypesConflicting(
|
|
280
|
-
newConditionType,
|
|
281
|
-
existingConditionType,
|
|
282
|
-
);
|
|
283
|
-
if (conflictResult.isConflicting && conflictResult.errorMessage) {
|
|
284
|
-
errors.push(conflictResult.errorMessage);
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
return errors;
|
|
289
|
-
};
|
|
290
|
-
|
|
291
174
|
/**
|
|
292
175
|
* Validate condition rule structure
|
|
293
176
|
*/
|
|
@@ -313,24 +196,15 @@ const validateConditionRule = (condition: unknown): ValidationResult<ConditionRu
|
|
|
313
196
|
};
|
|
314
197
|
}
|
|
315
198
|
|
|
316
|
-
if (!("value" in condition)) {
|
|
317
|
-
return { ok: false, error: "Condition must have a 'value' field" };
|
|
318
|
-
}
|
|
319
|
-
|
|
320
199
|
switch (condition.type) {
|
|
321
|
-
case "
|
|
322
|
-
|
|
323
|
-
return { ok: false, error: "Count condition value must be a number" };
|
|
324
|
-
}
|
|
325
|
-
if (condition.value <= 0) {
|
|
326
|
-
return {
|
|
327
|
-
ok: false,
|
|
328
|
-
error: "Count condition value must be greater than 0",
|
|
329
|
-
};
|
|
330
|
-
}
|
|
200
|
+
case "always":
|
|
201
|
+
// Always condition doesn't need a value
|
|
331
202
|
return { ok: true, data: condition as ConditionRule };
|
|
332
203
|
|
|
333
204
|
case "variables":
|
|
205
|
+
if (!("value" in condition)) {
|
|
206
|
+
return { ok: false, error: "Variables condition must have a 'value' field" };
|
|
207
|
+
}
|
|
334
208
|
if (typeof condition.value !== "object" || condition.value === null) {
|
|
335
209
|
return {
|
|
336
210
|
ok: false,
|
|
@@ -358,15 +232,25 @@ const validateSequenceRegistration = (data: unknown): ValidationResult<RegisterS
|
|
|
358
232
|
return { ok: false, error: "Request body must be an object" };
|
|
359
233
|
}
|
|
360
234
|
|
|
361
|
-
// Validate request condition
|
|
362
|
-
|
|
363
|
-
|
|
235
|
+
// Validate request condition (default to "always" if not provided)
|
|
236
|
+
const requestCondition =
|
|
237
|
+
"requestCondition" in data ? data.requestCondition : { type: "always" };
|
|
238
|
+
|
|
239
|
+
if (requestCondition !== undefined) {
|
|
240
|
+
const conditionResult = validateConditionRule(requestCondition);
|
|
364
241
|
if (!conditionResult.ok) {
|
|
365
242
|
return {
|
|
366
243
|
ok: false,
|
|
367
|
-
error: `Invalid request
|
|
244
|
+
error: `Invalid request conditions: ${conditionResult.error}`,
|
|
368
245
|
};
|
|
369
246
|
}
|
|
247
|
+
return {
|
|
248
|
+
ok: true,
|
|
249
|
+
data: {
|
|
250
|
+
...data,
|
|
251
|
+
requestCondition: conditionResult.data,
|
|
252
|
+
} as RegisterSequenceOptions,
|
|
253
|
+
};
|
|
370
254
|
}
|
|
371
255
|
|
|
372
256
|
if (!("type" in data) || typeof data.type !== "string") {
|
|
@@ -406,6 +290,12 @@ const validateSequenceRegistration = (data: unknown): ValidationResult<RegisterS
|
|
|
406
290
|
error: "Operation type must have a 'data' field of type object",
|
|
407
291
|
};
|
|
408
292
|
}
|
|
293
|
+
if (Array.isArray(data.data)) {
|
|
294
|
+
return {
|
|
295
|
+
ok: false,
|
|
296
|
+
error: "Array responses are no longer supported. Use single object responses instead.",
|
|
297
|
+
};
|
|
298
|
+
}
|
|
409
299
|
return { ok: true, data: data as RegisterSequenceOptions };
|
|
410
300
|
}
|
|
411
301
|
|
|
@@ -602,10 +492,6 @@ const createRoutingServer = async ({
|
|
|
602
492
|
const conditionalFakeResponseMap = new LRUMap<string, RegisterSequenceOptions[]>({
|
|
603
493
|
maxSize: maxRegisteredSequences,
|
|
604
494
|
});
|
|
605
|
-
// Track call count
|
|
606
|
-
const callCountMap = new LRUMap<string, number>({
|
|
607
|
-
maxSize: maxRegisteredSequences,
|
|
608
|
-
});
|
|
609
495
|
// sequenceId x operationName -> Called Result
|
|
610
496
|
// CalledResult is first request is index 0, second request is index 1 and so on
|
|
611
497
|
const sequenceCalledResultLruMap = new LRUMap<string, CalledResult[]>({
|
|
@@ -654,34 +540,16 @@ const createRoutingServer = async ({
|
|
|
654
540
|
operationName,
|
|
655
541
|
});
|
|
656
542
|
|
|
657
|
-
//
|
|
658
|
-
const
|
|
659
|
-
const existingDefaultFake = sequenceFakeResponseLruMap.get(baseKey);
|
|
543
|
+
// Determine if this has specific conditions (not just "always")
|
|
544
|
+
const hasSpecificConditions = validationResult.data.requestCondition.type !== "always";
|
|
660
545
|
|
|
661
|
-
|
|
662
|
-
validationResult.data,
|
|
663
|
-
existingConditionalFakes,
|
|
664
|
-
existingDefaultFake,
|
|
665
|
-
);
|
|
666
|
-
|
|
667
|
-
if (conflictErrors.length > 0) {
|
|
668
|
-
return Response.json(
|
|
669
|
-
{ ok: false, errors: conflictErrors },
|
|
670
|
-
{
|
|
671
|
-
status: 400,
|
|
672
|
-
},
|
|
673
|
-
);
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
// Register as conditional fake if request condition exists
|
|
677
|
-
if (validationResult.data.requestCondition) {
|
|
546
|
+
if (hasSpecificConditions) {
|
|
678
547
|
const existingConditionalFakes = conditionalFakeResponseMap.get(baseKey) || [];
|
|
679
548
|
// Overwrite if same condition exists, otherwise add new
|
|
680
549
|
const existingIndex = existingConditionalFakes.findIndex(
|
|
681
550
|
(fake) =>
|
|
682
|
-
fake.requestCondition &&
|
|
683
551
|
JSON.stringify(fake.requestCondition) ===
|
|
684
|
-
|
|
552
|
+
JSON.stringify(validationResult.data.requestCondition),
|
|
685
553
|
);
|
|
686
554
|
|
|
687
555
|
if (existingIndex >= 0) {
|
|
@@ -690,20 +558,18 @@ const createRoutingServer = async ({
|
|
|
690
558
|
existingConditionalFakes.push(validationResult.data);
|
|
691
559
|
}
|
|
692
560
|
|
|
693
|
-
// Sort by condition specificity
|
|
561
|
+
// Sort by condition specificity for deterministic ordering
|
|
694
562
|
existingConditionalFakes.sort((a, b) => {
|
|
695
|
-
const scoreA = a.requestCondition
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
: 0;
|
|
701
|
-
return scoreB - scoreA; // Descending order
|
|
563
|
+
const scoreA = calculateConditionSpecificity(a.requestCondition);
|
|
564
|
+
const scoreB = calculateConditionSpecificity(b.requestCondition);
|
|
565
|
+
|
|
566
|
+
// Sort by specificity (descending)
|
|
567
|
+
return scoreB - scoreA;
|
|
702
568
|
});
|
|
703
569
|
|
|
704
570
|
conditionalFakeResponseMap.set(baseKey, existingConditionalFakes);
|
|
705
571
|
} else {
|
|
706
|
-
// Without condition, use traditional approach
|
|
572
|
+
// Without condition or with "always" condition, use traditional approach
|
|
707
573
|
sequenceFakeResponseLruMap.set(baseKey, validationResult.data);
|
|
708
574
|
}
|
|
709
575
|
return Response.json(
|
|
@@ -771,9 +637,7 @@ const createRoutingServer = async ({
|
|
|
771
637
|
* 2. Does it contain a sequence id?
|
|
772
638
|
* - if Yes: type is network error → return an error
|
|
773
639
|
* - if No: Pass through to Apollo Server -> exit
|
|
774
|
-
* 3.
|
|
775
|
-
* 4. Merge the registration data with the response from 3
|
|
776
|
-
* 5. Return the merged data
|
|
640
|
+
* 3. Return the fake data directly
|
|
777
641
|
*/
|
|
778
642
|
const sequenceId = c.req.header("sequence-id");
|
|
779
643
|
|
|
@@ -812,10 +676,6 @@ const createRoutingServer = async ({
|
|
|
812
676
|
operationName: requestOperationName,
|
|
813
677
|
});
|
|
814
678
|
|
|
815
|
-
// Increment call count
|
|
816
|
-
const currentCallCount = (callCountMap.get(baseKey) || 0) + 1;
|
|
817
|
-
callCountMap.set(baseKey, currentCallCount);
|
|
818
|
-
|
|
819
679
|
// Get request variables
|
|
820
680
|
const requestVariables =
|
|
821
681
|
typeof requestBody === "object" &&
|
|
@@ -828,12 +688,22 @@ const createRoutingServer = async ({
|
|
|
828
688
|
|
|
829
689
|
// Check conditional fakes first
|
|
830
690
|
const conditionalFakes = conditionalFakeResponseMap.get(baseKey);
|
|
831
|
-
|
|
691
|
+
|
|
692
|
+
logger.debug("fakeGraphQLQuery: conditional fakes check", {
|
|
693
|
+
sequenceId,
|
|
694
|
+
operationName: requestOperationName,
|
|
695
|
+
conditionalFakesCount: conditionalFakes?.length || 0,
|
|
696
|
+
conditionalFakes: conditionalFakes?.map((fake) => ({
|
|
697
|
+
type: fake.type,
|
|
698
|
+
requestCondition: fake.requestCondition,
|
|
699
|
+
})),
|
|
700
|
+
requestVariables,
|
|
701
|
+
});
|
|
702
|
+
// Find the first matching conditional fake based on variables
|
|
832
703
|
// If no conditional fake matches, use the default fake from sequenceFakeResponseLruMap
|
|
833
704
|
const matchedFake: RegisterSequenceOptions | undefined =
|
|
834
705
|
findMatchedConditionalFake({
|
|
835
706
|
conditionalFakes: conditionalFakes,
|
|
836
|
-
currentCallCount: currentCallCount,
|
|
837
707
|
requestVariables: requestVariables,
|
|
838
708
|
logger: logger,
|
|
839
709
|
sequenceId: sequenceId,
|
|
@@ -848,7 +718,6 @@ const createRoutingServer = async ({
|
|
|
848
718
|
matchedFake,
|
|
849
719
|
sequenceId,
|
|
850
720
|
operationName: requestOperationName,
|
|
851
|
-
callCount: currentCallCount,
|
|
852
721
|
},
|
|
853
722
|
);
|
|
854
723
|
|
|
@@ -907,45 +776,14 @@ const createRoutingServer = async ({
|
|
|
907
776
|
);
|
|
908
777
|
}
|
|
909
778
|
|
|
910
|
-
// 3.
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
const proxyResponse = await proxy(`http://${ENV_HOSTNAME}:${ports.apolloServer}/graphql`, {
|
|
916
|
-
raw: c.req.raw,
|
|
917
|
-
headers: {
|
|
918
|
-
...c.req.header(),
|
|
919
|
-
},
|
|
920
|
-
});
|
|
921
|
-
|
|
922
|
-
logger.debug("fakeGraphQLQuery: apollo server response completed", {
|
|
923
|
-
sequenceId,
|
|
924
|
-
status: proxyResponse.status,
|
|
925
|
-
headers: Object.fromEntries(proxyResponse.headers),
|
|
779
|
+
// 3. Return the fake data directly (no need to call Apollo Server)
|
|
780
|
+
const fakeData = matchedFake.data;
|
|
781
|
+
logger.debug(`fakeGraphQLQuery: returning fake data sequence-id: ${sequenceId}`, {
|
|
782
|
+
fakeData,
|
|
926
783
|
});
|
|
927
784
|
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
// 4. Get response body
|
|
931
|
-
logger.debug("fakeGraphQLQuery: getting response body");
|
|
932
|
-
const responseBody = (await proxyResponse.json()) as Record<string, unknown>;
|
|
933
|
-
logger.debug("fakeGraphQLQuery: parsed response body", {
|
|
934
|
-
responseBody,
|
|
935
|
-
});
|
|
936
|
-
|
|
937
|
-
// 5. Merge the registration data with the response
|
|
938
|
-
const data = matchedFake.data;
|
|
939
|
-
logger.debug(`fakeGraphQLQuery: starting data merge sequence-id: ${sequenceId}`, {
|
|
940
|
-
data,
|
|
941
|
-
responseBody,
|
|
942
|
-
});
|
|
943
|
-
// Use bracket notation for properties from index signature
|
|
944
|
-
const responseData = responseBody["data"] as unknown;
|
|
945
|
-
const merged = {
|
|
946
|
-
...(typeof responseData === "object" && responseData !== null ? responseData : {}),
|
|
947
|
-
...data,
|
|
948
|
-
};
|
|
785
|
+
// Handle single response
|
|
786
|
+
const responseData = fakeData;
|
|
949
787
|
|
|
950
788
|
const cacheKey = createMapKey({
|
|
951
789
|
sequenceId,
|
|
@@ -960,23 +798,22 @@ const createRoutingServer = async ({
|
|
|
960
798
|
body: requestBody as Record<string, unknown>,
|
|
961
799
|
},
|
|
962
800
|
response: {
|
|
963
|
-
status:
|
|
964
|
-
headers:
|
|
801
|
+
status: 200,
|
|
802
|
+
headers: { "Content-Type": "application/json" },
|
|
965
803
|
body: {
|
|
966
|
-
data:
|
|
804
|
+
data: responseData,
|
|
967
805
|
},
|
|
968
806
|
},
|
|
969
807
|
},
|
|
970
808
|
]);
|
|
971
809
|
|
|
972
|
-
logger.debug("fakeGraphQLQuery:
|
|
973
|
-
//
|
|
974
|
-
const responseJson = JSON.stringify({ data:
|
|
810
|
+
logger.debug("fakeGraphQLQuery: returning fake response");
|
|
811
|
+
// Let the server automatically calculate Content-Length to avoid issues with multi-byte characters
|
|
812
|
+
const responseJson = JSON.stringify({ data: responseData });
|
|
975
813
|
return new Response(responseJson, {
|
|
976
|
-
status:
|
|
814
|
+
status: 200,
|
|
977
815
|
headers: {
|
|
978
816
|
"Content-Type": "application/json",
|
|
979
|
-
"Content-Length": responseJson.length.toString(),
|
|
980
817
|
},
|
|
981
818
|
});
|
|
982
819
|
};
|
|
@@ -1011,7 +848,7 @@ const createRoutingServer = async ({
|
|
|
1011
848
|
);
|
|
1012
849
|
app.use("/graphql", fakeGraphQLQuery);
|
|
1013
850
|
app.use("/query", fakeGraphQLQuery);
|
|
1014
|
-
app.all("*", passToApollo);
|
|
851
|
+
app.all("*", (c) => passToApollo(c));
|
|
1015
852
|
return app;
|
|
1016
853
|
};
|
|
1017
854
|
export const createFakeServer = async (options: CreateFakeServerOptions) => {
|
|
@@ -1095,13 +932,12 @@ export const createFakeServerInternal = async (options: FakeServerInternal) => {
|
|
|
1095
932
|
const evaluateCondition = (
|
|
1096
933
|
condition: ConditionRule,
|
|
1097
934
|
context: {
|
|
1098
|
-
callCount: number;
|
|
1099
935
|
variables?: Record<string, unknown>;
|
|
1100
936
|
},
|
|
1101
937
|
): boolean => {
|
|
1102
938
|
switch (condition.type) {
|
|
1103
|
-
case "
|
|
1104
|
-
return
|
|
939
|
+
case "always":
|
|
940
|
+
return true;
|
|
1105
941
|
|
|
1106
942
|
case "variables":
|
|
1107
943
|
if (!context.variables) return false;
|
|
@@ -1117,8 +953,8 @@ const evaluateCondition = (
|
|
|
1117
953
|
*/
|
|
1118
954
|
const calculateConditionSpecificity = (condition: ConditionRule): number => {
|
|
1119
955
|
switch (condition.type) {
|
|
1120
|
-
case "
|
|
1121
|
-
return
|
|
956
|
+
case "always":
|
|
957
|
+
return 0; // always conditions have lowest priority
|
|
1122
958
|
|
|
1123
959
|
case "variables":
|
|
1124
960
|
return 20; // variables conditions have high priority
|
|
@@ -1129,18 +965,16 @@ const calculateConditionSpecificity = (condition: ConditionRule): number => {
|
|
|
1129
965
|
};
|
|
1130
966
|
|
|
1131
967
|
/**
|
|
1132
|
-
* Find a matching conditional fake based on the
|
|
968
|
+
* Find a matching conditional fake based on the request variables
|
|
1133
969
|
*/
|
|
1134
970
|
const findMatchedConditionalFake = ({
|
|
1135
971
|
conditionalFakes,
|
|
1136
|
-
currentCallCount,
|
|
1137
972
|
requestVariables,
|
|
1138
973
|
logger,
|
|
1139
974
|
sequenceId,
|
|
1140
975
|
requestOperationName,
|
|
1141
976
|
}: {
|
|
1142
977
|
conditionalFakes: RegisterSequenceOptions[] | undefined;
|
|
1143
|
-
currentCallCount: number;
|
|
1144
978
|
requestVariables: Record<string, unknown> | undefined;
|
|
1145
979
|
logger: ReturnType<typeof createLogger>;
|
|
1146
980
|
sequenceId: string;
|
|
@@ -1149,23 +983,27 @@ const findMatchedConditionalFake = ({
|
|
|
1149
983
|
if (conditionalFakes && conditionalFakes.length > 0) {
|
|
1150
984
|
// Find matching fake (already sorted by specificity in descending order)
|
|
1151
985
|
for (const fake of conditionalFakes) {
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
...(requestVariables && { variables: requestVariables }),
|
|
1156
|
-
};
|
|
986
|
+
const context = {
|
|
987
|
+
...(requestVariables && { variables: requestVariables }),
|
|
988
|
+
};
|
|
1157
989
|
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
}
|
|
990
|
+
if (evaluateCondition(fake.requestCondition, context)) {
|
|
991
|
+
logger.debug("fakeGraphQLQuery: matched conditional fake", {
|
|
992
|
+
sequenceId,
|
|
993
|
+
operationName: requestOperationName,
|
|
994
|
+
requestCondition: fake.requestCondition,
|
|
995
|
+
variables: requestVariables,
|
|
996
|
+
evaluationContext: context,
|
|
997
|
+
});
|
|
998
|
+
return fake;
|
|
1168
999
|
}
|
|
1000
|
+
logger.debug("fakeGraphQLQuery: conditional fake did not match", {
|
|
1001
|
+
sequenceId,
|
|
1002
|
+
operationName: requestOperationName,
|
|
1003
|
+
requestCondition: fake.requestCondition,
|
|
1004
|
+
variables: requestVariables,
|
|
1005
|
+
evaluationContext: context,
|
|
1006
|
+
});
|
|
1169
1007
|
}
|
|
1170
1008
|
}
|
|
1171
1009
|
return undefined;
|
package/dist/esm/createMock.d.ts
DELETED
|
File without changes
|
|
File without changes
|
package/dist/esm/createMock.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
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
|