@zze/mock-server 0.2.4

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.
Files changed (177) hide show
  1. package/README.md +643 -0
  2. package/dist/__tests__/mock-server.test.d.ts +5 -0
  3. package/dist/__tests__/mock-server.test.d.ts.map +1 -0
  4. package/dist/__tests__/mock-server.test.js +599 -0
  5. package/dist/__tests__/mock-server.test.js.map +1 -0
  6. package/dist/admin/__tests__/admin-router.test.d.ts +2 -0
  7. package/dist/admin/__tests__/admin-router.test.d.ts.map +1 -0
  8. package/dist/admin/__tests__/admin-router.test.js +621 -0
  9. package/dist/admin/__tests__/admin-router.test.js.map +1 -0
  10. package/dist/admin/admin-router.d.ts +27 -0
  11. package/dist/admin/admin-router.d.ts.map +1 -0
  12. package/dist/admin/admin-router.js +616 -0
  13. package/dist/admin/admin-router.js.map +1 -0
  14. package/dist/admin/index.d.ts +4 -0
  15. package/dist/admin/index.d.ts.map +1 -0
  16. package/dist/admin/index.js +10 -0
  17. package/dist/admin/index.js.map +1 -0
  18. package/dist/admin/types.d.ts +185 -0
  19. package/dist/admin/types.d.ts.map +1 -0
  20. package/dist/admin/types.js +33 -0
  21. package/dist/admin/types.js.map +1 -0
  22. package/dist/config/__tests__/config-discovery.test.d.ts +2 -0
  23. package/dist/config/__tests__/config-discovery.test.d.ts.map +1 -0
  24. package/dist/config/__tests__/config-discovery.test.js +52 -0
  25. package/dist/config/__tests__/config-discovery.test.js.map +1 -0
  26. package/dist/config/__tests__/config-loader.test.d.ts +2 -0
  27. package/dist/config/__tests__/config-loader.test.d.ts.map +1 -0
  28. package/dist/config/__tests__/config-loader.test.js +124 -0
  29. package/dist/config/__tests__/config-loader.test.js.map +1 -0
  30. package/dist/config/__tests__/file-loader.test.d.ts +2 -0
  31. package/dist/config/__tests__/file-loader.test.d.ts.map +1 -0
  32. package/dist/config/__tests__/file-loader.test.js +63 -0
  33. package/dist/config/__tests__/file-loader.test.js.map +1 -0
  34. package/dist/config/__tests__/fixtures/mock-config/endpoints/products.d.ts +25 -0
  35. package/dist/config/__tests__/fixtures/mock-config/endpoints/products.d.ts.map +1 -0
  36. package/dist/config/__tests__/fixtures/mock-config/endpoints/products.js +25 -0
  37. package/dist/config/__tests__/fixtures/mock-config/endpoints/products.js.map +1 -0
  38. package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.d.ts +11 -0
  39. package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.d.ts.map +1 -0
  40. package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.js +11 -0
  41. package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.js.map +1 -0
  42. package/dist/config/config-discovery.d.ts +23 -0
  43. package/dist/config/config-discovery.d.ts.map +1 -0
  44. package/dist/config/config-discovery.js +60 -0
  45. package/dist/config/config-discovery.js.map +1 -0
  46. package/dist/config/config-loader.d.ts +56 -0
  47. package/dist/config/config-loader.d.ts.map +1 -0
  48. package/dist/config/config-loader.js +162 -0
  49. package/dist/config/config-loader.js.map +1 -0
  50. package/dist/config/config-writer.d.ts +96 -0
  51. package/dist/config/config-writer.d.ts.map +1 -0
  52. package/dist/config/config-writer.js +248 -0
  53. package/dist/config/config-writer.js.map +1 -0
  54. package/dist/config/file-loader.d.ts +16 -0
  55. package/dist/config/file-loader.d.ts.map +1 -0
  56. package/dist/config/file-loader.js +90 -0
  57. package/dist/config/file-loader.js.map +1 -0
  58. package/dist/config/index.d.ts +7 -0
  59. package/dist/config/index.d.ts.map +1 -0
  60. package/dist/config/index.js +23 -0
  61. package/dist/config/index.js.map +1 -0
  62. package/dist/config/types.d.ts +47 -0
  63. package/dist/config/types.d.ts.map +1 -0
  64. package/dist/config/types.js +7 -0
  65. package/dist/config/types.js.map +1 -0
  66. package/dist/index.d.ts +28 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +31 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/mock-server.d.ts +243 -0
  71. package/dist/mock-server.d.ts.map +1 -0
  72. package/dist/mock-server.js +387 -0
  73. package/dist/mock-server.js.map +1 -0
  74. package/dist/resolver/__tests__/response-resolver.test.d.ts +2 -0
  75. package/dist/resolver/__tests__/response-resolver.test.d.ts.map +1 -0
  76. package/dist/resolver/__tests__/response-resolver.test.js +358 -0
  77. package/dist/resolver/__tests__/response-resolver.test.js.map +1 -0
  78. package/dist/resolver/index.d.ts +4 -0
  79. package/dist/resolver/index.d.ts.map +1 -0
  80. package/dist/resolver/index.js +9 -0
  81. package/dist/resolver/index.js.map +1 -0
  82. package/dist/resolver/response-resolver.d.ts +73 -0
  83. package/dist/resolver/response-resolver.d.ts.map +1 -0
  84. package/dist/resolver/response-resolver.js +167 -0
  85. package/dist/resolver/response-resolver.js.map +1 -0
  86. package/dist/resolver/types.d.ts +47 -0
  87. package/dist/resolver/types.d.ts.map +1 -0
  88. package/dist/resolver/types.js +9 -0
  89. package/dist/resolver/types.js.map +1 -0
  90. package/dist/schemas/__tests__/config.validator.test.d.ts +2 -0
  91. package/dist/schemas/__tests__/config.validator.test.d.ts.map +1 -0
  92. package/dist/schemas/__tests__/config.validator.test.js +66 -0
  93. package/dist/schemas/__tests__/config.validator.test.js.map +1 -0
  94. package/dist/schemas/__tests__/endpoint.schema.test.d.ts +2 -0
  95. package/dist/schemas/__tests__/endpoint.schema.test.d.ts.map +1 -0
  96. package/dist/schemas/__tests__/endpoint.schema.test.js +103 -0
  97. package/dist/schemas/__tests__/endpoint.schema.test.js.map +1 -0
  98. package/dist/schemas/__tests__/flow.schema.test.d.ts +2 -0
  99. package/dist/schemas/__tests__/flow.schema.test.d.ts.map +1 -0
  100. package/dist/schemas/__tests__/flow.schema.test.js +92 -0
  101. package/dist/schemas/__tests__/flow.schema.test.js.map +1 -0
  102. package/dist/schemas/config.validator.d.ts +39 -0
  103. package/dist/schemas/config.validator.d.ts.map +1 -0
  104. package/dist/schemas/config.validator.js +117 -0
  105. package/dist/schemas/config.validator.js.map +1 -0
  106. package/dist/schemas/endpoint.schema.d.ts +108 -0
  107. package/dist/schemas/endpoint.schema.d.ts.map +1 -0
  108. package/dist/schemas/endpoint.schema.js +87 -0
  109. package/dist/schemas/endpoint.schema.js.map +1 -0
  110. package/dist/schemas/flow.schema.d.ts +46 -0
  111. package/dist/schemas/flow.schema.d.ts.map +1 -0
  112. package/dist/schemas/flow.schema.js +73 -0
  113. package/dist/schemas/flow.schema.js.map +1 -0
  114. package/dist/schemas/http.schema.d.ts +15 -0
  115. package/dist/schemas/http.schema.d.ts.map +1 -0
  116. package/dist/schemas/http.schema.js +32 -0
  117. package/dist/schemas/http.schema.js.map +1 -0
  118. package/dist/schemas/index.d.ts +6 -0
  119. package/dist/schemas/index.d.ts.map +1 -0
  120. package/dist/schemas/index.js +33 -0
  121. package/dist/schemas/index.js.map +1 -0
  122. package/dist/schemas/scenario.schema.d.ts +54 -0
  123. package/dist/schemas/scenario.schema.d.ts.map +1 -0
  124. package/dist/schemas/scenario.schema.js +75 -0
  125. package/dist/schemas/scenario.schema.js.map +1 -0
  126. package/dist/server/__tests__/mock-server-app.test.d.ts +2 -0
  127. package/dist/server/__tests__/mock-server-app.test.d.ts.map +1 -0
  128. package/dist/server/__tests__/mock-server-app.test.js +296 -0
  129. package/dist/server/__tests__/mock-server-app.test.js.map +1 -0
  130. package/dist/server/index.d.ts +4 -0
  131. package/dist/server/index.d.ts.map +1 -0
  132. package/dist/server/index.js +10 -0
  133. package/dist/server/index.js.map +1 -0
  134. package/dist/server/mock-server-app.d.ts +119 -0
  135. package/dist/server/mock-server-app.d.ts.map +1 -0
  136. package/dist/server/mock-server-app.js +304 -0
  137. package/dist/server/mock-server-app.js.map +1 -0
  138. package/dist/server/types.d.ts +38 -0
  139. package/dist/server/types.d.ts.map +1 -0
  140. package/dist/server/types.js +11 -0
  141. package/dist/server/types.js.map +1 -0
  142. package/dist/state/__tests__/state-manager.test.d.ts +2 -0
  143. package/dist/state/__tests__/state-manager.test.d.ts.map +1 -0
  144. package/dist/state/__tests__/state-manager.test.js +275 -0
  145. package/dist/state/__tests__/state-manager.test.js.map +1 -0
  146. package/dist/state/index.d.ts +3 -0
  147. package/dist/state/index.d.ts.map +1 -0
  148. package/dist/state/index.js +7 -0
  149. package/dist/state/index.js.map +1 -0
  150. package/dist/state/state-manager.d.ts +92 -0
  151. package/dist/state/state-manager.d.ts.map +1 -0
  152. package/dist/state/state-manager.js +198 -0
  153. package/dist/state/state-manager.js.map +1 -0
  154. package/dist/state/types.d.ts +30 -0
  155. package/dist/state/types.d.ts.map +1 -0
  156. package/dist/state/types.js +2 -0
  157. package/dist/state/types.js.map +1 -0
  158. package/dist/ui/assets/index-SADMOgPE.js +10 -0
  159. package/dist/ui/assets/index-rj7m-XdG.css +1 -0
  160. package/dist/ui/index.html +29 -0
  161. package/dist/watcher/__tests__/config-watcher.test.d.ts +2 -0
  162. package/dist/watcher/__tests__/config-watcher.test.d.ts.map +1 -0
  163. package/dist/watcher/__tests__/config-watcher.test.js +372 -0
  164. package/dist/watcher/__tests__/config-watcher.test.js.map +1 -0
  165. package/dist/watcher/config-watcher.d.ts +100 -0
  166. package/dist/watcher/config-watcher.d.ts.map +1 -0
  167. package/dist/watcher/config-watcher.js +358 -0
  168. package/dist/watcher/config-watcher.js.map +1 -0
  169. package/dist/watcher/index.d.ts +7 -0
  170. package/dist/watcher/index.d.ts.map +1 -0
  171. package/dist/watcher/index.js +8 -0
  172. package/dist/watcher/index.js.map +1 -0
  173. package/dist/watcher/types.d.ts +64 -0
  174. package/dist/watcher/types.d.ts.map +1 -0
  175. package/dist/watcher/types.js +15 -0
  176. package/dist/watcher/types.js.map +1 -0
  177. package/package.json +58 -0
