{"version":3,"sources":["../src/cli.ts","../src/parser.ts","../src/server.ts","../src/generator.ts","../src/config.ts"],"sourcesContent":["import yargs from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\nimport chokidar from \"chokidar\";\nimport * as chalk from \"chalk\";\n\nconst chalkAny: any = (chalk as any).default ?? chalk;\nimport type { MockAPIServer, MockServerOptions } from \"./types\";\nimport { parseSpec } from \"./parser\";\nimport { createMockServer } from \"./server\";\nimport { loadConfig, normalizeConfig } from \"./config\";\n\nasync function startCommand(\n  specFile: string,\n  opts: {\n    port?: number;\n    delay?: number;\n    watch?: boolean;\n    errors?: boolean;\n    slow?: boolean;\n    verbose?: boolean;\n  }\n) {\n  let server: MockAPIServer | null = null;\n  const port = opts.port ?? 3000;\n  const delay = opts.delay ?? 0;\n\n  const userConfig = await loadConfig();\n  const runtimeConfig = normalizeConfig(userConfig);\n\n  const serverOptions: MockServerOptions = {\n    port,\n    delay,\n    generators: runtimeConfig.generators,\n    delayRange: opts.slow\n      ? runtimeConfig.delayRange ?? { min: 2000, max: 5000 }\n      : runtimeConfig.delayRange,\n    errorRate: opts.errors\n      ? runtimeConfig.errorRate ?? 0.1\n      : runtimeConfig.errorRate,\n  };\n\n  async function boot() {\n    try {\n      if (opts.verbose) {\n        console.log(chalkAny.dim(`Parsing OpenAPI spec: ${specFile}`));\n      }\n      const parsed = await parseSpec(specFile);\n\n      if (opts.verbose) {\n        console.log(chalkAny.dim(`Found ${parsed.routes.length} route(s)`));\n      }\n\n      server = createMockServer(parsed, {\n        ...serverOptions,\n        verbose: opts.verbose,\n      });\n      await server.start();\n\n      // Print banner\n      console.log();\n      console.log(\n        chalkAny.bold.cyan(\"╔════════════════════════════════════════╗\")\n      );\n      console.log(\n        chalkAny.bold.cyan(\"║   api-mock-smart Mock API Server      ║\")\n      );\n      console.log(\n        chalkAny.bold.cyan(\"╚════════════════════════════════════════╝\")\n      );\n      console.log();\n\n      // Print server info\n      const delayInfo = serverOptions.delayRange\n        ? `variable (${serverOptions.delayRange.min}-${serverOptions.delayRange.max}ms)`\n        : `${delay}ms`;\n      console.log(\n        chalkAny.green(\"✓ Server running on\"),\n        chalkAny.bold(`http://localhost:${port}`)\n      );\n      console.log(chalkAny.dim(`  Delay: ${delayInfo}`));\n      if (serverOptions.errorRate && serverOptions.errorRate > 0) {\n        console.log(\n          chalkAny.dim(\n            `  Error rate: ${(serverOptions.errorRate * 100).toFixed(1)}%`\n          )\n        );\n      }\n      console.log();\n\n      // Print routes table\n      console.log(chalkAny.bold(\"Available Routes:\"));\n      console.log(chalkAny.dim(\"─\".repeat(60)));\n      for (const route of parsed.routes) {\n        const methodColor = methodToColor(route.method);\n        const methodStr = route.method.toUpperCase().padEnd(6);\n        const pathStr = route.path.padEnd(30);\n        const summaryStr = route.summary\n          ? chalkAny.dim(`- ${route.summary}`)\n          : \"\";\n        console.log(\n          `  ${methodColor(methodStr)} ${chalkAny.cyan(pathStr)} ${summaryStr}`\n        );\n      }\n      console.log(chalkAny.dim(\"─\".repeat(60)));\n      console.log();\n\n      if (opts.verbose) {\n        console.log(\n          chalkAny.dim(\"Verbose mode: Request/response logging enabled\")\n        );\n        console.log();\n      }\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      console.error(chalkAny.red(\"✗ Failed to start mock server:\"));\n      console.error(chalkAny.red(`  ${message}`));\n      if (opts.verbose && error instanceof Error && error.stack) {\n        console.error(chalkAny.dim(error.stack));\n      }\n      process.exit(1);\n    }\n  }\n\n  async function shutdown() {\n    if (server) {\n      try {\n        await server.stop();\n      } catch {\n        // ignore\n      }\n      server = null;\n    }\n  }\n\n  await boot();\n\n  if (opts.watch) {\n    console.log(chalkAny.yellow(`Watching spec file for changes: ${specFile}`));\n    const watcher = chokidar.watch(specFile, { ignoreInitial: true });\n    watcher.on(\"change\", async () => {\n      console.log(chalkAny.yellow(\"Spec file changed, reloading...\"));\n      await shutdown();\n      await boot();\n    });\n  }\n}\n\nfunction methodToColor(method: string): (str: string) => string {\n  switch (method.toLowerCase()) {\n    case \"get\":\n      return chalkAny.green;\n    case \"post\":\n      return chalkAny.blue;\n    case \"put\":\n      return chalkAny.yellow;\n    case \"delete\":\n      return chalkAny.red;\n    case \"patch\":\n      return chalkAny.magenta;\n    default:\n      return chalkAny.white;\n  }\n}\n\nexport function runCli(argv = hideBin(process.argv)) {\n  void yargs(argv)\n    .scriptName(\"api-mock-smart\")\n    .command(\n      \"start <spec>\",\n      \"Start mock API server from an OpenAPI/Swagger spec file\",\n      (y) =>\n        y\n          .positional(\"spec\", {\n            describe: \"Path or URL to OpenAPI/Swagger spec (YAML or JSON)\",\n            type: \"string\",\n          })\n          .option(\"port\", {\n            alias: \"p\",\n            type: \"number\",\n            describe: \"Port to run the server on\",\n            default: 3000,\n          })\n          .option(\"delay\", {\n            alias: \"d\",\n            type: \"number\",\n            describe: \"Response delay in milliseconds\",\n            default: 0,\n          })\n          .option(\"watch\", {\n            alias: \"w\",\n            type: \"boolean\",\n            describe: \"Watch the spec file and reload on change\",\n            default: false,\n          })\n          .option(\"errors\", {\n            type: \"boolean\",\n            describe:\n              \"Randomly return error responses (10% probability by default)\",\n            default: false,\n          })\n          .option(\"slow\", {\n            type: \"boolean\",\n            describe: \"Simulate slow network with 2-5s response delays\",\n            default: false,\n          })\n          .option(\"verbose\", {\n            alias: \"v\",\n            type: \"boolean\",\n            describe: \"Show detailed request/response logging\",\n            default: false,\n          }),\n      async (args) => {\n        const specFile = args.spec as string;\n        await startCommand(specFile, {\n          port: args.port,\n          delay: args.delay,\n          watch: args.watch,\n          errors: args.errors,\n          slow: args.slow,\n          verbose: args.verbose,\n        });\n      }\n    )\n    .demandCommand(1)\n    .help()\n    .strict()\n    .parse();\n}\n\n// Only auto-run when executed as a script in CommonJS environments\nif (typeof require !== \"undefined\" && require.main === module) {\n  runCli();\n}\n","import SwaggerParser from \"@apidevtools/swagger-parser\";\nimport type { OpenAPIV3 } from \"openapi-types\";\nimport { ParsedRoute, ParsedSpec, HttpMethod, SpecInput } from \"./types\";\n\nconst SUPPORTED_METHODS: HttpMethod[] = [\"get\", \"post\", \"put\", \"delete\", \"patch\"];\n\nexport async function parseSpec(spec: SpecInput): Promise<ParsedSpec> {\n  let document: OpenAPIV3.Document;\n\n  try {\n    if (typeof spec === \"string\") {\n      // Treat as path or URL\n      const api = (await SwaggerParser.dereference(spec)) as OpenAPIV3.Document;\n      document = api;\n    } else {\n      // Inline document\n      const api = (await SwaggerParser.dereference(spec as any)) as OpenAPIV3.Document;\n      document = api;\n    }\n  } catch (error) {\n    const message =\n      error instanceof Error ? error.message : \"Unknown error while parsing OpenAPI spec.\";\n    throw new Error(`Failed to parse OpenAPI specification: ${message}`);\n  }\n\n  if (!document.paths || typeof document.paths !== \"object\") {\n    throw new Error(\"Invalid OpenAPI specification: missing or invalid 'paths' field.\");\n  }\n\n  const routes: ParsedRoute[] = [];\n\n  for (const [path, item] of Object.entries(document.paths)) {\n    if (!item) continue;\n\n    for (const method of SUPPORTED_METHODS) {\n      const operation = (item as any)[method] as OpenAPIV3.OperationObject | undefined;\n      if (!operation) continue;\n\n      const { schema: responseSchema, statusCode } = extractResponse(operation);\n\n      routes.push({\n        method,\n        path,\n        operationId: operation.operationId,\n        summary: operation.summary,\n        description: operation.description,\n        responseSchema,\n        statusCode\n      });\n    }\n  }\n\n  if (routes.length === 0) {\n    throw new Error(\"No supported routes (GET, POST, PUT, DELETE, PATCH) found in spec.\");\n  }\n\n  return { routes };\n}\n\nfunction extractResponse(\n  operation: OpenAPIV3.OperationObject\n): { schema?: OpenAPIV3.SchemaObject; statusCode?: number } {\n  if (!operation.responses || typeof operation.responses !== \"object\") {\n    return {};\n  }\n\n  // Prefer 200, then other 2xx, then default, then any\n  const responsesEntries = Object.entries(operation.responses);\n\n  const sorted = responsesEntries.sort(([a], [b]) => {\n    if (a === \"200\") return -1;\n    if (b === \"200\") return 1;\n    const aNum = parseInt(a, 10);\n    const bNum = parseInt(b, 10);\n    const aIs2xx = aNum >= 200 && aNum < 300;\n    const bIs2xx = bNum >= 200 && bNum < 300;\n    if (aIs2xx && !bIs2xx) return -1;\n    if (!aIs2xx && bIs2xx) return 1;\n    if (a === \"default\") return -1;\n    if (b === \"default\") return 1;\n    return 0;\n  });\n\n  for (const [code, resp] of sorted) {\n    const response = resp as OpenAPIV3.ResponseObject;\n    const content = response.content;\n    if (!content) continue;\n\n    const jsonLike =\n      content[\"application/json\"] ||\n      content[\"application/*+json\"] ||\n      Object.values(content)[0];\n\n    if (!jsonLike || !jsonLike.schema) continue;\n\n    const schema = jsonLike.schema as OpenAPIV3.SchemaObject;\n    const statusCode = code === \"default\" ? undefined : parseInt(code, 10) || undefined;\n    return { schema, statusCode };\n  }\n\n  return {};\n}\n","import express, { Request, Response, NextFunction } from \"express\";\nimport cors from \"cors\";\nimport type { Server } from \"http\";\nimport { ParsedSpec, MockServerOptions, MockAPIServer } from \"./types\";\nimport { generateMockData } from \"./generator\";\n\ntype CollectionStore = Map<string, any[]>;\n\nexport function createMockServer(\n  parsed: ParsedSpec,\n  options: MockServerOptions = {}\n): MockAPIServer {\n  const app = express();\n  const port = options.port ?? 3000;\n  const errorRate = options.errorRate ?? 0;\n  const store: CollectionStore = new Map();\n  const verbose = (options as any).verbose ?? false;\n\n  app.use(cors());\n  app.use(express.json());\n\n  // Verbose logging middleware\n  if (verbose) {\n    app.use((req: Request, _res: Response, next: NextFunction) => {\n      const timestamp = new Date().toISOString();\n      console.log(`[${timestamp}] ${req.method} ${req.path}`);\n      if (Object.keys(req.query).length > 0) {\n        console.log(`  Query:`, req.query);\n      }\n      if (req.body && Object.keys(req.body).length > 0) {\n        console.log(`  Body:`, JSON.stringify(req.body, null, 2));\n      }\n      next();\n    });\n  }\n\n  // Delay / slow-network middleware\n  app.use(async (_req: Request, _res: Response, next: NextFunction) => {\n    const delay = computeDelay(options);\n    if (delay > 0) {\n      setTimeout(next, delay);\n    } else {\n      next();\n    }\n  });\n\n  // Register routes\n  for (const route of parsed.routes) {\n    const expressPath = toExpressPath(route.path);\n\n    const handler = (req: Request, res: Response) => {\n      // Random error responses\n      if (errorRate > 0 && Math.random() < errorRate) {\n        const codes = [401, 404, 500];\n        const code = codes[Math.floor(Math.random() * codes.length)]!;\n        return res.status(code).json({ error: `Mock error ${code}` });\n      }\n\n      try {\n        const basePath = getBasePath(route.path);\n        const isItemRoute = hasPathParam(route.path);\n\n        if (isCollectionMethod(route.method) && !isItemRoute) {\n          return handleCollectionRoute(req, res, route, basePath, store, options);\n        }\n\n        if (!isCollectionMethod(route.method) && isItemRoute) {\n          return handleItemRoute(req, res, route, basePath, store);\n        }\n\n        // Fallback: stateless generation\n        const payload = generateMockData(route.responseSchema, {\n          generators: options.generators\n        });\n        const status = route.statusCode ?? 200;\n        res.status(status).json(payload);\n      } catch (error) {\n        const message =\n          error instanceof Error ? error.message : \"Unknown error while generating mock data.\";\n        res.status(500).json({ error: \"Failed to generate mock response\", details: message });\n      }\n    };\n\n    switch (route.method) {\n      case \"get\":\n        app.get(expressPath, handler);\n        break;\n      case \"post\":\n        app.post(expressPath, handler);\n        break;\n      case \"put\":\n        app.put(expressPath, handler);\n        break;\n      case \"delete\":\n        app.delete(expressPath, handler);\n        break;\n      case \"patch\":\n        app.patch(expressPath, handler);\n        break;\n      default:\n        break;\n    }\n  }\n\n  let server: Server | null = null;\n\n  return {\n    async start() {\n      if (server) return;\n      await new Promise<void>((resolve, reject) => {\n        server = app\n          .listen(port, () => resolve())\n          .on(\"error\", (err) => {\n            server = null;\n            reject(err);\n          });\n      });\n    },\n    async stop() {\n      if (!server) return;\n      await new Promise<void>((resolve, reject) => {\n        server!.close((err) => {\n          if (err) reject(err);\n          else resolve();\n        });\n      });\n      server = null;\n    },\n    getApp() {\n      return app;\n    }\n  };\n}\n\nfunction computeDelay(options: MockServerOptions): number {\n  if (options.delayRange) {\n    const { min, max } = options.delayRange;\n    if (max <= min) return min;\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n  }\n  return options.delay ?? 0;\n}\n\nfunction toExpressPath(path: string): string {\n  // Convert OpenAPI-style {id} params to Express :id\n  return path.replace(/\\{([^}]+)\\}/g, \":$1\");\n}\n\nfunction getBasePath(path: string): string {\n  // Remove path params like /users/{id} -> /users\n  return path.replace(/\\/\\{[^}]+\\}/g, \"\");\n}\n\nfunction hasPathParam(path: string): boolean {\n  return /\\{[^}]+\\}/.test(path);\n}\n\nfunction isCollectionMethod(method: string): boolean {\n  // Collection-level routes are typically GET/POST on the base path.\n  return method === \"get\" || method === \"post\";\n}\n\nfunction handleCollectionRoute(\n  req: Request,\n  res: Response,\n  route: ParsedSpec[\"routes\"][number],\n  basePath: string,\n  store: CollectionStore,\n  options: MockServerOptions\n) {\n  const status = route.statusCode ?? 200;\n\n  let collection = store.get(basePath);\n  if (!collection) {\n    // Start with an empty collection; data will be added via POST/PUT/PATCH.\n    collection = [];\n    store.set(basePath, collection);\n  }\n\n  switch (route.method) {\n    case \"get\": {\n      let results = collection;\n\n      // Filtering: equality on query params (excluding pagination params)\n      const { page, limit, ...filters } = req.query as Record<string, string>;\n      results = results.filter((item) => {\n        return Object.entries(filters).every(([key, value]) => {\n          return String((item as any)[key]) === String(value);\n        });\n      });\n\n      // Pagination\n      const pageNum = page ? parseInt(String(page), 10) || 1 : 1;\n      const limitNum = limit ? parseInt(String(limit), 10) || 20 : results.length;\n      const start = (pageNum - 1) * limitNum;\n      const end = start + limitNum;\n      const paged = results.slice(start, end);\n\n      return res.status(status).json(paged);\n    }\n    case \"post\": {\n      const body = req.body ?? {};\n      const newItem = { ...body };\n      // Ensure an id exists\n      if (newItem.id == null) {\n        newItem.id = collection.length + 1;\n      }\n      collection.push(newItem);\n      return res.status(201).json(newItem);\n    }\n    default:\n      // For unsupported combinations fall back to generated response\n      const payload = generateMockData(route.responseSchema, {\n        generators: options.generators\n      });\n      return res.status(status).json(payload);\n  }\n}\n\nfunction handleItemRoute(\n  req: Request,\n  res: Response,\n  route: ParsedSpec[\"routes\"][number],\n  basePath: string,\n  store: CollectionStore\n) {\n  const status = route.statusCode ?? 200;\n  const idParamMatch = route.path.match(/\\{([^}]+)\\}/);\n  const idParam = idParamMatch ? idParamMatch[1] : \"id\";\n\n  const collection = store.get(basePath) ?? [];\n  const idValue = req.params[idParam];\n\n  const index = collection.findIndex((item) => {\n    const candidate = (item as any)[idParam] ?? (item as any).id;\n    return String(candidate) === String(idValue);\n  });\n\n  switch (route.method) {\n    case \"get\": {\n      if (index === -1) {\n        return res.status(404).json({ error: \"Not found\" });\n      }\n      const item = collection[index];\n      // Ensure the returned item has an ID field so that consumers relying on it\n      // (and tests) can consistently access it, even if the original payload\n      // did not include an id and it was inferred from the URL.\n      if ((item as any)[idParam] == null && (item as any).id == null) {\n        (item as any)[idParam] = idValue;\n      }\n      return res.status(status).json(item);\n    }\n    case \"put\": {\n      if (index === -1) {\n        return res.status(404).json({ error: \"Not found\" });\n      }\n      const body = req.body ?? {};\n      collection[index] = { ...body, [idParam]: (collection[index] as any)[idParam] };\n      return res.status(status).json(collection[index]);\n    }\n    case \"patch\": {\n      if (index === -1) {\n        return res.status(404).json({ error: \"Not found\" });\n      }\n      const body = req.body ?? {};\n      collection[index] = { ...collection[index], ...body };\n      return res.status(status).json(collection[index]);\n    }\n    case \"delete\": {\n      if (index === -1) {\n        return res.status(404).json({ error: \"Not found\" });\n      }\n      collection.splice(index, 1);\n      return res.status(204).send();\n    }\n    default:\n      return res.status(405).json({ error: \"Method not allowed\" });\n  }\n}\n","import { faker } from \"@faker-js/faker\";\nimport type { OpenAPIV3 } from \"openapi-types\";\n\ntype IdRegistry = Map<string, Array<string | number>>;\n\nexport interface GenerationOptions {\n  /**\n   * Custom generators by field name.\n   */\n  generators?: Record<string, () => unknown>;\n  /**\n   * Shared ID registry for relationship consistency.\n   */\n  registry?: IdRegistry;\n}\n\ninterface GenerationContext {\n  fieldName?: string;\n  parentName?: string;\n  generators?: Record<string, () => unknown>;\n  registry?: IdRegistry;\n}\n\nconst defaultRegistry: IdRegistry = new Map();\n\nexport function generateMockData(\n  schema?: OpenAPIV3.SchemaObject,\n  options: GenerationOptions = {}\n): unknown {\n  const registry = options.registry ?? defaultRegistry;\n  return innerGenerate(schema, {\n    generators: options.generators,\n    registry,\n  });\n}\n\nfunction innerGenerate(\n  schema?: OpenAPIV3.SchemaObject,\n  ctx?: GenerationContext\n): unknown {\n  if (!schema) {\n    return null;\n  }\n\n  // Handle enums\n  if (Array.isArray(schema.enum) && schema.enum.length > 0) {\n    return faker.helpers.arrayElement(schema.enum as any[]);\n  }\n\n  const type = schema.type;\n\n  if (Array.isArray(type)) {\n    // Prefer string, number, object, boolean in that order\n    const preferred = [\n      \"string\",\n      \"number\",\n      \"integer\",\n      \"object\",\n      \"array\",\n      \"boolean\",\n    ] as const;\n    const chosen = preferred.find((t) => type.includes(t as any)) ?? type[0];\n    return innerGenerate({ ...schema, type: chosen } as any, ctx);\n  }\n\n  switch (type) {\n    case \"string\":\n      return generateString(schema, ctx);\n    case \"number\":\n      return generateNumber(schema, ctx);\n    case \"integer\":\n      return generateInteger(schema, ctx);\n    case \"boolean\":\n      return faker.datatype.boolean();\n    case \"array\":\n      return generateArray(schema, ctx);\n    case \"object\":\n    default:\n      return generateObject(schema, ctx);\n  }\n}\n\nfunction generateString(\n  schema: OpenAPIV3.SchemaObject,\n  ctx?: GenerationContext\n): string {\n  const format = schema.format || \"\";\n  const nameSource = (\n    ctx?.fieldName ??\n    schema.title ??\n    schema.description ??\n    \"\"\n  )\n    .toString()\n    .toLowerCase();\n\n  if (schema.example && typeof schema.example === \"string\") {\n    return schema.example;\n  }\n\n  // Custom generators from config\n  if (ctx?.fieldName && ctx.generators && ctx.generators[ctx.fieldName]) {\n    const gen = ctx.generators[ctx.fieldName];\n    return String(gen());\n  }\n\n  // Common smart mappings via explicit faker path (non-standard extension)\n  const xFaker = (schema as any)[\"x-faker\"];\n  if (xFaker) {\n    const path = String(xFaker);\n    const [ns, method] = path.split(\".\");\n    const fakerNs: any = (faker as any)[ns];\n    if (fakerNs && typeof fakerNs[method] === \"function\") {\n      return fakerNs[method]();\n    }\n  }\n\n  // Format-based\n  if (format === \"email\" || /email/.test(nameSource)) {\n    return faker.internet.email();\n  }\n  if (format === \"uuid\" || /uuid/.test(nameSource)) {\n    return faker.string.uuid();\n  }\n  if (format === \"date-time\") {\n    return faker.date.recent().toISOString();\n  }\n  if (format === \"date\") {\n    return faker.date.recent().toISOString().split(\"T\")[0]!;\n  }\n  if (format === \"uri\" || format === \"url\" || /url/.test(nameSource)) {\n    return faker.internet.url();\n  }\n\n  // Name-like\n  if (/^(first[-_]?name|fname)$/.test(nameSource)) {\n    return faker.person.firstName();\n  }\n  if (/^(last[-_]?name|lname)$/.test(nameSource)) {\n    return faker.person.lastName();\n  }\n  if (/name/.test(nameSource)) {\n    return faker.person.fullName();\n  }\n\n  // Phone-like\n  if (/phone|mobile/.test(nameSource)) {\n    return faker.phone.number();\n  }\n\n  // Address-like\n  if (/address/.test(nameSource)) {\n    return faker.location.streetAddress();\n  }\n  if (/street/.test(nameSource)) {\n    return faker.location.street();\n  }\n  if (/city/.test(nameSource)) {\n    return faker.location.city();\n  }\n  if (/country/.test(nameSource)) {\n    return faker.location.country();\n  }\n\n  // Date-like\n  if (\n    /createdat|updatedat|timestamp|date/.test(\n      nameSource.replace(/[_\\s]/g, \"\").toLowerCase()\n    )\n  ) {\n    return faker.date.recent().toISOString();\n  }\n\n  // Status-like\n  if (nameSource === \"status\") {\n    return faker.helpers.arrayElement([\"active\", \"pending\", \"completed\"]);\n  }\n\n  const minLength = schema.minLength ?? 5;\n  const maxLength = schema.maxLength ?? 20;\n  const targetLength = faker.number.int({ min: minLength, max: maxLength });\n\n  let text = faker.lorem.words(Math.max(1, Math.floor(targetLength / 5)));\n  // Ensure string respects minLength/maxLength constraints\n  if (text.length < minLength) {\n    while (text.length < minLength) {\n      text += \" \" + faker.lorem.word();\n    }\n  }\n  if (text.length > maxLength) {\n    text = text.slice(0, maxLength);\n  }\n\n  return text;\n}\n\nfunction generateNumber(\n  schema: OpenAPIV3.SchemaObject,\n  ctx?: GenerationContext\n): number {\n  const nameSource = (ctx?.fieldName ?? \"\").toString().toLowerCase();\n  const min = (schema.minimum as number | undefined) ?? 0;\n  const max = (schema.maximum as number | undefined) ?? 1000;\n\n  // Price-like\n  if (/price|amount|cost|salary/.test(nameSource)) {\n    const value = faker.number.float({\n      min: min || 0,\n      max: max || 10000,\n    });\n    return Math.round(value * 100) / 100;\n  }\n\n  const value = faker.number.float({ min, max });\n  return value;\n}\n\nfunction generateInteger(\n  schema: OpenAPIV3.SchemaObject,\n  ctx?: GenerationContext\n): number {\n  const nameSource = (ctx?.fieldName ?? \"\").toString().toLowerCase();\n  const min = (schema.minimum as number | undefined) ?? 0;\n  const max = (schema.maximum as number | undefined) ?? 1000;\n\n  // Integer IDs with registry linkage\n  if (/id$|_id$/.test(nameSource)) {\n    const base = nameSource.replace(/(_id|id)$/i, \"\") || \"id\";\n    const reg = ctx?.registry;\n    if (!reg) {\n      return faker.number.int({ min, max });\n    }\n\n    // Foreign key: if base has known IDs, reuse one\n    const existing = reg.get(base);\n    if (existing && existing.length > 0 && nameSource !== \"id\") {\n      return Number(faker.helpers.arrayElement(existing));\n    }\n\n    const value = faker.number.int({ min, max });\n    const list = reg.get(base) ?? [];\n    list.push(value);\n    reg.set(base, list);\n    return value;\n  }\n\n  return faker.number.int({ min, max });\n}\n\nfunction generateArray(\n  schema: OpenAPIV3.SchemaObject,\n  ctx?: GenerationContext\n): unknown[] {\n  if (!(\"items\" in schema)) {\n    return [];\n  }\n  const items = (schema as OpenAPIV3.ArraySchemaObject).items as\n    | OpenAPIV3.SchemaObject\n    | undefined;\n  const minItems = schema.minItems ?? 1;\n  const maxItems = schema.maxItems ?? Math.max(minItems, 5);\n  const length = faker.number.int({ min: minItems, max: maxItems });\n\n  const result: unknown[] = [];\n  for (let i = 0; i < length; i++) {\n    result.push(\n      innerGenerate(\n        items,\n        ctx && { ...ctx, registry: ctx.registry ?? defaultRegistry }\n      )\n    );\n  }\n  return result;\n}\n\nfunction generateObject(\n  schema: OpenAPIV3.SchemaObject,\n  ctx?: GenerationContext\n): Record<string, unknown> {\n  const obj: Record<string, unknown> = {};\n\n  const properties = schema.properties || {};\n  const required = schema.required || [];\n\n  for (const [key, propSchema] of Object.entries(properties)) {\n    const childCtx: GenerationContext = {\n      ...ctx,\n      registry: ctx?.registry ?? defaultRegistry,\n      fieldName: key,\n    };\n\n    obj[key] = innerGenerate(propSchema as OpenAPIV3.SchemaObject, childCtx);\n  }\n\n  return obj;\n}\n","import path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { RuntimeConfig } from \"./types\";\n\nexport type UserConfig = {\n  generators?: Record<string, () => unknown>;\n  delay?: number | { min: number; max: number };\n  errorRate?: number;\n};\n\nexport async function loadConfig(cwd: string = process.cwd()): Promise<UserConfig | null> {\n  const candidates = [\"api-mock-smart.config.js\", \"api-mock-smart.config.cjs\"];\n\n  for (const file of candidates) {\n    const fullPath = path.join(cwd, file);\n    try {\n      const url = pathToFileURL(fullPath).href;\n      // eslint-disable-next-line @typescript-eslint/no-var-requires\n      const mod = await import(url);\n      const cfg = (mod.default ?? mod) as UserConfig;\n      if (cfg && typeof cfg === \"object\") {\n        return cfg;\n      }\n    } catch {\n      // Ignore missing/invalid config and try next\n    }\n  }\n\n  return null;\n}\n\nexport function normalizeConfig(user?: UserConfig | null): RuntimeConfig {\n  if (!user) return {};\n\n  const runtime: RuntimeConfig = {\n    generators: user.generators,\n    errorRate: user.errorRate\n  };\n\n  if (typeof user.delay === \"number\") {\n    runtime.delayRange = { min: user.delay, max: user.delay };\n  } else if (user.delay && typeof user.delay === \"object\") {\n    runtime.delayRange = {\n      min: user.delay.min,\n      max: user.delay.max\n    };\n  }\n\n  return runtime;\n}\n\n\n"],"mappings":"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","names":["SwaggerParser","path","path","value","express","cors","path","path","chokidar","yargs"]}