@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.
- package/README.md +643 -0
- package/dist/__tests__/mock-server.test.d.ts +5 -0
- package/dist/__tests__/mock-server.test.d.ts.map +1 -0
- package/dist/__tests__/mock-server.test.js +599 -0
- package/dist/__tests__/mock-server.test.js.map +1 -0
- package/dist/admin/__tests__/admin-router.test.d.ts +2 -0
- package/dist/admin/__tests__/admin-router.test.d.ts.map +1 -0
- package/dist/admin/__tests__/admin-router.test.js +621 -0
- package/dist/admin/__tests__/admin-router.test.js.map +1 -0
- package/dist/admin/admin-router.d.ts +27 -0
- package/dist/admin/admin-router.d.ts.map +1 -0
- package/dist/admin/admin-router.js +616 -0
- package/dist/admin/admin-router.js.map +1 -0
- package/dist/admin/index.d.ts +4 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +10 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/types.d.ts +185 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +33 -0
- package/dist/admin/types.js.map +1 -0
- package/dist/config/__tests__/config-discovery.test.d.ts +2 -0
- package/dist/config/__tests__/config-discovery.test.d.ts.map +1 -0
- package/dist/config/__tests__/config-discovery.test.js +52 -0
- package/dist/config/__tests__/config-discovery.test.js.map +1 -0
- package/dist/config/__tests__/config-loader.test.d.ts +2 -0
- package/dist/config/__tests__/config-loader.test.d.ts.map +1 -0
- package/dist/config/__tests__/config-loader.test.js +124 -0
- package/dist/config/__tests__/config-loader.test.js.map +1 -0
- package/dist/config/__tests__/file-loader.test.d.ts +2 -0
- package/dist/config/__tests__/file-loader.test.d.ts.map +1 -0
- package/dist/config/__tests__/file-loader.test.js +63 -0
- package/dist/config/__tests__/file-loader.test.js.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.d.ts +25 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.d.ts.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.js +25 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.js.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.d.ts +11 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.d.ts.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.js +11 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.js.map +1 -0
- package/dist/config/config-discovery.d.ts +23 -0
- package/dist/config/config-discovery.d.ts.map +1 -0
- package/dist/config/config-discovery.js +60 -0
- package/dist/config/config-discovery.js.map +1 -0
- package/dist/config/config-loader.d.ts +56 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +162 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-writer.d.ts +96 -0
- package/dist/config/config-writer.d.ts.map +1 -0
- package/dist/config/config-writer.js +248 -0
- package/dist/config/config-writer.js.map +1 -0
- package/dist/config/file-loader.d.ts +16 -0
- package/dist/config/file-loader.d.ts.map +1 -0
- package/dist/config/file-loader.js +90 -0
- package/dist/config/file-loader.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +23 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +47 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +7 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/mock-server.d.ts +243 -0
- package/dist/mock-server.d.ts.map +1 -0
- package/dist/mock-server.js +387 -0
- package/dist/mock-server.js.map +1 -0
- package/dist/resolver/__tests__/response-resolver.test.d.ts +2 -0
- package/dist/resolver/__tests__/response-resolver.test.d.ts.map +1 -0
- package/dist/resolver/__tests__/response-resolver.test.js +358 -0
- package/dist/resolver/__tests__/response-resolver.test.js.map +1 -0
- package/dist/resolver/index.d.ts +4 -0
- package/dist/resolver/index.d.ts.map +1 -0
- package/dist/resolver/index.js +9 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/response-resolver.d.ts +73 -0
- package/dist/resolver/response-resolver.d.ts.map +1 -0
- package/dist/resolver/response-resolver.js +167 -0
- package/dist/resolver/response-resolver.js.map +1 -0
- package/dist/resolver/types.d.ts +47 -0
- package/dist/resolver/types.d.ts.map +1 -0
- package/dist/resolver/types.js +9 -0
- package/dist/resolver/types.js.map +1 -0
- package/dist/schemas/__tests__/config.validator.test.d.ts +2 -0
- package/dist/schemas/__tests__/config.validator.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/config.validator.test.js +66 -0
- package/dist/schemas/__tests__/config.validator.test.js.map +1 -0
- package/dist/schemas/__tests__/endpoint.schema.test.d.ts +2 -0
- package/dist/schemas/__tests__/endpoint.schema.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/endpoint.schema.test.js +103 -0
- package/dist/schemas/__tests__/endpoint.schema.test.js.map +1 -0
- package/dist/schemas/__tests__/flow.schema.test.d.ts +2 -0
- package/dist/schemas/__tests__/flow.schema.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/flow.schema.test.js +92 -0
- package/dist/schemas/__tests__/flow.schema.test.js.map +1 -0
- package/dist/schemas/config.validator.d.ts +39 -0
- package/dist/schemas/config.validator.d.ts.map +1 -0
- package/dist/schemas/config.validator.js +117 -0
- package/dist/schemas/config.validator.js.map +1 -0
- package/dist/schemas/endpoint.schema.d.ts +108 -0
- package/dist/schemas/endpoint.schema.d.ts.map +1 -0
- package/dist/schemas/endpoint.schema.js +87 -0
- package/dist/schemas/endpoint.schema.js.map +1 -0
- package/dist/schemas/flow.schema.d.ts +46 -0
- package/dist/schemas/flow.schema.d.ts.map +1 -0
- package/dist/schemas/flow.schema.js +73 -0
- package/dist/schemas/flow.schema.js.map +1 -0
- package/dist/schemas/http.schema.d.ts +15 -0
- package/dist/schemas/http.schema.d.ts.map +1 -0
- package/dist/schemas/http.schema.js +32 -0
- package/dist/schemas/http.schema.js.map +1 -0
- package/dist/schemas/index.d.ts +6 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +33 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/scenario.schema.d.ts +54 -0
- package/dist/schemas/scenario.schema.d.ts.map +1 -0
- package/dist/schemas/scenario.schema.js +75 -0
- package/dist/schemas/scenario.schema.js.map +1 -0
- package/dist/server/__tests__/mock-server-app.test.d.ts +2 -0
- package/dist/server/__tests__/mock-server-app.test.d.ts.map +1 -0
- package/dist/server/__tests__/mock-server-app.test.js +296 -0
- package/dist/server/__tests__/mock-server-app.test.js.map +1 -0
- package/dist/server/index.d.ts +4 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +10 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/mock-server-app.d.ts +119 -0
- package/dist/server/mock-server-app.d.ts.map +1 -0
- package/dist/server/mock-server-app.js +304 -0
- package/dist/server/mock-server-app.js.map +1 -0
- package/dist/server/types.d.ts +38 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +11 -0
- package/dist/server/types.js.map +1 -0
- package/dist/state/__tests__/state-manager.test.d.ts +2 -0
- package/dist/state/__tests__/state-manager.test.d.ts.map +1 -0
- package/dist/state/__tests__/state-manager.test.js +275 -0
- package/dist/state/__tests__/state-manager.test.js.map +1 -0
- package/dist/state/index.d.ts +3 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +7 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/state-manager.d.ts +92 -0
- package/dist/state/state-manager.d.ts.map +1 -0
- package/dist/state/state-manager.js +198 -0
- package/dist/state/state-manager.js.map +1 -0
- package/dist/state/types.d.ts +30 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/state/types.js +2 -0
- package/dist/state/types.js.map +1 -0
- package/dist/ui/assets/index-SADMOgPE.js +10 -0
- package/dist/ui/assets/index-rj7m-XdG.css +1 -0
- package/dist/ui/index.html +29 -0
- package/dist/watcher/__tests__/config-watcher.test.d.ts +2 -0
- package/dist/watcher/__tests__/config-watcher.test.d.ts.map +1 -0
- package/dist/watcher/__tests__/config-watcher.test.js +372 -0
- package/dist/watcher/__tests__/config-watcher.test.js.map +1 -0
- package/dist/watcher/config-watcher.d.ts +100 -0
- package/dist/watcher/config-watcher.d.ts.map +1 -0
- package/dist/watcher/config-watcher.js +358 -0
- package/dist/watcher/config-watcher.js.map +1 -0
- package/dist/watcher/index.d.ts +7 -0
- package/dist/watcher/index.d.ts.map +1 -0
- package/dist/watcher/index.js +8 -0
- package/dist/watcher/index.js.map +1 -0
- package/dist/watcher/types.d.ts +64 -0
- package/dist/watcher/types.d.ts.map +1 -0
- package/dist/watcher/types.js +15 -0
- package/dist/watcher/types.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"mock-server-app.test.d.ts","sourceRoot":"","sources":["../../../src/server/__tests__/mock-server-app.test.ts"],"names":[],"mappings":""}
|