@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,108 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * URL path pattern: must start with /
4
+ */
5
+ export declare const PathSchema: z.ZodString;
6
+ /**
7
+ * Endpoint configuration schema
8
+ * Defines a mock API endpoint with its response scenarios
9
+ */
10
+ export declare const EndpointConfigSchema: z.ZodEffects<z.ZodObject<{
11
+ id: z.ZodString;
12
+ path: z.ZodString;
13
+ method: z.ZodEnum<["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD"]>;
14
+ scenarios: z.ZodArray<z.ZodObject<{
15
+ id: z.ZodString;
16
+ name: z.ZodString;
17
+ status: z.ZodNumber;
18
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
19
+ body: z.ZodUnion<[z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodArray<z.ZodUnknown, "many">, z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodFunction<z.ZodTuple<[z.ZodAny], z.ZodUnknown>, z.ZodAny>]>;
20
+ delay: z.ZodOptional<z.ZodNumber>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ status: number;
23
+ id: string;
24
+ name: string;
25
+ body: string | number | boolean | unknown[] | Record<string, unknown> | ((args_0: any, ...args: unknown[]) => any) | null;
26
+ headers?: Record<string, string> | undefined;
27
+ delay?: number | undefined;
28
+ }, {
29
+ status: number;
30
+ id: string;
31
+ name: string;
32
+ body: string | number | boolean | unknown[] | Record<string, unknown> | ((args_0: any, ...args: unknown[]) => any) | null;
33
+ headers?: Record<string, string> | undefined;
34
+ delay?: number | undefined;
35
+ }>, "many">;
36
+ defaultScenarioId: z.ZodString;
37
+ }, "strip", z.ZodTypeAny, {
38
+ path: string;
39
+ id: string;
40
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS" | "HEAD";
41
+ scenarios: {
42
+ status: number;
43
+ id: string;
44
+ name: string;
45
+ body: string | number | boolean | unknown[] | Record<string, unknown> | ((args_0: any, ...args: unknown[]) => any) | null;
46
+ headers?: Record<string, string> | undefined;
47
+ delay?: number | undefined;
48
+ }[];
49
+ defaultScenarioId: string;
50
+ }, {
51
+ path: string;
52
+ id: string;
53
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS" | "HEAD";
54
+ scenarios: {
55
+ status: number;
56
+ id: string;
57
+ name: string;
58
+ body: string | number | boolean | unknown[] | Record<string, unknown> | ((args_0: any, ...args: unknown[]) => any) | null;
59
+ headers?: Record<string, string> | undefined;
60
+ delay?: number | undefined;
61
+ }[];
62
+ defaultScenarioId: string;
63
+ }>, {
64
+ path: string;
65
+ id: string;
66
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS" | "HEAD";
67
+ scenarios: {
68
+ status: number;
69
+ id: string;
70
+ name: string;
71
+ body: string | number | boolean | unknown[] | Record<string, unknown> | ((args_0: any, ...args: unknown[]) => any) | null;
72
+ headers?: Record<string, string> | undefined;
73
+ delay?: number | undefined;
74
+ }[];
75
+ defaultScenarioId: string;
76
+ }, {
77
+ path: string;
78
+ id: string;
79
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS" | "HEAD";
80
+ scenarios: {
81
+ status: number;
82
+ id: string;
83
+ name: string;
84
+ body: string | number | boolean | unknown[] | Record<string, unknown> | ((args_0: any, ...args: unknown[]) => any) | null;
85
+ headers?: Record<string, string> | undefined;
86
+ delay?: number | undefined;
87
+ }[];
88
+ defaultScenarioId: string;
89
+ }>;
90
+ export type EndpointConfig = z.infer<typeof EndpointConfigSchema>;
91
+ /**
92
+ * Validates endpoint uniqueness (path + method combination must be unique)
93
+ */
94
+ export declare function validateUniqueEndpoints(endpoints: EndpointConfig[]): {
95
+ valid: boolean;
96
+ conflicts: Array<{
97
+ path: string;
98
+ method: string;
99
+ }>;
100
+ };
101
+ /**
102
+ * Validates endpoint ID uniqueness
103
+ */
104
+ export declare function validateUniqueEndpointIds(endpoints: EndpointConfig[]): {
105
+ valid: boolean;
106
+ duplicates: string[];
107
+ };
108
+ //# sourceMappingURL=endpoint.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/endpoint.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB;;GAEG;AACH,eAAO,MAAM,UAAU,aAKuC,CAAC;AAE/D;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8B7B,CAAC;AAEL,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,cAAc,EAAE,GAC1B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAgBxE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,cAAc,EAAE,GAC1B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAgB1C"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EndpointConfigSchema = exports.PathSchema = void 0;
4
+ exports.validateUniqueEndpoints = validateUniqueEndpoints;
5
+ exports.validateUniqueEndpointIds = validateUniqueEndpointIds;
6
+ const zod_1 = require("zod");
7
+ const http_schema_js_1 = require("./http.schema.js");
8
+ const scenario_schema_js_1 = require("./scenario.schema.js");
9
+ /**
10
+ * URL path pattern: must start with /
11
+ */
12
+ exports.PathSchema = zod_1.z
13
+ .string()
14
+ .min(1)
15
+ .max(500)
16
+ .regex(/^\//, 'Path must start with /')
17
+ .describe('URL path (e.g., "/user-data", "/api/users/:id")');
18
+ /**
19
+ * Endpoint configuration schema
20
+ * Defines a mock API endpoint with its response scenarios
21
+ */
22
+ exports.EndpointConfigSchema = zod_1.z
23
+ .object({
24
+ id: scenario_schema_js_1.IdSchema.describe('Unique endpoint identifier'),
25
+ path: exports.PathSchema,
26
+ method: http_schema_js_1.HttpMethodSchema,
27
+ scenarios: zod_1.z
28
+ .array(scenario_schema_js_1.ScenarioConfigSchema)
29
+ .min(1, 'At least one scenario is required'),
30
+ defaultScenarioId: scenario_schema_js_1.IdSchema.describe('ID of the default scenario'),
31
+ })
32
+ .superRefine((data, ctx) => {
33
+ // Validate unique scenario IDs
34
+ const { valid, duplicates } = (0, scenario_schema_js_1.validateUniqueScenarioIds)(data.scenarios);
35
+ if (!valid) {
36
+ ctx.addIssue({
37
+ code: zod_1.z.ZodIssueCode.custom,
38
+ message: `Duplicate scenario IDs found: ${duplicates.join(', ')}`,
39
+ path: ['scenarios'],
40
+ });
41
+ }
42
+ // Validate defaultScenarioId exists in scenarios
43
+ const scenarioIds = new Set(data.scenarios.map((s) => s.id));
44
+ if (!scenarioIds.has(data.defaultScenarioId)) {
45
+ ctx.addIssue({
46
+ code: zod_1.z.ZodIssueCode.custom,
47
+ message: `Default scenario ID "${data.defaultScenarioId}" not found in scenarios. Available: ${[...scenarioIds].join(', ')}`,
48
+ path: ['defaultScenarioId'],
49
+ });
50
+ }
51
+ });
52
+ /**
53
+ * Validates endpoint uniqueness (path + method combination must be unique)
54
+ */
55
+ function validateUniqueEndpoints(endpoints) {
56
+ const seen = new Map();
57
+ const conflicts = [];
58
+ for (const endpoint of endpoints) {
59
+ const key = `${endpoint.method}:${endpoint.path}`;
60
+ if (seen.has(key)) {
61
+ conflicts.push({ path: endpoint.path, method: endpoint.method });
62
+ }
63
+ seen.set(key, endpoint);
64
+ }
65
+ return {
66
+ valid: conflicts.length === 0,
67
+ conflicts,
68
+ };
69
+ }
70
+ /**
71
+ * Validates endpoint ID uniqueness
72
+ */
73
+ function validateUniqueEndpointIds(endpoints) {
74
+ const ids = endpoints.map((e) => e.id);
75
+ const seen = new Set();
76
+ const duplicates = [];
77
+ for (const id of ids) {
78
+ if (seen.has(id)) {
79
+ duplicates.push(id);
80
+ }
81
+ seen.add(id);
82
+ }
83
+ return {
84
+ valid: duplicates.length === 0,
85
+ duplicates: [...new Set(duplicates)],
86
+ };
87
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint.schema.js","sourceRoot":"","sources":["../../src/schemas/endpoint.schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { z } from 'zod';
2
+ import type { EndpointConfig } from './endpoint.schema.js';
3
+ /**
4
+ * Flow configuration schema
5
+ * Defines a user flow that maps endpoints to specific scenarios
6
+ */
7
+ export declare const FlowConfigSchema: z.ZodObject<{
8
+ id: z.ZodString;
9
+ name: z.ZodString;
10
+ description: z.ZodOptional<z.ZodString>;
11
+ category: z.ZodOptional<z.ZodString>;
12
+ endpointScenarios: z.ZodRecord<z.ZodString, z.ZodString>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ id: string;
15
+ name: string;
16
+ endpointScenarios: Record<string, string>;
17
+ description?: string | undefined;
18
+ category?: string | undefined;
19
+ }, {
20
+ id: string;
21
+ name: string;
22
+ endpointScenarios: Record<string, string>;
23
+ description?: string | undefined;
24
+ category?: string | undefined;
25
+ }>;
26
+ export type FlowConfig = z.infer<typeof FlowConfigSchema>;
27
+ /**
28
+ * Validates flow ID uniqueness
29
+ */
30
+ export declare function validateUniqueFlowIds(flows: FlowConfig[]): {
31
+ valid: boolean;
32
+ duplicates: string[];
33
+ };
34
+ /**
35
+ * Validates that all endpoint/scenario references in flows are valid
36
+ */
37
+ export declare function validateFlowReferences(flows: FlowConfig[], endpoints: EndpointConfig[]): {
38
+ valid: boolean;
39
+ errors: Array<{
40
+ flowId: string;
41
+ endpointId: string;
42
+ scenarioId?: string;
43
+ error: string;
44
+ }>;
45
+ };
46
+ //# sourceMappingURL=flow.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/flow.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;EAQ3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,UAAU,EAAE,GAClB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAgB1C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,UAAU,EAAE,EACnB,SAAS,EAAE,cAAc,EAAE,GAC1B;IACD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,KAAK,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ,CA2CA"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FlowConfigSchema = void 0;
4
+ exports.validateUniqueFlowIds = validateUniqueFlowIds;
5
+ exports.validateFlowReferences = validateFlowReferences;
6
+ const zod_1 = require("zod");
7
+ const scenario_schema_js_1 = require("./scenario.schema.js");
8
+ /**
9
+ * Flow configuration schema
10
+ * Defines a user flow that maps endpoints to specific scenarios
11
+ */
12
+ exports.FlowConfigSchema = zod_1.z.object({
13
+ id: scenario_schema_js_1.IdSchema.describe('Unique flow identifier'),
14
+ name: scenario_schema_js_1.NameSchema.describe('Human-readable flow name'),
15
+ description: zod_1.z.string().max(1000).optional().describe('Optional description'),
16
+ category: zod_1.z.string().max(100).optional().describe('Category for grouping flows'),
17
+ endpointScenarios: zod_1.z
18
+ .record(scenario_schema_js_1.IdSchema, scenario_schema_js_1.IdSchema)
19
+ .describe('Map of endpointId → scenarioId'),
20
+ });
21
+ /**
22
+ * Validates flow ID uniqueness
23
+ */
24
+ function validateUniqueFlowIds(flows) {
25
+ const ids = flows.map((f) => f.id);
26
+ const seen = new Set();
27
+ const duplicates = [];
28
+ for (const id of ids) {
29
+ if (seen.has(id)) {
30
+ duplicates.push(id);
31
+ }
32
+ seen.add(id);
33
+ }
34
+ return {
35
+ valid: duplicates.length === 0,
36
+ duplicates: [...new Set(duplicates)],
37
+ };
38
+ }
39
+ /**
40
+ * Validates that all endpoint/scenario references in flows are valid
41
+ */
42
+ function validateFlowReferences(flows, endpoints) {
43
+ const errors = [];
44
+ // Build endpoint lookup map
45
+ const endpointMap = new Map(endpoints.map((e) => [e.id, e]));
46
+ for (const flow of flows) {
47
+ for (const [endpointId, scenarioId] of Object.entries(flow.endpointScenarios)) {
48
+ const endpoint = endpointMap.get(endpointId);
49
+ if (!endpoint) {
50
+ errors.push({
51
+ flowId: flow.id,
52
+ endpointId,
53
+ error: `Endpoint "${endpointId}" not found`,
54
+ });
55
+ continue;
56
+ }
57
+ const scenarioExists = endpoint.scenarios.some((s) => s.id === scenarioId);
58
+ if (!scenarioExists) {
59
+ const availableScenarios = endpoint.scenarios.map((s) => s.id).join(', ');
60
+ errors.push({
61
+ flowId: flow.id,
62
+ endpointId,
63
+ scenarioId,
64
+ error: `Scenario "${scenarioId}" not found in endpoint "${endpointId}". Available: ${availableScenarios}`,
65
+ });
66
+ }
67
+ }
68
+ }
69
+ return {
70
+ valid: errors.length === 0,
71
+ errors,
72
+ };
73
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.schema.js","sourceRoot":"","sources":["../../src/schemas/flow.schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Supported HTTP methods for mock endpoints
4
+ */
5
+ export declare const HttpMethodSchema: z.ZodEnum<["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD"]>;
6
+ export type HttpMethod = z.infer<typeof HttpMethodSchema>;
7
+ /**
8
+ * Valid HTTP status codes (100-599)
9
+ */
10
+ export declare const HttpStatusCodeSchema: z.ZodNumber;
11
+ /**
12
+ * HTTP headers as key-value pairs
13
+ */
14
+ export declare const HttpHeadersSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
15
+ //# sourceMappingURL=http.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/http.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,gBAAgB,yEAQ3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,oBAAoB,aAKF,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,iBAAiB,sDAGM,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpHeadersSchema = exports.HttpStatusCodeSchema = exports.HttpMethodSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ /**
6
+ * Supported HTTP methods for mock endpoints
7
+ */
8
+ exports.HttpMethodSchema = zod_1.z.enum([
9
+ 'GET',
10
+ 'POST',
11
+ 'PUT',
12
+ 'DELETE',
13
+ 'PATCH',
14
+ 'OPTIONS',
15
+ 'HEAD',
16
+ ]);
17
+ /**
18
+ * Valid HTTP status codes (100-599)
19
+ */
20
+ exports.HttpStatusCodeSchema = zod_1.z
21
+ .number()
22
+ .int()
23
+ .min(100)
24
+ .max(599)
25
+ .describe('HTTP status code');
26
+ /**
27
+ * HTTP headers as key-value pairs
28
+ */
29
+ exports.HttpHeadersSchema = zod_1.z
30
+ .record(zod_1.z.string(), zod_1.z.string())
31
+ .optional()
32
+ .describe('Optional HTTP headers');
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.schema.js","sourceRoot":"","sources":["../../src/schemas/http.schema.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB;;GAEG;AACU,QAAA,gBAAgB,GAAG,OAAC,CAAC,IAAI,CAAC;IACrC,KAAK;IACL,MAAM;IACN,KAAK;IACL,QAAQ;IACR,OAAO;IACP,SAAS;IACT,MAAM;CACP,CAAC,CAAC;AAIH;;GAEG;AACU,QAAA,oBAAoB,GAAG,OAAC;KAClC,MAAM,EAAE;KACR,GAAG,EAAE;KACL,GAAG,CAAC,GAAG,CAAC;KACR,GAAG,CAAC,GAAG,CAAC;KACR,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAEhC;;GAEG;AACU,QAAA,iBAAiB,GAAG,OAAC;KAC/B,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC;KAC9B,QAAQ,EAAE;KACV,QAAQ,CAAC,uBAAuB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { HttpMethodSchema, HttpStatusCodeSchema, HttpHeadersSchema, type HttpMethod, } from './http.schema.js';
2
+ export { IdSchema, NameSchema, ResponseBodySchema, DelaySchema, ScenarioConfigSchema, validateUniqueScenarioIds, type ScenarioConfig, type ResponseBody, } from './scenario.schema.js';
3
+ export { PathSchema, EndpointConfigSchema, validateUniqueEndpoints, validateUniqueEndpointIds, type EndpointConfig, } from './endpoint.schema.js';
4
+ export { FlowConfigSchema, validateUniqueFlowIds, validateFlowReferences, type FlowConfig, } from './flow.schema.js';
5
+ export { validateEndpoint, validateFlow, validateConfiguration, formatValidationErrors, type ValidationError, type ValidationResult, } from './config.validator.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,yBAAyB,EACzB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,cAAc,GACpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatValidationErrors = exports.validateConfiguration = exports.validateFlow = exports.validateEndpoint = exports.validateFlowReferences = exports.validateUniqueFlowIds = exports.FlowConfigSchema = exports.validateUniqueEndpointIds = exports.validateUniqueEndpoints = exports.EndpointConfigSchema = exports.PathSchema = exports.validateUniqueScenarioIds = exports.ScenarioConfigSchema = exports.DelaySchema = exports.ResponseBodySchema = exports.NameSchema = exports.IdSchema = exports.HttpHeadersSchema = exports.HttpStatusCodeSchema = exports.HttpMethodSchema = void 0;
4
+ // HTTP schemas
5
+ var http_schema_js_1 = require("./http.schema.js");
6
+ Object.defineProperty(exports, "HttpMethodSchema", { enumerable: true, get: function () { return http_schema_js_1.HttpMethodSchema; } });
7
+ Object.defineProperty(exports, "HttpStatusCodeSchema", { enumerable: true, get: function () { return http_schema_js_1.HttpStatusCodeSchema; } });
8
+ Object.defineProperty(exports, "HttpHeadersSchema", { enumerable: true, get: function () { return http_schema_js_1.HttpHeadersSchema; } });
9
+ // Scenario schemas
10
+ var scenario_schema_js_1 = require("./scenario.schema.js");
11
+ Object.defineProperty(exports, "IdSchema", { enumerable: true, get: function () { return scenario_schema_js_1.IdSchema; } });
12
+ Object.defineProperty(exports, "NameSchema", { enumerable: true, get: function () { return scenario_schema_js_1.NameSchema; } });
13
+ Object.defineProperty(exports, "ResponseBodySchema", { enumerable: true, get: function () { return scenario_schema_js_1.ResponseBodySchema; } });
14
+ Object.defineProperty(exports, "DelaySchema", { enumerable: true, get: function () { return scenario_schema_js_1.DelaySchema; } });
15
+ Object.defineProperty(exports, "ScenarioConfigSchema", { enumerable: true, get: function () { return scenario_schema_js_1.ScenarioConfigSchema; } });
16
+ Object.defineProperty(exports, "validateUniqueScenarioIds", { enumerable: true, get: function () { return scenario_schema_js_1.validateUniqueScenarioIds; } });
17
+ // Endpoint schemas
18
+ var endpoint_schema_js_1 = require("./endpoint.schema.js");
19
+ Object.defineProperty(exports, "PathSchema", { enumerable: true, get: function () { return endpoint_schema_js_1.PathSchema; } });
20
+ Object.defineProperty(exports, "EndpointConfigSchema", { enumerable: true, get: function () { return endpoint_schema_js_1.EndpointConfigSchema; } });
21
+ Object.defineProperty(exports, "validateUniqueEndpoints", { enumerable: true, get: function () { return endpoint_schema_js_1.validateUniqueEndpoints; } });
22
+ Object.defineProperty(exports, "validateUniqueEndpointIds", { enumerable: true, get: function () { return endpoint_schema_js_1.validateUniqueEndpointIds; } });
23
+ // Flow schemas
24
+ var flow_schema_js_1 = require("./flow.schema.js");
25
+ Object.defineProperty(exports, "FlowConfigSchema", { enumerable: true, get: function () { return flow_schema_js_1.FlowConfigSchema; } });
26
+ Object.defineProperty(exports, "validateUniqueFlowIds", { enumerable: true, get: function () { return flow_schema_js_1.validateUniqueFlowIds; } });
27
+ Object.defineProperty(exports, "validateFlowReferences", { enumerable: true, get: function () { return flow_schema_js_1.validateFlowReferences; } });
28
+ // Configuration validator
29
+ var config_validator_js_1 = require("./config.validator.js");
30
+ Object.defineProperty(exports, "validateEndpoint", { enumerable: true, get: function () { return config_validator_js_1.validateEndpoint; } });
31
+ Object.defineProperty(exports, "validateFlow", { enumerable: true, get: function () { return config_validator_js_1.validateFlow; } });
32
+ Object.defineProperty(exports, "validateConfiguration", { enumerable: true, get: function () { return config_validator_js_1.validateConfiguration; } });
33
+ Object.defineProperty(exports, "formatValidationErrors", { enumerable: true, get: function () { return config_validator_js_1.formatValidationErrors; } });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":";;;AAAA,eAAe;AACf,mDAK0B;AAJxB,kHAAA,gBAAgB,OAAA;AAChB,sHAAA,oBAAoB,OAAA;AACpB,mHAAA,iBAAiB,OAAA;AAInB,mBAAmB;AACnB,2DAS8B;AAR5B,8GAAA,QAAQ,OAAA;AACR,gHAAA,UAAU,OAAA;AACV,wHAAA,kBAAkB,OAAA;AAClB,iHAAA,WAAW,OAAA;AACX,0HAAA,oBAAoB,OAAA;AACpB,+HAAA,yBAAyB,OAAA;AAK3B,mBAAmB;AACnB,2DAM8B;AAL5B,gHAAA,UAAU,OAAA;AACV,0HAAA,oBAAoB,OAAA;AACpB,6HAAA,uBAAuB,OAAA;AACvB,+HAAA,yBAAyB,OAAA;AAI3B,eAAe;AACf,mDAK0B;AAJxB,kHAAA,gBAAgB,OAAA;AAChB,uHAAA,qBAAqB,OAAA;AACrB,wHAAA,sBAAsB,OAAA;AAIxB,0BAA0B;AAC1B,6DAO+B;AAN7B,uHAAA,gBAAgB,OAAA;AAChB,mHAAA,YAAY,OAAA;AACZ,4HAAA,qBAAqB,OAAA;AACrB,6HAAA,sBAAsB,OAAA"}
@@ -0,0 +1,54 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Identifier pattern: lowercase alphanumeric with hyphens
4
+ */
5
+ export declare const IdSchema: z.ZodString;
6
+ /**
7
+ * Human-readable name
8
+ */
9
+ export declare const NameSchema: z.ZodString;
10
+ /**
11
+ * Response body can be any JSON-serializable value or a function
12
+ * that receives the request and returns a response body
13
+ */
14
+ export declare const ResponseBodySchema: z.ZodUnion<[z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodArray<z.ZodUnknown, "many">, z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodFunction<z.ZodTuple<[z.ZodAny], z.ZodUnknown>, z.ZodAny>]>;
15
+ export type ResponseBody = z.infer<typeof ResponseBodySchema>;
16
+ /**
17
+ * Response delay in milliseconds (0-30000ms max to prevent hanging)
18
+ */
19
+ export declare const DelaySchema: z.ZodOptional<z.ZodNumber>;
20
+ /**
21
+ * Scenario configuration schema
22
+ * Defines a single response scenario for an endpoint
23
+ */
24
+ export declare const ScenarioConfigSchema: z.ZodObject<{
25
+ id: z.ZodString;
26
+ name: z.ZodString;
27
+ status: z.ZodNumber;
28
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
29
+ body: z.ZodUnion<[z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodArray<z.ZodUnknown, "many">, z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodFunction<z.ZodTuple<[z.ZodAny], z.ZodUnknown>, z.ZodAny>]>;
30
+ delay: z.ZodOptional<z.ZodNumber>;
31
+ }, "strip", z.ZodTypeAny, {
32
+ status: number;
33
+ id: string;
34
+ name: string;
35
+ body: string | number | boolean | unknown[] | Record<string, unknown> | ((args_0: any, ...args: unknown[]) => any) | null;
36
+ headers?: Record<string, string> | undefined;
37
+ delay?: number | undefined;
38
+ }, {
39
+ status: number;
40
+ id: string;
41
+ name: string;
42
+ body: string | number | boolean | unknown[] | Record<string, unknown> | ((args_0: any, ...args: unknown[]) => any) | null;
43
+ headers?: Record<string, string> | undefined;
44
+ delay?: number | undefined;
45
+ }>;
46
+ export type ScenarioConfig = z.infer<typeof ScenarioConfigSchema>;
47
+ /**
48
+ * Validates that scenario IDs are unique within an array
49
+ */
50
+ export declare function validateUniqueScenarioIds(scenarios: ScenarioConfig[]): {
51
+ valid: boolean;
52
+ duplicates: string[];
53
+ };
54
+ //# sourceMappingURL=scenario.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/scenario.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,eAAO,MAAM,QAAQ,aAOlB,CAAC;AAEJ;;GAEG;AACH,eAAO,MAAM,UAAU,aAIW,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,kBAAkB,0MAQ7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,WAAW,4BAMqB,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;EAO/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,cAAc,EAAE,GAC1B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAgB1C"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ScenarioConfigSchema = exports.DelaySchema = exports.ResponseBodySchema = exports.NameSchema = exports.IdSchema = void 0;
4
+ exports.validateUniqueScenarioIds = validateUniqueScenarioIds;
5
+ const zod_1 = require("zod");
6
+ const http_schema_js_1 = require("./http.schema.js");
7
+ /**
8
+ * Identifier pattern: lowercase alphanumeric with hyphens
9
+ */
10
+ exports.IdSchema = zod_1.z
11
+ .string()
12
+ .min(1)
13
+ .max(100)
14
+ .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, 'ID must be lowercase alphanumeric with hyphens (e.g., "get-user-data")');
15
+ /**
16
+ * Human-readable name
17
+ */
18
+ exports.NameSchema = zod_1.z
19
+ .string()
20
+ .min(1)
21
+ .max(200)
22
+ .describe('Human-readable name');
23
+ /**
24
+ * Response body can be any JSON-serializable value or a function
25
+ * that receives the request and returns a response body
26
+ */
27
+ exports.ResponseBodySchema = zod_1.z.union([
28
+ zod_1.z.record(zod_1.z.unknown()),
29
+ zod_1.z.array(zod_1.z.unknown()),
30
+ zod_1.z.string(),
31
+ zod_1.z.number(),
32
+ zod_1.z.boolean(),
33
+ zod_1.z.null(),
34
+ zod_1.z.function().args(zod_1.z.any()).returns(zod_1.z.any()),
35
+ ]);
36
+ /**
37
+ * Response delay in milliseconds (0-30000ms max to prevent hanging)
38
+ */
39
+ exports.DelaySchema = zod_1.z
40
+ .number()
41
+ .int()
42
+ .min(0)
43
+ .max(30000)
44
+ .optional()
45
+ .describe('Response delay in milliseconds');
46
+ /**
47
+ * Scenario configuration schema
48
+ * Defines a single response scenario for an endpoint
49
+ */
50
+ exports.ScenarioConfigSchema = zod_1.z.object({
51
+ id: exports.IdSchema.describe('Unique scenario identifier'),
52
+ name: exports.NameSchema.describe('Human-readable scenario name'),
53
+ status: http_schema_js_1.HttpStatusCodeSchema,
54
+ headers: http_schema_js_1.HttpHeadersSchema,
55
+ body: exports.ResponseBodySchema.describe('Response body'),
56
+ delay: exports.DelaySchema,
57
+ });
58
+ /**
59
+ * Validates that scenario IDs are unique within an array
60
+ */
61
+ function validateUniqueScenarioIds(scenarios) {
62
+ const ids = scenarios.map((s) => s.id);
63
+ const seen = new Set();
64
+ const duplicates = [];
65
+ for (const id of ids) {
66
+ if (seen.has(id)) {
67
+ duplicates.push(id);
68
+ }
69
+ seen.add(id);
70
+ }
71
+ return {
72
+ valid: duplicates.length === 0,
73
+ duplicates: [...new Set(duplicates)],
74
+ };
75
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario.schema.js","sourceRoot":"","sources":["../../src/schemas/scenario.schema.ts"],"names":[],"mappings":";;;AAqEA,8DAkBC;AAvFD,6BAAwB;AACxB,qDAA2E;AAE3E;;GAEG;AACU,QAAA,QAAQ,GAAG,OAAC;KACtB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,KAAK,CACJ,4BAA4B,EAC5B,wEAAwE,CACzE,CAAC;AAEJ;;GAEG;AACU,QAAA,UAAU,GAAG,OAAC;KACxB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,QAAQ,CAAC,qBAAqB,CAAC,CAAC;AAEnC;;;GAGG;AACU,QAAA,kBAAkB,GAAG,OAAC,CAAC,KAAK,CAAC;IACxC,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC;IACrB,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC;IACpB,OAAC,CAAC,MAAM,EAAE;IACV,OAAC,CAAC,MAAM,EAAE;IACV,OAAC,CAAC,OAAO,EAAE;IACX,OAAC,CAAC,IAAI,EAAE;IACR,OAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAC,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,OAAC,CAAC,GAAG,EAAE,CAAC;CAC5C,CAAC,CAAC;AAIH;;GAEG;AACU,QAAA,WAAW,GAAG,OAAC;KACzB,MAAM,EAAE;KACR,GAAG,EAAE;KACL,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,KAAK,CAAC;KACV,QAAQ,EAAE;KACV,QAAQ,CAAC,gCAAgC,CAAC,CAAC;AAE9C;;;GAGG;AACU,QAAA,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,EAAE,EAAE,gBAAQ,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACnD,IAAI,EAAE,kBAAU,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACzD,MAAM,EAAE,qCAAoB;IAC5B,OAAO,EAAE,kCAAiB;IAC1B,IAAI,EAAE,0BAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC;IAClD,KAAK,EAAE,mBAAW;CACnB,CAAC,CAAC;AAIH;;GAEG;AACH,SAAgB,yBAAyB,CACvC,SAA2B;IAE3B,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACjB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;IAED,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,MAAM,KAAK,CAAC;QAC9B,UAAU,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;KACrC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mock-server-app.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-server-app.test.d.ts","sourceRoot":"","sources":["../../../src/server/__tests__/mock-server-app.test.ts"],"names":[],"mappings":""}