@@ -0,0 +1,358 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const response_resolver_js_1 = require("../response-resolver.js");
5
+ const index_js_1 = require("../../state/index.js");
6
+ // Mock Express request
7
+ function createMockRequest(overrides = {}) {
8
+ return {
9
+ params: {},
10
+ query: {},
11
+ body: {},
12
+ headers: {},
13
+ method: 'GET',
14
+ path: '/test',
15
+ ...overrides,
16
+ };
17
+ }
18
+ // Mock Express response
19
+ function createMockResponse() {
20
+ const res = {
21
+ _status: 200,
22
+ _headers: {},
23
+ _body: undefined,
24
+ _ended: false,
25
+ status(code) {
26
+ this._status = code;
27
+ return this;
28
+ },
29
+ setHeader(key, value) {
30
+ this._headers[key] = value;
31
+ return this;
32
+ },
33
+ json(body) {
34
+ this._body = body;
35
+ return this;
36
+ },
37
+ send(body) {
38
+ this._body = body;
39
+ return this;
40
+ },
41
+ end() {
42
+ this._ended = true;
43
+ return this;
44
+ },
45
+ };
46
+ return res;
47
+ }
48
+ // Test fixtures
49
+ const mockEndpoints = [
50
+ {
51
+ id: 'get-users',
52
+ path: '/users',
53
+ method: 'GET',
54
+ scenarios: [
55
+ {
56
+ id: 'success',
57
+ name: 'Success',
58
+ status: 200,
59
+ body: [{ id: 1, name: 'Alice' }],
60
+ },
61
+ {
62
+ id: 'error',
63
+ name: 'Error',
64
+ status: 500,
65
+ body: { error: 'Server error' },
66
+ headers: { 'X-Error': 'true' },
67
+ },
68
+ {
69
+ id: 'delayed',
70
+ name: 'Delayed',
71
+ status: 200,
72
+ body: { delayed: true },
73
+ delay: 100,
74
+ },
75
+ ],
76
+ defaultScenarioId: 'success',
77
+ },
78
+ {
79
+ id: 'get-user',
80
+ path: '/users/:id',
81
+ method: 'GET',
82
+ scenarios: [
83
+ {
84
+ id: 'found',
85
+ name: 'User Found',
86
+ status: 200,
87
+ body: (ctx) => ({ id: ctx.params.id, name: 'Dynamic User' }),
88
+ },
89
+ {
90
+ id: 'not-found',
91
+ name: 'Not Found',
92
+ status: 404,
93
+ body: null,
94
+ },
95
+ ],
96
+ defaultScenarioId: 'found',
97
+ },
98
+ {
99
+ id: 'create-user',
100
+ path: '/users',
101
+ method: 'POST',
102
+ scenarios: [
103
+ {
104
+ id: 'created',
105
+ name: 'Created',
106
+ status: 201,
107
+ body: (ctx) => ({ ...ctx.body, id: 123 }),
108
+ },
109
+ ],
110
+ defaultScenarioId: 'created',
111
+ },
112
+ ];
113
+ (0, vitest_1.describe)('ResponseResolver', () => {
114
+ let stateManager;
115
+ let resolver;
116
+ (0, vitest_1.beforeEach)(() => {
117
+ stateManager = new index_js_1.StateManager();
118
+ stateManager.setEndpoints(mockEndpoints);
119
+ stateManager.setFlows([]);
120
+ resolver = new response_resolver_js_1.ResponseResolver(stateManager);
121
+ resolver.setEndpoints(mockEndpoints);
122
+ });
123
+ (0, vitest_1.describe)('setEndpoints', () => {
124
+ (0, vitest_1.it)('should register endpoints', () => {
125
+ const endpoints = resolver.getEndpoints();
126
+ (0, vitest_1.expect)(endpoints).toHaveLength(3);
127
+ });
128
+ (0, vitest_1.it)('should clear previous endpoints on re-registration', () => {
129
+ resolver.setEndpoints([mockEndpoints[0]]);
130
+ (0, vitest_1.expect)(resolver.getEndpoints()).toHaveLength(1);
131
+ });
132
+ });
133
+ (0, vitest_1.describe)('findEndpoint', () => {
134
+ (0, vitest_1.it)('should find endpoint by method and path', () => {
135
+ const endpoint = resolver.findEndpoint('GET', '/users');
136
+ (0, vitest_1.expect)(endpoint?.id).toBe('get-users');
137
+ });
138
+ (0, vitest_1.it)('should return null for unknown route', () => {
139
+ const endpoint = resolver.findEndpoint('GET', '/unknown');
140
+ (0, vitest_1.expect)(endpoint).toBeNull();
141
+ });
142
+ (0, vitest_1.it)('should match case-insensitively for method', () => {
143
+ const endpoint = resolver.findEndpoint('get', '/users');
144
+ (0, vitest_1.expect)(endpoint?.id).toBe('get-users');
145
+ });
146
+ (0, vitest_1.it)('should distinguish same path with different methods', () => {
147
+ const getEndpoint = resolver.findEndpoint('GET', '/users');
148
+ const postEndpoint = resolver.findEndpoint('POST', '/users');
149
+ (0, vitest_1.expect)(getEndpoint?.id).toBe('get-users');
150
+ (0, vitest_1.expect)(postEndpoint?.id).toBe('create-user');
151
+ });
152
+ });
153
+ (0, vitest_1.describe)('getEndpointById', () => {
154
+ (0, vitest_1.it)('should return endpoint by ID', () => {
155
+ const endpoint = resolver.getEndpointById('get-users');
156
+ (0, vitest_1.expect)(endpoint?.path).toBe('/users');
157
+ });
158
+ (0, vitest_1.it)('should return null for unknown ID', () => {
159
+ const endpoint = resolver.getEndpointById('unknown');
160
+ (0, vitest_1.expect)(endpoint).toBeNull();
161
+ });
162
+ });
163
+ (0, vitest_1.describe)('resolveResponse', () => {
164
+ (0, vitest_1.it)('should resolve default scenario', () => {
165
+ const req = createMockRequest();
166
+ const resolved = resolver.resolveResponse('get-users', req);
167
+ (0, vitest_1.expect)(resolved).not.toBeNull();
168
+ (0, vitest_1.expect)(resolved?.status).toBe(200);
169
+ (0, vitest_1.expect)(resolved?.scenario.id).toBe('success');
170
+ });
171
+ (0, vitest_1.it)('should resolve explicitly activated scenario', () => {
172
+ stateManager.activateScenario('get-users', 'error');
173
+ const req = createMockRequest();
174
+ const resolved = resolver.resolveResponse('get-users', req);
175
+ (0, vitest_1.expect)(resolved?.status).toBe(500);
176
+ (0, vitest_1.expect)(resolved?.scenario.id).toBe('error');
177
+ });
178
+ (0, vitest_1.it)('should include headers from scenario', () => {
179
+ stateManager.activateScenario('get-users', 'error');
180
+ const req = createMockRequest();
181
+ const resolved = resolver.resolveResponse('get-users', req);
182
+ (0, vitest_1.expect)(resolved?.headers).toEqual({ 'X-Error': 'true' });
183
+ });
184
+ (0, vitest_1.it)('should include delay from scenario', () => {
185
+ stateManager.activateScenario('get-users', 'delayed');
186
+ const req = createMockRequest();
187
+ const resolved = resolver.resolveResponse('get-users', req);
188
+ (0, vitest_1.expect)(resolved?.delay).toBe(100);
189
+ });
190
+ (0, vitest_1.it)('should return null for unknown endpoint', () => {
191
+ const req = createMockRequest();
192
+ const resolved = resolver.resolveResponse('unknown', req);
193
+ (0, vitest_1.expect)(resolved).toBeNull();
194
+ });
195
+ });
196
+ (0, vitest_1.describe)('resolveResponseByRoute', () => {
197
+ (0, vitest_1.it)('should resolve by method and path', () => {
198
+ const req = createMockRequest();
199
+ const resolved = resolver.resolveResponseByRoute('GET', '/users', req);
200
+ (0, vitest_1.expect)(resolved?.endpoint.id).toBe('get-users');
201
+ });
202
+ (0, vitest_1.it)('should return null for unmatched route', () => {
203
+ const req = createMockRequest();
204
+ const resolved = resolver.resolveResponseByRoute('GET', '/unknown', req);
205
+ (0, vitest_1.expect)(resolved).toBeNull();
206
+ });
207
+ });
208
+ (0, vitest_1.describe)('createRequestContext', () => {
209
+ (0, vitest_1.it)('should create context from request', () => {
210
+ const req = createMockRequest({
211
+ params: { id: '123' },
212
+ query: { filter: 'active' },
213
+ body: { name: 'Test' },
214
+ headers: { 'content-type': 'application/json' },
215
+ method: 'POST',
216
+ path: '/users',
217
+ });
218
+ const context = resolver.createRequestContext(req);
219
+ (0, vitest_1.expect)(context.params).toEqual({ id: '123' });
220
+ (0, vitest_1.expect)(context.query).toEqual({ filter: 'active' });
221
+ (0, vitest_1.expect)(context.body).toEqual({ name: 'Test' });
222
+ (0, vitest_1.expect)(context.method).toBe('POST');
223
+ (0, vitest_1.expect)(context.path).toBe('/users');
224
+ });
225
+ });
226
+ (0, vitest_1.describe)('evaluateBody', () => {
227
+ (0, vitest_1.it)('should return static body as-is', async () => {
228
+ const body = { static: true };
229
+ const context = resolver.createRequestContext(createMockRequest());
230
+ const result = await resolver.evaluateBody(body, context);
231
+ (0, vitest_1.expect)(result).toEqual({ static: true });
232
+ });
233
+ (0, vitest_1.it)('should execute function body with context', async () => {
234
+ const body = (ctx) => ({ userId: ctx.params.id });
235
+ const req = createMockRequest({ params: { id: '456' } });
236
+ const context = resolver.createRequestContext(req);
237
+ const result = await resolver.evaluateBody(body, context);
238
+ (0, vitest_1.expect)(result).toEqual({ userId: '456' });
239
+ });
240
+ (0, vitest_1.it)('should handle async function body', async () => {
241
+ const body = async (ctx) => {
242
+ return { async: true, path: ctx.path };
243
+ };
244
+ const req = createMockRequest({ path: '/test' });
245
+ const context = resolver.createRequestContext(req);
246
+ const result = await resolver.evaluateBody(body, context);
247
+ (0, vitest_1.expect)(result).toEqual({ async: true, path: '/test' });
248
+ });
249
+ (0, vitest_1.it)('should handle null body', async () => {
250
+ const context = resolver.createRequestContext(createMockRequest());
251
+ const result = await resolver.evaluateBody(null, context);
252
+ (0, vitest_1.expect)(result).toBeNull();
253
+ });
254
+ });
255
+ (0, vitest_1.describe)('applyDelay', () => {
256
+ (0, vitest_1.it)('should delay for specified milliseconds', async () => {
257
+ const start = Date.now();
258
+ await resolver.applyDelay(50);
259
+ const elapsed = Date.now() - start;
260
+ (0, vitest_1.expect)(elapsed).toBeGreaterThanOrEqual(45); // Allow small margin
261
+ });
262
+ (0, vitest_1.it)('should not delay for zero', async () => {
263
+ const start = Date.now();
264
+ await resolver.applyDelay(0);
265
+ const elapsed = Date.now() - start;
266
+ (0, vitest_1.expect)(elapsed).toBeLessThan(10);
267
+ });
268
+ });
269
+ (0, vitest_1.describe)('sendResponse', () => {
270
+ (0, vitest_1.it)('should set status code', async () => {
271
+ const req = createMockRequest();
272
+ const res = createMockResponse();
273
+ const resolved = resolver.resolveResponse('get-users', req);
274
+ await resolver.sendResponse(resolved, req, res);
275
+ (0, vitest_1.expect)(res._status).toBe(200);
276
+ });
277
+ (0, vitest_1.it)('should set headers', async () => {
278
+ stateManager.activateScenario('get-users', 'error');
279
+ const req = createMockRequest();
280
+ const res = createMockResponse();
281
+ const resolved = resolver.resolveResponse('get-users', req);
282
+ await resolver.sendResponse(resolved, req, res);
283
+ (0, vitest_1.expect)(res._headers['X-Error']).toBe('true');
284
+ });
285
+ (0, vitest_1.it)('should send JSON body for objects', async () => {
286
+ const req = createMockRequest();
287
+ const res = createMockResponse();
288
+ const resolved = resolver.resolveResponse('get-users', req);
289
+ await resolver.sendResponse(resolved, req, res);
290
+ (0, vitest_1.expect)(res._body).toEqual([{ id: 1, name: 'Alice' }]);
291
+ });
292
+ (0, vitest_1.it)('should send string body directly', async () => {
293
+ // Create endpoint with string body
294
+ const stringEndpoint = {
295
+ id: 'string-endpoint',
296
+ path: '/string',
297
+ method: 'GET',
298
+ scenarios: [{ id: 'text', name: 'Text', status: 200, body: 'Hello World' }],
299
+ defaultScenarioId: 'text',
300
+ };
301
+ stateManager.setEndpoints([...mockEndpoints, stringEndpoint]);
302
+ resolver.setEndpoints([...mockEndpoints, stringEndpoint]);
303
+ const req = createMockRequest();
304
+ const res = createMockResponse();
305
+ const resolved = resolver.resolveResponse('string-endpoint', req);
306
+ await resolver.sendResponse(resolved, req, res);
307
+ (0, vitest_1.expect)(res._body).toBe('Hello World');
308
+ });
309
+ (0, vitest_1.it)('should call end() for null body', async () => {
310
+ stateManager.activateScenario('get-user', 'not-found');
311
+ const req = createMockRequest();
312
+ const res = createMockResponse();
313
+ const resolved = resolver.resolveResponse('get-user', req);
314
+ await resolver.sendResponse(resolved, req, res);
315
+ (0, vitest_1.expect)(res._ended).toBe(true);
316
+ });
317
+ (0, vitest_1.it)('should evaluate dynamic body', async () => {
318
+ const req = createMockRequest({ params: { id: '789' } });
319
+ const res = createMockResponse();
320
+ const resolved = resolver.resolveResponse('get-user', req);
321
+ await resolver.sendResponse(resolved, req, res);
322
+ (0, vitest_1.expect)(res._body).toEqual({ id: '789', name: 'Dynamic User' });
323
+ });
324
+ (0, vitest_1.it)('should apply delay before sending', async () => {
325
+ stateManager.activateScenario('get-users', 'delayed');
326
+ const req = createMockRequest();
327
+ const res = createMockResponse();
328
+ const resolved = resolver.resolveResponse('get-users', req);
329
+ const start = Date.now();
330
+ await resolver.sendResponse(resolved, req, res);
331
+ const elapsed = Date.now() - start;
332
+ (0, vitest_1.expect)(elapsed).toBeGreaterThanOrEqual(95);
333
+ });
334
+ });
335
+ (0, vitest_1.describe)('handleRequest', () => {
336
+ (0, vitest_1.it)('should resolve and send response', async () => {
337
+ const req = createMockRequest();
338
+ const res = createMockResponse();
339
+ const handled = await resolver.handleRequest('get-users', req, res);
340
+ (0, vitest_1.expect)(handled).toBe(true);
341
+ (0, vitest_1.expect)(res._status).toBe(200);
342
+ (0, vitest_1.expect)(res._body).toEqual([{ id: 1, name: 'Alice' }]);
343
+ });
344
+ (0, vitest_1.it)('should return false for unknown endpoint', async () => {
345
+ const req = createMockRequest();
346
+ const res = createMockResponse();
347
+ const handled = await resolver.handleRequest('unknown', req, res);
348
+ (0, vitest_1.expect)(handled).toBe(false);
349
+ });
350
+ });
351
+ });
352
+ (0, vitest_1.describe)('createResponseResolver', () => {
353
+ (0, vitest_1.it)('should create a ResponseResolver instance', () => {
354
+ const stateManager = new index_js_1.StateManager();
355
+ const resolver = (0, response_resolver_js_1.createResponseResolver)(stateManager);
356
+ (0, vitest_1.expect)(resolver).toBeInstanceOf(response_resolver_js_1.ResponseResolver);
357
+ });
358
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-resolver.test.js","sourceRoot":"","sources":["../../../src/resolver/__tests__/response-resolver.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type { ResolvedResponse, RequestContext, DynamicBodyFn, } from './types.js';
2
+ export { isDynamicBody } from './types.js';
3
+ export { ResponseResolver, createResponseResolver } from './response-resolver.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createResponseResolver = exports.ResponseResolver = exports.isDynamicBody = void 0;
4
+ var types_js_1 = require("./types.js");
5
+ Object.defineProperty(exports, "isDynamicBody", { enumerable: true, get: function () { return types_js_1.isDynamicBody; } });
6
+ // Response resolver
7
+ var response_resolver_js_1 = require("./response-resolver.js");
8
+ Object.defineProperty(exports, "ResponseResolver", { enumerable: true, get: function () { return response_resolver_js_1.ResponseResolver; } });
9
+ Object.defineProperty(exports, "createResponseResolver", { enumerable: true, get: function () { return response_resolver_js_1.createResponseResolver; } });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":";;;AAOA,uCAA2C;AAAlC,yGAAA,aAAa,OAAA;AAEtB,oBAAoB;AACpB,+DAAkF;AAAzE,wHAAA,gBAAgB,OAAA;AAAE,8HAAA,sBAAsB,OAAA"}
@@ -0,0 +1,73 @@
1
+ import type { Request, Response } from 'express';
2
+ import type { EndpointConfig } from '../schemas/index.js';
3
+ import type { StateManager } from '../state/index.js';
4
+ import type { ResolvedResponse, RequestContext } from './types.js';
5
+ /**
6
+ * Resolves which response to send for incoming requests
7
+ * Uses StateManager to determine active scenario based on priority chain
8
+ */
9
+ export declare class ResponseResolver {
10
+ private stateManager;
11
+ private endpoints;
12
+ private routeMap;
13
+ constructor(stateManager: StateManager);
14
+ /**
15
+ * Register endpoints for routing
16
+ */
17
+ setEndpoints(endpoints: EndpointConfig[]): void;
18
+ /**
19
+ * Create a route key for method + path combination
20
+ */
21
+ private createRouteKey;
22
+ /**
23
+ * Find endpoint by method and path
24
+ */
25
+ findEndpoint(method: string, path: string): EndpointConfig | null;
26
+ /**
27
+ * Get endpoint by ID
28
+ */
29
+ getEndpointById(endpointId: string): EndpointConfig | null;
30
+ /**
31
+ * Get all registered endpoints
32
+ */
33
+ getEndpoints(): EndpointConfig[];
34
+ /**
35
+ * Resolve the response for a given endpoint
36
+ * Uses the state manager's priority chain to determine the scenario
37
+ */
38
+ resolveResponse(endpointId: string, req: Request): ResolvedResponse | null;
39
+ /**
40
+ * Resolve the response for a request by matching method and path
41
+ */
42
+ resolveResponseByRoute(method: string, path: string, req: Request): ResolvedResponse | null;
43
+ /**
44
+ * Build the resolved response from endpoint and scenario
45
+ */
46
+ private buildResponse;
47
+ /**
48
+ * Create request context for dynamic body functions
49
+ */
50
+ createRequestContext(req: Request): RequestContext;
51
+ /**
52
+ * Evaluate the response body, handling dynamic functions
53
+ */
54
+ evaluateBody(body: unknown, context: RequestContext): Promise<unknown>;
55
+ /**
56
+ * Apply delay if configured
57
+ */
58
+ applyDelay(delay: number): Promise<void>;
59
+ /**
60
+ * Send the resolved response
61
+ */
62
+ sendResponse(resolved: ResolvedResponse, req: Request, res: Response): Promise<void>;
63
+ /**
64
+ * Handle a request: resolve and send the response
65
+ * Returns true if handled, false if no matching endpoint
66
+ */
67
+ handleRequest(endpointId: string, req: Request, res: Response): Promise<boolean>;
68
+ }
69
+ /**
70
+ * Create a new ResponseResolver instance
71
+ */
72
+ export declare function createResponseResolver(stateManager: StateManager): ResponseResolver;
73
+ //# sourceMappingURL=response-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-resolver.d.ts","sourceRoot":"","sources":["../../src/resolver/response-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAGlF;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,QAAQ,CAA0C;gBAE9C,YAAY,EAAE,YAAY;IAItC;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI;IAY/C;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAKjE;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAI1D;;OAEG;IACH,YAAY,IAAI,cAAc,EAAE;IAIhC;;;OAGG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI;IAc1E;;OAEG;IACH,sBAAsB,CACpB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,GACX,gBAAgB,GAAG,IAAI;IAS1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACH,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc;IAYlD;;OAEG;IACG,YAAY,CAChB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,OAAO,CAAC;IAOnB;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9C;;OAEG;IACG,YAAY,CAChB,QAAQ,EAAE,gBAAgB,EAC1B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,GACZ,OAAO,CAAC,IAAI,CAAC;IAyBhB;;;OAGG;IACG,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,GACZ,OAAO,CAAC,OAAO,CAAC;CASpB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,GAAG,gBAAgB,CAEnF"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResponseResolver = void 0;
4
+ exports.createResponseResolver = createResponseResolver;
5
+ const types_js_1 = require("./types.js");
6
+ /**
7
+ * Resolves which response to send for incoming requests
8
+ * Uses StateManager to determine active scenario based on priority chain
9
+ */
10
+ class ResponseResolver {
11
+ constructor(stateManager) {
12
+ this.endpoints = new Map();
13
+ this.routeMap = new Map();
14
+ this.stateManager = stateManager;
15
+ }
16
+ /**
17
+ * Register endpoints for routing
18
+ */
19
+ setEndpoints(endpoints) {
20
+ this.endpoints.clear();
21
+ this.routeMap.clear();
22
+ for (const endpoint of endpoints) {
23
+ this.endpoints.set(endpoint.id, endpoint);
24
+ // Create route key for lookup: METHOD:path
25
+ const routeKey = this.createRouteKey(endpoint.method, endpoint.path);
26
+ this.routeMap.set(routeKey, endpoint);
27
+ }
28
+ }
29
+ /**
30
+ * Create a route key for method + path combination
31
+ */
32
+ createRouteKey(method, path) {
33
+ return `${method.toUpperCase()}:${path}`;
34
+ }
35
+ /**
36
+ * Find endpoint by method and path
37
+ */
38
+ findEndpoint(method, path) {
39
+ const routeKey = this.createRouteKey(method, path);
40
+ return this.routeMap.get(routeKey) ?? null;
41
+ }
42
+ /**
43
+ * Get endpoint by ID
44
+ */
45
+ getEndpointById(endpointId) {
46
+ return this.endpoints.get(endpointId) ?? null;
47
+ }
48
+ /**
49
+ * Get all registered endpoints
50
+ */
51
+ getEndpoints() {
52
+ return [...this.endpoints.values()];
53
+ }
54
+ /**
55
+ * Resolve the response for a given endpoint
56
+ * Uses the state manager's priority chain to determine the scenario
57
+ */
58
+ resolveResponse(endpointId, req) {
59
+ const endpoint = this.endpoints.get(endpointId);
60
+ if (!endpoint) {
61
+ return null;
62
+ }
63
+ const scenario = this.stateManager.resolveScenario(endpointId);
64
+ if (!scenario) {
65
+ return null;
66
+ }
67
+ return this.buildResponse(endpoint, scenario, req);
68
+ }
69
+ /**
70
+ * Resolve the response for a request by matching method and path
71
+ */
72
+ resolveResponseByRoute(method, path, req) {
73
+ const endpoint = this.findEndpoint(method, path);
74
+ if (!endpoint) {
75
+ return null;
76
+ }
77
+ return this.resolveResponse(endpoint.id, req);
78
+ }
79
+ /**
80
+ * Build the resolved response from endpoint and scenario
81
+ */
82
+ buildResponse(endpoint, scenario, req) {
83
+ return {
84
+ status: scenario.status,
85
+ headers: scenario.headers ?? {},
86
+ body: scenario.body,
87
+ delay: scenario.delay ?? 0,
88
+ scenario,
89
+ endpoint,
90
+ };
91
+ }
92
+ /**
93
+ * Create request context for dynamic body functions
94
+ */
95
+ createRequestContext(req) {
96
+ return {
97
+ req,
98
+ params: req.params,
99
+ query: req.query,
100
+ body: req.body,
101
+ headers: req.headers,
102
+ method: req.method,
103
+ path: req.path,
104
+ };
105
+ }
106
+ /**
107
+ * Evaluate the response body, handling dynamic functions
108
+ */
109
+ async evaluateBody(body, context) {
110
+ if ((0, types_js_1.isDynamicBody)(body)) {
111
+ return await body(context);
112
+ }
113
+ return body;
114
+ }
115
+ /**
116
+ * Apply delay if configured
117
+ */
118
+ async applyDelay(delay) {
119
+ if (delay > 0) {
120
+ await new Promise((resolve) => setTimeout(resolve, delay));
121
+ }
122
+ }
123
+ /**
124
+ * Send the resolved response
125
+ */
126
+ async sendResponse(resolved, req, res) {
127
+ // Apply delay
128
+ await this.applyDelay(resolved.delay);
129
+ // Set headers
130
+ for (const [key, value] of Object.entries(resolved.headers)) {
131
+ res.setHeader(key, value);
132
+ }
133
+ // Evaluate body (handle dynamic functions)
134
+ const context = this.createRequestContext(req);
135
+ const body = await this.evaluateBody(resolved.body, context);
136
+ // Send response
137
+ res.status(resolved.status);
138
+ if (body === null || body === undefined) {
139
+ res.end();
140
+ }
141
+ else if (typeof body === 'string') {
142
+ res.send(body);
143
+ }
144
+ else {
145
+ res.json(body);
146
+ }
147
+ }
148
+ /**
149
+ * Handle a request: resolve and send the response
150
+ * Returns true if handled, false if no matching endpoint
151
+ */
152
+ async handleRequest(endpointId, req, res) {
153
+ const resolved = this.resolveResponse(endpointId, req);
154
+ if (!resolved) {
155
+ return false;
156
+ }
157
+ await this.sendResponse(resolved, req, res);
158
+ return true;
159
+ }
160
+ }
161
+ exports.ResponseResolver = ResponseResolver;
162
+ /**
163
+ * Create a new ResponseResolver instance
164
+ */
165
+ function createResponseResolver(stateManager) {
166
+ return new ResponseResolver(stateManager);
167
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-resolver.js","sourceRoot":"","sources":["../../src/resolver/response-resolver.ts"],"names":[],"mappings":"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"}