@zahid15/mockline 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/CODE_OF_CONDUCT.md +20 -0
- package/CONTRIBUTING.md +27 -0
- package/LICENSE +21 -0
- package/README.md +364 -2
- package/SECURITY.md +28 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.js +3628 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +1057 -0
- package/dist/index.js +3241 -0
- package/dist/index.js.map +1 -0
- package/docs/architecture.md +70 -0
- package/docs/behavior.md +31 -0
- package/docs/benchmark.md +47 -0
- package/docs/config.schema.json +508 -0
- package/docs/configuration.md +214 -0
- package/docs/generation.md +26 -0
- package/docs/release.md +32 -0
- package/docs/screenshots/demo.png +0 -0
- package/docs/stateful.md +19 -0
- package/examples/README.md +21 -0
- package/examples/docker/compose.yaml +7 -0
- package/examples/petstore/mockline.yaml +43 -0
- package/examples/petstore/openapi.yaml +169 -0
- package/examples/programmatic.ts +23 -0
- package/examples/workflows/e2e.yml +24 -0
- package/package.json +98 -4
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/schema.ts","../src/errors.ts","../src/config/load.ts","../src/logger.ts","../src/spec/load.ts","../src/router.ts","../src/spec/summary.ts","../src/generate/rng.ts","../src/ajv.ts","../src/generate/hints.ts","../src/generate/schema.ts","../src/select.ts","../src/record.ts","../src/inspector.ts","../src/state/collections.ts","../src/state/store.ts","../src/proxy.ts","../src/validate.ts","../src/server.ts","../src/cli.ts"],"names":["path","parseYaml","hasExample","json","readFile","isRecord","resolve","resolveSchema","mkdir","dirname","headerValue","schemaType","isIP","requestHeaders","url","sleep","watchFiles","parseInteger","existsSync","writeFile","pc"],"mappings":"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","file":"cli.js","sourcesContent":["import { z } from 'zod';\n\nconst nonNegative = z.number().finite().min(0);\nconst responseShape = z.object({\n status: z.number().int().min(100).max(599).optional(),\n body: z.unknown().optional(),\n headers: z.record(z.string()).optional(),\n delay: nonNegative.optional(),\n});\n\nconst conditionSchema = z.object({\n location: z.enum(['query', 'header', 'body']),\n name: z.string().min(1),\n op: z.enum(['eq', 'contains', 'regex']).default('eq'),\n value: z.unknown(),\n});\n\nconst overrideSchema = z.object({\n status: z.number().int().min(100).max(599).optional(),\n body: z.unknown().optional(),\n headers: z.record(z.string()).optional(),\n delay: nonNegative.optional(),\n sequence: z.array(responseShape).min(1).optional(),\n loop: z.boolean().default(false),\n when: conditionSchema.optional(),\n response: responseShape.optional(),\n rules: z.array(z.object({ when: conditionSchema, response: responseShape })).optional(),\n});\n\nconst latencySchema = z.union([\n nonNegative,\n z.tuple([nonNegative, nonNegative]).refine(([min, max]) => min <= max, {\n message: 'range minimum must not exceed maximum',\n }),\n z\n .object({\n fixed: nonNegative.optional(),\n min: nonNegative.optional(),\n max: nonNegative.optional(),\n distribution: z.enum(['uniform', 'normal']).default('uniform'),\n })\n .refine(\n (value) => value.fixed !== undefined || (value.min !== undefined && value.max !== undefined),\n {\n message: 'provide fixed or both min and max',\n },\n )\n .refine(\n (value) => value.min === undefined || value.max === undefined || value.min <= value.max,\n {\n message: 'range minimum must not exceed maximum',\n path: ['min'],\n },\n ),\n]);\n\nexport const configSchema = z.object({\n port: z.number().int().min(0).max(65535).default(4010),\n host: z.string().min(1).default('127.0.0.1'),\n seed: z.number().int().optional(),\n prefer: z.enum(['example', 'generate']).default('example'),\n latency: latencySchema.default(0),\n errors: z\n .object({\n rate: z.number().min(0).max(1).default(0),\n statuses: z.array(z.number().int().min(400).max(599)).min(1).default([500, 503]),\n perOperationRates: z.record(z.number().min(0).max(1)).default({}),\n })\n .default({}),\n validate: z.enum(['off', 'warn', 'strict']).default('warn'),\n stateful: z\n .object({\n enabled: z.boolean().default(false),\n seedItems: z.number().int().min(0).default(3),\n idProperty: z.string().min(1).default('id'),\n })\n .default({}),\n overrides: z.record(overrideSchema).default({}),\n proxy: z\n .object({\n url: z\n .string()\n .url()\n .refine((value) => /^https?:\\/\\//i.test(value), {\n message: 'must use http or https',\n })\n .optional(),\n all: z.boolean().default(false),\n allowPrivate: z.boolean().default(false),\n timeoutMs: z.number().int().positive().default(5000),\n recordFile: z.string().optional(),\n })\n .refine((value) => !value.all || Boolean(value.url), {\n message: 'proxy.url is required when proxy.all is true',\n path: ['url'],\n })\n .default({}),\n cors: z\n .object({\n enabled: z.boolean().default(true),\n origins: z.array(z.string()).default(['*']),\n })\n .default({}),\n recording: z\n .object({\n enabled: z.boolean().default(true),\n file: z.string().optional(),\n maxRequests: z.number().int().positive().default(500),\n redactHeaders: z\n .array(z.string())\n .default(['authorization', 'cookie', 'set-cookie', 'x-api-key', 'api-key', 'x-auth-token']),\n })\n .default({}),\n generation: z\n .object({\n hints: z\n .union([\n z.boolean(),\n z.record(\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(z.union([z.string(), z.number(), z.boolean(), z.null()])),\n ]),\n ),\n ])\n .default(true),\n counter: z.boolean().default(false),\n maxDepth: z.number().int().min(0).max(20).default(3),\n minArrayItems: z.number().int().min(0).default(1),\n maxArrayItems: z.number().int().min(0).default(3),\n })\n .refine((value) => value.minArrayItems <= value.maxArrayItems, {\n message: 'minArrayItems must not exceed maxArrayItems',\n path: ['minArrayItems'],\n })\n .default({}),\n controlHeaders: z.object({ allow: z.boolean().default(true) }).default({}),\n inspector: z.object({ enabled: z.boolean().optional() }).default({}),\n enforceAuth: z.boolean().default(false),\n requestBodyLimit: z.number().int().positive().default(1_048_576),\n requestTimeoutMs: z.number().int().positive().default(30_000),\n});\n\nexport type MocklineConfig = z.infer<typeof configSchema>;\nexport type OverrideConfig = z.input<typeof overrideSchema>;\nexport type NormalizedOverrideConfig = MocklineConfig['overrides'][string];\nexport type OverrideResponseConfig = z.infer<typeof responseShape>;\nexport type ConditionConfig = z.infer<typeof conditionSchema>;\nexport type ConditionInput = z.input<typeof conditionSchema>;\n\nexport const defaultConfig: MocklineConfig = configSchema.parse({});\n","import type { JsonValue } from './types.js';\n\nexport type ErrorExitCode = 1 | 2 | 3;\n\nexport class MocklineError extends Error {\n readonly exitCode: ErrorExitCode;\n readonly details?: unknown;\n\n constructor(message: string, exitCode: ErrorExitCode = 3, details?: unknown) {\n super(message);\n this.name = 'MocklineError';\n this.exitCode = exitCode;\n this.details = details;\n }\n}\n\nexport interface ProblemDetails {\n type?: string;\n title: string;\n status: number;\n detail?: string;\n instance?: string;\n errors?: string[];\n [key: string]: JsonValue | undefined;\n}\n\nexport function problem(\n status: number,\n title: string,\n detail?: string,\n extra: Record<string, JsonValue> = {},\n): ProblemDetails {\n return {\n type: 'about:blank',\n title,\n status,\n ...(detail ? { detail } : {}),\n ...extra,\n };\n}\n","import { readFile } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { extname, resolve } from 'node:path';\nimport { parse as parseYaml } from 'yaml';\nimport type { ZodError } from 'zod';\nimport { configSchema, type MocklineConfig } from './schema.js';\nimport { MocklineError } from '../errors.js';\n\nexport function formatConfigErrors(error: ZodError): string {\n return error.issues\n .map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join('.') : '<root>';\n return `${path}: ${issue.message}`;\n })\n .join('\\n');\n}\n\nexport async function parseConfigText(\n text: string,\n fileName = 'mockline.yaml',\n): Promise<MocklineConfig> {\n let raw: unknown;\n try {\n raw =\n extname(fileName).toLowerCase() === '.json' ? (JSON.parse(text) as unknown) : parseYaml(text);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new MocklineError(`Invalid config ${fileName}: ${reason}`, 1);\n }\n const parsed = configSchema.safeParse(raw);\n if (!parsed.success) {\n throw new MocklineError(\n `Invalid config ${fileName}:\\n${formatConfigErrors(parsed.error)}`,\n 1,\n parsed.error,\n );\n }\n return parsed.data;\n}\n\nexport async function loadConfig(\n file?: string,\n): Promise<{ config: MocklineConfig; path?: string }> {\n const candidates = file\n ? [resolve(file)]\n : [resolve('mockline.yaml'), resolve('mockline.yml'), resolve('mockline.json')];\n const selected = candidates.find((candidate) => existsSync(candidate));\n if (!selected) {\n if (file) throw new MocklineError(`Config file not found: ${file}`, 1);\n return { config: configSchema.parse({}) };\n }\n let text: string;\n try {\n text = await readFile(selected, 'utf8');\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new MocklineError(`Cannot read config ${selected}: ${reason}`, 1);\n }\n return { config: await parseConfigText(text, selected), path: selected };\n}\n","import pc from 'picocolors';\n\nexport interface LoggerOptions {\n quiet?: boolean;\n verbose?: boolean;\n color?: boolean;\n}\n\nexport interface Logger {\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n debug(message: string): void;\n}\n\nexport function createLogger(options: LoggerOptions = {}): Logger {\n const quiet = options.quiet ?? false;\n const verbose = options.verbose ?? false;\n const color = options.color ?? process.stdout.isTTY;\n const paint = (fn: (value: string) => string, value: string): string =>\n color ? fn(value) : value;\n return {\n info(message) {\n if (!quiet) console.log(paint(pc.cyan, 'mockline'), message);\n },\n warn(message) {\n if (!quiet) console.warn(paint(pc.yellow, 'warning'), message);\n },\n error(message) {\n console.error(paint(pc.red, 'error'), message);\n },\n debug(message) {\n if (verbose && !quiet) console.log(paint(pc.dim, 'debug'), message);\n },\n };\n}\n","import { readFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport SwaggerParser from '@apidevtools/swagger-parser';\nimport { parse as parseYaml } from 'yaml';\nimport { MocklineError } from '../errors.js';\nimport type { OpenApiDocument, UnknownRecord } from '../types.js';\n\nexport interface SpecWarning {\n message: string;\n operationId?: string;\n path?: string;\n}\n\nexport interface LoadedSpec {\n file: string;\n document: OpenApiDocument;\n dereferenced: OpenApiDocument;\n warnings: SpecWarning[];\n}\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction operationEntries(\n document: OpenApiDocument,\n): Array<{ path: string; method: string; operation: UnknownRecord }> {\n const entries: Array<{ path: string; method: string; operation: UnknownRecord }> = [];\n const paths = document.paths ?? {};\n const methods = new Set(['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace']);\n for (const [routePath, pathItemUnknown] of Object.entries(paths)) {\n if (!isRecord(pathItemUnknown)) continue;\n for (const [method, operation] of Object.entries(pathItemUnknown)) {\n if (methods.has(method.toLowerCase()) && isRecord(operation)) {\n entries.push({ path: routePath, method: method.toUpperCase(), operation });\n }\n }\n }\n return entries;\n}\n\nfunction getResponseDetails(operation: UnknownRecord): { hasExample: boolean; hasSchema: boolean } {\n const responses = isRecord(operation.responses) ? operation.responses : {};\n let hasExample = false;\n let hasSchema = false;\n for (const responseUnknown of Object.values(responses)) {\n if (!isRecord(responseUnknown) || !isRecord(responseUnknown.content)) continue;\n for (const mediaUnknown of Object.values(responseUnknown.content)) {\n if (!isRecord(mediaUnknown)) continue;\n if (\n 'example' in mediaUnknown ||\n (isRecord(mediaUnknown.examples) && Object.keys(mediaUnknown.examples).length > 0)\n ) {\n hasExample = true;\n }\n if (isRecord(mediaUnknown.schema)) hasSchema = true;\n }\n }\n return { hasExample, hasSchema };\n}\n\nexport function inspectSpec(document: OpenApiDocument): SpecWarning[] {\n const warnings: SpecWarning[] = [];\n for (const entry of operationEntries(document)) {\n const { hasExample, hasSchema } = getResponseDetails(entry.operation);\n const responses = isRecord(entry.operation.responses) ? entry.operation.responses : {};\n for (const response of Object.values(responses)) {\n if (!isRecord(response) || !isRecord(response.content)) continue;\n for (const [mediaType, media] of Object.entries(response.content)) {\n if (!isRecord(media)) continue;\n const json = mediaType.toLowerCase().includes('json');\n const schema = isRecord(media.schema) ? media.schema : undefined;\n const hasMediaExample =\n 'example' in media ||\n (isRecord(media.examples) && Object.keys(media.examples).length > 0) ||\n Boolean(\n schema &&\n ('example' in schema || (Array.isArray(schema.examples) && schema.examples.length > 0)),\n );\n if (!json && !hasMediaExample)\n warnings.push({\n message: `Mockline cannot generate ${mediaType} responses; add an example.`,\n path: entry.path,\n });\n }\n }\n if (!hasExample && !hasSchema) {\n warnings.push({\n message: 'No response schema or example; Mockline can only return an empty/default body.',\n operationId:\n typeof entry.operation.operationId === 'string' ? entry.operation.operationId : undefined,\n path: entry.path,\n });\n }\n if (entry.operation.callbacks)\n warnings.push({ message: 'Callbacks are not supported.', path: entry.path });\n if (entry.operation.links)\n warnings.push({\n message: 'Response links are ignored by the mock server.',\n path: entry.path,\n });\n }\n if (\n document.webhooks &&\n isRecord(document.webhooks) &&\n Object.keys(document.webhooks).length > 0\n ) {\n warnings.push({ message: 'Webhooks are not served by Mockline.' });\n }\n return warnings;\n}\n\nexport async function loadSpec(file: string): Promise<LoadedSpec> {\n const absoluteFile = path.resolve(file);\n let text: string;\n try {\n text = await readFile(absoluteFile, 'utf8');\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new MocklineError(`Cannot read OpenAPI spec ${file}: ${reason}`, 1);\n }\n let parsed: unknown;\n try {\n parsed = /\\.json$/i.test(absoluteFile) ? (JSON.parse(text) as unknown) : parseYaml(text);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new MocklineError(`Cannot parse OpenAPI spec ${file}: ${reason}`, 1);\n }\n if (!isRecord(parsed))\n throw new MocklineError('OpenAPI document must be a YAML or JSON object.', 1);\n if (parsed.swagger === '2.0' || 'swagger' in parsed) {\n throw new MocklineError(\n 'Swagger 2.0 is not supported. Convert the document to OpenAPI 3.x (for example, with swagger2openapi) and try again.',\n 1,\n );\n }\n if (typeof parsed.openapi !== 'string' || !parsed.openapi.startsWith('3.')) {\n throw new MocklineError('Only OpenAPI 3.0 and 3.1 documents are supported.', 1);\n }\n\n let dereferenced: OpenApiDocument;\n try {\n const parser = new SwaggerParser();\n dereferenced = (await parser.validate(absoluteFile, {\n dereference: { circular: 'ignore' },\n })) as unknown as OpenApiDocument;\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new MocklineError(`Invalid OpenAPI spec ${file}: ${reason}`, 1, error);\n }\n const document = dereferenced;\n const warnings = inspectSpec(document);\n return { file: absoluteFile, document, dereferenced, warnings };\n}\n","import type {\n ApiOperation,\n ApiParameter,\n ApiPathItem,\n MatchedRoute,\n OpenApiDocument,\n UnknownRecord,\n} from './types.js';\n\nconst HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const;\n\ninterface CompiledRoute extends MatchedRoute {\n regex: RegExp;\n parameterNames: string[];\n staticSegments: number;\n}\n\nexport interface RouteMatch {\n route: MatchedRoute;\n params: Record<string, string>;\n}\n\nexport interface Router {\n routes: MatchedRoute[];\n match(method: string, pathname: string): RouteMatch | undefined;\n methodsForPath(pathname: string): string[];\n nearestPath(pathname: string): string | undefined;\n}\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function normalizePath(value: string): string {\n if (value === '' || value === '/') return '/';\n const withLeadingSlash = value.startsWith('/') ? value : `/${value}`;\n const trimmed = withLeadingSlash.replace(/\\/+$/, '');\n return trimmed || '/';\n}\n\nfunction replaceServerVariables(\n url: string,\n variables: Record<string, { default?: string }> | undefined,\n): string {\n return url.replace(/\\{([^}]+)\\}/g, (_match, name: string) =>\n encodeURIComponent(variables?.[name]?.default ?? ''),\n );\n}\n\nfunction serverPath(url: string, variables?: Record<string, { default?: string }>): string {\n const replaced = replaceServerVariables(url, variables);\n try {\n return normalizePath(new URL(replaced, 'http://mockline.local').pathname);\n } catch {\n return '/';\n }\n}\n\nfunction routeForPath(base: string, pathTemplate: string): string {\n const cleanBase = base === '/' ? '' : normalizePath(base);\n const cleanPath = normalizePath(pathTemplate);\n return normalizePath(`${cleanBase}${cleanPath === '/' ? '' : cleanPath}`);\n}\n\nfunction compilePath(template: string): {\n regex: RegExp;\n parameterNames: string[];\n staticSegments: number;\n score: number;\n} {\n const normalized = normalizePath(template);\n const parts = normalized.split('/').filter(Boolean);\n const names: string[] = [];\n let staticSegments = 0;\n const pattern = parts\n .map((part) => {\n const match = /^\\{([^{}]+)\\}$/.exec(part);\n if (match) {\n names.push(match[1] ?? '');\n return '([^/]+)';\n }\n staticSegments += 1;\n return part.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n })\n .join('/');\n const regex = new RegExp(`^/${pattern}${parts.length === 0 ? '' : ''}/?$`);\n return {\n regex,\n parameterNames: names,\n staticSegments,\n score: staticSegments * 100 + parts.length,\n };\n}\n\nfunction toMatchedRoute(route: CompiledRoute): MatchedRoute {\n return {\n method: route.method,\n path: route.path,\n routePath: route.routePath,\n operationId: route.operationId,\n operation: route.operation,\n pathItem: route.pathItem,\n parameters: route.parameters,\n score: route.score,\n };\n}\n\nfunction operationId(operation: ApiOperation, method: string, path: string): string {\n return typeof operation.operationId === 'string' && operation.operationId.length > 0\n ? operation.operationId\n : `${method.toLowerCase()}_${path.replace(/[^a-zA-Z0-9]+/g, '_').replace(/^_|_$/g, '') || 'root'}`;\n}\n\nfunction combineParameters(pathItem: ApiPathItem, operation: ApiOperation): ApiParameter[] {\n const merged = new Map<string, ApiParameter>();\n for (const parameter of [...(pathItem.parameters ?? []), ...(operation.parameters ?? [])]) {\n if (parameter && typeof parameter.name === 'string' && typeof parameter.in === 'string') {\n merged.set(\n `${parameter.in}:${parameter.in === 'header' ? parameter.name.toLowerCase() : parameter.name}`,\n parameter,\n );\n }\n }\n return [...merged.values()];\n}\n\nexport function createRouter(document: OpenApiDocument): Router {\n const routes: CompiledRoute[] = [];\n const paths = document.paths ?? {};\n for (const [pathTemplate, pathItemUnknown] of Object.entries(paths)) {\n if (!isRecord(pathItemUnknown)) continue;\n const pathItem = pathItemUnknown as ApiPathItem;\n for (const method of HTTP_METHODS) {\n const operationUnknown = pathItemUnknown[method];\n if (!isRecord(operationUnknown)) continue;\n const operation = operationUnknown as ApiOperation;\n const operationServers = Array.isArray(operation.servers)\n ? (operation.servers as Array<{\n url: string;\n variables?: Record<string, { default?: string }>;\n }>)\n : undefined;\n const pathServers = Array.isArray(pathItem.servers)\n ? (pathItem.servers as Array<{\n url: string;\n variables?: Record<string, { default?: string }>;\n }>)\n : undefined;\n const servers = operationServers ?? pathServers ?? document.servers ?? [];\n const bases =\n servers.length > 0\n ? servers.map((server) => serverPath(server.url, server.variables))\n : ['/'];\n for (const base of bases) {\n const routePath = routeForPath(base, pathTemplate);\n const compiled = compilePath(routePath);\n routes.push({\n method: method.toUpperCase(),\n path: routePath,\n routePath,\n operationId: operationId(operation, method, routePath),\n operation,\n pathItem,\n parameters: combineParameters(pathItem, operation),\n score: compiled.score,\n regex: compiled.regex,\n parameterNames: compiled.parameterNames,\n staticSegments: compiled.staticSegments,\n });\n }\n }\n }\n routes.sort(\n (a, b) =>\n b.staticSegments - a.staticSegments || b.score - a.score || a.path.localeCompare(b.path),\n );\n const publicRoutes = routes.map(toMatchedRoute);\n\n const matchesPath = (\n route: CompiledRoute,\n pathname: string,\n ): Record<string, string> | undefined => {\n const normalized = normalizePath(pathname);\n const match = route.regex.exec(normalized);\n if (!match) return undefined;\n const values: Record<string, string> = {};\n for (const [index, name] of route.parameterNames.entries()) {\n const encoded = match[index + 1];\n if (encoded === undefined) continue;\n try {\n values[name] = decodeURIComponent(encoded);\n } catch {\n return undefined;\n }\n }\n return values;\n };\n\n return {\n routes: publicRoutes,\n match(method, pathname) {\n const upper = method.toUpperCase();\n for (const route of routes) {\n if (route.method !== upper) continue;\n const params = matchesPath(route, pathname);\n if (params) {\n return { route: toMatchedRoute(route), params };\n }\n }\n return undefined;\n },\n methodsForPath(pathname) {\n const methods = new Set<string>();\n for (const route of routes) if (matchesPath(route, pathname)) methods.add(route.method);\n return [...methods].sort();\n },\n nearestPath(pathname) {\n const normalized = normalizePath(pathname);\n let best: { route: CompiledRoute; distance: number } | undefined;\n for (const route of routes) {\n const routeParts = route.path.split('/').filter(Boolean);\n const actualParts = normalized.split('/').filter(Boolean);\n let common = 0;\n for (let i = 0; i < Math.min(routeParts.length, actualParts.length); i += 1) {\n if (routeParts[i] === actualParts[i] || /^\\{[^{}]+\\}$/.test(routeParts[i] ?? ''))\n common += 1;\n else break;\n }\n const distance = common * 10 - Math.abs(routeParts.length - actualParts.length);\n if (!best || distance > best.distance) best = { route, distance };\n }\n return best?.route.path;\n },\n };\n}\n","import type { LoadedSpec } from './load.js';\nimport { createRouter } from '../router.js';\nimport type { ApiResponse, SummaryOperation } from '../types.js';\n\nexport function defaultStatus(responses: Record<string, ApiResponse> | undefined): string {\n if (!responses || Object.keys(responses).length === 0) return '200';\n const success = Object.keys(responses)\n .filter((key) => /^2\\d\\d$/.test(key))\n .sort((a, b) => Number(a) - Number(b));\n if (success[0]) return success[0];\n if (responses.default) return 'default';\n return '200';\n}\n\nfunction hasExample(response: ApiResponse | undefined): boolean {\n if (!response?.content) return false;\n return Object.values(response.content).some(\n (media) =>\n 'example' in media ||\n Boolean(media.examples && Object.keys(media.examples).length > 0) ||\n Boolean(\n media.schema &&\n ('example' in media.schema ||\n (Array.isArray(media.schema.examples) && media.schema.examples.length > 0)),\n ),\n );\n}\n\nexport function summarizeSpec(spec: LoadedSpec, overrideKeys: string[] = []): SummaryOperation[] {\n const router = createRouter(spec.document);\n return router.routes.map((route) => {\n const responses = route.operation.responses;\n const status = defaultStatus(responses);\n const response = responses?.[status] ?? responses?.default;\n const override = overrideKeys.some(\n (key) =>\n key === route.operationId ||\n key.toUpperCase() === `${route.method} ${route.path}`.toUpperCase(),\n );\n const source: SummaryOperation['source'] = override\n ? 'override'\n : hasExample(response)\n ? 'example'\n : 'schema generation';\n return {\n method: route.method,\n path: route.path,\n operationId: route.operationId,\n defaultStatus: status,\n source,\n };\n });\n}\n","export function hashSeed(input: string | number): number {\n const text = String(input);\n let hash = 2166136261;\n for (let index = 0; index < text.length; index += 1) {\n hash ^= text.charCodeAt(index);\n hash = Math.imul(hash, 16777619);\n }\n return hash >>> 0;\n}\n\nexport function deriveSeed(seed: number | undefined, ...parts: Array<string | number>): number {\n return hashSeed(`${seed ?? 0}|${parts.join('|')}`);\n}\n\nexport class SeededRandom {\n private state: number;\n\n constructor(seed: number) {\n this.state = seed >>> 0 || 0x6d2b79f5;\n }\n\n next(): number {\n this.state = (this.state + 0x6d2b79f5) | 0;\n let value = this.state;\n value = Math.imul(value ^ (value >>> 15), value | 1);\n value ^= value + Math.imul(value ^ (value >>> 7), value | 61);\n return ((value ^ (value >>> 14)) >>> 0) / 4294967296;\n }\n\n int(min: number, max: number): number {\n const low = Math.ceil(min);\n const high = Math.floor(max);\n if (high <= low) return low;\n return low + Math.floor(this.next() * (high - low + 1));\n }\n\n float(min: number, max: number): number {\n if (max <= min) return min;\n return min + this.next() * (max - min);\n }\n\n bool(probability = 0.5): boolean {\n return this.next() < probability;\n }\n\n pick<T>(items: readonly T[]): T | undefined {\n if (items.length === 0) return undefined;\n return items[this.int(0, items.length - 1)];\n }\n}\n","import Ajv, { type ErrorObject, type ValidateFunction } from 'ajv';\nimport addFormats from 'ajv-formats';\nimport Ajv2020 from 'ajv/dist/2020.js';\nimport type { JsonSchema, OpenApiDocument } from './types.js';\n\nconst ROOT_ID = 'https://mockline.local/openapi.json';\n\nfunction cloneSchema(\n value: unknown,\n rootId: string,\n seen = new WeakMap<object, unknown>(),\n): unknown {\n if (Array.isArray(value)) return value.map((item) => cloneSchema(item, rootId, seen));\n if (typeof value !== 'object' || value === null) return value;\n const prior = seen.get(value);\n if (prior) return prior;\n const output: Record<string, unknown> = {};\n seen.set(value, output);\n for (const [key, child] of Object.entries(value)) {\n if (key === '$ref' && typeof child === 'string' && child.startsWith('#/')) {\n output[key] = `${rootId}${child}`;\n } else if ((key === 'exclusiveMinimum' || key === 'exclusiveMaximum') && child === false) {\n continue;\n } else if (key === 'exclusiveMinimum' && child === true) {\n // OpenAPI 3.0 encodes exclusivity as a boolean beside minimum.\n const parent = value as Record<string, unknown>;\n if (typeof parent.minimum === 'number') output.minimum = undefined;\n output[key] = typeof parent.minimum === 'number' ? parent.minimum : child;\n } else if (key === 'exclusiveMaximum' && child === true) {\n const parent = value as Record<string, unknown>;\n if (typeof parent.maximum === 'number') output.maximum = undefined;\n output[key] = typeof parent.maximum === 'number' ? parent.maximum : child;\n } else {\n output[key] = cloneSchema(child, rootId, seen);\n }\n }\n if (output.minimum === undefined) delete output.minimum;\n if (output.maximum === undefined) delete output.maximum;\n return output;\n}\n\nexport interface SchemaValidation {\n valid: boolean;\n errors: ErrorObject[];\n}\n\nexport function createValidator(root: OpenApiDocument, schema: JsonSchema): ValidateFunction {\n const Validator = root.openapi?.startsWith('3.1') ? Ajv2020 : Ajv;\n const ajv = new Validator({\n allErrors: true,\n strict: false,\n allowUnionTypes: true,\n validateFormats: true,\n });\n addFormats(ajv);\n try {\n ajv.addSchema(cloneSchema(root, ROOT_ID) as JsonSchema, ROOT_ID);\n } catch {\n // The root may have already been registered under a conflicting schema key in a caller-owned instance.\n }\n const normalized = cloneSchema(schema, ROOT_ID) as JsonSchema;\n return ajv.compile(normalized);\n}\n\nexport function validateSchema(\n root: OpenApiDocument,\n schema: JsonSchema,\n value: unknown,\n): SchemaValidation {\n try {\n const validator = createValidator(root, schema);\n const valid = validator(value) === true;\n return { valid, errors: validator.errors ?? [] };\n } catch (error) {\n return {\n valid: false,\n errors: [\n {\n keyword: 'schema',\n instancePath: '',\n schemaPath: '',\n params: {},\n message: error instanceof Error ? error.message : 'Unable to compile schema',\n },\n ],\n };\n }\n}\n","import { Faker, en } from '@faker-js/faker';\nimport type { SeededRandom } from './rng.js';\n\nexport type HintValue = string | number | boolean | null;\nexport type GenerationHints = Record<string, HintValue | readonly HintValue[]>;\n\nexport function createFaker(seed: number): Faker {\n const faker = new Faker({ locale: [en] });\n faker.seed(seed);\n faker.setDefaultRefDate('2020-01-01T00:00:00.000Z');\n return faker;\n}\n\nexport function hintedValue(\n name: string,\n type: string,\n faker: Faker,\n rng: SeededRandom,\n): unknown | undefined {\n const normalized = name\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .toLowerCase()\n .replace(/[^a-z0-9]/g, '');\n if (type === 'string') {\n if (normalized === 'email' || normalized.endsWith('email'))\n return faker.internet.email().toLowerCase();\n if (normalized === 'firstname' || normalized === 'givenname') return faker.person.firstName();\n if (normalized === 'lastname' || normalized === 'familyname' || normalized === 'surname')\n return faker.person.lastName();\n if (normalized === 'fullname' || normalized === 'name' || normalized === 'username')\n return normalized === 'username' ? faker.internet.username() : faker.person.fullName();\n if (normalized === 'phone' || normalized === 'phonenumber' || normalized.endsWith('phone'))\n return faker.phone.number();\n if (normalized === 'createdat' || normalized === 'updatedat' || normalized === 'timestamp')\n return faker.date.recent({ days: 10 }).toISOString();\n if (normalized === 'avatarurl' || normalized === 'imageurl' || normalized === 'photo')\n return faker.image.urlLoremFlickr({ category: 'portrait' });\n if (normalized === 'country') return faker.location.country();\n if (normalized === 'city') return faker.location.city();\n if (normalized === 'url' || normalized.endsWith('url')) return faker.internet.url();\n if (normalized === 'status') return rng.pick(['active', 'pending', 'inactive']);\n }\n if (type === 'number' || type === 'integer') {\n if (normalized === 'price' || normalized.endsWith('price') || normalized === 'amount')\n return Number(faker.commerce.price({ min: 1, max: 999, dec: 2 }));\n if (normalized === 'age') return faker.number.int({ min: 18, max: 80 });\n }\n if (\n type === 'boolean' &&\n (normalized === 'active' || normalized === 'enabled' || normalized === 'verified')\n ) {\n return rng.bool();\n }\n return undefined;\n}\n","import type { Faker } from '@faker-js/faker';\nimport { validateSchema } from '../ajv.js';\nimport type { JsonSchema, OpenApiDocument, UnknownRecord } from '../types.js';\nimport { createFaker, hintedValue, type GenerationHints } from './hints.js';\nimport { deriveSeed, SeededRandom } from './rng.js';\n\nexport interface GenerationOptions {\n seed?: number;\n root?: OpenApiDocument;\n maxDepth?: number;\n minArrayItems?: number;\n maxArrayItems?: number;\n hints?: boolean | GenerationHints;\n mode?: 'response' | 'request';\n}\n\nexport interface GeneratorWarning {\n message: string;\n}\n\nexport interface GenerationResult {\n value: unknown;\n warnings: GeneratorWarning[];\n}\n\ninterface Context {\n root: OpenApiDocument;\n rng: SeededRandom;\n faker: Faker;\n maxDepth: number;\n minArrayItems: number;\n maxArrayItems: number;\n hints: boolean | GenerationHints;\n mode: 'response' | 'request';\n warnings: GeneratorWarning[];\n refTrail: Set<string>;\n}\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction numberValue(value: unknown, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n}\n\nfunction stringValue(value: unknown, fallback = ''): string {\n return typeof value === 'string' ? value : fallback;\n}\n\nfunction getPointer(root: unknown, pointer: string): unknown {\n if (!pointer.startsWith('#/')) return undefined;\n return pointer\n .slice(2)\n .split('/')\n .reduce<unknown>((current, part) => {\n const key = part.replace(/~1/g, '/').replace(/~0/g, '~');\n if (Array.isArray(current)) return current[Number(key)];\n if (isRecord(current)) return current[key];\n return undefined;\n }, root);\n}\n\nfunction resolveSchema(schema: JsonSchema, context: Context): JsonSchema {\n if (typeof schema.$ref !== 'string') return schema;\n const target = getPointer(context.root, schema.$ref);\n if (!isRecord(target)) {\n context.warnings.push({\n message: `Could not resolve schema reference ${schema.$ref}; using an empty value.`,\n });\n return {};\n }\n return target as JsonSchema;\n}\n\nfunction mergeSchema(left: JsonSchema, right: JsonSchema): JsonSchema {\n const merged: JsonSchema = { ...left, ...right };\n const leftProperties = isRecord(left.properties)\n ? (left.properties as Record<string, JsonSchema>)\n : {};\n const rightProperties = isRecord(right.properties)\n ? (right.properties as Record<string, JsonSchema>)\n : {};\n if (Object.keys(leftProperties).length > 0 || Object.keys(rightProperties).length > 0) {\n merged.properties = { ...leftProperties, ...rightProperties };\n }\n const required = [\n ...new Set([\n ...(Array.isArray(left.required) ? left.required : []),\n ...(Array.isArray(right.required) ? right.required : []),\n ]),\n ];\n if (required.length > 0) merged.required = required;\n for (const key of ['minimum', 'exclusiveMinimum']) {\n const a = left[key];\n const b = right[key];\n if (typeof a === 'number' && typeof b === 'number') merged[key] = Math.max(a, b);\n }\n for (const key of ['maximum', 'exclusiveMaximum']) {\n const a = left[key];\n const b = right[key];\n if (typeof a === 'number' && typeof b === 'number') merged[key] = Math.min(a, b);\n }\n if (Array.isArray(left.enum) && Array.isArray(right.enum)) {\n merged.enum = left.enum.filter((value) =>\n right.enum?.some((other) => JSON.stringify(other) === JSON.stringify(value)),\n );\n }\n return merged;\n}\n\nfunction schemaType(schema: JsonSchema, rng: SeededRandom): string {\n const type = schema.type;\n if (Array.isArray(type)) {\n const alternatives = type.filter(\n (candidate): candidate is string => typeof candidate === 'string',\n );\n return rng.pick(alternatives) ?? 'object';\n }\n if (typeof type === 'string') return type;\n if (schema.properties || schema.additionalProperties) return 'object';\n if (schema.items) return 'array';\n return 'string';\n}\n\nfunction isUnconstrained(schema: JsonSchema): boolean {\n return ![\n 'enum',\n 'const',\n 'default',\n 'format',\n 'pattern',\n 'minimum',\n 'maximum',\n 'exclusiveMinimum',\n 'exclusiveMaximum',\n 'multipleOf',\n 'minLength',\n 'maxLength',\n ].some((key) => key in schema);\n}\n\nfunction expandCharacterClass(value: string): string[] | undefined {\n let index = 0;\n const chars: string[] = [];\n while (index < value.length) {\n const first = value[index] ?? '';\n if (first === '\\\\') {\n const escaped = value[index + 1];\n if (escaped === 'd') chars.push(...'0123456789');\n else if (escaped === 'w')\n chars.push(...'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_');\n else if (escaped === 's') chars.push(' ');\n else if (escaped) chars.push(escaped);\n index += 2;\n continue;\n }\n const rangeEnd = value[index + 1] === '-' ? value[index + 2] : undefined;\n if (rangeEnd !== undefined) {\n const from = first.codePointAt(0) ?? 0;\n const to = rangeEnd.codePointAt(0) ?? 0;\n if (to < from || to - from > 200) return undefined;\n for (let code = from; code <= to; code += 1) chars.push(String.fromCodePoint(code));\n index += 3;\n continue;\n }\n chars.push(first);\n index += 1;\n }\n return chars.length > 0 ? chars : undefined;\n}\n\nfunction generateSimplePattern(pattern: string, rng: SeededRandom): string | undefined {\n const source = pattern.replace(/^\\^/, '').replace(/\\$$/, '');\n if (source.includes('|') || source.includes('(?') || source.includes(')')) return undefined;\n let output = '';\n for (let index = 0; index < source.length;) {\n let choices: string[];\n const char = source[index] ?? '';\n if (char === '[') {\n const end = source.indexOf(']', index + 1);\n if (end < 0 || source[index + 1] === '^') return undefined;\n choices = expandCharacterClass(source.slice(index + 1, end)) ?? [];\n if (choices.length === 0) return undefined;\n index = end + 1;\n } else if (char === '\\\\') {\n const next = source[index + 1];\n if (next === 'd') choices = [...'0123456789'];\n else if (next === 'w')\n choices = [...'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'];\n else if (next === 's') choices = [' '];\n else if (next) choices = [next];\n else return undefined;\n index += 2;\n } else if (char === '.') {\n choices = ['a', 'b', 'x', '7'];\n index += 1;\n } else if ('*+?{}[]()'.includes(char)) {\n return undefined;\n } else {\n choices = [char];\n index += 1;\n }\n\n let minimum = 1;\n let maximum = 1;\n if (source[index] === '{') {\n const match = /^\\{(\\d+)(?:,(\\d*))?\\}/.exec(source.slice(index));\n if (!match) return undefined;\n minimum = Number(match[1]);\n maximum = match[2] === undefined ? minimum : match[2] === '' ? minimum + 3 : Number(match[2]);\n if (maximum < minimum || maximum > 100) return undefined;\n index += match[0].length;\n } else if (source[index] === '+') {\n minimum = 1;\n maximum = 3;\n index += 1;\n } else if (source[index] === '*') {\n minimum = 0;\n maximum = 3;\n index += 1;\n } else if (source[index] === '?') {\n minimum = 0;\n maximum = 1;\n index += 1;\n }\n const count = rng.int(minimum, maximum);\n for (let repeat = 0; repeat < count; repeat += 1) output += rng.pick(choices) ?? 'x';\n }\n try {\n return new RegExp(pattern).test(output) ? output : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction formatString(format: string, faker: Faker): string | undefined {\n if (format === 'email') return faker.internet.email().toLowerCase();\n if (format === 'uuid') return faker.string.uuid();\n if (format === 'date') return faker.date.anytime().toISOString().slice(0, 10);\n if (format === 'date-time') return faker.date.anytime().toISOString();\n if (format === 'uri' || format === 'url') return faker.internet.url();\n if (format === 'hostname') return faker.internet.domainName();\n if (format === 'ipv4') return faker.internet.ipv4();\n if (format === 'ipv6') return faker.internet.ipv6();\n return undefined;\n}\n\nfunction fallbackPatternValue(pattern: string, context: Context): string | undefined {\n try {\n const expression = new RegExp(pattern);\n const candidates = [\n 'a',\n 'x',\n '0',\n 'test',\n 'foo',\n 'abc',\n 'ab',\n 'cd',\n 'abc123',\n '2020-01-01',\n context.faker.lorem.word(),\n ];\n return candidates.find((candidate) => expression.test(candidate));\n } catch {\n return undefined;\n }\n}\n\nfunction constrainedString(schema: JsonSchema, context: Context, propertyName: string): string {\n const pattern = stringValue(schema.pattern);\n if (pattern) {\n const matching = generateSimplePattern(pattern, context.rng);\n if (matching !== undefined) return matching;\n context.warnings.push({\n message: `Pattern ${JSON.stringify(pattern)} is too complex for the built-in generator; a fallback value was used.`,\n });\n const fallback = fallbackPatternValue(pattern, context);\n if (fallback !== undefined) return fallback;\n }\n const format = stringValue(schema.format);\n let candidate = formatString(format, context.faker);\n const isUnconstrainedSchema = isUnconstrained(schema);\n const hintOption = context.hints;\n if (candidate === undefined && isUnconstrainedSchema && hintOption !== false) {\n if (isRecord(hintOption)) {\n const custom = hintOption[propertyName];\n if (Array.isArray(custom)) candidate = String(context.rng.pick(custom) ?? '');\n else if (custom !== undefined) candidate = String(custom);\n }\n candidate ??= hintedValue(propertyName, 'string', context.faker, context.rng) as\n string | undefined;\n }\n candidate ??= context.faker.lorem.word();\n const minimum = Math.max(0, Math.floor(numberValue(schema.minLength, 0)));\n const maximum = Math.max(\n minimum,\n Math.floor(numberValue(schema.maxLength, Math.max(80, candidate.length))),\n );\n if (candidate.length < minimum) candidate = candidate.padEnd(minimum, 'x');\n if (candidate.length > maximum) candidate = candidate.slice(0, maximum);\n return candidate;\n}\n\nfunction generateNumber(\n schema: JsonSchema,\n context: Context,\n type: 'integer' | 'number',\n propertyName: string,\n): number {\n if (context.hints !== false && isUnconstrained(schema)) {\n const hintOption = context.hints;\n const custom = isRecord(hintOption) ? hintOption[propertyName] : undefined;\n const hinted =\n custom !== undefined\n ? Number(Array.isArray(custom) ? context.rng.pick(custom) : custom)\n : hintedValue(propertyName, type, context.faker, context.rng);\n if (typeof hinted === 'number' && Number.isFinite(hinted))\n return type === 'integer' ? Math.round(hinted) : hinted;\n }\n const minimumValue = schema.minimum;\n const maximumValue = schema.maximum;\n let minimum =\n typeof minimumValue === 'number'\n ? minimumValue\n : Math.min(-100, numberValue(maximumValue, 100) - 200);\n let maximum = typeof maximumValue === 'number' ? maximumValue : Math.max(100, minimum + 200);\n if (schema.exclusiveMinimum === true && typeof minimumValue === 'number')\n minimum += type === 'integer' ? 1 : 0.000001;\n else if (typeof schema.exclusiveMinimum === 'number')\n minimum = Math.max(\n minimum,\n schema.exclusiveMinimum + (type === 'integer' ? 1 : Number.EPSILON),\n );\n if (schema.exclusiveMaximum === true && typeof maximumValue === 'number')\n maximum -= type === 'integer' ? 1 : 0.000001;\n else if (typeof schema.exclusiveMaximum === 'number')\n maximum = Math.min(\n maximum,\n schema.exclusiveMaximum - (type === 'integer' ? 1 : Number.EPSILON),\n );\n if (minimum > maximum) minimum = maximum;\n const multipleOf = numberValue(schema.multipleOf, 0);\n if (type === 'integer') {\n const low = Math.ceil(minimum);\n const high = Math.floor(maximum);\n if (multipleOf > 0) {\n const first = Math.ceil(low / multipleOf) * multipleOf;\n const last = Math.floor(high / multipleOf) * multipleOf;\n if (first <= last)\n return Math.round(context.rng.int(first / multipleOf, last / multipleOf) * multipleOf);\n return Math.round(first);\n }\n return context.rng.int(low, high);\n }\n let number = context.rng.float(minimum, maximum);\n if (multipleOf > 0) number = Math.round(number / multipleOf) * multipleOf;\n number = Math.min(maximum, Math.max(minimum, number));\n return Number(number.toPrecision(8));\n}\n\nfunction generateArray(\n schema: JsonSchema,\n context: Context,\n depth: number,\n propertyName: string,\n): unknown[] {\n const minimum = Math.max(0, Math.floor(numberValue(schema.minItems, context.minArrayItems)));\n const maximum = Math.max(\n minimum,\n Math.floor(numberValue(schema.maxItems, context.maxArrayItems)),\n );\n const count = context.rng.int(minimum, maximum);\n const itemSchema = isRecord(schema.items) ? (schema.items as JsonSchema) : {};\n const values: unknown[] = [];\n const unique = schema.uniqueItems === true;\n let attempts = 0;\n while (values.length < count && attempts < Math.max(count * 10, 10)) {\n attempts += 1;\n const value = generateNode(itemSchema, context, depth + 1, `${propertyName}Item`);\n if (!unique || !values.some((existing) => JSON.stringify(existing) === JSON.stringify(value)))\n values.push(value);\n }\n return values;\n}\n\nfunction generateObject(\n schema: JsonSchema,\n context: Context,\n depth: number,\n): Record<string, unknown> {\n const properties = isRecord(schema.properties)\n ? (schema.properties as Record<string, JsonSchema>)\n : {};\n const required = new Set(\n Array.isArray(schema.required)\n ? schema.required.filter((v): v is string => typeof v === 'string')\n : [],\n );\n const result: Record<string, unknown> = {};\n for (const [name, childSchema] of Object.entries(properties)) {\n if (context.mode === 'response' && childSchema.writeOnly === true) continue;\n if (context.mode === 'request' && childSchema.readOnly === true) continue;\n const isRequired = required.has(name);\n if (!isRequired && depth >= context.maxDepth) continue;\n if (!isRequired && !context.rng.bool(0.72)) continue;\n result[name] = generateNode(childSchema, context, depth + 1, name);\n }\n if (schema.additionalProperties && isRecord(schema.additionalProperties)) {\n // One generated extension property demonstrates the declared additionalProperties schema without making responses noisy.\n const extensionName = properties.extension ? 'extra' : 'extension';\n result[extensionName] = generateNode(\n schema.additionalProperties as JsonSchema,\n context,\n depth + 1,\n extensionName,\n );\n }\n return result;\n}\n\nfunction discriminatorValue(\n schema: JsonSchema,\n branch: JsonSchema,\n context: Context,\n): { name: string; value: unknown } | undefined {\n const discriminator = isRecord(schema.discriminator) ? schema.discriminator : undefined;\n const propertyName =\n typeof discriminator?.propertyName === 'string' ? discriminator.propertyName : undefined;\n if (!propertyName) return undefined;\n const mapping = isRecord(discriminator?.mapping) ? discriminator.mapping : undefined;\n if (mapping) {\n const match = Object.entries(mapping).find(\n ([, ref]) => typeof ref === 'string' && ref === branch.$ref,\n );\n if (match) return { name: propertyName, value: match[0] };\n }\n const resolved = resolveSchema(branch, context);\n const properties = isRecord(resolved.properties) ? resolved.properties : {};\n const propertySchema = isRecord(properties[propertyName]) ? properties[propertyName] : undefined;\n if (propertySchema && 'const' in propertySchema)\n return { name: propertyName, value: propertySchema.const };\n if (Array.isArray(propertySchema?.enum))\n return { name: propertyName, value: propertySchema.enum[0] };\n if (typeof branch.$ref === 'string')\n return { name: propertyName, value: branch.$ref.split('/').pop() ?? 'variant' };\n return undefined;\n}\n\nfunction chooseCompositionBranch(schema: JsonSchema, context: Context): JsonSchema | undefined {\n const branches = Array.isArray(schema.oneOf)\n ? schema.oneOf\n : Array.isArray(schema.anyOf)\n ? schema.anyOf\n : undefined;\n if (!branches || branches.length === 0) return undefined;\n const usable = branches.filter(isRecord) as JsonSchema[];\n if (usable.length === 0) return undefined;\n const discriminator = isRecord(schema.discriminator) ? schema.discriminator : undefined;\n if (typeof discriminator?.propertyName === 'string' && isRecord(discriminator.mapping)) {\n const mappedRefs = Object.values(discriminator.mapping).filter(\n (value): value is string => typeof value === 'string',\n );\n const selectedRef = context.rng.pick(mappedRefs);\n const found = usable.find((branch) => branch.$ref === selectedRef);\n if (found) return found;\n }\n return context.rng.pick(usable);\n}\n\nfunction generateNode(\n rawSchema: JsonSchema,\n context: Context,\n depth: number,\n propertyName: string,\n): unknown {\n if (depth > context.maxDepth + 8) {\n throw new Error('Recursive schema has no finite value within the generation depth limit.');\n }\n let schema = resolveSchema(rawSchema, context);\n if (rawSchema.$ref && context.refTrail.has(rawSchema.$ref)) {\n if (depth >= context.maxDepth) {\n const resolved = resolveSchema(rawSchema, context);\n if (\n resolved.nullable === true ||\n (Array.isArray(resolved.type) && resolved.type.includes('null'))\n )\n return null;\n if (resolved.default !== undefined) return resolved.default;\n if (resolved.const !== undefined) return resolved.const;\n const type = schemaType(resolved, context.rng);\n if (type === 'array')\n return numberValue(resolved.minItems, 0) === 0\n ? []\n : generateArray(resolved, context, depth, propertyName);\n if (type === 'object') return generateObject(resolved, context, depth);\n if (type === 'integer' || type === 'number')\n return generateNumber(resolved, context, type, propertyName);\n if (type === 'boolean') return context.rng.bool();\n if (type === 'string') return constrainedString(resolved, context, propertyName);\n return null;\n }\n }\n if (rawSchema.$ref) context.refTrail.add(rawSchema.$ref);\n try {\n if ('const' in schema) return schema.const;\n if (schema.default !== undefined) return schema.default;\n if (Array.isArray(schema.enum) && schema.enum.length > 0) return context.rng.pick(schema.enum);\n if (schema.nullable === true && context.rng.bool(0.12)) return null;\n\n const allOf = Array.isArray(schema.allOf)\n ? (schema.allOf.filter(isRecord) as JsonSchema[])\n : [];\n if (allOf.length > 0) {\n let merged: JsonSchema = { ...schema };\n delete merged.allOf;\n for (const item of allOf) merged = mergeSchema(merged, resolveSchema(item, context));\n schema = merged;\n }\n\n const branch = chooseCompositionBranch(schema, context);\n if (branch) {\n const generated = generateNode(branch, context, depth + 1, propertyName);\n const disc = discriminatorValue(schema, branch, context);\n const base: JsonSchema = { ...schema };\n delete base.oneOf;\n delete base.anyOf;\n delete base.discriminator;\n const generatedBase = generateNode(base, context, depth, propertyName);\n if (isRecord(generated)) {\n const combined = { ...(isRecord(generatedBase) ? generatedBase : {}), ...generated };\n if (disc) combined[disc.name] = disc.value;\n return combined;\n }\n return generated;\n }\n\n const type = schemaType(schema, context.rng);\n if (type === 'null') return null;\n if (type === 'object') return generateObject(schema, context, depth);\n if (type === 'array') return generateArray(schema, context, depth, propertyName);\n if (type === 'integer' || type === 'number')\n return generateNumber(schema, context, type, propertyName);\n if (type === 'boolean') return context.rng.bool();\n if (type === 'string') {\n const typeArray = Array.isArray(schema.type) ? schema.type : [];\n if (typeArray.includes('null') && context.rng.bool(0.08)) return null;\n return constrainedString(schema, context, propertyName);\n }\n return null;\n } finally {\n if (rawSchema.$ref) context.refTrail.delete(rawSchema.$ref);\n }\n}\n\nfunction createContext(options: GenerationOptions, seed: number): Context {\n return {\n root: options.root ?? {},\n rng: new SeededRandom(seed),\n faker: createFaker(seed),\n maxDepth: options.maxDepth ?? 3,\n minArrayItems: options.minArrayItems ?? 1,\n maxArrayItems: options.maxArrayItems ?? 3,\n hints: options.hints ?? true,\n mode: options.mode ?? 'response',\n warnings: [],\n refTrail: new Set(),\n };\n}\n\nfunction stripModeOnlyFields(\n value: unknown,\n field: 'readOnly' | 'writeOnly',\n seen = new WeakMap<object, unknown>(),\n): unknown {\n if (Array.isArray(value)) return value.map((item) => stripModeOnlyFields(item, field, seen));\n if (!isRecord(value)) return value;\n const known = seen.get(value);\n if (known) return known;\n const output: Record<string, unknown> = {};\n seen.set(value, output);\n for (const [key, child] of Object.entries(value)) {\n if (key === 'properties' && isRecord(child)) {\n const properties: Record<string, unknown> = {};\n for (const [name, schemaValue] of Object.entries(child)) {\n if (isRecord(schemaValue) && schemaValue[field] === true) continue;\n properties[name] = stripModeOnlyFields(schemaValue, field, seen);\n }\n output[key] = properties;\n } else if (key === 'required' && Array.isArray(child)) {\n const properties = isRecord(value.properties) ? value.properties : {};\n output[key] = child.filter(\n (name) =>\n typeof name !== 'string' ||\n !isRecord(properties[name]) ||\n properties[name]?.[field] !== true,\n );\n } else {\n output[key] = stripModeOnlyFields(child, field, seen);\n }\n }\n return output;\n}\n\nexport function generateFromSchema(\n schema: JsonSchema,\n options: GenerationOptions = {},\n): GenerationResult {\n const baseSeed = options.seed ?? 0;\n const mode = options.mode ?? 'response';\n const field = mode === 'response' ? 'writeOnly' : 'readOnly';\n const validationRoot = stripModeOnlyFields(options.root ?? {}, field) as OpenApiDocument;\n const validationSchema = stripModeOnlyFields(schema, field) as JsonSchema;\n let last: unknown;\n const warnings: GeneratorWarning[] = [];\n for (let attempt = 0; attempt < 12; attempt += 1) {\n const seed = deriveSeed(baseSeed, 'generate', attempt);\n const context = createContext(options, seed);\n last = generateNode(schema, context, 0, '');\n warnings.push(...context.warnings);\n const validation = validateSchema(validationRoot, validationSchema, last);\n if (validation.valid) {\n return { value: last, warnings: dedupeWarnings(warnings) };\n }\n }\n const reason = warnings.map((warning) => warning.message).join('; ');\n throw new Error(\n `Mockline could not generate a value satisfying its schema.${reason ? ` ${reason}` : ''}`,\n );\n}\n\nexport function generateValue(schema: JsonSchema, options: GenerationOptions = {}): unknown {\n return generateFromSchema(schema, options).value;\n}\n\nfunction dedupeWarnings(warnings: GeneratorWarning[]): GeneratorWarning[] {\n const unique = new Map(warnings.map((warning) => [warning.message, warning]));\n return [...unique.values()];\n}\n","import { deriveSeed, SeededRandom } from './generate/rng.js';\nimport { generateFromSchema } from './generate/schema.js';\nimport { defaultStatus } from './spec/summary.js';\nimport { problem } from './errors.js';\nimport type {\n MocklineConfig,\n OverrideConfig,\n OverrideResponseConfig,\n ConditionInput,\n} from './config/schema.js';\nimport type {\n ApiResponse,\n JsonSchema,\n MatchedRoute,\n MockResponse,\n OpenApiDocument,\n UnknownRecord,\n} from './types.js';\n\nexport interface SelectionInput {\n root: OpenApiDocument;\n route: MatchedRoute;\n config: MocklineConfig;\n headers: Record<string, string | string[] | undefined>;\n url: URL;\n body: unknown;\n requestCounter?: number;\n sequenceIndexes?: ReadonlyMap<string, number>;\n stateResponse?: MockResponse | (() => MockResponse | undefined);\n}\n\nexport interface SelectionResult {\n response: MockResponse;\n warnings: string[];\n sequenceKey?: string;\n}\n\ninterface ControlValues {\n status?: number;\n example?: string;\n delay?: number;\n forceError: boolean;\n active: boolean;\n}\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction headerValue(headers: SelectionInput['headers'], name: string): string | undefined {\n const value = headers[name.toLowerCase()] ?? headers[name];\n return Array.isArray(value) ? value.join(',') : value;\n}\n\nfunction parseControls(input: SelectionInput): ControlValues {\n const allow = input.config.controlHeaders.allow;\n if (!allow) return { forceError: false, active: false };\n const prefer = headerValue(input.headers, 'prefer') ?? '';\n const statusMatch = /(?:^|[,;]\\s*)code\\s*=\\s*(\\d{3})/i.exec(prefer);\n const exampleMatch = /(?:^|[,;]\\s*)example\\s*=\\s*\"?([^,;\"\\s]+)\"?/i.exec(prefer);\n const headerStatus = Number(headerValue(input.headers, 'x-mockline-status'));\n const status =\n Number.isInteger(headerStatus) && headerStatus >= 100 && headerStatus <= 599\n ? headerStatus\n : statusMatch?.[1]\n ? Number(statusMatch[1])\n : undefined;\n const delayValue = Number(headerValue(input.headers, 'x-mockline-delay'));\n const delay = Number.isFinite(delayValue) && delayValue >= 0 ? delayValue : undefined;\n const forceError = /^(true|1|yes)$/i.test(headerValue(input.headers, 'x-mockline-error') ?? '');\n const example = exampleMatch?.[1];\n return {\n status,\n example,\n delay,\n forceError,\n active: status !== undefined || example !== undefined || forceError,\n };\n}\n\nfunction responseForStatus(\n responses: Record<string, ApiResponse> | undefined,\n requestedStatus?: number,\n): { status: number; response?: ApiResponse } {\n const standardStatus = defaultStatus(responses);\n const status = requestedStatus ?? (standardStatus === 'default' ? 200 : Number(standardStatus));\n return {\n status,\n response:\n responses?.[String(status)] ??\n responses?.default ??\n (requestedStatus === undefined ? responses?.[standardStatus] : undefined),\n };\n}\n\nfunction jsonMediaType(media: string): boolean {\n const normalized = media.split(';')[0]?.trim().toLowerCase() ?? '';\n return (\n normalized === 'application/json' ||\n normalized.endsWith('+json') ||\n normalized === 'application/problem+json'\n );\n}\n\nfunction parseAccept(\n header: string | undefined,\n): Array<{ value: string; q: number; index: number }> {\n if (!header || header.trim() === '') return [{ value: '*/*', q: 1, index: 0 }];\n return header\n .split(',')\n .map((part, index) => {\n const [value = '*/*', ...parameters] = part.trim().split(';');\n const qValue = parameters\n .find((parameter) => parameter.trim().startsWith('q='))\n ?.trim()\n .slice(2);\n const parsedQ = qValue === undefined ? 1 : Number(qValue);\n return {\n value: value.trim().toLowerCase(),\n q: Number.isFinite(parsedQ) ? parsedQ : 0,\n index,\n };\n })\n .filter((item) => item.q > 0)\n .sort((a, b) => b.q - a.q || a.index - b.index);\n}\n\nfunction mediaMatches(accept: string, media: string): boolean {\n const accepted = accept.split(';')[0]?.trim().toLowerCase() ?? '';\n const offered = media.split(';')[0]?.trim().toLowerCase() ?? '';\n if (accepted === '*/*' || accepted === offered) return true;\n const [acceptedType, acceptedSubtype] = accepted.split('/');\n const [offeredType, offeredSubtype] = offered.split('/');\n if (acceptedType === offeredType && acceptedSubtype === '*') return true;\n if (acceptedType === '*' && Boolean(acceptedSubtype)) return false;\n if (acceptedSubtype?.startsWith('*+'))\n return offeredSubtype?.endsWith(acceptedSubtype.slice(1)) ?? false;\n return false;\n}\n\nfunction negotiateMedia(\n content: Record<string, unknown>,\n accept: string | undefined,\n): string | undefined {\n const available = Object.keys(content);\n if (available.length === 0) return undefined;\n const preferences = parseAccept(accept);\n for (const preference of preferences) {\n const compatible = available.filter((media) => mediaMatches(preference.value, media));\n if (compatible.length > 0) {\n return compatible.find(jsonMediaType) ?? compatible[0];\n }\n }\n return undefined;\n}\n\nfunction exampleValue(value: unknown): unknown {\n if (isRecord(value) && 'value' in value) return value.value;\n return value;\n}\n\nfunction findExample(\n media: UnknownRecord,\n preferredName?: string,\n): { found: boolean; value?: unknown } {\n const examples = isRecord(media.examples) ? media.examples : undefined;\n if (examples) {\n if (preferredName && preferredName in examples)\n return { found: true, value: exampleValue(examples[preferredName]) };\n const first = Object.values(examples)[0];\n if (first !== undefined) return { found: true, value: exampleValue(first) };\n }\n if ('example' in media) return { found: true, value: media.example };\n const schema = isRecord(media.schema) ? media.schema : undefined;\n if (schema) {\n if ('example' in schema) return { found: true, value: schema.example };\n if (Array.isArray(schema.examples) && schema.examples.length > 0)\n return { found: true, value: schema.examples[0] };\n }\n return { found: false };\n}\n\nfunction matchesCondition(condition: ConditionInput, input: SelectionInput): boolean {\n let actual: unknown;\n if (condition.location === 'query')\n actual = input.url.searchParams.get(condition.name) ?? undefined;\n else if (condition.location === 'header')\n actual = headerValue(input.headers, condition.name.toLowerCase());\n else {\n const path = condition.name.startsWith('/')\n ? condition.name.slice(1).split('/')\n : condition.name.split('.');\n actual = path.reduce<unknown>((current, part) => {\n const key = part.replace(/~1/g, '/').replace(/~0/g, '~');\n return isRecord(current) ? current[key] : undefined;\n }, input.body);\n }\n const operation = condition.op ?? 'eq';\n if (operation === 'eq') return String(actual) === String(condition.value);\n if (operation === 'contains') {\n if (Array.isArray(actual))\n return actual.some((item) => String(item).includes(String(condition.value)));\n return typeof actual === 'string' && actual.includes(String(condition.value));\n }\n try {\n return typeof actual === 'string' && new RegExp(String(condition.value)).test(actual);\n } catch {\n return false;\n }\n}\n\nfunction overrideKey(input: SelectionInput): string | undefined {\n const entries = Object.entries(input.config.overrides);\n return (\n entries.find(([key]) => key === input.route.operationId)?.[0] ??\n entries.find(\n ([key]) => key.toUpperCase() === `${input.route.method} ${input.route.path}`.toUpperCase(),\n )?.[0]\n );\n}\n\nfunction selectOverride(\n override: OverrideConfig,\n key: string,\n input: SelectionInput,\n): { value: OverrideResponseConfig; sequenceKey?: string } | undefined {\n if (override.rules?.length) {\n const matching = override.rules.find((rule) => matchesCondition(rule.when, input));\n if (matching) return { value: matching.response };\n }\n if (override.when && override.response && matchesCondition(override.when, input))\n return { value: override.response };\n if (override.sequence?.length) {\n const index = input.sequenceIndexes?.get(key) ?? 0;\n const selectedIndex = override.loop\n ? index % override.sequence.length\n : Math.min(index, override.sequence.length - 1);\n const selected = override.sequence[selectedIndex];\n if (selected) return { value: selected, sequenceKey: key };\n }\n if (!override.when && !override.rules?.length) {\n const fixed: OverrideResponseConfig = {};\n if (override.status !== undefined) fixed.status = override.status;\n if ('body' in override) fixed.body = override.body;\n if (override.headers) fixed.headers = override.headers;\n if (override.delay !== undefined) fixed.delay = override.delay;\n return { value: fixed };\n }\n return undefined;\n}\n\nfunction calculateDelay(\n config: MocklineConfig,\n overrideDelay: number | undefined,\n controlDelay: number | undefined,\n seed: number,\n requestCounter: number,\n): number | undefined {\n if (controlDelay !== undefined) return controlDelay;\n if (overrideDelay !== undefined) return overrideDelay;\n const latency = config.latency;\n const rng = new SeededRandom(deriveSeed(seed, 'latency', requestCounter));\n if (typeof latency === 'number') return latency > 0 ? latency : undefined;\n if (Array.isArray(latency)) return rng.int(latency[0], latency[1]);\n if ('fixed' in latency && latency.fixed !== undefined)\n return latency.fixed > 0 ? latency.fixed : undefined;\n if ('min' in latency && latency.min !== undefined && latency.max !== undefined) {\n if (latency.distribution === 'normal') {\n const u1 = Math.max(rng.next(), Number.EPSILON);\n const u2 = rng.next();\n const normal = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);\n const midpoint = (latency.min + latency.max) / 2;\n const spread = (latency.max - latency.min) / 6;\n return Math.max(latency.min, Math.min(latency.max, Math.round(midpoint + normal * spread)));\n }\n return rng.int(latency.min, latency.max);\n }\n return undefined;\n}\n\nfunction injectedFailure(\n status: number,\n seed: number,\n input: SelectionInput,\n force: boolean,\n): MockResponse | undefined {\n const rate =\n input.config.errors.perOperationRates[input.route.operationId] ?? input.config.errors.rate;\n const rng = new SeededRandom(deriveSeed(seed, 'failure', input.requestCounter ?? 0));\n if (!force && rng.next() >= rate) return undefined;\n const failureStatus = force\n ? (input.config.errors.statuses[0] ?? 500)\n : (rng.pick(input.config.errors.statuses) ?? 500);\n return {\n status: failureStatus,\n body: problem(\n failureStatus,\n failureStatus >= 500 ? 'Mock upstream failure' : 'Mock error',\n 'A failure was injected by Mockline.',\n { originalStatus: status },\n ),\n headers: { 'content-type': 'application/problem+json' },\n source: 'generated',\n };\n}\n\nfunction responseWithStatusAndMedia(\n input: SelectionInput,\n requestedStatus: number | undefined,\n exampleName: string | undefined,\n forceSelection: boolean,\n seed: number,\n): { response: MockResponse; warnings: string[] } {\n const warnings: string[] = [];\n const responses = input.route.operation.responses;\n const selected = responseForStatus(responses, requestedStatus);\n const status = selected.status;\n const responseDefinition = selected.response;\n const content = responseDefinition?.content ?? {};\n const mediaType = negotiateMedia(content, headerValue(input.headers, 'accept'));\n if (Object.keys(content).length > 0 && mediaType === undefined) {\n return {\n response: {\n status: 406,\n body: problem(\n 406,\n 'Not Acceptable',\n 'The requested Accept header does not match any response media type declared by this operation.',\n ),\n headers: { 'content-type': 'application/problem+json' },\n source: 'generated',\n },\n warnings,\n };\n }\n const media =\n mediaType && isRecord(content[mediaType]) ? (content[mediaType] as UnknownRecord) : undefined;\n const preferredExample = exampleName;\n const found = media ? findExample(media, preferredExample) : { found: false };\n const allowExample = input.config.prefer === 'example' || forceSelection || Boolean(exampleName);\n if (found.found && allowExample) {\n const exampleHeaders = mediaType ? { 'content-type': mediaType } : undefined;\n return {\n response: { status, body: found.value, headers: exampleHeaders, source: 'example' },\n warnings,\n };\n }\n if (!media) return { response: { status, source: 'generated' }, warnings };\n if (mediaType && !jsonMediaType(mediaType)) {\n if (found.found)\n return {\n response: {\n status,\n body: found.value,\n headers: { 'content-type': mediaType },\n source: 'example',\n },\n warnings,\n };\n const body = problem(\n 501,\n 'Not Implemented',\n `Mockline cannot synthesize ${mediaType} responses. Add an example to the OpenAPI document.`,\n );\n return {\n response: {\n status: 501,\n body,\n headers: { 'content-type': 'application/problem+json' },\n source: 'generated',\n },\n warnings,\n };\n }\n const schema = isRecord(media.schema) ? (media.schema as JsonSchema) : undefined;\n if (!schema)\n return {\n response: {\n status,\n headers: mediaType ? { 'content-type': mediaType } : undefined,\n source: 'generated',\n },\n warnings,\n };\n const generated = generateFromSchema(schema, {\n seed,\n root: input.root,\n hints: input.config.generation.hints,\n maxDepth: input.config.generation.maxDepth,\n minArrayItems: input.config.generation.minArrayItems,\n maxArrayItems: input.config.generation.maxArrayItems,\n mode: 'response',\n });\n warnings.push(...generated.warnings.map((warning) => warning.message));\n return {\n response: {\n status,\n body: generated.value,\n headers: mediaType ? { 'content-type': mediaType } : undefined,\n source: 'generated',\n },\n warnings,\n };\n}\n\nfunction applyAcceptNegotiation(input: SelectionInput, response: MockResponse): MockResponse {\n const responses = input.route.operation.responses;\n const definition = responses?.[String(response.status)] ?? responses?.default;\n const content = definition?.content;\n if (!content || Object.keys(content).length === 0 || response.status === 406) return response;\n const mediaType = negotiateMedia(content, headerValue(input.headers, 'accept'));\n if (!mediaType) {\n return {\n status: 406,\n body: problem(\n 406,\n 'Not Acceptable',\n 'The requested Accept header does not match any response media type declared by this operation.',\n ),\n headers: { 'content-type': 'application/problem+json' },\n source: 'generated',\n };\n }\n return { ...response, headers: { ...response.headers, 'content-type': mediaType } };\n}\n\nexport function selectResponse(input: SelectionInput): SelectionResult {\n const controls = parseControls(input);\n const baseSeed = input.config.seed ?? 0;\n const counter = input.config.generation.counter ? (input.requestCounter ?? 0) : 0;\n const seed = deriveSeed(baseSeed, input.route.method, input.route.path, counter);\n let response: MockResponse;\n let warnings: string[] = [];\n let sequenceKey: string | undefined;\n let overrideDelay: number | undefined;\n const controlSelection =\n controls.status !== undefined || controls.example !== undefined || controls.forceError;\n if (controlSelection) {\n const selected = responseWithStatusAndMedia(\n input,\n controls.status,\n controls.example,\n true,\n seed,\n );\n response = selected.response;\n warnings = selected.warnings;\n } else {\n const key = overrideKey(input);\n const override = key ? input.config.overrides[key] : undefined;\n const chosenOverride = override && key ? selectOverride(override, key, input) : undefined;\n if (chosenOverride) {\n const value = chosenOverride.value;\n sequenceKey = chosenOverride.sequenceKey;\n overrideDelay = value.delay;\n const operationStatus = defaultStatus(input.route.operation.responses);\n const fallbackStatus = operationStatus === 'default' ? 200 : Number(operationStatus);\n response = {\n status: value.status ?? fallbackStatus,\n ...(value.body !== undefined ? { body: value.body } : {}),\n ...(value.headers ? { headers: value.headers } : {}),\n ...(value.delay !== undefined ? { delay: value.delay } : {}),\n source: 'override',\n };\n } else {\n const failurePending = injectedFailure(200, seed, input, false);\n const acceptsState =\n applyAcceptNegotiation(input, {\n status: Number(defaultStatus(input.route.operation.responses)) || 200,\n source: 'state',\n }).status !== 406;\n const stateResponse =\n !failurePending && acceptsState\n ? typeof input.stateResponse === 'function'\n ? input.stateResponse()\n : input.stateResponse\n : undefined;\n if (stateResponse) response = stateResponse;\n else {\n const selected = responseWithStatusAndMedia(input, undefined, undefined, false, seed);\n response = selected.response;\n warnings = selected.warnings;\n }\n }\n }\n const failure = injectedFailure(response.status, seed, input, controls.forceError);\n if (failure) response = failure;\n response = applyAcceptNegotiation(input, response);\n const delay = calculateDelay(\n input.config,\n overrideDelay ?? response.delay,\n controls.delay,\n seed,\n input.requestCounter ?? 0,\n );\n if (delay !== undefined) response = { ...response, delay };\n return { response, warnings, ...(sequenceKey ? { sequenceKey } : {}) };\n}\n","import { appendFile, mkdir } from 'node:fs/promises';\nimport { dirname, resolve } from 'node:path';\nimport type { MocklineConfig } from './config/schema.js';\nimport type { RecordedRequest, RequestFilter } from './types.js';\n\nexport interface RecordInput extends Omit<RecordedRequest, 'id' | 'timestamp' | 'headers'> {\n headers: Record<string, string | string[] | undefined>;\n}\n\nfunction redactHeaders(\n headers: Record<string, string | string[] | undefined>,\n extraRedacted: string[],\n): Record<string, string | string[]> {\n const redacted = new Set([\n 'authorization',\n 'cookie',\n 'set-cookie',\n 'proxy-authorization',\n 'x-api-key',\n 'api-key',\n 'x-auth-token',\n 'x-access-token',\n ...extraRedacted.map((name) => name.toLowerCase()),\n ]);\n const result: Record<string, string | string[]> = {};\n for (const [name, value] of Object.entries(headers)) {\n if (value === undefined) continue;\n result[name] = redacted.has(name.toLowerCase()) ? '[REDACTED]' : value;\n }\n return result;\n}\n\nfunction cloneRecord(record: RecordedRequest): RecordedRequest {\n return structuredClone(record);\n}\n\nexport class RequestRecorder {\n private readonly buffer: RecordedRequest[] = [];\n private maxRequests: number;\n private file?: string;\n private redact: string[];\n private readonly clock: () => Date;\n private nextId = 1;\n private writeQueue: Promise<void> = Promise.resolve();\n\n constructor(config: MocklineConfig, clock: () => Date = () => new Date()) {\n this.maxRequests = config.recording.maxRequests;\n this.file = config.recording.file ? resolve(config.recording.file) : undefined;\n this.redact = config.recording.redactHeaders;\n this.clock = clock;\n }\n\n record(input: RecordInput): RecordedRequest {\n const entry: RecordedRequest = {\n id: String(this.nextId++),\n timestamp: this.clock().toISOString(),\n method: input.method,\n url: input.url,\n ...(input.operationId ? { operationId: input.operationId } : {}),\n ...(input.matchedPath ? { matchedPath: input.matchedPath } : {}),\n headers: redactHeaders(input.headers, this.redact),\n ...(input.body !== undefined ? { body: input.body } : {}),\n responseStatus: input.responseStatus,\n responseSource: input.responseSource,\n durationMs: input.durationMs,\n validationErrors: [...input.validationErrors],\n };\n if (this.buffer.length >= this.maxRequests) this.buffer.shift();\n this.buffer.push(entry);\n if (this.file) {\n this.writeQueue = this.writeQueue\n .then(async () => {\n await mkdir(dirname(this.file as string), { recursive: true });\n await appendFile(this.file as string, `${JSON.stringify(entry)}\\n`, 'utf8');\n })\n .catch((error: unknown) => {\n console.error(\n `mockline: could not append request record: ${error instanceof Error ? error.message : String(error)}`,\n );\n });\n }\n return cloneRecord(entry);\n }\n\n setConfig(config: MocklineConfig): void {\n this.maxRequests = config.recording.maxRequests;\n this.file = config.recording.file ? resolve(config.recording.file) : undefined;\n this.redact = config.recording.redactHeaders;\n while (this.buffer.length > this.maxRequests) this.buffer.shift();\n }\n\n list(filter: RequestFilter = {}): RecordedRequest[] {\n const since = filter.since ? new Date(filter.since).getTime() : undefined;\n let entries = this.buffer.filter((entry) => {\n if (filter.method && entry.method.toUpperCase() !== filter.method.toUpperCase()) return false;\n if (filter.path && !entry.url.includes(filter.path)) return false;\n if (filter.status !== undefined && entry.responseStatus !== filter.status) return false;\n if (filter.operationId && entry.operationId !== filter.operationId) return false;\n if (\n since !== undefined &&\n Number.isFinite(since) &&\n new Date(entry.timestamp).getTime() < since\n )\n return false;\n return true;\n });\n if (filter.limit !== undefined) entries = filter.limit <= 0 ? [] : entries.slice(-filter.limit);\n return entries.map(cloneRecord);\n }\n\n get(id: string): RecordedRequest | undefined {\n const entry = this.buffer.find((request) => request.id === id);\n return entry ? cloneRecord(entry) : undefined;\n }\n\n clear(): void {\n this.buffer.length = 0;\n }\n\n async flush(): Promise<void> {\n await this.writeQueue;\n }\n}\n","import { problem } from './errors.js';\nimport type { MocklineConfig } from './config/schema.js';\nimport { summarizeSpec } from './spec/summary.js';\nimport type { LoadedSpec } from './spec/load.js';\nimport type { RequestRecorder } from './record.js';\nimport type { RecordedRequest, RequestFilter } from './types.js';\n\nexport interface InspectorContext {\n enabled: boolean;\n recorder: RequestRecorder;\n config: MocklineConfig;\n spec: LoadedSpec;\n startedAt: Date;\n reset: () => Promise<void>;\n}\n\nexport interface InspectorResult {\n status: number;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\nfunction json(status: number, body: unknown): InspectorResult {\n return { status, body, headers: { 'content-type': 'application/json; charset=utf-8' } };\n}\n\nfunction problemResult(status: number, title: string, detail: string): InspectorResult {\n return {\n status,\n body: problem(status, title, detail),\n headers: { 'content-type': 'application/problem+json; charset=utf-8' },\n };\n}\n\nfunction redactConfig(config: MocklineConfig): Record<string, unknown> {\n const copy = structuredClone(config) as unknown as Record<string, unknown>;\n const proxy = copy.proxy;\n if (typeof proxy === 'object' && proxy !== null && !Array.isArray(proxy)) {\n (proxy as Record<string, unknown>).url = (proxy as Record<string, unknown>).url\n ? '[REDACTED UPSTREAM URL]'\n : undefined;\n (proxy as Record<string, unknown>).recordFile = (proxy as Record<string, unknown>).recordFile\n ? '[PATH REDACTED]'\n : undefined;\n }\n const recording = copy.recording;\n if (\n typeof recording === 'object' &&\n recording !== null &&\n !Array.isArray(recording) &&\n (recording as Record<string, unknown>).file\n ) {\n (recording as Record<string, unknown>).file = '[PATH REDACTED]';\n }\n return copy;\n}\n\nfunction parseInteger(searchParams: URLSearchParams, key: string): number | undefined | null {\n const value = searchParams.get(key);\n if (value === null) return undefined;\n const parsed = Number(value);\n return Number.isInteger(parsed) && parsed >= 0 ? parsed : null;\n}\n\nfunction requestFilter(url: URL): RequestFilter | undefined | null {\n const status = parseInteger(url.searchParams, 'status');\n const limit = parseInteger(url.searchParams, 'limit');\n if (status === null || limit === null || (status !== undefined && (status < 100 || status > 599)))\n return null;\n const since = url.searchParams.get('since') ?? undefined;\n if (since && !Number.isFinite(new Date(since).getTime())) return null;\n return {\n ...(url.searchParams.get('method')\n ? { method: url.searchParams.get('method') ?? undefined }\n : {}),\n ...(url.searchParams.get('path') ? { path: url.searchParams.get('path') ?? undefined } : {}),\n ...(status !== undefined ? { status } : {}),\n ...(url.searchParams.get('operationId')\n ? { operationId: url.searchParams.get('operationId') ?? undefined }\n : {}),\n ...(since ? { since } : {}),\n ...(limit !== undefined ? { limit } : {}),\n };\n}\n\nfunction specSummary(context: InspectorContext): Record<string, unknown> {\n const resolvedSpec: LoadedSpec = { ...context.spec, document: context.spec.dereferenced };\n const operations = summarizeSpec(resolvedSpec);\n const schemas = Object.keys(context.spec.document.components?.schemas ?? {});\n const info = context.spec.document.info ?? {};\n return {\n openapi: context.spec.document.openapi,\n title: typeof info.title === 'string' ? info.title : undefined,\n version: typeof info.version === 'string' ? info.version : undefined,\n operations,\n schemas,\n warnings: context.spec.warnings,\n };\n}\n\nfunction outputRequest(record: RecordedRequest | undefined): RecordedRequest | undefined {\n return record;\n}\n\nexport async function handleInspector(\n method: string,\n url: URL,\n context: InspectorContext,\n): Promise<InspectorResult | undefined> {\n if (url.pathname !== '/__mockline' && !url.pathname.startsWith('/__mockline/')) return undefined;\n if (!context.enabled)\n return problemResult(404, 'Not Found', 'The inspector API is disabled for this bind address.');\n const pathname = url.pathname.replace(/\\/+$/, '') || '/';\n if (pathname === '/__mockline/health' && method === 'GET') {\n return json(200, {\n status: 'ok',\n uptimeSeconds: Number(process.uptime().toFixed(3)),\n openapi: context.spec.document.openapi,\n operationCount: summarizeSpec(context.spec).length,\n startedAt: context.startedAt.toISOString(),\n });\n }\n if (pathname === '/__mockline/spec' && method === 'GET') return json(200, specSummary(context));\n if (pathname === '/__mockline/config' && method === 'GET')\n return json(200, redactConfig(context.config));\n if (pathname === '/__mockline/requests' && method === 'GET') {\n const filter = requestFilter(url);\n if (filter === null)\n return problemResult(\n 400,\n 'Bad Request',\n 'Invalid request filter. limit must be a non-negative integer, status must be an HTTP status code, and since must be a date.',\n );\n return json(200, context.recorder.list(filter ?? {}));\n }\n if (pathname === '/__mockline/requests' && method === 'DELETE') {\n context.recorder.clear();\n return json(200, { deleted: true });\n }\n const requestMatch = /^\\/__mockline\\/requests\\/([^/]+)$/.exec(pathname);\n if (requestMatch && method === 'GET') {\n let id = requestMatch[1] ?? '';\n try {\n id = decodeURIComponent(id);\n } catch {\n return problemResult(400, 'Bad Request', 'Request ID contains invalid percent encoding.');\n }\n const request = outputRequest(context.recorder.get(id));\n return request\n ? json(200, request)\n : problemResult(404, 'Not Found', `No recorded request has ID ${id}.`);\n }\n if (requestMatch)\n return {\n ...problemResult(\n 405,\n 'Method Not Allowed',\n `Method ${method} is not allowed for ${pathname}.`,\n ),\n headers: { 'content-type': 'application/problem+json', allow: 'GET' },\n };\n if (pathname === '/__mockline/reset' && method === 'POST') {\n await context.reset();\n return json(200, { reset: true });\n }\n const allowByPath: Record<string, string[]> = {\n '/__mockline/health': ['GET'],\n '/__mockline/spec': ['GET'],\n '/__mockline/config': ['GET'],\n '/__mockline/requests': ['GET', 'DELETE'],\n '/__mockline/reset': ['POST'],\n };\n const allowed = allowByPath[pathname];\n if (allowed)\n return {\n ...problemResult(\n 405,\n 'Method Not Allowed',\n `Method ${method} is not allowed for ${pathname}.`,\n ),\n headers: { 'content-type': 'application/problem+json', allow: allowed.join(', ') },\n };\n return problemResult(404, 'Not Found', `No inspector endpoint matched ${pathname}.`);\n}\n","import { defaultStatus } from '../spec/summary.js';\nimport type {\n ApiOperation,\n ApiResponse,\n JsonSchema,\n MatchedRoute,\n OpenApiDocument,\n UnknownRecord,\n} from '../types.js';\nimport type { Router } from '../router.js';\n\nexport interface ResourceCollection {\n path: string;\n idParam: string;\n idProperty: string;\n listRoute: MatchedRoute;\n createRoute: MatchedRoute;\n itemRoutes: Map<string, MatchedRoute>;\n itemSchema: JsonSchema;\n createSchema?: JsonSchema;\n limitParam?: string;\n offsetParam?: string;\n}\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction responseSchema(operation: ApiOperation): JsonSchema | undefined {\n const responses = operation.responses;\n if (!responses) return undefined;\n const status = defaultStatus(responses);\n const response: ApiResponse | undefined = responses[status] ?? responses.default;\n const content = response?.content;\n if (!content) return undefined;\n const media =\n content['application/json'] ??\n Object.entries(content).find(([type]) => type.endsWith('+json'))?.[1];\n return media?.schema;\n}\n\nfunction resolveSchema(\n schema: JsonSchema | undefined,\n root: OpenApiDocument,\n): JsonSchema | undefined {\n if (!schema || typeof schema.$ref !== 'string' || !schema.$ref.startsWith('#/')) return schema;\n const resolved = schema.$ref\n .slice(2)\n .split('/')\n .reduce<unknown>((current, part) => {\n const key = part.replace(/~1/g, '/').replace(/~0/g, '~');\n return isRecord(current) ? current[key] : undefined;\n }, root);\n return isRecord(resolved) ? (resolved as JsonSchema) : schema;\n}\n\nfunction schemaProperties(\n schema: JsonSchema | undefined,\n root: OpenApiDocument,\n seen = new Set<JsonSchema>(),\n): Record<string, JsonSchema> {\n if (!schema || seen.has(schema)) return {};\n seen.add(schema);\n const resolved = resolveSchema(schema, root) ?? schema;\n const output: Record<string, JsonSchema> = isRecord(resolved.properties)\n ? { ...(resolved.properties as Record<string, JsonSchema>) }\n : {};\n if (Array.isArray(resolved.allOf)) {\n for (const branch of resolved.allOf) {\n if (isRecord(branch))\n Object.assign(output, schemaProperties(branch as JsonSchema, root, seen));\n }\n }\n return output;\n}\n\nfunction schemaFingerprint(\n schema: JsonSchema | undefined,\n root: OpenApiDocument,\n): string | undefined {\n if (!schema) return undefined;\n if (schema.$ref) return `ref:${schema.$ref}`;\n return JSON.stringify(resolveSchema(schema, root));\n}\n\nfunction listItemSchema(schema: JsonSchema | undefined): JsonSchema | undefined {\n if (!schema) return undefined;\n if (schema.type === 'array' && isRecord(schema.items)) return schema.items as JsonSchema;\n if (Array.isArray(schema.type) && schema.type.includes('array') && isRecord(schema.items))\n return schema.items as JsonSchema;\n return undefined;\n}\n\nfunction requestBodySchema(operation: ApiOperation): JsonSchema | undefined {\n const body = isRecord(operation.requestBody) ? operation.requestBody : undefined;\n const content = isRecord(body?.content) ? body.content : {};\n const media = isRecord(content['application/json'])\n ? content['application/json']\n : Object.entries(content).find(([type]) => type.endsWith('+json'))?.[1];\n return isRecord(media) && isRecord(media.schema) ? (media.schema as JsonSchema) : undefined;\n}\n\nfunction pathId(path: string, collectionPath: string): string | undefined {\n if (!path.startsWith(`${collectionPath}/`)) return undefined;\n const tail = path.slice(collectionPath.length + 1);\n const match = /^\\{([^{}]+)\\}$/.exec(tail);\n return match?.[1];\n}\n\nfunction declaredQueryName(route: MatchedRoute, name: string): string | undefined {\n return route.parameters.some((parameter) => parameter.in === 'query' && parameter.name === name)\n ? name\n : undefined;\n}\n\nexport function detectCollections(\n router: Router,\n root: OpenApiDocument,\n idProperty = 'id',\n): ResourceCollection[] {\n const collections: ResourceCollection[] = [];\n const listRoutes = router.routes.filter(\n (route) => route.method === 'GET' && !route.path.includes('{'),\n );\n for (const listRoute of listRoutes) {\n const createRoute = router.routes.find(\n (route) => route.method === 'POST' && route.path === listRoute.path,\n );\n if (!createRoute) continue;\n const listItem = listItemSchema(responseSchema(listRoute.operation));\n if (!listItem) continue;\n const itemCandidates = router.routes.filter(\n (route) => pathId(route.path, listRoute.path) !== undefined,\n );\n const getItem = itemCandidates.find((route) => route.method === 'GET');\n if (!getItem) continue;\n const getSchema = responseSchema(getItem.operation);\n if (!getSchema || schemaFingerprint(listItem, root) !== schemaFingerprint(getSchema, root))\n continue;\n const properties = schemaProperties(listItem, root);\n const idSchema = isRecord(properties[idProperty])\n ? (properties[idProperty] as JsonSchema)\n : undefined;\n if (!idSchema) continue;\n const itemRoutes = new Map<string, MatchedRoute>();\n for (const route of itemCandidates) {\n const routeIdParam = pathId(route.path, listRoute.path);\n if (routeIdParam && routeIdParam === pathId(getItem.path, listRoute.path))\n itemRoutes.set(route.method, route);\n }\n collections.push({\n path: listRoute.path,\n idParam: pathId(getItem.path, listRoute.path) ?? idProperty,\n idProperty,\n listRoute,\n createRoute,\n itemRoutes,\n itemSchema: listItem,\n ...(requestBodySchema(createRoute.operation)\n ? { createSchema: requestBodySchema(createRoute.operation) }\n : {}),\n ...(declaredQueryName(listRoute, 'limit') ? { limitParam: 'limit' } : {}),\n ...(declaredQueryName(listRoute, 'offset') ? { offsetParam: 'offset' } : {}),\n });\n }\n return collections;\n}\n","import { deriveSeed } from '../generate/rng.js';\nimport { generateValue } from '../generate/schema.js';\nimport { validateSchema } from '../ajv.js';\nimport { defaultStatus } from '../spec/summary.js';\nimport { problem } from '../errors.js';\nimport type { MocklineConfig } from '../config/schema.js';\nimport type {\n MatchedRoute,\n MockResponse,\n JsonSchema,\n OpenApiDocument,\n UnknownRecord,\n} from '../types.js';\nimport { detectCollections, type ResourceCollection } from './collections.js';\nimport type { Router } from '../router.js';\n\ninterface CollectionState {\n definition: ResourceCollection;\n items: Record<string, unknown>[];\n nextNumericId: number;\n}\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction resolveSchema(\n schema: JsonSchema | undefined,\n root: OpenApiDocument,\n): JsonSchema | undefined {\n if (!schema || typeof schema.$ref !== 'string' || !schema.$ref.startsWith('#/')) return schema;\n const resolved = schema.$ref\n .slice(2)\n .split('/')\n .reduce<unknown>((current, part) => {\n const key = part.replace(/~1/g, '/').replace(/~0/g, '~');\n return isRecord(current) ? current[key] : undefined;\n }, root);\n return isRecord(resolved) ? (resolved as JsonSchema) : schema;\n}\n\nfunction mergedProperties(\n schema: JsonSchema,\n root: OpenApiDocument,\n seen = new Set<JsonSchema>(),\n): Record<string, JsonSchema> {\n if (seen.has(schema)) return {};\n seen.add(schema);\n const resolved = resolveSchema(schema, root) ?? schema;\n const properties = isRecord(resolved.properties)\n ? (resolved.properties as Record<string, JsonSchema>)\n : {};\n const merged: Record<string, JsonSchema> = { ...properties };\n if (Array.isArray(resolved.allOf)) {\n for (const branch of resolved.allOf) {\n if (isRecord(branch))\n Object.assign(merged, mergedProperties(branch as JsonSchema, root, seen));\n }\n }\n return merged;\n}\n\nfunction defaultSuccessStatus(route: MatchedRoute): number {\n const value = defaultStatus(route.operation.responses);\n const status = Number(value);\n return Number.isInteger(status) ? status : 200;\n}\n\nfunction asResponse(\n status: number,\n body: unknown,\n contentType = 'application/json; charset=utf-8',\n): MockResponse {\n return { status, body, headers: { 'content-type': contentType }, source: 'state' };\n}\n\nfunction parseId(value: unknown): string {\n return String(value);\n}\n\nfunction cleanResponseFields(\n item: Record<string, unknown>,\n definition: ResourceCollection,\n root: OpenApiDocument,\n): Record<string, unknown> {\n const properties = mergedProperties(definition.itemSchema, root);\n const output: Record<string, unknown> = { ...item };\n for (const [name, schema] of Object.entries(properties)) {\n if (schema.writeOnly === true) delete output[name];\n }\n return output;\n}\n\nexport class ResourceStore {\n readonly collections: ResourceCollection[];\n private readonly root: OpenApiDocument;\n private seed: number;\n private config: MocklineConfig;\n private readonly data = new Map<string, CollectionState>();\n private readonly routeIndex = new Map<\n string,\n { state: CollectionState; kind: 'list' | 'create' | 'item'; route: MatchedRoute }\n >();\n\n constructor(router: Router, root: OpenApiDocument, config: MocklineConfig) {\n this.root = root;\n this.config = config;\n this.seed = config.seed ?? 0;\n this.collections = detectCollections(router, root, config.stateful.idProperty);\n for (const definition of this.collections) {\n const state: CollectionState = { definition, items: [], nextNumericId: 1 };\n this.data.set(definition.path, state);\n this.routeIndex.set(`${definition.listRoute.method} ${definition.listRoute.path}`, {\n state,\n kind: 'list',\n route: definition.listRoute,\n });\n this.routeIndex.set(`${definition.createRoute.method} ${definition.createRoute.path}`, {\n state,\n kind: 'create',\n route: definition.createRoute,\n });\n for (const [method, route] of definition.itemRoutes) {\n this.routeIndex.set(`${method} ${route.path}`, { state, kind: 'item', route });\n }\n }\n this.reset();\n }\n\n setConfig(config: MocklineConfig): void {\n this.config = config;\n this.seed = config.seed ?? 0;\n }\n\n reset(): void {\n for (const state of this.data.values()) {\n state.items = [];\n if (!this.config.stateful.enabled) continue;\n state.nextNumericId = 1;\n for (let index = 0; index < this.config.stateful.seedItems; index += 1) {\n const seed = deriveSeed(this.seed, state.definition.path, index, 'initial');\n const generated = generateValue(state.definition.itemSchema, {\n root: this.root,\n seed,\n hints: this.config.generation.hints,\n maxDepth: this.config.generation.maxDepth,\n minArrayItems: this.config.generation.minArrayItems,\n maxArrayItems: this.config.generation.maxArrayItems,\n mode: 'response',\n });\n const item = isRecord(generated) ? { ...generated } : {};\n const assignedId = this.ensureId(item, state, seed, true);\n item[state.definition.idProperty] = assignedId;\n state.items.push(cleanResponseFields(item, state.definition, this.root));\n }\n const numericIds = state.items\n .map((item) => item[state.definition.idProperty])\n .filter((value): value is number => typeof value === 'number' && Number.isFinite(value));\n if (numericIds.length > 0) state.nextNumericId = Math.max(...numericIds) + 1;\n }\n }\n\n handle(\n route: MatchedRoute,\n params: Record<string, string>,\n url: URL,\n body: unknown,\n ): MockResponse | undefined {\n const match = this.routeIndex.get(`${route.method} ${route.path}`);\n if (!match) return undefined;\n const { state, kind } = match;\n const definition = state.definition;\n if (kind === 'list') {\n let items = state.items.map((item) => ({ ...item }));\n const offset = definition.offsetParam\n ? Math.max(0, Number(url.searchParams.get(definition.offsetParam) ?? 0) || 0)\n : 0;\n const limitRaw = definition.limitParam ? url.searchParams.get(definition.limitParam) : null;\n const limit = limitRaw === null ? undefined : Math.max(0, Number(limitRaw) || 0);\n items = items.slice(offset, limit === undefined ? undefined : offset + limit);\n return asResponse(defaultSuccessStatus(route), items);\n }\n if (kind === 'create') {\n let item: Record<string, unknown>;\n if (isRecord(body)) item = { ...body };\n else {\n const schema = definition.createSchema ?? definition.itemSchema;\n const generated = generateValue(schema, {\n root: this.root,\n seed: deriveSeed(this.seed, route.method, route.path, state.items.length, 'post'),\n hints: this.config.generation.hints,\n maxDepth: this.config.generation.maxDepth,\n minArrayItems: this.config.generation.minArrayItems,\n maxArrayItems: this.config.generation.maxArrayItems,\n mode: 'request',\n });\n item = isRecord(generated) ? { ...generated } : {};\n }\n const id = this.ensureId(\n item,\n state,\n deriveSeed(this.seed, route.path, state.items.length, 'create'),\n false,\n );\n item[definition.idProperty] = id;\n const saved = cleanResponseFields(item, definition, this.root);\n state.items.push(saved);\n return asResponse(defaultSuccessStatus(route), { ...saved });\n }\n\n const rawId = params[definition.idParam];\n const index = state.items.findIndex(\n (item) => parseId(item[definition.idProperty]) === String(rawId),\n );\n if (route.method === 'GET') {\n if (index < 0)\n return {\n status: 404,\n body: problem(\n 404,\n 'Not Found',\n `No resource with ${definition.idProperty} ${rawId} exists.`,\n ),\n headers: { 'content-type': 'application/problem+json' },\n source: 'state',\n };\n return asResponse(defaultSuccessStatus(route), { ...state.items[index] });\n }\n if (route.method === 'DELETE') {\n if (index < 0) return { status: 204, source: 'state' };\n state.items.splice(index, 1);\n return { status: 204, source: 'state' };\n }\n if (route.method === 'PUT' || route.method === 'PATCH') {\n if (index < 0)\n return {\n status: 404,\n body: problem(\n 404,\n 'Not Found',\n `No resource with ${definition.idProperty} ${rawId} exists.`,\n ),\n headers: { 'content-type': 'application/problem+json' },\n source: 'state',\n };\n const current = state.items[index] ?? {};\n const replacement = isRecord(body) ? { ...body } : {};\n const item = route.method === 'PATCH' ? { ...current, ...replacement } : replacement;\n item[definition.idProperty] = current[definition.idProperty] ?? rawId;\n state.items[index] = cleanResponseFields(item, definition, this.root);\n return asResponse(defaultSuccessStatus(route), { ...state.items[index] });\n }\n return undefined;\n }\n\n private ensureId(\n item: Record<string, unknown>,\n state: CollectionState,\n seed: number,\n seedItem: boolean,\n ): unknown {\n const definition = state.definition;\n const properties = mergedProperties(definition.itemSchema, this.root);\n const schema = properties[definition.idProperty] ?? { type: 'string' };\n const current = item[definition.idProperty];\n const duplicate =\n current !== undefined &&\n state.items.some((existing) => parseId(existing[definition.idProperty]) === parseId(current));\n const valid = current !== undefined && validateSchema(this.root, schema, current).valid;\n if (valid && !duplicate) return current;\n for (let attempt = 0; attempt < 50; attempt += 1) {\n let candidate: unknown;\n if (schema.type === 'integer' || schema.type === 'number') {\n candidate = state.nextNumericId++;\n } else {\n candidate = generateValue(schema, {\n root: this.root,\n seed: deriveSeed(seed, 'id', attempt),\n hints: false,\n maxDepth: 1,\n minArrayItems: 0,\n maxArrayItems: 0,\n });\n if (\n typeof candidate === 'string' &&\n !('format' in schema) &&\n !('pattern' in schema) &&\n !('enum' in schema) &&\n !('const' in schema)\n ) {\n candidate = seedItem ? candidate : `${candidate}-${state.items.length + 1}`;\n }\n }\n const alreadyUsed = state.items.some(\n (existing) => parseId(existing[definition.idProperty]) === parseId(candidate),\n );\n if (!alreadyUsed && validateSchema(this.root, schema, candidate).valid) return candidate;\n }\n return schema.type === 'integer' || schema.type === 'number'\n ? state.nextNumericId++\n : `${definition.path.replace(/\\W/g, '')}-${state.items.length + 1}`;\n }\n}\n","import { lookup } from 'node:dns/promises';\nimport { isIP } from 'node:net';\nimport { mkdir, readFile, rename, writeFile } from 'node:fs/promises';\nimport { dirname, resolve } from 'node:path';\nimport { problem } from './errors.js';\nimport type { MocklineConfig } from './config/schema.js';\n\nconst HOP_BY_HOP = new Set([\n 'connection',\n 'keep-alive',\n 'proxy-authenticate',\n 'proxy-authorization',\n 'te',\n 'trailer',\n 'transfer-encoding',\n 'upgrade',\n 'host',\n 'content-length',\n 'expect',\n]);\n\nexport interface ProxyRequest {\n upstream: string;\n method: string;\n requestUrl: URL;\n headers: Record<string, string | string[] | undefined>;\n body?: Uint8Array;\n config: MocklineConfig['proxy'];\n fetchImpl?: typeof globalThis.fetch;\n}\n\nexport interface ProxyResult {\n status: number;\n headers: Record<string, string>;\n body: Buffer;\n blocked: boolean;\n}\n\nexport interface ProxyExampleInput {\n method: string;\n path: string;\n operationId?: string;\n status: number;\n headers: Record<string, string>;\n body: Buffer;\n}\n\ninterface SavedProxyExample {\n method: string;\n path: string;\n operationId?: string;\n status: number;\n mediaType?: string;\n example?: unknown;\n bodyBase64?: string;\n recordedAt: string;\n}\n\nfunction isPrivateIpv4(address: string): boolean {\n const parts = address.split('.').map(Number);\n if (parts.length !== 4 || parts.some((part) => !Number.isInteger(part) || part < 0 || part > 255))\n return true;\n const [a = 0, b = 0] = parts;\n return (\n a === 0 ||\n a === 10 ||\n a === 127 ||\n a >= 224 ||\n (a === 169 && b === 254) ||\n (a === 172 && b >= 16 && b <= 31) ||\n (a === 192 && b === 168) ||\n (a === 100 && b >= 64 && b <= 127) ||\n (a === 198 && (b === 18 || b === 19)) ||\n (a === 192 && b === 0) ||\n (a === 198 && b === 51) ||\n (a === 203 && b === 0)\n );\n}\n\nfunction ipv4FromMappedIpv6(address: string): string | undefined {\n const lowered = address.toLowerCase().split('%')[0] ?? '';\n if (!lowered.startsWith('::ffff:')) return undefined;\n const tail = lowered.slice('::ffff:'.length);\n if (tail.includes('.')) return tail;\n const parts = tail.split(':');\n if (parts.length !== 2 || parts.some((part) => !/^[0-9a-f]{1,4}$/.test(part))) return undefined;\n const first = Number.parseInt(parts[0] ?? '0', 16);\n const second = Number.parseInt(parts[1] ?? '0', 16);\n return `${first >> 8}.${first & 255}.${second >> 8}.${second & 255}`;\n}\n\nexport function isPrivateAddress(address: string): boolean {\n const version = isIP(address);\n if (version === 4) return isPrivateIpv4(address);\n if (version !== 6) return true;\n const normalized = address.toLowerCase().split('%')[0] ?? '';\n const mapped = ipv4FromMappedIpv6(normalized);\n if (mapped) return isPrivateIpv4(mapped);\n return (\n normalized === '::' ||\n normalized === '::1' ||\n /^f[cd]/.test(normalized) ||\n /^fe[89ab]/.test(normalized) ||\n normalized.startsWith('ff') ||\n normalized.startsWith('2001:db8:')\n );\n}\n\nfunction stripHopByHop(headers: Record<string, string>): Record<string, string> {\n const blocked = new Set(HOP_BY_HOP);\n const connection = headers.connection;\n if (connection)\n for (const header of connection.split(',')) blocked.add(header.trim().toLowerCase());\n const output: Record<string, string> = {};\n for (const [name, value] of Object.entries(headers)) {\n if (!blocked.has(name.toLowerCase())) output[name] = value;\n }\n return output;\n}\n\nfunction requestHeaders(headers: ProxyRequest['headers']): Record<string, string> {\n const output: Record<string, string> = {};\n for (const [name, value] of Object.entries(headers)) {\n if (value !== undefined)\n output[name.toLowerCase()] = Array.isArray(value) ? value.join(', ') : value;\n }\n return stripHopByHop(output);\n}\n\nfunction targetUrl(upstream: URL, requestUrl: URL): URL {\n const basePath = upstream.pathname.replace(/\\/+$/, '');\n const requestedPath = requestUrl.pathname.startsWith('/')\n ? requestUrl.pathname\n : `/${requestUrl.pathname}`;\n const target = new URL(upstream);\n target.pathname = `${basePath}${requestedPath}` || '/';\n target.search = requestUrl.search;\n target.hash = '';\n return target;\n}\n\nasync function resolvesPrivate(hostname: string, timeoutMs: number): Promise<boolean> {\n const unbracketedHost = hostname.replace(/^\\[(.*)\\]$/, '$1');\n if (isIP(unbracketedHost)) return isPrivateAddress(unbracketedHost);\n const normalizedHost = unbracketedHost.toLowerCase().replace(/\\.$/, '');\n if (\n normalizedHost === 'localhost' ||\n ['.localhost', '.local', '.internal', '.lan', '.home.arpa'].some((suffix) =>\n normalizedHost.endsWith(suffix),\n )\n )\n return true;\n let timer: NodeJS.Timeout | undefined;\n try {\n const addresses = await Promise.race([\n lookup(unbracketedHost, { all: true, verbatim: true }),\n new Promise<never>((_resolve, reject) => {\n timer = setTimeout(() => reject(new Error('DNS lookup timed out')), timeoutMs);\n }),\n ]);\n return addresses.length === 0 || addresses.some((entry) => isPrivateAddress(entry.address));\n } finally {\n if (timer) clearTimeout(timer);\n }\n}\n\nfunction proxyProblem(status: number, title: string, detail: string): ProxyResult {\n const body = Buffer.from(JSON.stringify(problem(status, title, detail)));\n return {\n status,\n headers: {\n 'content-type': 'application/problem+json; charset=utf-8',\n 'content-length': String(body.byteLength),\n },\n body,\n blocked: status === 403,\n };\n}\n\nexport async function forwardRequest(input: ProxyRequest): Promise<ProxyResult> {\n let upstream: URL;\n try {\n upstream = new URL(input.upstream);\n } catch {\n return proxyProblem(502, 'Bad Gateway', 'The configured proxy URL is invalid.');\n }\n if (upstream.protocol !== 'http:' && upstream.protocol !== 'https:') {\n return proxyProblem(502, 'Bad Gateway', 'Mockline proxy URLs must use http or https.');\n }\n if (!input.config.allowPrivate) {\n try {\n if (await resolvesPrivate(upstream.hostname, input.config.timeoutMs)) {\n return proxyProblem(\n 403,\n 'Forbidden',\n 'Proxying to private, loopback, or link-local addresses is disabled. Use --proxy-allow-private only for a trusted local upstream.',\n );\n }\n } catch (error) {\n return proxyProblem(\n 502,\n 'Bad Gateway',\n `Could not safely resolve proxy host: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n const target = targetUrl(upstream, input.requestUrl);\n const fetchImpl = input.fetchImpl ?? globalThis.fetch;\n const headers = requestHeaders(input.headers);\n try {\n const copiedBody =\n input.body && input.body.byteLength > 0 && input.method !== 'GET' && input.method !== 'HEAD'\n ? Uint8Array.from(input.body)\n : undefined;\n const response = await fetchImpl(target, {\n method: input.method,\n headers,\n ...(copiedBody ? { body: copiedBody.buffer } : {}),\n redirect: 'manual',\n signal: AbortSignal.timeout(input.config.timeoutMs),\n });\n const body = Buffer.from(await response.arrayBuffer());\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, name) => {\n responseHeaders[name.toLowerCase()] = value;\n });\n const filtered = stripHopByHop(responseHeaders);\n delete filtered['content-length'];\n delete filtered['content-encoding'];\n return { status: response.status, headers: filtered, body, blocked: false };\n } catch (error) {\n const timedOut =\n error instanceof Error && (error.name === 'TimeoutError' || error.name === 'AbortError');\n return proxyProblem(\n timedOut ? 504 : 502,\n timedOut ? 'Gateway Timeout' : 'Bad Gateway',\n timedOut\n ? 'The upstream request timed out.'\n : `The upstream request failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\nfunction decodeExample(input: ProxyExampleInput): SavedProxyExample {\n const mediaType = input.headers['content-type']?.split(';')[0]?.trim();\n const base: SavedProxyExample = {\n method: input.method,\n path: input.path,\n ...(input.operationId ? { operationId: input.operationId } : {}),\n status: input.status,\n ...(mediaType ? { mediaType } : {}),\n recordedAt: new Date().toISOString(),\n };\n if (mediaType === 'application/json' || mediaType?.endsWith('+json')) {\n try {\n return { ...base, example: JSON.parse(input.body.toString('utf8')) as unknown };\n } catch {\n return { ...base, example: input.body.toString('utf8') };\n }\n }\n if (mediaType?.startsWith('text/')) return { ...base, example: input.body.toString('utf8') };\n return { ...base, bodyBase64: input.body.toString('base64') };\n}\n\nexport class ProxyExampleRecorder {\n private file?: string;\n private queue: Promise<void> = Promise.resolve();\n\n constructor(file?: string) {\n this.file = file ? resolve(file) : undefined;\n }\n\n setFile(file?: string): void {\n this.file = file ? resolve(file) : undefined;\n }\n\n record(input: ProxyExampleInput): void {\n if (!this.file) return;\n const example = decodeExample(input);\n this.queue = this.queue\n .then(async () => {\n await mkdir(dirname(this.file as string), { recursive: true });\n let examples: SavedProxyExample[] = [];\n try {\n const existing = JSON.parse(await readFile(this.file as string, 'utf8')) as unknown;\n if (\n typeof existing === 'object' &&\n existing !== null &&\n !Array.isArray(existing) &&\n Array.isArray((existing as { examples?: unknown }).examples)\n ) {\n examples = (existing as { examples: SavedProxyExample[] }).examples;\n }\n } catch {\n // A missing file starts a new examples document; malformed files are replaced on the next successful record.\n }\n examples.push(example);\n const destination = this.file as string;\n const temporary = `${destination}.tmp`;\n await writeFile(\n temporary,\n `${JSON.stringify({ format: 'mockline-proxy-examples-v1', examples }, null, 2)}\\n`,\n 'utf8',\n );\n await rename(temporary, destination);\n })\n .catch((error: unknown) => {\n console.error(\n `mockline: could not save proxy example: ${error instanceof Error ? error.message : String(error)}`,\n );\n });\n }\n\n async flush(): Promise<void> {\n await this.queue;\n }\n}\n","import type { ErrorObject } from 'ajv';\nimport { validateSchema } from './ajv.js';\nimport type {\n ApiParameter,\n ApiOperation,\n JsonSchema,\n MatchedRoute,\n OpenApiDocument,\n UnknownRecord,\n} from './types.js';\n\nexport interface ValidationIssue {\n location: string;\n message: string;\n keyword?: string;\n}\n\nexport interface RequestValidationInput {\n root: OpenApiDocument;\n route: MatchedRoute;\n params: Record<string, string>;\n url: URL;\n headers: Record<string, string | string[] | undefined>;\n body: unknown;\n bodyPresent: boolean;\n}\n\nexport interface RequestValidationResult {\n valid: boolean;\n issues: ValidationIssue[];\n bodyInvalid: boolean;\n}\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction headerValue(headers: RequestValidationInput['headers'], name: string): string | undefined {\n const value = headers[name.toLowerCase()] ?? headers[name];\n return Array.isArray(value) ? value.join(',') : value;\n}\n\nfunction cookieValues(header: string | undefined): Map<string, string> {\n const result = new Map<string, string>();\n if (!header) return result;\n for (const entry of header.split(';')) {\n const separator = entry.indexOf('=');\n if (separator < 0) continue;\n const name = entry.slice(0, separator).trim();\n const value = entry.slice(separator + 1).trim();\n if (name) result.set(name, decodeURIComponentSafe(value));\n }\n return result;\n}\n\nfunction decodeURIComponentSafe(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n\nfunction schemaType(schema: JsonSchema): string {\n if (Array.isArray(schema.type))\n return (\n schema.type.find((item): item is string => typeof item === 'string' && item !== 'null') ??\n 'string'\n );\n return typeof schema.type === 'string' ? schema.type : 'string';\n}\n\nfunction coerceScalar(value: string, schema: JsonSchema): unknown {\n const type = schemaType(schema);\n if (type === 'integer') {\n if (!/^[+-]?\\d+$/.test(value.trim())) return value;\n const parsed = Number(value);\n return Number.isSafeInteger(parsed) ? parsed : value;\n }\n if (type === 'number') {\n if (value.trim() === '') return value;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : value;\n }\n if (type === 'boolean') {\n if (value.toLowerCase() === 'true') return true;\n if (value.toLowerCase() === 'false') return false;\n }\n if (type === 'null' && value === 'null') return null;\n return value;\n}\n\nfunction coerceTyped(value: unknown, schema: JsonSchema): unknown {\n const type = schemaType(schema);\n if (type === 'array' && Array.isArray(value)) {\n const items = isRecord(schema.items) ? (schema.items as JsonSchema) : {};\n return value.map((item) => coerceTyped(item, items));\n }\n if (type === 'object' && isRecord(value)) {\n const properties = isRecord(schema.properties)\n ? (schema.properties as Record<string, JsonSchema>)\n : {};\n return Object.fromEntries(\n Object.entries(value).map(([name, item]) => [\n name,\n properties[name] ? coerceTyped(item, properties[name]) : item,\n ]),\n );\n }\n return typeof value === 'string' ? coerceScalar(value, schema) : value;\n}\n\nfunction coerceValue(\n raw: string | string[] | undefined,\n schema: JsonSchema,\n parameter?: ApiParameter,\n): unknown {\n if (raw === undefined) return undefined;\n const type = schemaType(schema);\n if (type === 'array') {\n const items = isRecord(schema.items) ? (schema.items as JsonSchema) : {};\n const style = parameter?.style ?? (parameter?.in === 'query' ? 'form' : 'simple');\n const explode = parameter?.explode ?? style === 'form';\n const separator = style === 'spaceDelimited' ? ' ' : style === 'pipeDelimited' ? '|' : ',';\n const values = Array.isArray(raw)\n ? raw\n : raw.includes(separator) && !explode\n ? raw.split(separator)\n : [raw];\n return values.map((item) => coerceTyped(item, items));\n }\n if (type === 'object') {\n let value: Record<string, unknown>;\n if (Array.isArray(raw)) return raw;\n if (raw.trim().startsWith('{')) {\n try {\n const parsed = JSON.parse(raw) as unknown;\n value = isRecord(parsed) ? parsed : {};\n } catch {\n value = {};\n }\n } else {\n value = {};\n const separator = parameter?.style === 'simple' ? ',' : '&';\n for (const pair of raw.split(separator)) {\n const [name, ...rest] = pair.split('=');\n if (name) value[name] = rest.join('=');\n }\n }\n return coerceTyped(value, schema);\n }\n return typeof raw === 'string'\n ? coerceScalar(raw, schema)\n : raw.map((item) => coerceScalar(item, schema));\n}\n\nfunction parameterRawValue(\n parameter: ApiParameter,\n input: RequestValidationInput,\n): string | string[] | undefined {\n if (parameter.in === 'path') return input.params[parameter.name];\n if (parameter.in === 'query') {\n const values = input.url.searchParams.getAll(parameter.name);\n if (values.length > 1) return values;\n if (values.length === 1) return values[0];\n if (parameter.style === 'deepObject') {\n const object: Record<string, string> = {};\n for (const [key, value] of input.url.searchParams.entries()) {\n const match = new RegExp(`^${escapeRegExp(parameter.name)}\\\\[([^\\\\]]+)\\\\]$`).exec(key);\n if (match?.[1]) object[match[1]] = value;\n }\n if (Object.keys(object).length > 0) return JSON.stringify(object);\n }\n if (schemaType(parameter.schema ?? {}) === 'object' && parameter.explode !== false) {\n const properties = isRecord(parameter.schema?.properties) ? parameter.schema.properties : {};\n const object: Record<string, string> = {};\n for (const name of Object.keys(properties)) {\n const value = input.url.searchParams.get(name);\n if (value !== null) object[name] = value;\n }\n if (Object.keys(object).length > 0) return JSON.stringify(object);\n }\n return undefined;\n }\n if (parameter.in === 'header') return headerValue(input.headers, parameter.name);\n return cookieValues(headerValue(input.headers, 'cookie')).get(parameter.name);\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction formatAjvIssue(issue: ErrorObject, location: string): ValidationIssue {\n const pointer = issue.instancePath\n .split('/')\n .filter(Boolean)\n .map((part) => part.replace(/~1/g, '/').replace(/~0/g, '~'))\n .join('/');\n const at = pointer ? `${location}/${pointer}` : location;\n const suffix = issue.message ? `: ${issue.message}` : '';\n return { location: at, message: `${at}${suffix}`, keyword: issue.keyword };\n}\n\nfunction stripReadOnly(value: unknown, seen = new WeakMap<object, unknown>()): unknown {\n if (Array.isArray(value)) return value.map((item) => stripReadOnly(item, seen));\n if (!isRecord(value)) return value;\n const known = seen.get(value);\n if (known) return known;\n const copy: Record<string, unknown> = {};\n seen.set(value, copy);\n for (const [key, child] of Object.entries(value)) {\n if (key === 'properties' && isRecord(child)) {\n const properties: Record<string, unknown> = {};\n for (const [property, propertySchema] of Object.entries(child)) {\n if (isRecord(propertySchema) && propertySchema.readOnly === true) continue;\n properties[property] = stripReadOnly(propertySchema, seen);\n }\n copy[key] = properties;\n } else if (key === 'required' && Array.isArray(child)) {\n const parentProperties = isRecord(value.properties) ? value.properties : {};\n copy[key] = child.filter(\n (property) =>\n typeof property !== 'string' ||\n !isRecord(parentProperties[property]) ||\n parentProperties[property]?.readOnly !== true,\n );\n } else {\n copy[key] = stripReadOnly(child, seen);\n }\n }\n return copy;\n}\n\nfunction requestRootWithoutReadOnly(root: OpenApiDocument): OpenApiDocument {\n return stripReadOnly(root) as OpenApiDocument;\n}\n\nfunction contentTypeMatches(declared: string, actual: string): boolean {\n const expected = declared.split(';')[0]?.trim().toLowerCase() ?? '';\n const received = actual.split(';')[0]?.trim().toLowerCase() ?? '';\n return (\n expected === received ||\n (expected === 'application/*' && received.startsWith('application/')) ||\n (expected === 'application/json' && received.endsWith('+json'))\n );\n}\n\nfunction validateParameters(input: RequestValidationInput): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n for (const parameter of input.route.parameters) {\n if (!parameter.schema) continue;\n const location = `${parameter.in}.${parameter.name}`;\n const raw = parameterRawValue(parameter, input);\n if (raw === undefined) {\n if (parameter.required)\n issues.push({\n location,\n message: `${location}: required parameter is missing`,\n keyword: 'required',\n });\n continue;\n }\n const value = coerceValue(raw, parameter.schema, parameter);\n const validation = validateSchema(input.root, parameter.schema, value);\n issues.push(...validation.errors.map((error) => formatAjvIssue(error, location)));\n }\n return issues;\n}\n\nfunction requestBodyContent(operation: ApiOperation): {\n content: Record<string, unknown>;\n contentTypes: string[];\n required: boolean;\n} {\n const body = isRecord(operation.requestBody) ? operation.requestBody : undefined;\n const content = isRecord(body?.content) ? body.content : {};\n return { content, contentTypes: Object.keys(content), required: body?.required === true };\n}\n\nfunction validateBody(input: RequestValidationInput): {\n issues: ValidationIssue[];\n bodyInvalid: boolean;\n} {\n const issues: ValidationIssue[] = [];\n const details = requestBodyContent(input.route.operation);\n if (details.contentTypes.length === 0) return { issues, bodyInvalid: false };\n const contentType = headerValue(input.headers, 'content-type');\n if (input.bodyPresent && !contentType) {\n issues.push({\n location: 'header.content-type',\n message: 'header.content-type: Content-Type is required for this operation',\n keyword: 'contentType',\n });\n }\n const selectedType =\n contentType &&\n details.contentTypes.find((declared) => contentTypeMatches(declared, contentType));\n if (input.bodyPresent && contentType && !selectedType) {\n issues.push({\n location: 'header.content-type',\n message: `header.content-type: expected ${details.contentTypes.join(' or ')}`,\n keyword: 'contentType',\n });\n }\n if (!input.bodyPresent) {\n if (details.required)\n issues.push({\n location: 'body',\n message: 'body: required request body is missing',\n keyword: 'required',\n });\n return { issues, bodyInvalid: issues.length > 0 };\n }\n const mediaObject =\n selectedType && isRecord(details.content[selectedType])\n ? details.content[selectedType]\n : undefined;\n const bodySchema = isRecord(mediaObject?.schema) ? (mediaObject.schema as JsonSchema) : undefined;\n if (!selectedType || !bodySchema) return { issues, bodyInvalid: issues.length > 0 };\n const root = requestRootWithoutReadOnly(input.root);\n const validation = validateSchema(root, stripReadOnly(bodySchema) as JsonSchema, input.body);\n issues.push(...validation.errors.map((error) => formatAjvIssue(error, '/body')));\n return { issues, bodyInvalid: !validation.valid || issues.length > 0 };\n}\n\nexport function validateRequest(input: RequestValidationInput): RequestValidationResult {\n const parameterIssues = validateParameters(input);\n const bodyResult = validateBody(input);\n return {\n valid: parameterIssues.length === 0 && bodyResult.issues.length === 0,\n issues: [...parameterIssues, ...bodyResult.issues],\n bodyInvalid: bodyResult.bodyInvalid,\n };\n}\n\nexport function checkSecurityPresence(\n root: OpenApiDocument,\n operation: ApiOperation,\n headers: RequestValidationInput['headers'],\n url: URL,\n): { authorized: boolean; missing: string[] } {\n const requirements = operation.security ?? root.security ?? [];\n if (requirements.length === 0) return { authorized: true, missing: [] };\n const schemes = root.components?.securitySchemes ?? {};\n const missingAll: string[] = [];\n for (const requirement of requirements) {\n const missing: string[] = [];\n for (const name of Object.keys(requirement)) {\n const scheme = schemes[name];\n if (!isRecord(scheme)) {\n missing.push(name);\n continue;\n }\n const type = String(scheme.type ?? '');\n if (type === 'apiKey') {\n const location = String(scheme.in ?? '');\n const credentialName = String(scheme.name ?? '');\n const headerCredential =\n location === 'header' ? headerValue(headers, credentialName) : undefined;\n const present =\n location === 'header'\n ? headerCredential !== undefined\n : location === 'query'\n ? url.searchParams.has(credentialName)\n : location === 'cookie'\n ? cookieValues(headerValue(headers, 'cookie')).has(credentialName)\n : false;\n if (!present) missing.push(`${name} (${location} ${credentialName})`);\n } else if (\n type === 'http' ||\n type === 'oauth2' ||\n type === 'openIdConnect' ||\n type === 'mutualTLS'\n ) {\n if (headerValue(headers, 'authorization') === undefined)\n missing.push(`${name} (Authorization)`);\n } else {\n missing.push(name);\n }\n }\n if (missing.length === 0) return { authorized: true, missing: [] };\n missingAll.push(...missing);\n }\n return { authorized: false, missing: [...new Set(missingAll)] };\n}\n\nexport function strictValidationStatus(result: RequestValidationResult): number {\n return result.bodyInvalid ? 422 : 400;\n}\n","import { createServer, type IncomingMessage, type Server, type ServerResponse } from 'node:http';\nimport { resolve } from 'node:path';\nimport { watch as watchFiles, type FSWatcher } from 'chokidar';\nimport { loadConfig } from './config/load.js';\nimport { isIP } from 'node:net';\nimport { setTimeout as sleep } from 'node:timers/promises';\nimport { configSchema, type MocklineConfig, type OverrideConfig } from './config/schema.js';\nimport { MocklineError, problem } from './errors.js';\nimport { createLogger, type Logger } from './logger.js';\nimport { loadSpec, type LoadedSpec } from './spec/load.js';\nimport { createRouter, normalizePath, type Router } from './router.js';\nimport { selectResponse } from './select.js';\nimport { RequestRecorder } from './record.js';\nimport { handleInspector } from './inspector.js';\nimport { ResourceStore } from './state/store.js';\nimport { forwardRequest, ProxyExampleRecorder } from './proxy.js';\nimport {\n checkSecurityPresence,\n strictValidationStatus,\n validateRequest,\n type ValidationIssue,\n} from './validate.js';\nimport type {\n JsonValue,\n MatchedRoute,\n MockResponse,\n RecordedRequest,\n RequestFilter,\n ResponseSource,\n} from './types.js';\n\nexport interface RequestAccessor {\n (filter?: RequestFilter): RecordedRequest[];\n get(id: string): RecordedRequest | undefined;\n clear(): void;\n}\n\nexport interface MockServer {\n readonly url: string;\n readonly requests: RequestAccessor;\n reset(): Promise<void>;\n setOverride(key: string, override: OverrideConfig): void;\n close(): Promise<void>;\n}\n\nexport type DeepPartial<T> = T extends readonly unknown[]\n ? T\n : T extends object\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : T;\n\nexport interface CreateMockServerOptions {\n spec: string;\n port?: number;\n host?: string;\n seed?: number;\n config?: DeepPartial<MocklineConfig>;\n inspector?: boolean;\n logger?: Logger;\n clock?: () => Date;\n fetch?: typeof globalThis.fetch;\n watch?: boolean;\n configFile?: string;\n reloadConfig?: () => Promise<MocklineConfig>;\n}\n\ninterface ParsedBody {\n present: boolean;\n value?: unknown;\n raw: Buffer;\n parseError?: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nclass BodyTooLargeError extends Error {\n constructor() {\n super('Request body exceeded the configured size limit.');\n this.name = 'BodyTooLargeError';\n }\n}\n\nclass InvalidJsonError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'InvalidJsonError';\n }\n}\n\nfunction asHeaders(\n headers: IncomingMessage['headers'],\n): Record<string, string | string[] | undefined> {\n return headers;\n}\n\nfunction isLoopback(host: string): boolean {\n const value = host.toLowerCase().replace(/^\\[|\\]$/g, '');\n return (\n value === 'localhost' ||\n value === '::1' ||\n value.startsWith('127.') ||\n value.startsWith('::ffff:127.') ||\n (isIP(value) === 0 && value.endsWith('.localhost'))\n );\n}\n\nfunction hostnameForUrl(host: string): string {\n const value = host.replace(/^\\[|\\]$/g, '');\n return value.includes(':') ? `[${value}]` : value;\n}\n\nfunction applyCors(req: IncomingMessage, res: ServerResponse, config: MocklineConfig): void {\n if (!config.cors.enabled) return;\n const origin = req.headers.origin;\n const allowed = config.cors.origins;\n if (allowed.includes('*')) res.setHeader('Access-Control-Allow-Origin', '*');\n else if (origin && allowed.includes(origin)) {\n res.setHeader('Access-Control-Allow-Origin', origin);\n res.setHeader('Vary', 'Origin');\n }\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD');\n const requestHeaders = req.headers['access-control-request-headers'];\n res.setHeader(\n 'Access-Control-Allow-Headers',\n requestHeaders ??\n 'Content-Type, Authorization, Prefer, X-Mockline-Status, X-Mockline-Delay, X-Mockline-Error',\n );\n res.setHeader('Access-Control-Max-Age', '600');\n}\n\nfunction writeJson(\n res: ServerResponse,\n status: number,\n body: unknown,\n headers: Record<string, string> = {},\n head = false,\n): void {\n if (res.destroyed || res.writableEnded) return;\n const safeStatus = Number.isInteger(status) && status >= 100 && status <= 599 ? status : 500;\n res.statusCode = safeStatus;\n for (const [name, value] of Object.entries(headers)) {\n try {\n res.setHeader(name, value);\n } catch {\n // Ignore an invalid override header rather than crashing the server.\n }\n }\n if (!res.hasHeader('content-type'))\n res.setHeader('content-type', 'application/json; charset=utf-8');\n if (head || safeStatus === 204 || safeStatus === 304) {\n res.end();\n return;\n }\n const contentType = String(res.getHeader('content-type') ?? '').toLowerCase();\n let serialized: string | Buffer;\n if (Buffer.isBuffer(body)) serialized = body;\n else if (typeof body === 'string' && !contentType.includes('json')) serialized = body;\n else if (body === undefined) serialized = '';\n else {\n try {\n serialized = JSON.stringify(body);\n } catch {\n res.statusCode = 500;\n serialized = JSON.stringify(\n problem(\n 500,\n 'Internal Server Error',\n 'The selected response body could not be serialized.',\n ),\n );\n res.setHeader('content-type', 'application/problem+json; charset=utf-8');\n }\n }\n res.setHeader(\n 'content-length',\n Buffer.isBuffer(serialized) ? serialized.byteLength : Buffer.byteLength(serialized),\n );\n try {\n res.end(serialized);\n } catch {\n // A client may disconnect after headers; closing that socket is expected.\n res.destroy();\n }\n}\n\nasync function readBody(req: IncomingMessage, limit: number): Promise<ParsedBody> {\n const declaredLength = req.headers['content-length'];\n if (typeof declaredLength === 'string') {\n const parsedLength = Number(declaredLength);\n if (!Number.isFinite(parsedLength) || parsedLength < 0)\n throw new InvalidJsonError('Invalid Content-Length header.');\n if (parsedLength > limit) {\n req.resume();\n throw new BodyTooLargeError();\n }\n }\n const chunks: Buffer[] = [];\n let size = 0;\n try {\n for await (const chunk of req) {\n const buffer = Buffer.isBuffer(chunk)\n ? chunk\n : chunk instanceof Uint8Array\n ? Buffer.from(chunk)\n : Buffer.from(String(chunk));\n size += buffer.byteLength;\n if (size > limit) {\n req.resume();\n throw new BodyTooLargeError();\n }\n chunks.push(buffer);\n }\n } catch (error) {\n if (error instanceof BodyTooLargeError) throw error;\n if (req.destroyed) throw error;\n throw new InvalidJsonError('Could not read request body.');\n }\n if (size === 0) return { present: false, raw: Buffer.alloc(0) };\n const raw = Buffer.concat(chunks);\n const text = raw.toString('utf8');\n const contentType =\n String(req.headers['content-type'] ?? '')\n .split(';')[0]\n ?.trim()\n .toLowerCase() ?? '';\n if (contentType === 'application/json' || contentType.endsWith('+json')) {\n try {\n return { present: true, value: JSON.parse(text) as unknown, raw };\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'invalid JSON';\n return { present: true, raw, parseError: `Malformed JSON request body: ${reason}` };\n }\n }\n return { present: true, value: text, raw };\n}\n\nfunction issueStrings(issues: ValidationIssue[]): string[] {\n return issues.map((issue) => issue.message);\n}\n\nfunction problemResponse(\n status: number,\n title: string,\n detail: string,\n extra: Record<string, JsonValue> = {},\n): MockResponse {\n return {\n status,\n body: problem(status, title, detail, extra),\n headers: { 'content-type': 'application/problem+json' },\n source: 'generated',\n };\n}\n\nfunction createRequestAccessor(recorder: RequestRecorder): RequestAccessor {\n const accessor = ((filter: RequestFilter = {}) => recorder.list(filter)) as RequestAccessor;\n accessor.get = (id: string) => recorder.get(id);\n accessor.clear = () => recorder.clear();\n return accessor;\n}\n\nfunction routeUrl(req: IncomingMessage, host: string): URL {\n const headerHost = req.headers.host;\n const fallbackHost = hostnameForUrl(host);\n return new URL(req.url ?? '/', `http://${headerHost ?? fallbackHost}`);\n}\n\nfunction setServerRequestTimeout(server: Server, timeout: number): void {\n server.requestTimeout = timeout;\n server.headersTimeout = Math.min(timeout, 60_000);\n}\n\nexport async function createMockServer(options: CreateMockServerOptions): Promise<MockServer> {\n const loaded = await loadSpec(options.spec);\n let config = configSchema.parse({\n ...(options.config ?? {}),\n ...(options.port !== undefined ? { port: options.port } : {}),\n ...(options.host !== undefined ? { host: options.host } : {}),\n ...(options.seed !== undefined ? { seed: options.seed } : {}),\n });\n const logger = options.logger ?? createLogger();\n const inspectorRequested = options.inspector ?? config.inspector.enabled;\n const inspectorEnabled =\n inspectorRequested === undefined ? isLoopback(config.host) : inspectorRequested;\n if (!isLoopback(config.host)) {\n if (inspectorEnabled)\n logger.warn(\n 'The inspector API is enabled on a non-loopback bind; use it only on a trusted network.',\n );\n else\n logger.warn(\n 'The inspector API is disabled for a non-loopback bind. Use --inspector only on a trusted network.',\n );\n }\n if (['0.0.0.0', '::'].includes(config.host))\n logger.warn(`Binding to ${config.host} exposes this mock server to the network.`);\n\n const routerState: { current: Router } = { current: createRouter(loaded.document) };\n const specState: { current: LoadedSpec } = { current: loaded };\n const stateStoreState = {\n current: new ResourceStore(routerState.current, loaded.document, config),\n };\n const recorder = new RequestRecorder(config, options.clock);\n const proxyExamples = new ProxyExampleRecorder(config.proxy.recordFile);\n const requestCounters = new Map<string, number>();\n const sequenceIndexes = new Map<string, number>();\n const startedAt = options.clock?.() ?? new Date();\n const boundPort = config.port;\n const boundHost = config.host;\n const resetRuntime = async (): Promise<void> => {\n requestCounters.clear();\n sequenceIndexes.clear();\n stateStoreState.current.reset();\n };\n let closing = false;\n let watcher: FSWatcher | undefined;\n let specReloadTimer: NodeJS.Timeout | undefined;\n let configReloadTimer: NodeJS.Timeout | undefined;\n const handler = async (req: IncomingMessage, res: ServerResponse): Promise<void> => {\n const started = (options.clock ?? (() => new Date()))().getTime();\n const method = (req.method ?? 'GET').toUpperCase();\n let url: URL;\n try {\n url = routeUrl(req, config.host);\n } catch {\n url = new URL('/', 'http://mockline.local');\n applyCors(req, res, config);\n const failure = problemResponse(400, 'Bad Request', 'The request URL is malformed.');\n writeJson(res, failure.status, failure.body, failure.headers);\n if (config.recording.enabled)\n recorder.record({\n method,\n url: req.url ?? '/',\n headers: asHeaders(req.headers),\n responseStatus: failure.status,\n responseSource: 'error',\n durationMs: Math.max(0, (options.clock ?? (() => new Date()))().getTime() - started),\n validationErrors: ['Malformed request URL'],\n });\n return;\n }\n applyCors(req, res, config);\n const pathname = normalizePath(url.pathname);\n let body: unknown;\n let bodyPresent: boolean;\n let rawBody: Buffer<ArrayBufferLike> = Buffer.alloc(0);\n let route: MatchedRoute | undefined;\n let response: MockResponse = problemResponse(\n 500,\n 'Internal Server Error',\n 'Request processing did not complete.',\n );\n let validationErrors: string[] = [];\n let source: ResponseSource | 'error' | 'inspector' = 'error';\n let responseHeaders: Record<string, string> = {};\n const forward = async (matchedRoute?: MatchedRoute): Promise<MockResponse> => {\n if (!config.proxy.url)\n return problemResponse(502, 'Bad Gateway', 'No proxy upstream is configured.');\n const proxied = await forwardRequest({\n upstream: config.proxy.url,\n method,\n requestUrl: url,\n headers: asHeaders(req.headers),\n body: rawBody,\n config: config.proxy,\n fetchImpl: options.fetch,\n });\n if (!proxied.blocked && config.proxy.recordFile) {\n proxyExamples.record({\n method,\n path: `${url.pathname}${url.search}`,\n ...(matchedRoute ? { operationId: matchedRoute.operationId } : {}),\n status: proxied.status,\n headers: proxied.headers,\n body: proxied.body,\n });\n }\n return {\n status: proxied.status,\n body: proxied.body,\n headers: proxied.headers,\n source: 'proxy',\n };\n };\n\n try {\n if (pathname === '/__mockline' || pathname.startsWith('/__mockline/')) {\n const inspectorResponse = await handleInspector(method, url, {\n enabled: inspectorEnabled,\n recorder,\n config,\n spec: specState.current,\n startedAt,\n reset: resetRuntime,\n });\n response = inspectorResponse\n ? {\n status: inspectorResponse.status,\n ...(inspectorResponse.body !== undefined ? { body: inspectorResponse.body } : {}),\n ...(inspectorResponse.headers ? { headers: inspectorResponse.headers } : {}),\n source: 'generated',\n }\n : problemResponse(404, 'Not Found', 'The inspector endpoint does not exist.');\n source = 'inspector';\n } else if (\n method === 'OPTIONS' &&\n config.cors.enabled &&\n req.headers['access-control-request-method']\n ) {\n response = { status: 204, source: 'generated' };\n source = 'generated';\n } else {\n const read = await readBody(req, config.requestBodyLimit);\n body = read.value;\n bodyPresent = read.present;\n rawBody = read.raw;\n if (config.proxy.all && config.proxy.url) {\n response = await forward();\n source = 'proxy';\n } else {\n const match = routerState.current.match(method, pathname);\n if (!match) {\n if (read.parseError && !config.proxy.url) throw new InvalidJsonError(read.parseError);\n if (config.proxy.url) {\n response = await forward();\n source = 'proxy';\n } else {\n const methods = routerState.current.methodsForPath(pathname);\n const nearest = routerState.current.nearestPath(pathname);\n if (methods.length > 0) {\n response = problemResponse(\n 405,\n 'Method Not Allowed',\n `Method ${method} is not allowed for ${pathname}.`,\n nearest ? { nearestPath: nearest } : {},\n );\n responseHeaders = { Allow: methods.join(', ') };\n } else {\n response = problemResponse(\n 404,\n 'Not Found',\n nearest\n ? `No route matched. Nearest path: ${nearest}.`\n : `No route matched ${pathname}.`,\n nearest ? { nearestPath: nearest } : {},\n );\n }\n source = 'error';\n }\n } else {\n if (read.parseError) throw new InvalidJsonError(read.parseError);\n route = match.route;\n let authorized = true;\n if (config.enforceAuth) {\n const auth = checkSecurityPresence(\n specState.current.document,\n route.operation,\n asHeaders(req.headers),\n url,\n );\n authorized = auth.authorized;\n if (!authorized) {\n response = problemResponse(\n 401,\n 'Unauthorized',\n 'A credential declared by the OpenAPI security scheme is required.',\n { errors: auth.missing },\n );\n responseHeaders = { 'www-authenticate': 'Bearer realm=\"Bearer\"' };\n source = 'error';\n }\n }\n if (authorized) {\n const validation =\n config.validate === 'off'\n ? { valid: true, issues: [], bodyInvalid: false }\n : validateRequest({\n root: specState.current.document,\n route,\n params: match.params,\n url,\n headers: asHeaders(req.headers),\n body,\n bodyPresent,\n });\n const strictFailure = !validation.valid && config.validate === 'strict';\n if (!validation.valid) {\n validationErrors = issueStrings(validation.issues);\n if (strictFailure) {\n const status = strictValidationStatus(validation);\n response = problemResponse(\n status,\n status === 422 ? 'Unprocessable Content' : 'Bad Request',\n 'Request validation failed.',\n {\n errors: validation.issues.map((issue) => ({\n location: issue.location,\n message: issue.message,\n })),\n },\n );\n source = 'error';\n } else if (config.validate === 'warn') {\n responseHeaders['X-Mockline-Validation'] = 'failed';\n for (const error of validationErrors)\n logger.warn(`${route.operationId}: ${error}`);\n }\n }\n if (!strictFailure) {\n const key = `${route.method} ${route.path}`;\n const counter = requestCounters.get(key) ?? 0;\n requestCounters.set(key, counter + 1);\n const stateResponse = config.stateful.enabled\n ? () => stateStoreState.current.handle(match.route, match.params, url, body)\n : undefined;\n const selected = selectResponse({\n root: specState.current.document,\n route,\n config,\n headers: asHeaders(req.headers),\n url,\n body,\n requestCounter: counter,\n sequenceIndexes,\n stateResponse,\n });\n response = selected.response;\n if (selected.sequenceKey) {\n const index = sequenceIndexes.get(selected.sequenceKey) ?? 0;\n sequenceIndexes.set(selected.sequenceKey, index + 1);\n }\n for (const warning of selected.warnings)\n logger.warn(`${route.operationId}: ${warning}`);\n source = response.source;\n if (responseHeaders['X-Mockline-Validation'])\n response = {\n ...response,\n headers: { ...response.headers, 'X-Mockline-Validation': 'failed' },\n };\n }\n }\n }\n }\n }\n } catch (error) {\n if (error instanceof BodyTooLargeError) {\n response = problemResponse(413, 'Content Too Large', error.message);\n validationErrors = [error.message];\n } else if (error instanceof InvalidJsonError) {\n response = problemResponse(400, 'Bad Request', error.message);\n validationErrors = [error.message];\n } else {\n logger.error(error instanceof Error ? error.message : String(error));\n response = problemResponse(\n 500,\n 'Internal Server Error',\n 'Mockline could not process this request.',\n );\n }\n source = 'error';\n }\n\n const headers = { ...response.headers, ...responseHeaders };\n response = { ...response, headers };\n try {\n if (response.delay && response.delay > 0) await sleep(response.delay);\n writeJson(res, response.status, response.body, headers, method === 'HEAD');\n } catch (error) {\n if (!res.destroyed && !res.headersSent) {\n const failure = problem(\n 500,\n 'Internal Server Error',\n error instanceof Error ? error.message : 'Response failed.',\n );\n writeJson(res, 500, failure, { 'content-type': 'application/problem+json' });\n source = 'error';\n }\n } finally {\n const ended = (options.clock ?? (() => new Date()))().getTime();\n if (config.recording.enabled) {\n recorder.record({\n method,\n url: `${url.pathname}${url.search}`,\n ...(route ? { operationId: route.operationId, matchedPath: route.path } : {}),\n headers: asHeaders(req.headers),\n ...(body !== undefined ? { body } : {}),\n responseStatus: res.statusCode || response.status,\n responseSource: source,\n durationMs: Math.max(0, ended - started),\n validationErrors,\n });\n }\n }\n };\n\n const httpServer: Server = createServer((req, res) => {\n void handler(req, res).catch((error: unknown) => {\n if (!res.destroyed && !res.headersSent) {\n const detail = error instanceof Error ? error.message : 'Unexpected request failure.';\n writeJson(res, 500, problem(500, 'Internal Server Error', detail), {\n 'content-type': 'application/problem+json',\n });\n }\n });\n });\n setServerRequestTimeout(httpServer, config.requestTimeoutMs);\n httpServer.on('clientError', (_error, socket) => {\n if (socket.writable && !socket.destroyed)\n socket.end('HTTP/1.1 400 Bad Request\\r\\nConnection: close\\r\\nContent-Length: 0\\r\\n\\r\\n');\n else socket.destroy();\n });\n\n try {\n await new Promise<void>((resolve, reject) => {\n const onError = (error: Error): void => {\n httpServer.off('listening', onListening);\n reject(error);\n };\n const onListening = (): void => {\n httpServer.off('error', onError);\n resolve();\n };\n httpServer.once('error', onError);\n httpServer.once('listening', onListening);\n httpServer.listen(config.port, config.host);\n });\n } catch (error) {\n const code =\n isRecord(error) && error.code === 'EADDRINUSE'\n ? 'Port is already in use'\n : 'Could not start server';\n throw new MocklineError(\n `${code} (${config.host}:${config.port}): ${error instanceof Error ? error.message : String(error)}`,\n 3,\n error,\n );\n }\n const address = httpServer.address();\n const actualPort = address && typeof address !== 'string' ? address.port : config.port;\n const url = `http://${hostnameForUrl(config.host)}:${actualPort}`;\n const requests = createRequestAccessor(recorder);\n\n if (options.watch) {\n const specPath = resolve(options.spec);\n const configPaths = options.configFile\n ? [resolve(options.configFile)]\n : [resolve('mockline.yaml'), resolve('mockline.yml'), resolve('mockline.json')];\n const watchedPaths = [...new Set([specPath, ...configPaths])];\n const reloadSpec = async (): Promise<void> => {\n try {\n const nextSpec = await loadSpec(options.spec);\n const nextRouter = createRouter(nextSpec.document);\n const nextStore = new ResourceStore(nextRouter, nextSpec.document, config);\n specState.current = nextSpec;\n routerState.current = nextRouter;\n stateStoreState.current = nextStore;\n requestCounters.clear();\n sequenceIndexes.clear();\n logger.info(`Reloaded OpenAPI spec ${options.spec}`);\n } catch (error) {\n logger.error(\n `Invalid OpenAPI change; keeping the last good spec: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n };\n const reloadConfiguration = async (): Promise<void> => {\n try {\n const loadedConfig = options.reloadConfig\n ? await options.reloadConfig()\n : (await loadConfig(options.configFile)).config;\n if (loadedConfig.port !== boundPort || loadedConfig.host !== boundHost) {\n logger.warn(\n 'Hot reload cannot change the bound host or port; keeping the original listener address.',\n );\n }\n const nextConfig = configSchema.parse({\n ...loadedConfig,\n port: boundPort,\n host: boundHost,\n });\n const stateChanged =\n config.seed !== nextConfig.seed ||\n JSON.stringify(config.stateful) !== JSON.stringify(nextConfig.stateful) ||\n JSON.stringify(config.generation) !== JSON.stringify(nextConfig.generation);\n config = nextConfig;\n recorder.setConfig(config);\n proxyExamples.setFile(config.proxy.recordFile);\n stateStoreState.current.setConfig(config);\n if (stateChanged) stateStoreState.current.reset();\n setServerRequestTimeout(httpServer, config.requestTimeoutMs);\n logger.info('Reloaded Mockline configuration');\n } catch (error) {\n logger.error(\n `Invalid config change; keeping the last good config: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n };\n const schedule = (kind: 'spec' | 'config'): void => {\n if (closing) return;\n const previous = kind === 'spec' ? specReloadTimer : configReloadTimer;\n if (previous) clearTimeout(previous);\n const timer = setTimeout(() => {\n if (kind === 'spec') void reloadSpec();\n else void reloadConfiguration();\n }, 120);\n timer.unref();\n if (kind === 'spec') specReloadTimer = timer;\n else configReloadTimer = timer;\n };\n watcher = watchFiles(watchedPaths, {\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 120, pollInterval: 30 },\n });\n watcher.on('all', (event, changedPath) => {\n if (!['add', 'change', 'unlink'].includes(event)) return;\n const absolutePath = resolve(changedPath);\n if (absolutePath === specPath) schedule('spec');\n if (configPaths.includes(absolutePath)) schedule('config');\n });\n watcher.on('error', (error: unknown) => {\n logger.error(`Watch error: ${error instanceof Error ? error.message : String(error)}`);\n });\n }\n\n return {\n url,\n requests,\n async reset() {\n await resetRuntime();\n },\n setOverride(key, override) {\n const parsed = configSchema.parse({ overrides: { [key]: override } }).overrides[key];\n if (!parsed) throw new MocklineError(`Invalid override for ${key}`, 1);\n config = { ...config, overrides: { ...config.overrides, [key]: parsed } };\n stateStoreState.current.setConfig(config);\n },\n async close() {\n if (closing) return;\n closing = true;\n if (specReloadTimer) clearTimeout(specReloadTimer);\n if (configReloadTimer) clearTimeout(configReloadTimer);\n await watcher?.close();\n await new Promise<void>((resolve, reject) => {\n httpServer.close((error) => (error ? reject(error) : resolve()));\n });\n await recorder.flush();\n await proxyExamples.flush();\n },\n };\n}\n","#!/usr/bin/env node\nimport { existsSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport { writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport cac from 'cac';\nimport pc from 'picocolors';\nimport { ZodError } from 'zod';\nimport { configSchema, type MocklineConfig } from './config/schema.js';\nimport { formatConfigErrors, loadConfig } from './config/load.js';\nimport { MocklineError } from './errors.js';\nimport { createLogger } from './logger.js';\nimport { loadSpec } from './spec/load.js';\nimport { summarizeSpec } from './spec/summary.js';\nimport { createMockServer } from './server.js';\n\nconst packageMetadata = createRequire(import.meta.url)('../package.json') as {\n version: string;\n};\nconst VERSION = packageMetadata.version;\nconst SAMPLE_SPEC = `openapi: 3.0.3\ninfo:\n title: Mockline starter Petstore\n version: 1.0.0\nservers:\n - url: http://127.0.0.1:4010\npaths:\n /pets:\n get:\n operationId: listPets\n parameters:\n - name: limit\n in: query\n schema: { type: integer, minimum: 1, maximum: 100, default: 20 }\n responses:\n '200':\n description: A list of pets\n content:\n application/json:\n examples:\n cats:\n value:\n - id: 1\n name: Milo\n tag: cat\n schema:\n type: array\n items: { $ref: '#/components/schemas/Pet' }\n post:\n operationId: createPet\n requestBody:\n required: true\n content:\n application/json:\n schema: { $ref: '#/components/schemas/PetInput' }\n responses:\n '201':\n description: Created pet\n content:\n application/json:\n schema: { $ref: '#/components/schemas/Pet' }\n /pets/{petId}:\n parameters:\n - name: petId\n in: path\n required: true\n schema: { type: integer }\n get:\n operationId: getPet\n responses:\n '200':\n description: A pet\n content:\n application/json:\n schema: { $ref: '#/components/schemas/Pet' }\n '404':\n description: Not found\n content:\n application/problem+json:\n example: { title: Not Found, status: 404 }\n put:\n operationId: replacePet\n requestBody:\n required: true\n content:\n application/json:\n schema: { $ref: '#/components/schemas/PetInput' }\n responses:\n '200':\n description: Updated pet\n content:\n application/json:\n schema: { $ref: '#/components/schemas/Pet' }\n patch:\n operationId: updatePet\n requestBody:\n required: true\n content:\n application/json:\n schema: { $ref: '#/components/schemas/PetInput' }\n responses:\n '200':\n description: Updated pet\n content:\n application/json:\n schema: { $ref: '#/components/schemas/Pet' }\n delete:\n operationId: deletePet\n responses:\n '204':\n description: Deleted pet\ncomponents:\n schemas:\n PetInput:\n type: object\n required: [name]\n properties:\n name: { type: string, minLength: 2 }\n tag: { type: string }\n Pet:\n allOf:\n - $ref: '#/components/schemas/PetInput'\n - type: object\n required: [id]\n properties:\n id: { type: integer, minimum: 1 }\n`;\nconst SAMPLE_CONFIG = `# Mockline configuration. CLI flags override these values.\nport: 4010\nhost: 127.0.0.1\nprefer: example\nvalidate: warn\nlatency: 0\nerrors:\n rate: 0\n statuses: [500, 503]\nstateful:\n enabled: false\n seedItems: 3\nrecording:\n enabled: true\n maxRequests: 500\n redactHeaders: [authorization, cookie, set-cookie, x-api-key, api-key, x-auth-token]\ngeneration:\n hints: true\n counter: false\n maxDepth: 3\n minArrayItems: 1\n maxArrayItems: 3\ncontrolHeaders:\n allow: true\n`;\n\ninterface CliOptions extends Record<string, unknown> {\n config?: string;\n port?: string | number;\n host?: string;\n seed?: string | number;\n prefer?: string;\n delay?: string;\n errorRate?: string | number;\n errorStatuses?: string;\n validate?: string;\n stateful?: boolean;\n proxy?: string;\n proxyAll?: boolean;\n proxyRecord?: string;\n proxyAllowPrivate?: boolean;\n cors?: boolean;\n inspector?: boolean;\n watch?: boolean;\n recordFile?: string;\n enforceAuth?: boolean;\n seedCounter?: boolean;\n quiet?: boolean;\n verbose?: boolean;\n color?: boolean;\n force?: boolean;\n}\n\nfunction optionString(options: CliOptions, key: keyof CliOptions): string | undefined {\n const value = options[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction parseInteger(value: string | number | undefined, name: string): number | undefined {\n if (value === undefined) return undefined;\n const parsed = typeof value === 'number' ? value : Number(value);\n if (!Number.isInteger(parsed)) throw new MocklineError(`--${name} must be an integer.`, 2);\n return parsed;\n}\n\nfunction parseDelay(value: string | undefined): MocklineConfig['latency'] | undefined {\n if (value === undefined) return undefined;\n const range = /^(\\d+(?:\\.\\d+)?)-(\\d+(?:\\.\\d+)?)$/.exec(value);\n if (range) {\n const min = Number(range[1]);\n const max = Number(range[2]);\n if (max < min)\n throw new MocklineError('--delay range must be min-max with min no greater than max.', 2);\n return [min, max];\n }\n const fixed = Number(value);\n if (!Number.isFinite(fixed) || fixed < 0)\n throw new MocklineError('--delay must be a non-negative number or min-max range.', 2);\n return fixed;\n}\n\nfunction parseStatuses(value: string | undefined): number[] | undefined {\n if (value === undefined) return undefined;\n const statuses = value.split(',').map((item) => Number(item.trim()));\n if (\n statuses.length === 0 ||\n statuses.some((status) => !Number.isInteger(status) || status < 400 || status > 599)\n ) {\n throw new MocklineError(\n '--error-statuses must be a comma-separated list of HTTP error status codes.',\n 2,\n );\n }\n return statuses;\n}\n\nfunction makeConfig(base: MocklineConfig, options: CliOptions): MocklineConfig {\n const port = parseInteger(options.port, 'port');\n const seed = parseInteger(options.seed, 'seed');\n const errorRate = options.errorRate === undefined ? undefined : Number(options.errorRate);\n if (errorRate !== undefined && (!Number.isFinite(errorRate) || errorRate < 0 || errorRate > 1)) {\n throw new MocklineError('--error-rate must be a number from 0 to 1.', 2);\n }\n const prefer = optionString(options, 'prefer');\n if (prefer && prefer !== 'example' && prefer !== 'generate')\n throw new MocklineError('--prefer must be example or generate.', 2);\n const validate = optionString(options, 'validate');\n if (validate && !['off', 'warn', 'strict'].includes(validate))\n throw new MocklineError('--validate must be off, warn, or strict.', 2);\n const statuses = parseStatuses(options.errorStatuses);\n const delay = parseDelay(options.delay);\n try {\n return configSchema.parse({\n ...base,\n ...(port !== undefined ? { port } : {}),\n ...(options.host !== undefined ? { host: options.host } : {}),\n ...(seed !== undefined ? { seed } : {}),\n ...(prefer ? { prefer } : {}),\n ...(delay !== undefined ? { latency: delay } : {}),\n ...(validate ? { validate } : {}),\n errors: {\n ...base.errors,\n ...(errorRate !== undefined ? { rate: errorRate } : {}),\n ...(statuses ? { statuses } : {}),\n },\n stateful: {\n ...base.stateful,\n ...(options.stateful ? { enabled: true } : {}),\n },\n proxy: {\n ...base.proxy,\n ...(options.proxy ? { url: options.proxy } : {}),\n ...(options.proxyAll ? { all: true } : {}),\n ...(options.proxyAllowPrivate ? { allowPrivate: true } : {}),\n ...(options.proxyRecord ? { recordFile: options.proxyRecord } : {}),\n },\n cors: {\n ...base.cors,\n ...(options.cors !== undefined ? { enabled: options.cors } : {}),\n },\n recording: {\n ...base.recording,\n ...(options.recordFile ? { file: options.recordFile } : {}),\n },\n inspector: {\n ...base.inspector,\n ...(options.inspector ? { enabled: true } : {}),\n },\n enforceAuth: Boolean(options.enforceAuth) || base.enforceAuth,\n generation: {\n ...base.generation,\n ...(options.seedCounter ? { counter: true } : {}),\n },\n });\n } catch (error) {\n if (error instanceof ZodError) {\n throw new MocklineError(`Invalid CLI configuration:\\n${formatConfigErrors(error)}`, 2);\n }\n throw error;\n }\n}\n\nfunction table(spec: Awaited<ReturnType<typeof loadSpec>>, configKeys: string[] = []): string {\n const rows = summarizeSpec(spec, configKeys);\n if (rows.length === 0) return 'No operations found.';\n const widths = [\n Math.max(6, ...rows.map((row) => row.method.length)),\n Math.max(4, ...rows.map((row) => row.path.length)),\n Math.max(11, ...rows.map((row) => row.operationId.length)),\n Math.max(6, ...rows.map((row) => row.defaultStatus.length)),\n Math.max(6, ...rows.map((row) => row.source.length)),\n ];\n const headers = ['METHOD', 'PATH', 'OPERATION ID', 'STATUS', 'SOURCE'];\n const line = (values: string[]): string =>\n values.map((value, index) => value.padEnd(widths[index] ?? value.length)).join(' ');\n return [\n line(headers),\n line(widths.map((width) => '-'.repeat(width))),\n ...rows.map((row) =>\n line([row.method, row.path, row.operationId, row.defaultStatus, row.source]),\n ),\n ].join('\\n');\n}\n\nasync function initProject(\n options: CliOptions,\n logger: ReturnType<typeof createLogger>,\n): Promise<void> {\n const configFile = resolve('mockline.yaml');\n const specFile = resolve('openapi.yaml');\n if (!options.force && (existsSync(configFile) || existsSync(specFile))) {\n throw new MocklineError(\n 'mockline.yaml or openapi.yaml already exists. Use --force to overwrite them.',\n 1,\n );\n }\n await writeFile(configFile, SAMPLE_CONFIG, 'utf8');\n await writeFile(specFile, SAMPLE_SPEC, 'utf8');\n logger.info('Created mockline.yaml and openapi.yaml. Start with: mockline serve openapi.yaml');\n}\n\nasync function startServing(specPath: string, options: CliOptions): Promise<void> {\n const loadedConfig = await loadConfig(options.config);\n const config = makeConfig(loadedConfig.config, options);\n const logger = createLogger({\n quiet: options.quiet,\n verbose: options.verbose,\n color: options.color,\n });\n const server = await createMockServer({\n spec: specPath,\n config,\n inspector: options.inspector,\n logger,\n watch: options.watch === true,\n configFile: loadedConfig.path ?? options.config,\n reloadConfig: async () => {\n const freshConfig = await loadConfig(options.config);\n return makeConfig(freshConfig.config, options);\n },\n });\n logger.info(`Mock API listening at ${server.url}`);\n if (\n options.quiet !== true &&\n (config.inspector.enabled ?? ['127.0.0.1', 'localhost', '::1'].includes(config.host))\n )\n logger.info(`Inspector: ${server.url}/__mockline/health`);\n let stopping = false;\n const stop = (): void => {\n if (stopping) return;\n stopping = true;\n void server\n .close()\n .then(() => {\n process.exitCode = 0;\n })\n .catch((error: unknown) => {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exitCode = 3;\n });\n };\n process.once('SIGINT', stop);\n process.once('SIGTERM', stop);\n}\n\nexport async function runCli(argv = process.argv.slice(2)): Promise<number> {\n const cli = cac('mockline');\n cli.version(VERSION);\n cli.help();\n let action = Promise.resolve();\n let failureCode = 0;\n const logger = createLogger();\n const register =\n (handler: (...args: unknown[]) => Promise<void>): ((...args: unknown[]) => void) =>\n (...args) => {\n action = handler(...args).catch((error: unknown) => {\n const code = error instanceof MocklineError ? error.exitCode : 3;\n failureCode = code;\n const message = error instanceof Error ? error.message : String(error);\n console.error(pc.red('error'), message);\n });\n };\n\n cli\n .command('init', 'Create a commented config and a starter OpenAPI spec')\n .option('--force', 'Overwrite existing starter files')\n .action(\n register(async (...args) => {\n const options = (args[0] ?? {}) as CliOptions;\n await initProject(options, logger);\n }),\n );\n\n cli\n .command('serve <spec>', 'Start a mock API server')\n .option('--port <port>', 'Port to listen on; use 0 to select a free port')\n .option('--host <host>', 'Bind address (default 127.0.0.1)')\n .option('--config <file>', 'YAML or JSON config file')\n .option('--seed <n>', 'Deterministic generation seed')\n .option('--prefer <mode>', 'Prefer examples or schema generation')\n .option('--delay <ms|min-max>', 'Global response latency')\n .option('--error-rate <rate>', 'Probability of injected failures from 0 to 1')\n .option('--error-statuses <codes>', 'Failure statuses, comma-separated')\n .option('--validate <mode>', 'Request validation: off, warn, or strict')\n .option('--stateful', 'Enable in-memory resource collections')\n .option('--proxy <url>', 'Forward unmatched requests to an upstream')\n .option('--proxy-all', 'Forward all non-inspector requests to the upstream')\n .option('--proxy-record <file>', 'Save upstream responses as JSON examples')\n .option('--proxy-allow-private', 'Permit upstreams resolving to private addresses')\n .option('--cors', 'Enable CORS (default)')\n .option('--no-cors', 'Disable CORS')\n .option('--inspector', 'Enable the inspector on a non-loopback bind')\n .option('--watch', 'Reload valid spec and config changes')\n .option('--record-file <path>', 'Append redacted request records as JSONL')\n .option('--enforce-auth', 'Require declared security credentials to be present')\n .option('--seed-counter', 'Vary repeat requests with an operation-local counter')\n .option('--quiet', 'Suppress normal logs')\n .option('--verbose', 'Enable diagnostic logs')\n .option('--no-color', 'Disable color output')\n .action(\n register(async (spec: unknown, optionsUnknown: unknown) => {\n const specPath = String(spec);\n const options = (optionsUnknown ?? {}) as CliOptions;\n await startServing(specPath, options);\n }),\n );\n\n cli.command('routes <spec>', 'List operations and their default response source').action(\n register(async (spec: unknown) => {\n const loaded = await loadSpec(String(spec));\n const config = await loadConfig();\n console.log(table(loaded, Object.keys(config.config.overrides)));\n }),\n );\n\n cli\n .command('validate <spec>', 'Validate an OpenAPI document and report mocking limitations')\n .action(\n register(async (spec: unknown) => {\n const loaded = await loadSpec(String(spec));\n const operationCount = summarizeSpec(loaded).length;\n const version = loaded.document.openapi ?? 'OpenAPI';\n console.log(\n `${pc.green('Valid')} ${version}: ${operationCount} operation(s), ${loaded.warnings.length} warning(s).`,\n );\n for (const warning of loaded.warnings) {\n const location = warning.operationId\n ? ` (${warning.operationId}${warning.path ? ` ${warning.path}` : ''})`\n : '';\n console.warn(`${pc.yellow('warning')}${location}: ${warning.message}`);\n }\n }),\n );\n\n cli.on('command:*', () => {\n console.error(`Unknown command: ${argv[0] ?? ''}`);\n cli.outputHelp();\n failureCode = 2;\n });\n\n try {\n if (argv.length === 0) {\n cli.outputHelp();\n return 0;\n }\n cli.parse(['node', 'mockline', ...argv], { run: true });\n await action;\n return failureCode;\n } catch (error) {\n const code = error instanceof MocklineError ? error.exitCode : 2;\n console.error(pc.red('error'), error instanceof Error ? error.message : String(error));\n return code;\n }\n}\n\nif (process.argv[1] && resolve(process.argv[1]).endsWith('/mockline')) {\n // Package manager bin shims generally invoke the file by its `mockline` name.\n void runCli().then((code) => {\n process.exitCode = code;\n });\n} else if (process.argv[1] && process.argv[1].endsWith('cli.js')) {\n void runCli().then((code) => {\n process.exitCode = code;\n });\n}\n"]}
|