@kubb/plugin-faker 5.0.0-beta.27 → 5.0.0-beta.28

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.
@@ -1,5 +1,5 @@
1
1
  import { t as __name } from "./chunk--u3MIqq1.js";
2
- import { o as PluginFaker, t as PrinterFakerFactory } from "./printerFaker-GYscoNnG.js";
2
+ import { o as PluginFaker, t as PrinterFakerFactory } from "./printerFaker-Bhwq62d1.js";
3
3
  import { ast } from "@kubb/core";
4
4
  import { KubbReactNode } from "@kubb/renderer-jsx/types";
5
5
 
@@ -24,4 +24,4 @@ declare function Faker({
24
24
  }: Props): KubbReactNode;
25
25
  //#endregion
26
26
  export { Faker as t };
27
- //# sourceMappingURL=Faker-BQpBZ2hU.d.ts.map
27
+ //# sourceMappingURL=Faker-BaLJxPyl.d.ts.map
@@ -1,2 +1,2 @@
1
- import { t as Faker } from "./Faker-BQpBZ2hU.js";
1
+ import { t as Faker } from "./Faker-BaLJxPyl.js";
2
2
  export { Faker };
@@ -157,6 +157,22 @@ function parseEnumValue(value) {
157
157
  if (typeof value === "string") return stringify(value);
158
158
  return value;
159
159
  }
160
+ /** Reads the discriminator literal off a variant, or `undefined` when it can't be determined. */
161
+ function getDiscriminatorValue(member, discriminatorPropertyName) {
162
+ const prop = _kubb_core.ast.narrowSchema(member, "object")?.properties?.find((p) => p.name === discriminatorPropertyName);
163
+ const enumNode = prop ? _kubb_core.ast.narrowSchema(prop.schema, "enum") : null;
164
+ return enumNode ? getEnumValues(enumNode)[0] : void 0;
165
+ }
166
+ /**
167
+ * Type expression for an object property's value, indexed off the parent `typeName`.
168
+ *
169
+ * In a union (`oneOf`), a key that only some branches declare turns a plain `NonNullable<T>[K]`
170
+ * into a TS2339 error, so union members guard the access. The breakdown is below.
171
+ */
172
+ function indexedTypeName(typeName, propertyName, nestedInUnion) {
173
+ const key = JSON.stringify(propertyName);
174
+ return nestedInUnion ? `(NonNullable<${typeName}> & Record<${key}, unknown>)[${key}]` : `NonNullable<${typeName}>[${key}]`;
175
+ }
160
176
  /**
161
177
  * Creates a Faker printer that generates mock data generation code from schema nodes.
162
178
  * Handles circular references gracefully by emitting memoizing getters for cyclic properties.
@@ -212,7 +228,20 @@ const printerFaker = _kubb_core.ast.definePrinter((options) => {
212
228
  return fakerKeywordMapper.enum(getEnumValues(node).map(parseEnumValue), this.options.typeName);
213
229
  },
214
230
  union(node) {
215
- const items = (node.members ?? []).map((member) => printNested(member, { nestedInObject: true })).filter((item) => Boolean(item));
231
+ const { discriminatorPropertyName } = node;
232
+ const baseTypeName = this.options.typeName;
233
+ const items = (node.members ?? []).map((member) => {
234
+ const value = discriminatorPropertyName ? getDiscriminatorValue(member, discriminatorPropertyName) : void 0;
235
+ if (baseTypeName && value !== void 0) return printNested(member, {
236
+ typeName: `Extract<NonNullable<${baseTypeName}>, { ${JSON.stringify(discriminatorPropertyName)}: ${parseEnumValue(value)} }>`,
237
+ nestedInObject: true
238
+ });
239
+ return printNested(member, {
240
+ typeName: baseTypeName,
241
+ nestedInObject: true,
242
+ nestedInUnion: true
243
+ });
244
+ }).filter((item) => Boolean(item));
216
245
  return fakerKeywordMapper.union(items);
217
246
  },
218
247
  intersection(node) {
@@ -238,7 +267,7 @@ const printerFaker = _kubb_core.ast.definePrinter((options) => {
238
267
  return `{${(node.properties ?? []).map((property) => {
239
268
  if (this.options.mapper && Object.hasOwn(this.options.mapper, property.name)) return `"${property.name}": ${this.options.mapper[property.name]}`;
240
269
  const value = printNested(property.schema, {
241
- typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${JSON.stringify(property.name)}]` : void 0,
270
+ typeName: this.options.typeName ? indexedTypeName(this.options.typeName, property.name, this.options.nestedInUnion) : void 0,
242
271
  nestedInObject: true
243
272
  }) ?? "undefined";
244
273
  if (cyclicSchemas && _kubb_core.ast.containsCircularRef(property.schema, {
@@ -332,11 +361,19 @@ const fakerGenerator = (0, _kubb_core.defineGenerator)({
332
361
  meta: meta.file.meta,
333
362
  banner: resolver.resolveBanner(ctx.meta, {
334
363
  output,
335
- config
364
+ config,
365
+ file: {
366
+ path: meta.file.path,
367
+ baseName: meta.file.baseName
368
+ }
336
369
  }),
337
370
  footer: resolver.resolveFooter(ctx.meta, {
338
371
  output,
339
- config
372
+ config,
373
+ file: {
374
+ path: meta.file.path,
375
+ baseName: meta.file.baseName
376
+ }
340
377
  }),
341
378
  children: [
342
379
  /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
@@ -509,11 +546,19 @@ const fakerGenerator = (0, _kubb_core.defineGenerator)({
509
546
  meta: meta.file.meta,
510
547
  banner: resolver.resolveBanner(ctx.meta, {
511
548
  output,
512
- config
549
+ config,
550
+ file: {
551
+ path: meta.file.path,
552
+ baseName: meta.file.baseName
553
+ }
513
554
  }),
514
555
  footer: resolver.resolveFooter(ctx.meta, {
515
556
  output,
516
- config
557
+ config,
558
+ file: {
559
+ path: meta.file.path,
560
+ baseName: meta.file.baseName
561
+ }
517
562
  }),
518
563
  children: [
519
564
  /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
@@ -572,4 +617,4 @@ Object.defineProperty(exports, "printerFaker", {
572
617
  }
573
618
  });
574
619
 
575
- //# sourceMappingURL=fakerGenerator-C00Es7eC.cjs.map
620
+ //# sourceMappingURL=fakerGenerator-BZsRbPxX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fakerGenerator-BZsRbPxX.cjs","names":["trimQuotes","trimQuotes","ast","jsxRendererSync","pluginTsName","canOverrideSchema","resolveTypeReference","File","localeToFakerImport","Faker","ast","resolveParamNameByLocation","buildResponseUnionSchema"],"sources":["../../../internals/utils/src/imports.ts","../../../internals/utils/src/object.ts","../../../internals/utils/src/regexp.ts","../src/printers/printerFaker.ts","../src/generators/fakerGenerator.tsx"],"sourcesContent":["export type ImportName = string | { propertyName: string; name?: string }\n\nexport type ImportEntry = {\n name: string | Array<ImportName>\n path: string\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\nfunction getImportNames(entry: ImportEntry): Array<string> {\n return (Array.isArray(entry.name) ? entry.name : [entry.name])\n .map((name) => {\n if (typeof name === 'string') {\n return name\n }\n\n return name.name ?? name.propertyName\n })\n .filter((name): name is string => Boolean(name))\n}\n\nexport function filterUsedImports(imports: Array<ImportEntry>, text: string, skipImportNames: Array<string> = []): Array<ImportEntry> {\n return imports.filter((entry) => {\n const names = getImportNames(entry)\n\n return names.some((name) => {\n if (skipImportNames.includes(name)) {\n return false\n }\n\n return new RegExp(`\\\\b${escapeRegExp(name)}\\\\b(?=\\\\s*\\\\()`).test(text)\n })\n })\n}\n\nexport function aliasConflictingImports(\n imports: Array<ImportEntry>,\n reservedNames: Iterable<string>,\n): { imports: Array<ImportEntry>; aliases: Map<string, string> } {\n const reservedNameSet = new Set(reservedNames)\n const aliases = new Map<string, string>()\n\n const aliasedImports = imports.map((entry) => {\n const names = Array.isArray(entry.name) ? entry.name : [entry.name]\n const aliasedNames = names.map((item): ImportName => {\n if (typeof item !== 'string' || !reservedNameSet.has(item)) {\n return item\n }\n\n const alias = `${item}Schema`\n aliases.set(item, alias)\n\n return { propertyName: item, name: alias }\n })\n\n return aliasedNames.some((item) => typeof item === 'object' && item.name)\n ? {\n ...entry,\n name: aliasedNames,\n }\n : entry\n })\n\n return {\n imports: aliasedImports,\n aliases,\n }\n}\n\nexport function rewriteAliasedImports(text: string, aliases: ReadonlyMap<string, string>): string {\n return Array.from(aliases).reduce((acc, [name, alias]) => acc.replace(new RegExp(`\\\\b${escapeRegExp(name)}\\\\b`, 'g'), alias), text)\n}\n","import { trimQuotes } from './string.ts'\n\n/**\n * Serializes a primitive value to a JSON string literal, stripping any surrounding quote characters first.\n *\n * @example\n * stringify('hello') // '\"hello\"'\n * stringify('\"hello\"') // '\"hello\"'\n */\nexport function stringify(value: string | number | boolean | undefined): string {\n if (value === undefined || value === null) return '\"\"'\n return JSON.stringify(trimQuotes(value.toString()))\n}\n\n/**\n * Converts a plain object into a multiline key-value string suitable for embedding in generated code.\n * Nested objects are recursively stringified with indentation.\n *\n * @example\n * stringifyObject({ foo: 'bar', nested: { a: 1 } })\n * // 'foo: bar,\\nnested: {\\n a: 1\\n }'\n */\nexport function stringifyObject(value: Record<string, unknown>): string {\n const items = Object.entries(value)\n .map(([key, val]) => {\n if (val !== null && typeof val === 'object') {\n return `${key}: {\\n ${stringifyObject(val as Record<string, unknown>)}\\n }`\n }\n return `${key}: ${val}`\n })\n .filter(Boolean)\n return items.join(',\\n')\n}\n\n/**\n * Converts a dot-notation path or string array into an optional-chaining accessor expression.\n *\n * @example\n * getNestedAccessor('pagination.next.id', 'lastPage')\n * // → \"lastPage?.['pagination']?.['next']?.['id']\"\n */\nexport function getNestedAccessor(param: string | string[], accessor: string): string | null {\n const parts = Array.isArray(param) ? param : param.split('.')\n if (parts.length === 0 || (parts.length === 1 && parts[0] === '')) return null\n return `${accessor}?.['${`${parts.join(\"']?.['\")}']`}`\n}\n","import { trimQuotes } from './string.ts'\n\n/**\n * Converts a pattern string into a `new RegExp(...)` constructor call or a regex literal string.\n * Inline flags expressed as `^(?im)` prefixes are extracted and applied to the resulting expression.\n * Pass `null` as the second argument to emit a `/pattern/flags` literal instead.\n *\n * @example\n * toRegExpString('^(?im)foo') // → 'new RegExp(\"foo\", \"im\")'\n * toRegExpString('^(?im)foo', null) // → '/foo/im'\n */\nexport function toRegExpString(text: string, func: string | null = 'RegExp'): string {\n const raw = trimQuotes(text)\n\n const match = raw.match(/^\\^(\\(\\?([igmsuy]+)\\))/i)\n const replacementTarget = match?.[1] ?? ''\n const matchedFlags = match?.[2]\n const cleaned = raw\n .replace(/^\\\\?\\//, '')\n .replace(/\\\\?\\/$/, '')\n .replace(replacementTarget, '')\n\n const { source, flags } = new RegExp(cleaned, matchedFlags)\n\n if (func === null) return `/${source}/${flags}`\n\n return `new ${func}(${JSON.stringify(source)}${flags ? `, ${JSON.stringify(flags)}` : ''})`\n}\n","import { stringify, toRegExpString } from '@internals/utils'\nimport { ast } from '@kubb/core'\nimport type { PluginFaker, ResolverFaker } from '../types.ts'\n\n/**\n * Partial map of node-type overrides for the Faker printer. Each key is a\n * `SchemaType` (`'string'`, `'date'`, ...) and each handler returns the\n * Faker expression for that schema as a string. Use `this.transform` to\n * recurse into nested schema nodes and `this.options` to read printer options.\n *\n * @example Override the integer handler\n * ```ts\n * pluginFaker({\n * printer: {\n * nodes: {\n * integer() {\n * return 'faker.number.float()'\n * },\n * },\n * },\n * })\n * ```\n */\nexport type PrinterFakerNodes = ast.PrinterPartial<string, PrinterFakerOptions>\n\n/**\n * Options passed to the Faker printer at instantiation: the parser library\n * for date strings, the regex generator, the user-supplied schema-name\n * mapper, and the resolver used to compute identifiers.\n */\nexport type PrinterFakerOptions = {\n dateParser?: PluginFaker['resolvedOptions']['dateParser']\n regexGenerator?: PluginFaker['resolvedOptions']['regexGenerator']\n mapper?: PluginFaker['resolvedOptions']['mapper']\n resolver: ResolverFaker\n typeName?: string\n schemaName?: string\n nestedInObject?: boolean\n /**\n * Set while printing the members of a union (`oneOf`). Object properties then index their\n * type as `(NonNullable<T> & Record<K, unknown>)[K]` instead of `NonNullable<T>[K]`, so a key\n * carried by only some branches stays valid (a plain index would be a TS2339).\n */\n nestedInUnion?: boolean\n nodes?: PrinterFakerNodes\n /**\n * Names of schemas that participate in a circular dependency chain.\n * Properties whose schema transitively references one of these are emitted\n * as lazy getters so that user overrides via the `data` parameter prevent\n * the recursive faker call from ever executing (avoiding stack overflow).\n */\n cyclicSchemas?: ReadonlySet<string>\n}\n\n/**\n * Factory options for the Faker printer, defining input/output types and configuration.\n */\nexport type PrinterFakerFactory = ast.PrinterFactoryOptions<'faker', PrinterFakerOptions, string, string>\n\nconst fakerKeywordMapper = {\n any: () => 'undefined',\n unknown: () => 'undefined',\n void: () => 'undefined',\n number: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.number.float({ min: ${min}, max: ${max} })`\n }\n\n if (max !== undefined) {\n return `faker.number.float({ max: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.number.float({ min: ${min} })`\n }\n\n return 'faker.number.float()'\n },\n integer: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.number.int({ min: ${min}, max: ${max} })`\n }\n\n if (max !== undefined) {\n return `faker.number.int({ max: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.number.int({ min: ${min} })`\n }\n\n return 'faker.number.int()'\n },\n bigint: () => 'faker.number.bigInt()',\n string: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.string.alpha({ length: { min: ${min}, max: ${max} } })`\n }\n\n if (max !== undefined) {\n return `faker.string.alpha({ length: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.string.alpha({ length: ${min} })`\n }\n\n return 'faker.string.alpha()'\n },\n boolean: () => 'faker.datatype.boolean()',\n null: () => 'null',\n array: (items: Array<string> = [], min?: number, max?: number) => {\n if (items.length > 1) {\n return `faker.helpers.arrayElements([${items.join(', ')}])`\n }\n\n const item = items.at(0)\n\n if (min !== undefined && max !== undefined) {\n return `faker.helpers.multiple(() => (${item}), { count: { min: ${min}, max: ${max} }})`\n }\n\n if (min !== undefined) {\n return `faker.helpers.multiple(() => (${item}), { count: ${min} })`\n }\n\n if (max !== undefined) {\n return `faker.helpers.multiple(() => (${item}), { count: { min: 0, max: ${max} }})`\n }\n\n return `faker.helpers.multiple(() => (${item}))`\n },\n tuple: (items: Array<string> = []) => `[${items.join(', ')}]`,\n enum: (items: Array<string | number | boolean | undefined> = [], type = 'any') => `faker.helpers.arrayElement<${type}>([${items.join(', ')}])`,\n union: (items: Array<string> = []) => `faker.helpers.arrayElement<any>([${items.join(', ')}])`,\n datetime: () => 'faker.date.anytime().toISOString()',\n date: (representation: 'date' | 'string' = 'string', parser: PluginFaker['resolvedOptions']['dateParser'] = 'faker') => {\n if (representation === 'string') {\n if (parser !== 'faker') {\n return `${parser}(faker.date.anytime()).format(\"YYYY-MM-DD\")`\n }\n\n return 'faker.date.anytime().toISOString().substring(0, 10)'\n }\n\n if (parser !== 'faker') {\n throw new Error(`type '${representation}' and parser '${parser}' can not work together`)\n }\n\n return 'faker.date.anytime()'\n },\n time: (representation: 'date' | 'string' = 'string', parser: PluginFaker['resolvedOptions']['dateParser'] = 'faker') => {\n if (representation === 'string') {\n if (parser !== 'faker') {\n return `${parser}(faker.date.anytime()).format(\"HH:mm:ss\")`\n }\n\n return 'faker.date.anytime().toISOString().substring(11, 19)'\n }\n\n if (parser !== 'faker') {\n throw new Error(`type '${representation}' and parser '${parser}' can not work together`)\n }\n\n return 'faker.date.anytime()'\n },\n uuid: () => 'faker.string.uuid()',\n url: () => 'faker.internet.url()',\n and: (items: Array<string> = []) => {\n if (items.length === 0) {\n return '{}'\n }\n\n if (items.length === 1) {\n return items[0] ?? '{}'\n }\n\n return `{...${items.join(', ...')}}`\n },\n matches: (value = '', regexGenerator: 'faker' | 'randexp' = 'faker') => {\n if (regexGenerator === 'randexp') {\n return `${toRegExpString(value, 'RandExp')}.gen()`\n }\n\n return `faker.helpers.fromRegExp(\"${value}\")`\n },\n email: () => 'faker.internet.email()',\n blob: () => 'faker.image.url() as unknown as Blob',\n} as const\n\nfunction getEnumValues(node: ast.EnumSchemaNode): Array<string | number | boolean | undefined> {\n if (node.namedEnumValues?.length) {\n return node.namedEnumValues.map((item) => item.value as string | number | boolean | undefined)\n }\n\n return (node.enumValues ?? []) as Array<string | number | boolean | undefined>\n}\n\nfunction parseEnumValue(value: string | number | boolean | undefined) {\n if (typeof value === 'string') {\n return stringify(value)\n }\n\n return value\n}\n\n/** Reads the discriminator literal off a variant, or `undefined` when it can't be determined. */\nfunction getDiscriminatorValue(member: ast.SchemaNode, discriminatorPropertyName: string) {\n const prop = ast.narrowSchema(member, 'object')?.properties?.find((p) => p.name === discriminatorPropertyName)\n const enumNode = prop ? ast.narrowSchema(prop.schema, 'enum') : null\n\n return enumNode ? getEnumValues(enumNode)[0] : undefined\n}\n\n/**\n * Type expression for an object property's value, indexed off the parent `typeName`.\n *\n * In a union (`oneOf`), a key that only some branches declare turns a plain `NonNullable<T>[K]`\n * into a TS2339 error, so union members guard the access. The breakdown is below.\n */\nfunction indexedTypeName(typeName: string, propertyName: string, nestedInUnion?: boolean): string {\n const key = JSON.stringify(propertyName)\n\n // `(NonNullable<T> & Record<K, unknown>)[K]`, read inside-out:\n // NonNullable<T> strips null and undefined from the parent type T.\n // & Record<K, unknown> forces every branch to have key K. A branch that already declares K\n // keeps it (`T[K] & unknown` is `T[K]`); a branch missing K gains it as `unknown`.\n // [K] reads the key, which is now always present, so it never hits TS2339.\n // For a single object T the intersection does nothing, leaving `T[K]`.\n return nestedInUnion ? `(NonNullable<${typeName}> & Record<${key}, unknown>)[${key}]` : `NonNullable<${typeName}>[${key}]`\n}\n\n/**\n * Creates a Faker printer that generates mock data generation code from schema nodes.\n * Handles circular references gracefully by emitting memoizing getters for cyclic properties.\n */\nexport const printerFaker: (options: PrinterFakerOptions) => ast.Printer<PrinterFakerFactory> = ast.definePrinter<PrinterFakerFactory>((options) => {\n const printNested = (node: ast.SchemaNode, overrideOptions: Partial<PrinterFakerOptions> = {}): string => {\n return (\n printerFaker({\n ...options,\n ...overrideOptions,\n nodes: options.nodes,\n }).print(node) ?? 'undefined'\n )\n }\n\n return {\n name: 'faker',\n options,\n nodes: {\n any: () => fakerKeywordMapper.any(),\n unknown: () => fakerKeywordMapper.unknown(),\n void: () => fakerKeywordMapper.void(),\n boolean: () => fakerKeywordMapper.boolean(),\n null: () => fakerKeywordMapper.null(),\n string(node) {\n if (node.pattern) {\n return fakerKeywordMapper.matches(node.pattern, this.options.regexGenerator)\n }\n\n return fakerKeywordMapper.string(node.min, node.max)\n },\n email: () => fakerKeywordMapper.email(),\n url: () => fakerKeywordMapper.url(),\n uuid: () => fakerKeywordMapper.uuid(),\n number(node) {\n return fakerKeywordMapper.number(node.min, node.max)\n },\n integer(node) {\n return fakerKeywordMapper.integer(node.min, node.max)\n },\n bigint: () => fakerKeywordMapper.bigint(),\n blob: () => fakerKeywordMapper.blob(),\n datetime: () => fakerKeywordMapper.datetime(),\n date(node) {\n return fakerKeywordMapper.date(node.representation ?? 'string', this.options.dateParser)\n },\n time(node) {\n return fakerKeywordMapper.time(node.representation ?? 'string', this.options.dateParser)\n },\n ref(node) {\n // Parser-generated refs (with $ref) carry raw schema names that need resolving.\n // Use the canonical name from the $ref path — node.name may have been overridden\n // (e.g. by single-member allOf flatten using the property-derived child name).\n // Inline refs (without $ref) from faker utils already carry resolved helper names.\n const refName = node.ref ? (ast.extractRefName(node.ref) ?? node.name ?? node.schema?.name) : (node.name ?? node.schema?.name)\n\n if (!refName) {\n throw new Error('Name not defined for ref node')\n }\n\n if (this.options.schemaName && refName === this.options.schemaName) {\n return 'undefined as any'\n }\n\n // Internal helper refs (for generated response/data helpers) are already\n // emitted with resolver output and should not be transformed twice.\n const resolvedName = node.ref ? this.options.resolver.resolveName(refName) : refName\n\n if (!this.options.nestedInObject) {\n return `${resolvedName}(data)`\n }\n\n return `${resolvedName}()`\n },\n enum(node) {\n return fakerKeywordMapper.enum(getEnumValues(node).map(parseEnumValue), this.options.typeName)\n },\n union(node): string {\n const { discriminatorPropertyName } = node\n const baseTypeName = this.options.typeName\n\n const items: Array<string> = (node.members ?? [])\n .map((member) => {\n // For a discriminated union, narrow each variant to its own branch so nested\n // `NonNullable<T>[K]` indexes resolve against that branch instead of the whole union.\n const value = discriminatorPropertyName ? getDiscriminatorValue(member, discriminatorPropertyName) : undefined\n\n if (baseTypeName && value !== undefined) {\n const typeName = `Extract<NonNullable<${baseTypeName}>, { ${JSON.stringify(discriminatorPropertyName)}: ${parseEnumValue(value)} }>`\n\n return printNested(member, { typeName, nestedInObject: true })\n }\n\n // Without a discriminator, keep the union type but guard each indexed access (see\n // `indexedTypeName`) so a key carried by only some branches resolves to `unknown`\n // rather than erroring with TS2339.\n return printNested(member, { typeName: baseTypeName, nestedInObject: true, nestedInUnion: true })\n })\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.union(items)\n },\n intersection(node): string {\n const items: Array<string> = (node.members ?? [])\n .map((member) =>\n printNested(member, {\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.and(items)\n },\n array(node): string {\n const items: Array<string> = (node.items ?? [])\n .map((member) =>\n printNested(member, {\n typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[number]` : undefined,\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.array(items, node.min, node.max)\n },\n tuple(node): string {\n const items: Array<string> = (node.items ?? [])\n .map((member, index) =>\n printNested(member, {\n typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${index}]` : undefined,\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.tuple(items)\n },\n object(node): string {\n const cyclicSchemas = this.options.cyclicSchemas\n const properties = (node.properties ?? [])\n .map((property): string => {\n if (this.options.mapper && Object.hasOwn(this.options.mapper, property.name)) {\n return `\"${property.name}\": ${this.options.mapper[property.name]}`\n }\n\n const value: string =\n printNested(property.schema, {\n typeName: this.options.typeName ? indexedTypeName(this.options.typeName, property.name, this.options.nestedInUnion) : undefined,\n nestedInObject: true,\n }) ?? 'undefined'\n\n // When the property's schema transitively references a schema that is\n // part of a circular dependency (other than the current schema itself),\n // emit a memoizing lazy getter. On first access it computes the value,\n // replaces itself with a plain data property via Object.defineProperty,\n // and returns the cached value – so every subsequent read is stable.\n if (cyclicSchemas && ast.containsCircularRef(property.schema, { circularSchemas: cyclicSchemas, excludeName: this.options.schemaName })) {\n return `get ${property.name}() { const _value = ${value}; Object.defineProperty(this, ${JSON.stringify(property.name)}, { value: _value, configurable: true, writable: true, enumerable: true }); return _value }`\n }\n\n return `\"${property.name}\": ${value}`\n })\n .join(',')\n\n return `{${properties}}`\n },\n ...options.nodes,\n },\n print(node) {\n return this.transform(node) ?? null\n },\n }\n})\n","import { aliasConflictingImports, filterUsedImports, rewriteAliasedImports } from '@internals/utils'\nimport { ast, defineGenerator } from '@kubb/core'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { File, jsxRendererSync } from '@kubb/renderer-jsx'\nimport { Faker } from '../components/Faker.tsx'\nimport { printerFaker } from '../printers/printerFaker.ts'\nimport type { PluginFaker } from '../types.ts'\nimport { buildResponseUnionSchema, canOverrideSchema, localeToFakerImport, resolveParamNameByLocation, resolveTypeReference } from '../utils.ts'\n\n/**\n * Built-in generator for `@kubb/plugin-faker`. Emits one `createX` factory\n * per schema in the spec plus per-operation request/response factories. Each\n * factory returns a value matching the corresponding TypeScript type from\n * `@kubb/plugin-ts`.\n */\nexport const fakerGenerator = defineGenerator<PluginFaker>({\n name: 'faker',\n renderer: jsxRendererSync,\n schema(node, ctx) {\n const { adapter, config, resolver, root } = ctx\n const { output, group, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options\n const pluginTs = ctx.driver.getPlugin(pluginTsName)\n\n if (!node.name || !pluginTs) {\n return\n }\n\n const tsResolver = ctx.driver.getResolver(pluginTsName)\n\n const schemaName = node.name\n const mode = ctx.getMode(output)\n const meta = {\n name: resolver.resolveName(schemaName),\n file: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }),\n typeName: tsResolver.resolveTypeName(schemaName),\n typeFile: tsResolver.resolveFile(\n { name: schemaName, extname: '.ts' },\n { root, output: pluginTs.options?.output ?? output, group: pluginTs.options?.group ?? undefined },\n ),\n } as const\n const canOverride = canOverrideSchema(node)\n const cyclicSchemas = new Set<string>(ctx.meta.circularNames)\n const printerInstance = printerFaker({\n resolver,\n schemaName,\n typeName: meta.typeName,\n dateParser,\n regexGenerator,\n mapper,\n nodes: printer?.nodes,\n cyclicSchemas,\n })\n const fakerText = printerInstance.print(node) ?? 'undefined'\n const typeReference = resolveTypeReference({\n node,\n canOverride,\n name: meta.name,\n typeName: meta.typeName,\n filePath: meta.file.path,\n typeFilePath: meta.typeFile.path,\n })\n\n const imports = adapter\n .getImports(node, (schemaName) => ({\n name: resolver.resolveName(schemaName),\n path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }).path,\n }))\n .filter((entry) => entry.path !== meta.file.path)\n const usedImports = filterUsedImports(imports, fakerText)\n\n return (\n <File\n baseName={meta.file.baseName}\n path={meta.file.path}\n meta={meta.file.meta}\n banner={resolver.resolveBanner(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}\n footer={resolver.resolveFooter(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}\n >\n <File.Import name={locale ? [{ propertyName: localeToFakerImport(locale), name: 'faker' }] : ['faker']} path=\"@faker-js/faker\" />\n {regexGenerator === 'randexp' && <File.Import name={'RandExp'} path={'randexp'} />}\n {dateParser !== 'faker' && <File.Import path={dateParser} name={dateParser} />}\n {typeReference.importPath && <File.Import isTypeOnly root={meta.file.path} path={typeReference.importPath} name={[meta.typeName]} />}\n {mode === 'split' &&\n usedImports.map((imp) => <File.Import key={[schemaName, imp.path, imp.name].join('-')} root={meta.file.path} path={imp.path} name={imp.name} />)}\n <Faker\n name={meta.name}\n typeName={typeReference.typeName}\n description={node.description}\n node={node}\n printer={printerInstance}\n seed={seed}\n canOverride={canOverride}\n />\n </File>\n )\n },\n operation(node, ctx) {\n const { adapter, config, resolver, root } = ctx\n const { output, group, paramsCasing, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options\n const pluginTs = ctx.driver.getPlugin(pluginTsName)\n\n if (!pluginTs) {\n return\n }\n\n const tsResolver = ctx.driver.getResolver(pluginTsName)\n\n const params = ast.caseParams(node.parameters, paramsCasing)\n const paramEntries = params.map((param) => ({\n param,\n name: resolveParamNameByLocation(resolver, node, param),\n typeName: resolveParamNameByLocation(tsResolver, node, param),\n }))\n const responseEntries = node.responses.map((response) => ({\n response,\n name: resolver.resolveResponseStatusName(node, response.statusCode),\n typeName: tsResolver.resolveResponseStatusName(node, response.statusCode),\n }))\n const dataEntry = node.requestBody?.content?.[0]?.schema\n ? {\n schema: {\n ...node.requestBody.content![0]!.schema!,\n description: node.requestBody.description ?? node.requestBody.content![0]!.schema!.description,\n },\n name: resolver.resolveDataName(node),\n typeName: tsResolver.resolveDataName(node),\n description: node.requestBody.description ?? node.requestBody.content![0]!.schema!.description,\n }\n : null\n const responseName = resolver.resolveResponseName(node)\n const localHelperNames = new Set([\n ...paramEntries.map((entry) => entry.name),\n ...responseEntries.map((entry) => entry.name),\n ...(dataEntry ? [dataEntry.name] : []),\n responseName,\n ])\n const cyclicSchemas = new Set<string>(ctx.meta.circularNames)\n\n const meta = {\n file: resolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n { root, output, group: group ?? undefined },\n ),\n typeFile: tsResolver.resolveFile(\n {\n name: node.operationId,\n extname: '.ts',\n tag: node.tags[0] ?? 'default',\n path: node.path,\n },\n {\n root,\n output: pluginTs.options?.output ?? output,\n group: pluginTs.options?.group ?? undefined,\n },\n ),\n } as const\n\n function resolveMockImports(schema: ast.SchemaNode) {\n return adapter\n .getImports(schema, (schemaName) => ({\n name: resolver.resolveName(schemaName),\n path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }).path,\n }))\n .filter((entry) => entry.path !== meta.file.path)\n }\n\n function renderEntry({\n schema,\n name,\n typeName,\n description,\n skipImportNames = [],\n }: {\n schema: ast.SchemaNode | null\n name: string\n typeName: string\n description?: string\n skipImportNames?: Array<string>\n }) {\n if (!schema) {\n return null\n }\n\n const canOverride = canOverrideSchema(schema)\n const printerInstance = printerFaker({\n resolver,\n schemaName: name,\n typeName,\n dateParser,\n regexGenerator,\n mapper,\n nodes: printer?.nodes,\n cyclicSchemas,\n })\n const fakerText = printerInstance.print(schema) ?? 'undefined'\n const usedImports = filterUsedImports(resolveMockImports(schema), fakerText, skipImportNames)\n const { imports, aliases } = aliasConflictingImports(usedImports, localHelperNames)\n const rewrittenFakerText = rewriteAliasedImports(fakerText, aliases)\n const typeReference = resolveTypeReference({\n node: schema,\n canOverride,\n name,\n typeName,\n filePath: meta.file.path,\n typeFilePath: meta.typeFile.path,\n })\n\n return (\n <>\n {typeReference.importPath && <File.Import isTypeOnly root={meta.file.path} path={typeReference.importPath} name={[typeName]} />}\n {imports.map((imp) => (\n <File.Import key={[name, imp.path, imp.name].join('-')} root={meta.file.path} path={imp.path} name={imp.name} />\n ))}\n <Faker\n name={name}\n typeName={typeReference.typeName}\n description={description}\n node={schema}\n printer={{ ...printerInstance, print: () => rewrittenFakerText }}\n seed={seed}\n canOverride={canOverride}\n />\n </>\n )\n }\n\n return (\n <File\n baseName={meta.file.baseName}\n path={meta.file.path}\n meta={meta.file.meta}\n banner={resolver.resolveBanner(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}\n footer={resolver.resolveFooter(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}\n >\n <File.Import name={locale ? [{ propertyName: localeToFakerImport(locale), name: 'faker' }] : ['faker']} path=\"@faker-js/faker\" />\n {regexGenerator === 'randexp' && <File.Import name={'RandExp'} path={'randexp'} />}\n {dateParser !== 'faker' && <File.Import path={dateParser} name={dateParser} />}\n {paramEntries.map(({ param, name, typeName }) =>\n renderEntry({\n schema: param.schema,\n name,\n typeName,\n }),\n )}\n {responseEntries.map(({ response, name, typeName }) =>\n renderEntry({\n schema: response.schema,\n name,\n typeName,\n description: response.description,\n }),\n )}\n {dataEntry\n ? renderEntry({\n schema: dataEntry.schema,\n name: dataEntry.name,\n typeName: dataEntry.typeName,\n description: dataEntry.description,\n })\n : null}\n {renderEntry({\n schema: buildResponseUnionSchema(node, resolver),\n name: responseName,\n typeName: tsResolver.resolveResponseName(node),\n skipImportNames: responseEntries.map(({ name }) => name),\n })}\n </File>\n )\n },\n})\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { t as __name } from "./chunk--u3MIqq1.js";
2
- import { o as PluginFaker } from "./printerFaker-GYscoNnG.js";
2
+ import { o as PluginFaker } from "./printerFaker-Bhwq62d1.js";
3
3
  import * as _$_kubb_core0 from "@kubb/core";
4
4
 
5
5
  //#region src/generators/fakerGenerator.d.ts
@@ -12,4 +12,4 @@ import * as _$_kubb_core0 from "@kubb/core";
12
12
  declare const fakerGenerator: _$_kubb_core0.Generator<PluginFaker, unknown>;
13
13
  //#endregion
14
14
  export { fakerGenerator as t };
15
- //# sourceMappingURL=fakerGenerator-C85ME3uM.d.ts.map
15
+ //# sourceMappingURL=fakerGenerator-DSvAJTq3.d.ts.map
@@ -158,6 +158,22 @@ function parseEnumValue(value) {
158
158
  if (typeof value === "string") return stringify(value);
159
159
  return value;
160
160
  }
161
+ /** Reads the discriminator literal off a variant, or `undefined` when it can't be determined. */
162
+ function getDiscriminatorValue(member, discriminatorPropertyName) {
163
+ const prop = ast.narrowSchema(member, "object")?.properties?.find((p) => p.name === discriminatorPropertyName);
164
+ const enumNode = prop ? ast.narrowSchema(prop.schema, "enum") : null;
165
+ return enumNode ? getEnumValues(enumNode)[0] : void 0;
166
+ }
167
+ /**
168
+ * Type expression for an object property's value, indexed off the parent `typeName`.
169
+ *
170
+ * In a union (`oneOf`), a key that only some branches declare turns a plain `NonNullable<T>[K]`
171
+ * into a TS2339 error, so union members guard the access. The breakdown is below.
172
+ */
173
+ function indexedTypeName(typeName, propertyName, nestedInUnion) {
174
+ const key = JSON.stringify(propertyName);
175
+ return nestedInUnion ? `(NonNullable<${typeName}> & Record<${key}, unknown>)[${key}]` : `NonNullable<${typeName}>[${key}]`;
176
+ }
161
177
  /**
162
178
  * Creates a Faker printer that generates mock data generation code from schema nodes.
163
179
  * Handles circular references gracefully by emitting memoizing getters for cyclic properties.
@@ -213,7 +229,20 @@ const printerFaker = ast.definePrinter((options) => {
213
229
  return fakerKeywordMapper.enum(getEnumValues(node).map(parseEnumValue), this.options.typeName);
214
230
  },
215
231
  union(node) {
216
- const items = (node.members ?? []).map((member) => printNested(member, { nestedInObject: true })).filter((item) => Boolean(item));
232
+ const { discriminatorPropertyName } = node;
233
+ const baseTypeName = this.options.typeName;
234
+ const items = (node.members ?? []).map((member) => {
235
+ const value = discriminatorPropertyName ? getDiscriminatorValue(member, discriminatorPropertyName) : void 0;
236
+ if (baseTypeName && value !== void 0) return printNested(member, {
237
+ typeName: `Extract<NonNullable<${baseTypeName}>, { ${JSON.stringify(discriminatorPropertyName)}: ${parseEnumValue(value)} }>`,
238
+ nestedInObject: true
239
+ });
240
+ return printNested(member, {
241
+ typeName: baseTypeName,
242
+ nestedInObject: true,
243
+ nestedInUnion: true
244
+ });
245
+ }).filter((item) => Boolean(item));
217
246
  return fakerKeywordMapper.union(items);
218
247
  },
219
248
  intersection(node) {
@@ -239,7 +268,7 @@ const printerFaker = ast.definePrinter((options) => {
239
268
  return `{${(node.properties ?? []).map((property) => {
240
269
  if (this.options.mapper && Object.hasOwn(this.options.mapper, property.name)) return `"${property.name}": ${this.options.mapper[property.name]}`;
241
270
  const value = printNested(property.schema, {
242
- typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${JSON.stringify(property.name)}]` : void 0,
271
+ typeName: this.options.typeName ? indexedTypeName(this.options.typeName, property.name, this.options.nestedInUnion) : void 0,
243
272
  nestedInObject: true
244
273
  }) ?? "undefined";
245
274
  if (cyclicSchemas && ast.containsCircularRef(property.schema, {
@@ -333,11 +362,19 @@ const fakerGenerator = defineGenerator({
333
362
  meta: meta.file.meta,
334
363
  banner: resolver.resolveBanner(ctx.meta, {
335
364
  output,
336
- config
365
+ config,
366
+ file: {
367
+ path: meta.file.path,
368
+ baseName: meta.file.baseName
369
+ }
337
370
  }),
338
371
  footer: resolver.resolveFooter(ctx.meta, {
339
372
  output,
340
- config
373
+ config,
374
+ file: {
375
+ path: meta.file.path,
376
+ baseName: meta.file.baseName
377
+ }
341
378
  }),
342
379
  children: [
343
380
  /* @__PURE__ */ jsx(File.Import, {
@@ -510,11 +547,19 @@ const fakerGenerator = defineGenerator({
510
547
  meta: meta.file.meta,
511
548
  banner: resolver.resolveBanner(ctx.meta, {
512
549
  output,
513
- config
550
+ config,
551
+ file: {
552
+ path: meta.file.path,
553
+ baseName: meta.file.baseName
554
+ }
514
555
  }),
515
556
  footer: resolver.resolveFooter(ctx.meta, {
516
557
  output,
517
- config
558
+ config,
559
+ file: {
560
+ path: meta.file.path,
561
+ baseName: meta.file.baseName
562
+ }
518
563
  }),
519
564
  children: [
520
565
  /* @__PURE__ */ jsx(File.Import, {
@@ -562,4 +607,4 @@ const fakerGenerator = defineGenerator({
562
607
  //#endregion
563
608
  export { printerFaker as n, fakerGenerator as t };
564
609
 
565
- //# sourceMappingURL=fakerGenerator-Crs3X84u.js.map
610
+ //# sourceMappingURL=fakerGenerator-itrqBdbx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fakerGenerator-itrqBdbx.js","names":[],"sources":["../../../internals/utils/src/imports.ts","../../../internals/utils/src/object.ts","../../../internals/utils/src/regexp.ts","../src/printers/printerFaker.ts","../src/generators/fakerGenerator.tsx"],"sourcesContent":["export type ImportName = string | { propertyName: string; name?: string }\n\nexport type ImportEntry = {\n name: string | Array<ImportName>\n path: string\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\nfunction getImportNames(entry: ImportEntry): Array<string> {\n return (Array.isArray(entry.name) ? entry.name : [entry.name])\n .map((name) => {\n if (typeof name === 'string') {\n return name\n }\n\n return name.name ?? name.propertyName\n })\n .filter((name): name is string => Boolean(name))\n}\n\nexport function filterUsedImports(imports: Array<ImportEntry>, text: string, skipImportNames: Array<string> = []): Array<ImportEntry> {\n return imports.filter((entry) => {\n const names = getImportNames(entry)\n\n return names.some((name) => {\n if (skipImportNames.includes(name)) {\n return false\n }\n\n return new RegExp(`\\\\b${escapeRegExp(name)}\\\\b(?=\\\\s*\\\\()`).test(text)\n })\n })\n}\n\nexport function aliasConflictingImports(\n imports: Array<ImportEntry>,\n reservedNames: Iterable<string>,\n): { imports: Array<ImportEntry>; aliases: Map<string, string> } {\n const reservedNameSet = new Set(reservedNames)\n const aliases = new Map<string, string>()\n\n const aliasedImports = imports.map((entry) => {\n const names = Array.isArray(entry.name) ? entry.name : [entry.name]\n const aliasedNames = names.map((item): ImportName => {\n if (typeof item !== 'string' || !reservedNameSet.has(item)) {\n return item\n }\n\n const alias = `${item}Schema`\n aliases.set(item, alias)\n\n return { propertyName: item, name: alias }\n })\n\n return aliasedNames.some((item) => typeof item === 'object' && item.name)\n ? {\n ...entry,\n name: aliasedNames,\n }\n : entry\n })\n\n return {\n imports: aliasedImports,\n aliases,\n }\n}\n\nexport function rewriteAliasedImports(text: string, aliases: ReadonlyMap<string, string>): string {\n return Array.from(aliases).reduce((acc, [name, alias]) => acc.replace(new RegExp(`\\\\b${escapeRegExp(name)}\\\\b`, 'g'), alias), text)\n}\n","import { trimQuotes } from './string.ts'\n\n/**\n * Serializes a primitive value to a JSON string literal, stripping any surrounding quote characters first.\n *\n * @example\n * stringify('hello') // '\"hello\"'\n * stringify('\"hello\"') // '\"hello\"'\n */\nexport function stringify(value: string | number | boolean | undefined): string {\n if (value === undefined || value === null) return '\"\"'\n return JSON.stringify(trimQuotes(value.toString()))\n}\n\n/**\n * Converts a plain object into a multiline key-value string suitable for embedding in generated code.\n * Nested objects are recursively stringified with indentation.\n *\n * @example\n * stringifyObject({ foo: 'bar', nested: { a: 1 } })\n * // 'foo: bar,\\nnested: {\\n a: 1\\n }'\n */\nexport function stringifyObject(value: Record<string, unknown>): string {\n const items = Object.entries(value)\n .map(([key, val]) => {\n if (val !== null && typeof val === 'object') {\n return `${key}: {\\n ${stringifyObject(val as Record<string, unknown>)}\\n }`\n }\n return `${key}: ${val}`\n })\n .filter(Boolean)\n return items.join(',\\n')\n}\n\n/**\n * Converts a dot-notation path or string array into an optional-chaining accessor expression.\n *\n * @example\n * getNestedAccessor('pagination.next.id', 'lastPage')\n * // → \"lastPage?.['pagination']?.['next']?.['id']\"\n */\nexport function getNestedAccessor(param: string | string[], accessor: string): string | null {\n const parts = Array.isArray(param) ? param : param.split('.')\n if (parts.length === 0 || (parts.length === 1 && parts[0] === '')) return null\n return `${accessor}?.['${`${parts.join(\"']?.['\")}']`}`\n}\n","import { trimQuotes } from './string.ts'\n\n/**\n * Converts a pattern string into a `new RegExp(...)` constructor call or a regex literal string.\n * Inline flags expressed as `^(?im)` prefixes are extracted and applied to the resulting expression.\n * Pass `null` as the second argument to emit a `/pattern/flags` literal instead.\n *\n * @example\n * toRegExpString('^(?im)foo') // → 'new RegExp(\"foo\", \"im\")'\n * toRegExpString('^(?im)foo', null) // → '/foo/im'\n */\nexport function toRegExpString(text: string, func: string | null = 'RegExp'): string {\n const raw = trimQuotes(text)\n\n const match = raw.match(/^\\^(\\(\\?([igmsuy]+)\\))/i)\n const replacementTarget = match?.[1] ?? ''\n const matchedFlags = match?.[2]\n const cleaned = raw\n .replace(/^\\\\?\\//, '')\n .replace(/\\\\?\\/$/, '')\n .replace(replacementTarget, '')\n\n const { source, flags } = new RegExp(cleaned, matchedFlags)\n\n if (func === null) return `/${source}/${flags}`\n\n return `new ${func}(${JSON.stringify(source)}${flags ? `, ${JSON.stringify(flags)}` : ''})`\n}\n","import { stringify, toRegExpString } from '@internals/utils'\nimport { ast } from '@kubb/core'\nimport type { PluginFaker, ResolverFaker } from '../types.ts'\n\n/**\n * Partial map of node-type overrides for the Faker printer. Each key is a\n * `SchemaType` (`'string'`, `'date'`, ...) and each handler returns the\n * Faker expression for that schema as a string. Use `this.transform` to\n * recurse into nested schema nodes and `this.options` to read printer options.\n *\n * @example Override the integer handler\n * ```ts\n * pluginFaker({\n * printer: {\n * nodes: {\n * integer() {\n * return 'faker.number.float()'\n * },\n * },\n * },\n * })\n * ```\n */\nexport type PrinterFakerNodes = ast.PrinterPartial<string, PrinterFakerOptions>\n\n/**\n * Options passed to the Faker printer at instantiation: the parser library\n * for date strings, the regex generator, the user-supplied schema-name\n * mapper, and the resolver used to compute identifiers.\n */\nexport type PrinterFakerOptions = {\n dateParser?: PluginFaker['resolvedOptions']['dateParser']\n regexGenerator?: PluginFaker['resolvedOptions']['regexGenerator']\n mapper?: PluginFaker['resolvedOptions']['mapper']\n resolver: ResolverFaker\n typeName?: string\n schemaName?: string\n nestedInObject?: boolean\n /**\n * Set while printing the members of a union (`oneOf`). Object properties then index their\n * type as `(NonNullable<T> & Record<K, unknown>)[K]` instead of `NonNullable<T>[K]`, so a key\n * carried by only some branches stays valid (a plain index would be a TS2339).\n */\n nestedInUnion?: boolean\n nodes?: PrinterFakerNodes\n /**\n * Names of schemas that participate in a circular dependency chain.\n * Properties whose schema transitively references one of these are emitted\n * as lazy getters so that user overrides via the `data` parameter prevent\n * the recursive faker call from ever executing (avoiding stack overflow).\n */\n cyclicSchemas?: ReadonlySet<string>\n}\n\n/**\n * Factory options for the Faker printer, defining input/output types and configuration.\n */\nexport type PrinterFakerFactory = ast.PrinterFactoryOptions<'faker', PrinterFakerOptions, string, string>\n\nconst fakerKeywordMapper = {\n any: () => 'undefined',\n unknown: () => 'undefined',\n void: () => 'undefined',\n number: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.number.float({ min: ${min}, max: ${max} })`\n }\n\n if (max !== undefined) {\n return `faker.number.float({ max: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.number.float({ min: ${min} })`\n }\n\n return 'faker.number.float()'\n },\n integer: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.number.int({ min: ${min}, max: ${max} })`\n }\n\n if (max !== undefined) {\n return `faker.number.int({ max: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.number.int({ min: ${min} })`\n }\n\n return 'faker.number.int()'\n },\n bigint: () => 'faker.number.bigInt()',\n string: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.string.alpha({ length: { min: ${min}, max: ${max} } })`\n }\n\n if (max !== undefined) {\n return `faker.string.alpha({ length: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.string.alpha({ length: ${min} })`\n }\n\n return 'faker.string.alpha()'\n },\n boolean: () => 'faker.datatype.boolean()',\n null: () => 'null',\n array: (items: Array<string> = [], min?: number, max?: number) => {\n if (items.length > 1) {\n return `faker.helpers.arrayElements([${items.join(', ')}])`\n }\n\n const item = items.at(0)\n\n if (min !== undefined && max !== undefined) {\n return `faker.helpers.multiple(() => (${item}), { count: { min: ${min}, max: ${max} }})`\n }\n\n if (min !== undefined) {\n return `faker.helpers.multiple(() => (${item}), { count: ${min} })`\n }\n\n if (max !== undefined) {\n return `faker.helpers.multiple(() => (${item}), { count: { min: 0, max: ${max} }})`\n }\n\n return `faker.helpers.multiple(() => (${item}))`\n },\n tuple: (items: Array<string> = []) => `[${items.join(', ')}]`,\n enum: (items: Array<string | number | boolean | undefined> = [], type = 'any') => `faker.helpers.arrayElement<${type}>([${items.join(', ')}])`,\n union: (items: Array<string> = []) => `faker.helpers.arrayElement<any>([${items.join(', ')}])`,\n datetime: () => 'faker.date.anytime().toISOString()',\n date: (representation: 'date' | 'string' = 'string', parser: PluginFaker['resolvedOptions']['dateParser'] = 'faker') => {\n if (representation === 'string') {\n if (parser !== 'faker') {\n return `${parser}(faker.date.anytime()).format(\"YYYY-MM-DD\")`\n }\n\n return 'faker.date.anytime().toISOString().substring(0, 10)'\n }\n\n if (parser !== 'faker') {\n throw new Error(`type '${representation}' and parser '${parser}' can not work together`)\n }\n\n return 'faker.date.anytime()'\n },\n time: (representation: 'date' | 'string' = 'string', parser: PluginFaker['resolvedOptions']['dateParser'] = 'faker') => {\n if (representation === 'string') {\n if (parser !== 'faker') {\n return `${parser}(faker.date.anytime()).format(\"HH:mm:ss\")`\n }\n\n return 'faker.date.anytime().toISOString().substring(11, 19)'\n }\n\n if (parser !== 'faker') {\n throw new Error(`type '${representation}' and parser '${parser}' can not work together`)\n }\n\n return 'faker.date.anytime()'\n },\n uuid: () => 'faker.string.uuid()',\n url: () => 'faker.internet.url()',\n and: (items: Array<string> = []) => {\n if (items.length === 0) {\n return '{}'\n }\n\n if (items.length === 1) {\n return items[0] ?? '{}'\n }\n\n return `{...${items.join(', ...')}}`\n },\n matches: (value = '', regexGenerator: 'faker' | 'randexp' = 'faker') => {\n if (regexGenerator === 'randexp') {\n return `${toRegExpString(value, 'RandExp')}.gen()`\n }\n\n return `faker.helpers.fromRegExp(\"${value}\")`\n },\n email: () => 'faker.internet.email()',\n blob: () => 'faker.image.url() as unknown as Blob',\n} as const\n\nfunction getEnumValues(node: ast.EnumSchemaNode): Array<string | number | boolean | undefined> {\n if (node.namedEnumValues?.length) {\n return node.namedEnumValues.map((item) => item.value as string | number | boolean | undefined)\n }\n\n return (node.enumValues ?? []) as Array<string | number | boolean | undefined>\n}\n\nfunction parseEnumValue(value: string | number | boolean | undefined) {\n if (typeof value === 'string') {\n return stringify(value)\n }\n\n return value\n}\n\n/** Reads the discriminator literal off a variant, or `undefined` when it can't be determined. */\nfunction getDiscriminatorValue(member: ast.SchemaNode, discriminatorPropertyName: string) {\n const prop = ast.narrowSchema(member, 'object')?.properties?.find((p) => p.name === discriminatorPropertyName)\n const enumNode = prop ? ast.narrowSchema(prop.schema, 'enum') : null\n\n return enumNode ? getEnumValues(enumNode)[0] : undefined\n}\n\n/**\n * Type expression for an object property's value, indexed off the parent `typeName`.\n *\n * In a union (`oneOf`), a key that only some branches declare turns a plain `NonNullable<T>[K]`\n * into a TS2339 error, so union members guard the access. The breakdown is below.\n */\nfunction indexedTypeName(typeName: string, propertyName: string, nestedInUnion?: boolean): string {\n const key = JSON.stringify(propertyName)\n\n // `(NonNullable<T> & Record<K, unknown>)[K]`, read inside-out:\n // NonNullable<T> strips null and undefined from the parent type T.\n // & Record<K, unknown> forces every branch to have key K. A branch that already declares K\n // keeps it (`T[K] & unknown` is `T[K]`); a branch missing K gains it as `unknown`.\n // [K] reads the key, which is now always present, so it never hits TS2339.\n // For a single object T the intersection does nothing, leaving `T[K]`.\n return nestedInUnion ? `(NonNullable<${typeName}> & Record<${key}, unknown>)[${key}]` : `NonNullable<${typeName}>[${key}]`\n}\n\n/**\n * Creates a Faker printer that generates mock data generation code from schema nodes.\n * Handles circular references gracefully by emitting memoizing getters for cyclic properties.\n */\nexport const printerFaker: (options: PrinterFakerOptions) => ast.Printer<PrinterFakerFactory> = ast.definePrinter<PrinterFakerFactory>((options) => {\n const printNested = (node: ast.SchemaNode, overrideOptions: Partial<PrinterFakerOptions> = {}): string => {\n return (\n printerFaker({\n ...options,\n ...overrideOptions,\n nodes: options.nodes,\n }).print(node) ?? 'undefined'\n )\n }\n\n return {\n name: 'faker',\n options,\n nodes: {\n any: () => fakerKeywordMapper.any(),\n unknown: () => fakerKeywordMapper.unknown(),\n void: () => fakerKeywordMapper.void(),\n boolean: () => fakerKeywordMapper.boolean(),\n null: () => fakerKeywordMapper.null(),\n string(node) {\n if (node.pattern) {\n return fakerKeywordMapper.matches(node.pattern, this.options.regexGenerator)\n }\n\n return fakerKeywordMapper.string(node.min, node.max)\n },\n email: () => fakerKeywordMapper.email(),\n url: () => fakerKeywordMapper.url(),\n uuid: () => fakerKeywordMapper.uuid(),\n number(node) {\n return fakerKeywordMapper.number(node.min, node.max)\n },\n integer(node) {\n return fakerKeywordMapper.integer(node.min, node.max)\n },\n bigint: () => fakerKeywordMapper.bigint(),\n blob: () => fakerKeywordMapper.blob(),\n datetime: () => fakerKeywordMapper.datetime(),\n date(node) {\n return fakerKeywordMapper.date(node.representation ?? 'string', this.options.dateParser)\n },\n time(node) {\n return fakerKeywordMapper.time(node.representation ?? 'string', this.options.dateParser)\n },\n ref(node) {\n // Parser-generated refs (with $ref) carry raw schema names that need resolving.\n // Use the canonical name from the $ref path — node.name may have been overridden\n // (e.g. by single-member allOf flatten using the property-derived child name).\n // Inline refs (without $ref) from faker utils already carry resolved helper names.\n const refName = node.ref ? (ast.extractRefName(node.ref) ?? node.name ?? node.schema?.name) : (node.name ?? node.schema?.name)\n\n if (!refName) {\n throw new Error('Name not defined for ref node')\n }\n\n if (this.options.schemaName && refName === this.options.schemaName) {\n return 'undefined as any'\n }\n\n // Internal helper refs (for generated response/data helpers) are already\n // emitted with resolver output and should not be transformed twice.\n const resolvedName = node.ref ? this.options.resolver.resolveName(refName) : refName\n\n if (!this.options.nestedInObject) {\n return `${resolvedName}(data)`\n }\n\n return `${resolvedName}()`\n },\n enum(node) {\n return fakerKeywordMapper.enum(getEnumValues(node).map(parseEnumValue), this.options.typeName)\n },\n union(node): string {\n const { discriminatorPropertyName } = node\n const baseTypeName = this.options.typeName\n\n const items: Array<string> = (node.members ?? [])\n .map((member) => {\n // For a discriminated union, narrow each variant to its own branch so nested\n // `NonNullable<T>[K]` indexes resolve against that branch instead of the whole union.\n const value = discriminatorPropertyName ? getDiscriminatorValue(member, discriminatorPropertyName) : undefined\n\n if (baseTypeName && value !== undefined) {\n const typeName = `Extract<NonNullable<${baseTypeName}>, { ${JSON.stringify(discriminatorPropertyName)}: ${parseEnumValue(value)} }>`\n\n return printNested(member, { typeName, nestedInObject: true })\n }\n\n // Without a discriminator, keep the union type but guard each indexed access (see\n // `indexedTypeName`) so a key carried by only some branches resolves to `unknown`\n // rather than erroring with TS2339.\n return printNested(member, { typeName: baseTypeName, nestedInObject: true, nestedInUnion: true })\n })\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.union(items)\n },\n intersection(node): string {\n const items: Array<string> = (node.members ?? [])\n .map((member) =>\n printNested(member, {\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.and(items)\n },\n array(node): string {\n const items: Array<string> = (node.items ?? [])\n .map((member) =>\n printNested(member, {\n typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[number]` : undefined,\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.array(items, node.min, node.max)\n },\n tuple(node): string {\n const items: Array<string> = (node.items ?? [])\n .map((member, index) =>\n printNested(member, {\n typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${index}]` : undefined,\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.tuple(items)\n },\n object(node): string {\n const cyclicSchemas = this.options.cyclicSchemas\n const properties = (node.properties ?? [])\n .map((property): string => {\n if (this.options.mapper && Object.hasOwn(this.options.mapper, property.name)) {\n return `\"${property.name}\": ${this.options.mapper[property.name]}`\n }\n\n const value: string =\n printNested(property.schema, {\n typeName: this.options.typeName ? indexedTypeName(this.options.typeName, property.name, this.options.nestedInUnion) : undefined,\n nestedInObject: true,\n }) ?? 'undefined'\n\n // When the property's schema transitively references a schema that is\n // part of a circular dependency (other than the current schema itself),\n // emit a memoizing lazy getter. On first access it computes the value,\n // replaces itself with a plain data property via Object.defineProperty,\n // and returns the cached value – so every subsequent read is stable.\n if (cyclicSchemas && ast.containsCircularRef(property.schema, { circularSchemas: cyclicSchemas, excludeName: this.options.schemaName })) {\n return `get ${property.name}() { const _value = ${value}; Object.defineProperty(this, ${JSON.stringify(property.name)}, { value: _value, configurable: true, writable: true, enumerable: true }); return _value }`\n }\n\n return `\"${property.name}\": ${value}`\n })\n .join(',')\n\n return `{${properties}}`\n },\n ...options.nodes,\n },\n print(node) {\n return this.transform(node) ?? null\n },\n }\n})\n","import { aliasConflictingImports, filterUsedImports, rewriteAliasedImports } from '@internals/utils'\nimport { ast, defineGenerator } from '@kubb/core'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { File, jsxRendererSync } from '@kubb/renderer-jsx'\nimport { Faker } from '../components/Faker.tsx'\nimport { printerFaker } from '../printers/printerFaker.ts'\nimport type { PluginFaker } from '../types.ts'\nimport { buildResponseUnionSchema, canOverrideSchema, localeToFakerImport, resolveParamNameByLocation, resolveTypeReference } from '../utils.ts'\n\n/**\n * Built-in generator for `@kubb/plugin-faker`. Emits one `createX` factory\n * per schema in the spec plus per-operation request/response factories. Each\n * factory returns a value matching the corresponding TypeScript type from\n * `@kubb/plugin-ts`.\n */\nexport const fakerGenerator = defineGenerator<PluginFaker>({\n name: 'faker',\n renderer: jsxRendererSync,\n schema(node, ctx) {\n const { adapter, config, resolver, root } = ctx\n const { output, group, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options\n const pluginTs = ctx.driver.getPlugin(pluginTsName)\n\n if (!node.name || !pluginTs) {\n return\n }\n\n const tsResolver = ctx.driver.getResolver(pluginTsName)\n\n const schemaName = node.name\n const mode = ctx.getMode(output)\n const meta = {\n name: resolver.resolveName(schemaName),\n file: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }),\n typeName: tsResolver.resolveTypeName(schemaName),\n typeFile: tsResolver.resolveFile(\n { name: schemaName, extname: '.ts' },\n { root, output: pluginTs.options?.output ?? output, group: pluginTs.options?.group ?? undefined },\n ),\n } as const\n const canOverride = canOverrideSchema(node)\n const cyclicSchemas = new Set<string>(ctx.meta.circularNames)\n const printerInstance = printerFaker({\n resolver,\n schemaName,\n typeName: meta.typeName,\n dateParser,\n regexGenerator,\n mapper,\n nodes: printer?.nodes,\n cyclicSchemas,\n })\n const fakerText = printerInstance.print(node) ?? 'undefined'\n const typeReference = resolveTypeReference({\n node,\n canOverride,\n name: meta.name,\n typeName: meta.typeName,\n filePath: meta.file.path,\n typeFilePath: meta.typeFile.path,\n })\n\n const imports = adapter\n .getImports(node, (schemaName) => ({\n name: resolver.resolveName(schemaName),\n path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }).path,\n }))\n .filter((entry) => entry.path !== meta.file.path)\n const usedImports = filterUsedImports(imports, fakerText)\n\n return (\n <File\n baseName={meta.file.baseName}\n path={meta.file.path}\n meta={meta.file.meta}\n banner={resolver.resolveBanner(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}\n footer={resolver.resolveFooter(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}\n >\n <File.Import name={locale ? [{ propertyName: localeToFakerImport(locale), name: 'faker' }] : ['faker']} path=\"@faker-js/faker\" />\n {regexGenerator === 'randexp' && <File.Import name={'RandExp'} path={'randexp'} />}\n {dateParser !== 'faker' && <File.Import path={dateParser} name={dateParser} />}\n {typeReference.importPath && <File.Import isTypeOnly root={meta.file.path} path={typeReference.importPath} name={[meta.typeName]} />}\n {mode === 'split' &&\n usedImports.map((imp) => <File.Import key={[schemaName, imp.path, imp.name].join('-')} root={meta.file.path} path={imp.path} name={imp.name} />)}\n <Faker\n name={meta.name}\n typeName={typeReference.typeName}\n description={node.description}\n node={node}\n printer={printerInstance}\n seed={seed}\n canOverride={canOverride}\n />\n </File>\n )\n },\n operation(node, ctx) {\n const { adapter, config, resolver, root } = ctx\n const { output, group, paramsCasing, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options\n const pluginTs = ctx.driver.getPlugin(pluginTsName)\n\n if (!pluginTs) {\n return\n }\n\n const tsResolver = ctx.driver.getResolver(pluginTsName)\n\n const params = ast.caseParams(node.parameters, paramsCasing)\n const paramEntries = params.map((param) => ({\n param,\n name: resolveParamNameByLocation(resolver, node, param),\n typeName: resolveParamNameByLocation(tsResolver, node, param),\n }))\n const responseEntries = node.responses.map((response) => ({\n response,\n name: resolver.resolveResponseStatusName(node, response.statusCode),\n typeName: tsResolver.resolveResponseStatusName(node, response.statusCode),\n }))\n const dataEntry = node.requestBody?.content?.[0]?.schema\n ? {\n schema: {\n ...node.requestBody.content![0]!.schema!,\n description: node.requestBody.description ?? node.requestBody.content![0]!.schema!.description,\n },\n name: resolver.resolveDataName(node),\n typeName: tsResolver.resolveDataName(node),\n description: node.requestBody.description ?? node.requestBody.content![0]!.schema!.description,\n }\n : null\n const responseName = resolver.resolveResponseName(node)\n const localHelperNames = new Set([\n ...paramEntries.map((entry) => entry.name),\n ...responseEntries.map((entry) => entry.name),\n ...(dataEntry ? [dataEntry.name] : []),\n responseName,\n ])\n const cyclicSchemas = new Set<string>(ctx.meta.circularNames)\n\n const meta = {\n file: resolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n { root, output, group: group ?? undefined },\n ),\n typeFile: tsResolver.resolveFile(\n {\n name: node.operationId,\n extname: '.ts',\n tag: node.tags[0] ?? 'default',\n path: node.path,\n },\n {\n root,\n output: pluginTs.options?.output ?? output,\n group: pluginTs.options?.group ?? undefined,\n },\n ),\n } as const\n\n function resolveMockImports(schema: ast.SchemaNode) {\n return adapter\n .getImports(schema, (schemaName) => ({\n name: resolver.resolveName(schemaName),\n path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }).path,\n }))\n .filter((entry) => entry.path !== meta.file.path)\n }\n\n function renderEntry({\n schema,\n name,\n typeName,\n description,\n skipImportNames = [],\n }: {\n schema: ast.SchemaNode | null\n name: string\n typeName: string\n description?: string\n skipImportNames?: Array<string>\n }) {\n if (!schema) {\n return null\n }\n\n const canOverride = canOverrideSchema(schema)\n const printerInstance = printerFaker({\n resolver,\n schemaName: name,\n typeName,\n dateParser,\n regexGenerator,\n mapper,\n nodes: printer?.nodes,\n cyclicSchemas,\n })\n const fakerText = printerInstance.print(schema) ?? 'undefined'\n const usedImports = filterUsedImports(resolveMockImports(schema), fakerText, skipImportNames)\n const { imports, aliases } = aliasConflictingImports(usedImports, localHelperNames)\n const rewrittenFakerText = rewriteAliasedImports(fakerText, aliases)\n const typeReference = resolveTypeReference({\n node: schema,\n canOverride,\n name,\n typeName,\n filePath: meta.file.path,\n typeFilePath: meta.typeFile.path,\n })\n\n return (\n <>\n {typeReference.importPath && <File.Import isTypeOnly root={meta.file.path} path={typeReference.importPath} name={[typeName]} />}\n {imports.map((imp) => (\n <File.Import key={[name, imp.path, imp.name].join('-')} root={meta.file.path} path={imp.path} name={imp.name} />\n ))}\n <Faker\n name={name}\n typeName={typeReference.typeName}\n description={description}\n node={schema}\n printer={{ ...printerInstance, print: () => rewrittenFakerText }}\n seed={seed}\n canOverride={canOverride}\n />\n </>\n )\n }\n\n return (\n <File\n baseName={meta.file.baseName}\n path={meta.file.path}\n meta={meta.file.meta}\n banner={resolver.resolveBanner(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}\n footer={resolver.resolveFooter(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}\n >\n <File.Import name={locale ? [{ propertyName: localeToFakerImport(locale), name: 'faker' }] : ['faker']} path=\"@faker-js/faker\" />\n {regexGenerator === 'randexp' && <File.Import name={'RandExp'} path={'randexp'} />}\n {dateParser !== 'faker' && <File.Import path={dateParser} name={dateParser} />}\n {paramEntries.map(({ param, name, typeName }) =>\n renderEntry({\n schema: param.schema,\n name,\n typeName,\n }),\n )}\n {responseEntries.map(({ response, name, typeName }) =>\n renderEntry({\n schema: response.schema,\n name,\n typeName,\n description: response.description,\n }),\n )}\n {dataEntry\n ? renderEntry({\n schema: dataEntry.schema,\n name: dataEntry.name,\n typeName: dataEntry.typeName,\n description: dataEntry.description,\n })\n : null}\n {renderEntry({\n schema: buildResponseUnionSchema(node, resolver),\n name: responseName,\n typeName: tsResolver.resolveResponseName(node),\n skipImportNames: responseEntries.map(({ name }) => name),\n })}\n </File>\n )\n },\n})\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_fakerGenerator = require("./fakerGenerator-C00Es7eC.cjs");
2
+ const require_fakerGenerator = require("./fakerGenerator-BZsRbPxX.cjs");
3
3
  exports.fakerGenerator = require_fakerGenerator.fakerGenerator;
@@ -1,2 +1,2 @@
1
- import { t as fakerGenerator } from "./fakerGenerator-C85ME3uM.js";
1
+ import { t as fakerGenerator } from "./fakerGenerator-DSvAJTq3.js";
2
2
  export { fakerGenerator };
@@ -1,2 +1,2 @@
1
- import { t as fakerGenerator } from "./fakerGenerator-Crs3X84u.js";
1
+ import { t as fakerGenerator } from "./fakerGenerator-itrqBdbx.js";
2
2
  export { fakerGenerator };
package/dist/index.cjs CHANGED
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_Faker = require("./Faker-DaKMu5pc.cjs");
6
- const require_fakerGenerator = require("./fakerGenerator-C00Es7eC.cjs");
6
+ const require_fakerGenerator = require("./fakerGenerator-BZsRbPxX.cjs");
7
7
  let node_path = require("node:path");
8
8
  node_path = require_Faker.__toESM(node_path, 1);
9
9
  let _kubb_core = require("@kubb/core");
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { t as __name } from "./chunk--u3MIqq1.js";
2
- import { a as Options, i as printerFaker, n as PrinterFakerNodes, o as PluginFaker, r as PrinterFakerOptions, s as ResolverFaker, t as PrinterFakerFactory } from "./printerFaker-GYscoNnG.js";
3
- import { t as Faker } from "./Faker-BQpBZ2hU.js";
4
- import { t as fakerGenerator } from "./fakerGenerator-C85ME3uM.js";
2
+ import { a as Options, i as printerFaker, n as PrinterFakerNodes, o as PluginFaker, r as PrinterFakerOptions, s as ResolverFaker, t as PrinterFakerFactory } from "./printerFaker-Bhwq62d1.js";
3
+ import { t as Faker } from "./Faker-BaLJxPyl.js";
4
+ import { t as fakerGenerator } from "./fakerGenerator-DSvAJTq3.js";
5
5
  import * as _$_kubb_core0 from "@kubb/core";
6
6
 
7
7
  //#region src/plugin.d.ts
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import "./chunk--u3MIqq1.js";
2
- import { n as printerFaker, t as fakerGenerator } from "./fakerGenerator-Crs3X84u.js";
2
+ import { n as printerFaker, t as fakerGenerator } from "./fakerGenerator-itrqBdbx.js";
3
3
  import { t as Faker } from "./Faker-C7Cu9GKC.js";
4
4
  import path from "node:path";
5
5
  import { KubbDriver, definePlugin, defineResolver } from "@kubb/core";
@@ -214,6 +214,12 @@ type PrinterFakerOptions = {
214
214
  typeName?: string;
215
215
  schemaName?: string;
216
216
  nestedInObject?: boolean;
217
+ /**
218
+ * Set while printing the members of a union (`oneOf`). Object properties then index their
219
+ * type as `(NonNullable<T> & Record<K, unknown>)[K]` instead of `NonNullable<T>[K]`, so a key
220
+ * carried by only some branches stays valid (a plain index would be a TS2339).
221
+ */
222
+ nestedInUnion?: boolean;
217
223
  nodes?: PrinterFakerNodes;
218
224
  /**
219
225
  * Names of schemas that participate in a circular dependency chain.
@@ -234,4 +240,4 @@ type PrinterFakerFactory = ast.PrinterFactoryOptions<'faker', PrinterFakerOption
234
240
  declare const printerFaker: (options: PrinterFakerOptions) => ast.Printer<PrinterFakerFactory>;
235
241
  //#endregion
236
242
  export { Options as a, printerFaker as i, PrinterFakerNodes as n, PluginFaker as o, PrinterFakerOptions as r, ResolverFaker as s, PrinterFakerFactory as t };
237
- //# sourceMappingURL=printerFaker-GYscoNnG.d.ts.map
243
+ //# sourceMappingURL=printerFaker-Bhwq62d1.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/plugin-faker",
3
- "version": "5.0.0-beta.27",
3
+ "version": "5.0.0-beta.28",
4
4
  "description": "Generate Faker.js mock data factories from your OpenAPI schemas. Produces realistic seed data, test fixtures, and datasets for development and testing.",
5
5
  "keywords": [
6
6
  "code-generation",
@@ -66,15 +66,15 @@
66
66
  "registry": "https://registry.npmjs.org/"
67
67
  },
68
68
  "dependencies": {
69
- "@kubb/core": "5.0.0-beta.27",
70
- "@kubb/renderer-jsx": "5.0.0-beta.27",
71
- "@kubb/plugin-ts": "5.0.0-beta.27"
69
+ "@kubb/core": "5.0.0-beta.28",
70
+ "@kubb/renderer-jsx": "5.0.0-beta.28",
71
+ "@kubb/plugin-ts": "5.0.0-beta.28"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@internals/utils": "0.0.0"
75
75
  },
76
76
  "peerDependencies": {
77
- "@kubb/renderer-jsx": "5.0.0-beta.27"
77
+ "@kubb/renderer-jsx": "5.0.0-beta.28"
78
78
  },
79
79
  "size-limit": [
80
80
  {
@@ -73,8 +73,8 @@ export const fakerGenerator = defineGenerator<PluginFaker>({
73
73
  baseName={meta.file.baseName}
74
74
  path={meta.file.path}
75
75
  meta={meta.file.meta}
76
- banner={resolver.resolveBanner(ctx.meta, { output, config })}
77
- footer={resolver.resolveFooter(ctx.meta, { output, config })}
76
+ banner={resolver.resolveBanner(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}
77
+ footer={resolver.resolveFooter(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}
78
78
  >
79
79
  <File.Import name={locale ? [{ propertyName: localeToFakerImport(locale), name: 'faker' }] : ['faker']} path="@faker-js/faker" />
80
80
  {regexGenerator === 'randexp' && <File.Import name={'RandExp'} path={'randexp'} />}
@@ -230,8 +230,8 @@ export const fakerGenerator = defineGenerator<PluginFaker>({
230
230
  baseName={meta.file.baseName}
231
231
  path={meta.file.path}
232
232
  meta={meta.file.meta}
233
- banner={resolver.resolveBanner(ctx.meta, { output, config })}
234
- footer={resolver.resolveFooter(ctx.meta, { output, config })}
233
+ banner={resolver.resolveBanner(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}
234
+ footer={resolver.resolveFooter(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}
235
235
  >
236
236
  <File.Import name={locale ? [{ propertyName: localeToFakerImport(locale), name: 'faker' }] : ['faker']} path="@faker-js/faker" />
237
237
  {regexGenerator === 'randexp' && <File.Import name={'RandExp'} path={'randexp'} />}
@@ -36,6 +36,12 @@ export type PrinterFakerOptions = {
36
36
  typeName?: string
37
37
  schemaName?: string
38
38
  nestedInObject?: boolean
39
+ /**
40
+ * Set while printing the members of a union (`oneOf`). Object properties then index their
41
+ * type as `(NonNullable<T> & Record<K, unknown>)[K]` instead of `NonNullable<T>[K]`, so a key
42
+ * carried by only some branches stays valid (a plain index would be a TS2339).
43
+ */
44
+ nestedInUnion?: boolean
39
45
  nodes?: PrinterFakerNodes
40
46
  /**
41
47
  * Names of schemas that participate in a circular dependency chain.
@@ -198,6 +204,32 @@ function parseEnumValue(value: string | number | boolean | undefined) {
198
204
  return value
199
205
  }
200
206
 
207
+ /** Reads the discriminator literal off a variant, or `undefined` when it can't be determined. */
208
+ function getDiscriminatorValue(member: ast.SchemaNode, discriminatorPropertyName: string) {
209
+ const prop = ast.narrowSchema(member, 'object')?.properties?.find((p) => p.name === discriminatorPropertyName)
210
+ const enumNode = prop ? ast.narrowSchema(prop.schema, 'enum') : null
211
+
212
+ return enumNode ? getEnumValues(enumNode)[0] : undefined
213
+ }
214
+
215
+ /**
216
+ * Type expression for an object property's value, indexed off the parent `typeName`.
217
+ *
218
+ * In a union (`oneOf`), a key that only some branches declare turns a plain `NonNullable<T>[K]`
219
+ * into a TS2339 error, so union members guard the access. The breakdown is below.
220
+ */
221
+ function indexedTypeName(typeName: string, propertyName: string, nestedInUnion?: boolean): string {
222
+ const key = JSON.stringify(propertyName)
223
+
224
+ // `(NonNullable<T> & Record<K, unknown>)[K]`, read inside-out:
225
+ // NonNullable<T> strips null and undefined from the parent type T.
226
+ // & Record<K, unknown> forces every branch to have key K. A branch that already declares K
227
+ // keeps it (`T[K] & unknown` is `T[K]`); a branch missing K gains it as `unknown`.
228
+ // [K] reads the key, which is now always present, so it never hits TS2339.
229
+ // For a single object T the intersection does nothing, leaving `T[K]`.
230
+ return nestedInUnion ? `(NonNullable<${typeName}> & Record<${key}, unknown>)[${key}]` : `NonNullable<${typeName}>[${key}]`
231
+ }
232
+
201
233
  /**
202
234
  * Creates a Faker printer that generates mock data generation code from schema nodes.
203
235
  * Handles circular references gracefully by emitting memoizing getters for cyclic properties.
@@ -276,12 +308,26 @@ export const printerFaker: (options: PrinterFakerOptions) => ast.Printer<Printer
276
308
  return fakerKeywordMapper.enum(getEnumValues(node).map(parseEnumValue), this.options.typeName)
277
309
  },
278
310
  union(node): string {
311
+ const { discriminatorPropertyName } = node
312
+ const baseTypeName = this.options.typeName
313
+
279
314
  const items: Array<string> = (node.members ?? [])
280
- .map((member) =>
281
- printNested(member, {
282
- nestedInObject: true,
283
- }),
284
- )
315
+ .map((member) => {
316
+ // For a discriminated union, narrow each variant to its own branch so nested
317
+ // `NonNullable<T>[K]` indexes resolve against that branch instead of the whole union.
318
+ const value = discriminatorPropertyName ? getDiscriminatorValue(member, discriminatorPropertyName) : undefined
319
+
320
+ if (baseTypeName && value !== undefined) {
321
+ const typeName = `Extract<NonNullable<${baseTypeName}>, { ${JSON.stringify(discriminatorPropertyName)}: ${parseEnumValue(value)} }>`
322
+
323
+ return printNested(member, { typeName, nestedInObject: true })
324
+ }
325
+
326
+ // Without a discriminator, keep the union type but guard each indexed access (see
327
+ // `indexedTypeName`) so a key carried by only some branches resolves to `unknown`
328
+ // rather than erroring with TS2339.
329
+ return printNested(member, { typeName: baseTypeName, nestedInObject: true, nestedInUnion: true })
330
+ })
285
331
  .filter((item): item is string => Boolean(item))
286
332
 
287
333
  return fakerKeywordMapper.union(items)
@@ -331,7 +377,7 @@ export const printerFaker: (options: PrinterFakerOptions) => ast.Printer<Printer
331
377
 
332
378
  const value: string =
333
379
  printNested(property.schema, {
334
- typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${JSON.stringify(property.name)}]` : undefined,
380
+ typeName: this.options.typeName ? indexedTypeName(this.options.typeName, property.name, this.options.nestedInUnion) : undefined,
335
381
  nestedInObject: true,
336
382
  }) ?? 'undefined'
337
383
 
@@ -1 +0,0 @@
1
- {"version":3,"file":"fakerGenerator-C00Es7eC.cjs","names":["trimQuotes","trimQuotes","ast","jsxRendererSync","pluginTsName","canOverrideSchema","resolveTypeReference","File","localeToFakerImport","Faker","ast","resolveParamNameByLocation","buildResponseUnionSchema"],"sources":["../../../internals/utils/src/imports.ts","../../../internals/utils/src/object.ts","../../../internals/utils/src/regexp.ts","../src/printers/printerFaker.ts","../src/generators/fakerGenerator.tsx"],"sourcesContent":["export type ImportName = string | { propertyName: string; name?: string }\n\nexport type ImportEntry = {\n name: string | Array<ImportName>\n path: string\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\nfunction getImportNames(entry: ImportEntry): Array<string> {\n return (Array.isArray(entry.name) ? entry.name : [entry.name])\n .map((name) => {\n if (typeof name === 'string') {\n return name\n }\n\n return name.name ?? name.propertyName\n })\n .filter((name): name is string => Boolean(name))\n}\n\nexport function filterUsedImports(imports: Array<ImportEntry>, text: string, skipImportNames: Array<string> = []): Array<ImportEntry> {\n return imports.filter((entry) => {\n const names = getImportNames(entry)\n\n return names.some((name) => {\n if (skipImportNames.includes(name)) {\n return false\n }\n\n return new RegExp(`\\\\b${escapeRegExp(name)}\\\\b(?=\\\\s*\\\\()`).test(text)\n })\n })\n}\n\nexport function aliasConflictingImports(\n imports: Array<ImportEntry>,\n reservedNames: Iterable<string>,\n): { imports: Array<ImportEntry>; aliases: Map<string, string> } {\n const reservedNameSet = new Set(reservedNames)\n const aliases = new Map<string, string>()\n\n const aliasedImports = imports.map((entry) => {\n const names = Array.isArray(entry.name) ? entry.name : [entry.name]\n const aliasedNames = names.map((item): ImportName => {\n if (typeof item !== 'string' || !reservedNameSet.has(item)) {\n return item\n }\n\n const alias = `${item}Schema`\n aliases.set(item, alias)\n\n return { propertyName: item, name: alias }\n })\n\n return aliasedNames.some((item) => typeof item === 'object' && item.name)\n ? {\n ...entry,\n name: aliasedNames,\n }\n : entry\n })\n\n return {\n imports: aliasedImports,\n aliases,\n }\n}\n\nexport function rewriteAliasedImports(text: string, aliases: ReadonlyMap<string, string>): string {\n return Array.from(aliases).reduce((acc, [name, alias]) => acc.replace(new RegExp(`\\\\b${escapeRegExp(name)}\\\\b`, 'g'), alias), text)\n}\n","import { trimQuotes } from './string.ts'\n\n/**\n * Serializes a primitive value to a JSON string literal, stripping any surrounding quote characters first.\n *\n * @example\n * stringify('hello') // '\"hello\"'\n * stringify('\"hello\"') // '\"hello\"'\n */\nexport function stringify(value: string | number | boolean | undefined): string {\n if (value === undefined || value === null) return '\"\"'\n return JSON.stringify(trimQuotes(value.toString()))\n}\n\n/**\n * Converts a plain object into a multiline key-value string suitable for embedding in generated code.\n * Nested objects are recursively stringified with indentation.\n *\n * @example\n * stringifyObject({ foo: 'bar', nested: { a: 1 } })\n * // 'foo: bar,\\nnested: {\\n a: 1\\n }'\n */\nexport function stringifyObject(value: Record<string, unknown>): string {\n const items = Object.entries(value)\n .map(([key, val]) => {\n if (val !== null && typeof val === 'object') {\n return `${key}: {\\n ${stringifyObject(val as Record<string, unknown>)}\\n }`\n }\n return `${key}: ${val}`\n })\n .filter(Boolean)\n return items.join(',\\n')\n}\n\n/**\n * Converts a dot-notation path or string array into an optional-chaining accessor expression.\n *\n * @example\n * getNestedAccessor('pagination.next.id', 'lastPage')\n * // → \"lastPage?.['pagination']?.['next']?.['id']\"\n */\nexport function getNestedAccessor(param: string | string[], accessor: string): string | null {\n const parts = Array.isArray(param) ? param : param.split('.')\n if (parts.length === 0 || (parts.length === 1 && parts[0] === '')) return null\n return `${accessor}?.['${`${parts.join(\"']?.['\")}']`}`\n}\n","import { trimQuotes } from './string.ts'\n\n/**\n * Converts a pattern string into a `new RegExp(...)` constructor call or a regex literal string.\n * Inline flags expressed as `^(?im)` prefixes are extracted and applied to the resulting expression.\n * Pass `null` as the second argument to emit a `/pattern/flags` literal instead.\n *\n * @example\n * toRegExpString('^(?im)foo') // → 'new RegExp(\"foo\", \"im\")'\n * toRegExpString('^(?im)foo', null) // → '/foo/im'\n */\nexport function toRegExpString(text: string, func: string | null = 'RegExp'): string {\n const raw = trimQuotes(text)\n\n const match = raw.match(/^\\^(\\(\\?([igmsuy]+)\\))/i)\n const replacementTarget = match?.[1] ?? ''\n const matchedFlags = match?.[2]\n const cleaned = raw\n .replace(/^\\\\?\\//, '')\n .replace(/\\\\?\\/$/, '')\n .replace(replacementTarget, '')\n\n const { source, flags } = new RegExp(cleaned, matchedFlags)\n\n if (func === null) return `/${source}/${flags}`\n\n return `new ${func}(${JSON.stringify(source)}${flags ? `, ${JSON.stringify(flags)}` : ''})`\n}\n","import { stringify, toRegExpString } from '@internals/utils'\nimport { ast } from '@kubb/core'\nimport type { PluginFaker, ResolverFaker } from '../types.ts'\n\n/**\n * Partial map of node-type overrides for the Faker printer. Each key is a\n * `SchemaType` (`'string'`, `'date'`, ...) and each handler returns the\n * Faker expression for that schema as a string. Use `this.transform` to\n * recurse into nested schema nodes and `this.options` to read printer options.\n *\n * @example Override the integer handler\n * ```ts\n * pluginFaker({\n * printer: {\n * nodes: {\n * integer() {\n * return 'faker.number.float()'\n * },\n * },\n * },\n * })\n * ```\n */\nexport type PrinterFakerNodes = ast.PrinterPartial<string, PrinterFakerOptions>\n\n/**\n * Options passed to the Faker printer at instantiation: the parser library\n * for date strings, the regex generator, the user-supplied schema-name\n * mapper, and the resolver used to compute identifiers.\n */\nexport type PrinterFakerOptions = {\n dateParser?: PluginFaker['resolvedOptions']['dateParser']\n regexGenerator?: PluginFaker['resolvedOptions']['regexGenerator']\n mapper?: PluginFaker['resolvedOptions']['mapper']\n resolver: ResolverFaker\n typeName?: string\n schemaName?: string\n nestedInObject?: boolean\n nodes?: PrinterFakerNodes\n /**\n * Names of schemas that participate in a circular dependency chain.\n * Properties whose schema transitively references one of these are emitted\n * as lazy getters so that user overrides via the `data` parameter prevent\n * the recursive faker call from ever executing (avoiding stack overflow).\n */\n cyclicSchemas?: ReadonlySet<string>\n}\n\n/**\n * Factory options for the Faker printer, defining input/output types and configuration.\n */\nexport type PrinterFakerFactory = ast.PrinterFactoryOptions<'faker', PrinterFakerOptions, string, string>\n\nconst fakerKeywordMapper = {\n any: () => 'undefined',\n unknown: () => 'undefined',\n void: () => 'undefined',\n number: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.number.float({ min: ${min}, max: ${max} })`\n }\n\n if (max !== undefined) {\n return `faker.number.float({ max: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.number.float({ min: ${min} })`\n }\n\n return 'faker.number.float()'\n },\n integer: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.number.int({ min: ${min}, max: ${max} })`\n }\n\n if (max !== undefined) {\n return `faker.number.int({ max: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.number.int({ min: ${min} })`\n }\n\n return 'faker.number.int()'\n },\n bigint: () => 'faker.number.bigInt()',\n string: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.string.alpha({ length: { min: ${min}, max: ${max} } })`\n }\n\n if (max !== undefined) {\n return `faker.string.alpha({ length: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.string.alpha({ length: ${min} })`\n }\n\n return 'faker.string.alpha()'\n },\n boolean: () => 'faker.datatype.boolean()',\n null: () => 'null',\n array: (items: Array<string> = [], min?: number, max?: number) => {\n if (items.length > 1) {\n return `faker.helpers.arrayElements([${items.join(', ')}])`\n }\n\n const item = items.at(0)\n\n if (min !== undefined && max !== undefined) {\n return `faker.helpers.multiple(() => (${item}), { count: { min: ${min}, max: ${max} }})`\n }\n\n if (min !== undefined) {\n return `faker.helpers.multiple(() => (${item}), { count: ${min} })`\n }\n\n if (max !== undefined) {\n return `faker.helpers.multiple(() => (${item}), { count: { min: 0, max: ${max} }})`\n }\n\n return `faker.helpers.multiple(() => (${item}))`\n },\n tuple: (items: Array<string> = []) => `[${items.join(', ')}]`,\n enum: (items: Array<string | number | boolean | undefined> = [], type = 'any') => `faker.helpers.arrayElement<${type}>([${items.join(', ')}])`,\n union: (items: Array<string> = []) => `faker.helpers.arrayElement<any>([${items.join(', ')}])`,\n datetime: () => 'faker.date.anytime().toISOString()',\n date: (representation: 'date' | 'string' = 'string', parser: PluginFaker['resolvedOptions']['dateParser'] = 'faker') => {\n if (representation === 'string') {\n if (parser !== 'faker') {\n return `${parser}(faker.date.anytime()).format(\"YYYY-MM-DD\")`\n }\n\n return 'faker.date.anytime().toISOString().substring(0, 10)'\n }\n\n if (parser !== 'faker') {\n throw new Error(`type '${representation}' and parser '${parser}' can not work together`)\n }\n\n return 'faker.date.anytime()'\n },\n time: (representation: 'date' | 'string' = 'string', parser: PluginFaker['resolvedOptions']['dateParser'] = 'faker') => {\n if (representation === 'string') {\n if (parser !== 'faker') {\n return `${parser}(faker.date.anytime()).format(\"HH:mm:ss\")`\n }\n\n return 'faker.date.anytime().toISOString().substring(11, 19)'\n }\n\n if (parser !== 'faker') {\n throw new Error(`type '${representation}' and parser '${parser}' can not work together`)\n }\n\n return 'faker.date.anytime()'\n },\n uuid: () => 'faker.string.uuid()',\n url: () => 'faker.internet.url()',\n and: (items: Array<string> = []) => {\n if (items.length === 0) {\n return '{}'\n }\n\n if (items.length === 1) {\n return items[0] ?? '{}'\n }\n\n return `{...${items.join(', ...')}}`\n },\n matches: (value = '', regexGenerator: 'faker' | 'randexp' = 'faker') => {\n if (regexGenerator === 'randexp') {\n return `${toRegExpString(value, 'RandExp')}.gen()`\n }\n\n return `faker.helpers.fromRegExp(\"${value}\")`\n },\n email: () => 'faker.internet.email()',\n blob: () => 'faker.image.url() as unknown as Blob',\n} as const\n\nfunction getEnumValues(node: ast.EnumSchemaNode): Array<string | number | boolean | undefined> {\n if (node.namedEnumValues?.length) {\n return node.namedEnumValues.map((item) => item.value as string | number | boolean | undefined)\n }\n\n return (node.enumValues ?? []) as Array<string | number | boolean | undefined>\n}\n\nfunction parseEnumValue(value: string | number | boolean | undefined) {\n if (typeof value === 'string') {\n return stringify(value)\n }\n\n return value\n}\n\n/**\n * Creates a Faker printer that generates mock data generation code from schema nodes.\n * Handles circular references gracefully by emitting memoizing getters for cyclic properties.\n */\nexport const printerFaker: (options: PrinterFakerOptions) => ast.Printer<PrinterFakerFactory> = ast.definePrinter<PrinterFakerFactory>((options) => {\n const printNested = (node: ast.SchemaNode, overrideOptions: Partial<PrinterFakerOptions> = {}): string => {\n return (\n printerFaker({\n ...options,\n ...overrideOptions,\n nodes: options.nodes,\n }).print(node) ?? 'undefined'\n )\n }\n\n return {\n name: 'faker',\n options,\n nodes: {\n any: () => fakerKeywordMapper.any(),\n unknown: () => fakerKeywordMapper.unknown(),\n void: () => fakerKeywordMapper.void(),\n boolean: () => fakerKeywordMapper.boolean(),\n null: () => fakerKeywordMapper.null(),\n string(node) {\n if (node.pattern) {\n return fakerKeywordMapper.matches(node.pattern, this.options.regexGenerator)\n }\n\n return fakerKeywordMapper.string(node.min, node.max)\n },\n email: () => fakerKeywordMapper.email(),\n url: () => fakerKeywordMapper.url(),\n uuid: () => fakerKeywordMapper.uuid(),\n number(node) {\n return fakerKeywordMapper.number(node.min, node.max)\n },\n integer(node) {\n return fakerKeywordMapper.integer(node.min, node.max)\n },\n bigint: () => fakerKeywordMapper.bigint(),\n blob: () => fakerKeywordMapper.blob(),\n datetime: () => fakerKeywordMapper.datetime(),\n date(node) {\n return fakerKeywordMapper.date(node.representation ?? 'string', this.options.dateParser)\n },\n time(node) {\n return fakerKeywordMapper.time(node.representation ?? 'string', this.options.dateParser)\n },\n ref(node) {\n // Parser-generated refs (with $ref) carry raw schema names that need resolving.\n // Use the canonical name from the $ref path — node.name may have been overridden\n // (e.g. by single-member allOf flatten using the property-derived child name).\n // Inline refs (without $ref) from faker utils already carry resolved helper names.\n const refName = node.ref ? (ast.extractRefName(node.ref) ?? node.name ?? node.schema?.name) : (node.name ?? node.schema?.name)\n\n if (!refName) {\n throw new Error('Name not defined for ref node')\n }\n\n if (this.options.schemaName && refName === this.options.schemaName) {\n return 'undefined as any'\n }\n\n // Internal helper refs (for generated response/data helpers) are already\n // emitted with resolver output and should not be transformed twice.\n const resolvedName = node.ref ? this.options.resolver.resolveName(refName) : refName\n\n if (!this.options.nestedInObject) {\n return `${resolvedName}(data)`\n }\n\n return `${resolvedName}()`\n },\n enum(node) {\n return fakerKeywordMapper.enum(getEnumValues(node).map(parseEnumValue), this.options.typeName)\n },\n union(node): string {\n const items: Array<string> = (node.members ?? [])\n .map((member) =>\n printNested(member, {\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.union(items)\n },\n intersection(node): string {\n const items: Array<string> = (node.members ?? [])\n .map((member) =>\n printNested(member, {\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.and(items)\n },\n array(node): string {\n const items: Array<string> = (node.items ?? [])\n .map((member) =>\n printNested(member, {\n typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[number]` : undefined,\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.array(items, node.min, node.max)\n },\n tuple(node): string {\n const items: Array<string> = (node.items ?? [])\n .map((member, index) =>\n printNested(member, {\n typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${index}]` : undefined,\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.tuple(items)\n },\n object(node): string {\n const cyclicSchemas = this.options.cyclicSchemas\n const properties = (node.properties ?? [])\n .map((property): string => {\n if (this.options.mapper && Object.hasOwn(this.options.mapper, property.name)) {\n return `\"${property.name}\": ${this.options.mapper[property.name]}`\n }\n\n const value: string =\n printNested(property.schema, {\n typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${JSON.stringify(property.name)}]` : undefined,\n nestedInObject: true,\n }) ?? 'undefined'\n\n // When the property's schema transitively references a schema that is\n // part of a circular dependency (other than the current schema itself),\n // emit a memoizing lazy getter. On first access it computes the value,\n // replaces itself with a plain data property via Object.defineProperty,\n // and returns the cached value – so every subsequent read is stable.\n if (cyclicSchemas && ast.containsCircularRef(property.schema, { circularSchemas: cyclicSchemas, excludeName: this.options.schemaName })) {\n return `get ${property.name}() { const _value = ${value}; Object.defineProperty(this, ${JSON.stringify(property.name)}, { value: _value, configurable: true, writable: true, enumerable: true }); return _value }`\n }\n\n return `\"${property.name}\": ${value}`\n })\n .join(',')\n\n return `{${properties}}`\n },\n ...options.nodes,\n },\n print(node) {\n return this.transform(node) ?? null\n },\n }\n})\n","import { aliasConflictingImports, filterUsedImports, rewriteAliasedImports } from '@internals/utils'\nimport { ast, defineGenerator } from '@kubb/core'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { File, jsxRendererSync } from '@kubb/renderer-jsx'\nimport { Faker } from '../components/Faker.tsx'\nimport { printerFaker } from '../printers/printerFaker.ts'\nimport type { PluginFaker } from '../types.ts'\nimport { buildResponseUnionSchema, canOverrideSchema, localeToFakerImport, resolveParamNameByLocation, resolveTypeReference } from '../utils.ts'\n\n/**\n * Built-in generator for `@kubb/plugin-faker`. Emits one `createX` factory\n * per schema in the spec plus per-operation request/response factories. Each\n * factory returns a value matching the corresponding TypeScript type from\n * `@kubb/plugin-ts`.\n */\nexport const fakerGenerator = defineGenerator<PluginFaker>({\n name: 'faker',\n renderer: jsxRendererSync,\n schema(node, ctx) {\n const { adapter, config, resolver, root } = ctx\n const { output, group, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options\n const pluginTs = ctx.driver.getPlugin(pluginTsName)\n\n if (!node.name || !pluginTs) {\n return\n }\n\n const tsResolver = ctx.driver.getResolver(pluginTsName)\n\n const schemaName = node.name\n const mode = ctx.getMode(output)\n const meta = {\n name: resolver.resolveName(schemaName),\n file: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }),\n typeName: tsResolver.resolveTypeName(schemaName),\n typeFile: tsResolver.resolveFile(\n { name: schemaName, extname: '.ts' },\n { root, output: pluginTs.options?.output ?? output, group: pluginTs.options?.group ?? undefined },\n ),\n } as const\n const canOverride = canOverrideSchema(node)\n const cyclicSchemas = new Set<string>(ctx.meta.circularNames)\n const printerInstance = printerFaker({\n resolver,\n schemaName,\n typeName: meta.typeName,\n dateParser,\n regexGenerator,\n mapper,\n nodes: printer?.nodes,\n cyclicSchemas,\n })\n const fakerText = printerInstance.print(node) ?? 'undefined'\n const typeReference = resolveTypeReference({\n node,\n canOverride,\n name: meta.name,\n typeName: meta.typeName,\n filePath: meta.file.path,\n typeFilePath: meta.typeFile.path,\n })\n\n const imports = adapter\n .getImports(node, (schemaName) => ({\n name: resolver.resolveName(schemaName),\n path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }).path,\n }))\n .filter((entry) => entry.path !== meta.file.path)\n const usedImports = filterUsedImports(imports, fakerText)\n\n return (\n <File\n baseName={meta.file.baseName}\n path={meta.file.path}\n meta={meta.file.meta}\n banner={resolver.resolveBanner(ctx.meta, { output, config })}\n footer={resolver.resolveFooter(ctx.meta, { output, config })}\n >\n <File.Import name={locale ? [{ propertyName: localeToFakerImport(locale), name: 'faker' }] : ['faker']} path=\"@faker-js/faker\" />\n {regexGenerator === 'randexp' && <File.Import name={'RandExp'} path={'randexp'} />}\n {dateParser !== 'faker' && <File.Import path={dateParser} name={dateParser} />}\n {typeReference.importPath && <File.Import isTypeOnly root={meta.file.path} path={typeReference.importPath} name={[meta.typeName]} />}\n {mode === 'split' &&\n usedImports.map((imp) => <File.Import key={[schemaName, imp.path, imp.name].join('-')} root={meta.file.path} path={imp.path} name={imp.name} />)}\n <Faker\n name={meta.name}\n typeName={typeReference.typeName}\n description={node.description}\n node={node}\n printer={printerInstance}\n seed={seed}\n canOverride={canOverride}\n />\n </File>\n )\n },\n operation(node, ctx) {\n const { adapter, config, resolver, root } = ctx\n const { output, group, paramsCasing, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options\n const pluginTs = ctx.driver.getPlugin(pluginTsName)\n\n if (!pluginTs) {\n return\n }\n\n const tsResolver = ctx.driver.getResolver(pluginTsName)\n\n const params = ast.caseParams(node.parameters, paramsCasing)\n const paramEntries = params.map((param) => ({\n param,\n name: resolveParamNameByLocation(resolver, node, param),\n typeName: resolveParamNameByLocation(tsResolver, node, param),\n }))\n const responseEntries = node.responses.map((response) => ({\n response,\n name: resolver.resolveResponseStatusName(node, response.statusCode),\n typeName: tsResolver.resolveResponseStatusName(node, response.statusCode),\n }))\n const dataEntry = node.requestBody?.content?.[0]?.schema\n ? {\n schema: {\n ...node.requestBody.content![0]!.schema!,\n description: node.requestBody.description ?? node.requestBody.content![0]!.schema!.description,\n },\n name: resolver.resolveDataName(node),\n typeName: tsResolver.resolveDataName(node),\n description: node.requestBody.description ?? node.requestBody.content![0]!.schema!.description,\n }\n : null\n const responseName = resolver.resolveResponseName(node)\n const localHelperNames = new Set([\n ...paramEntries.map((entry) => entry.name),\n ...responseEntries.map((entry) => entry.name),\n ...(dataEntry ? [dataEntry.name] : []),\n responseName,\n ])\n const cyclicSchemas = new Set<string>(ctx.meta.circularNames)\n\n const meta = {\n file: resolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n { root, output, group: group ?? undefined },\n ),\n typeFile: tsResolver.resolveFile(\n {\n name: node.operationId,\n extname: '.ts',\n tag: node.tags[0] ?? 'default',\n path: node.path,\n },\n {\n root,\n output: pluginTs.options?.output ?? output,\n group: pluginTs.options?.group ?? undefined,\n },\n ),\n } as const\n\n function resolveMockImports(schema: ast.SchemaNode) {\n return adapter\n .getImports(schema, (schemaName) => ({\n name: resolver.resolveName(schemaName),\n path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }).path,\n }))\n .filter((entry) => entry.path !== meta.file.path)\n }\n\n function renderEntry({\n schema,\n name,\n typeName,\n description,\n skipImportNames = [],\n }: {\n schema: ast.SchemaNode | null\n name: string\n typeName: string\n description?: string\n skipImportNames?: Array<string>\n }) {\n if (!schema) {\n return null\n }\n\n const canOverride = canOverrideSchema(schema)\n const printerInstance = printerFaker({\n resolver,\n schemaName: name,\n typeName,\n dateParser,\n regexGenerator,\n mapper,\n nodes: printer?.nodes,\n cyclicSchemas,\n })\n const fakerText = printerInstance.print(schema) ?? 'undefined'\n const usedImports = filterUsedImports(resolveMockImports(schema), fakerText, skipImportNames)\n const { imports, aliases } = aliasConflictingImports(usedImports, localHelperNames)\n const rewrittenFakerText = rewriteAliasedImports(fakerText, aliases)\n const typeReference = resolveTypeReference({\n node: schema,\n canOverride,\n name,\n typeName,\n filePath: meta.file.path,\n typeFilePath: meta.typeFile.path,\n })\n\n return (\n <>\n {typeReference.importPath && <File.Import isTypeOnly root={meta.file.path} path={typeReference.importPath} name={[typeName]} />}\n {imports.map((imp) => (\n <File.Import key={[name, imp.path, imp.name].join('-')} root={meta.file.path} path={imp.path} name={imp.name} />\n ))}\n <Faker\n name={name}\n typeName={typeReference.typeName}\n description={description}\n node={schema}\n printer={{ ...printerInstance, print: () => rewrittenFakerText }}\n seed={seed}\n canOverride={canOverride}\n />\n </>\n )\n }\n\n return (\n <File\n baseName={meta.file.baseName}\n path={meta.file.path}\n meta={meta.file.meta}\n banner={resolver.resolveBanner(ctx.meta, { output, config })}\n footer={resolver.resolveFooter(ctx.meta, { output, config })}\n >\n <File.Import name={locale ? [{ propertyName: localeToFakerImport(locale), name: 'faker' }] : ['faker']} path=\"@faker-js/faker\" />\n {regexGenerator === 'randexp' && <File.Import name={'RandExp'} path={'randexp'} />}\n {dateParser !== 'faker' && <File.Import path={dateParser} name={dateParser} />}\n {paramEntries.map(({ param, name, typeName }) =>\n renderEntry({\n schema: param.schema,\n name,\n typeName,\n }),\n )}\n {responseEntries.map(({ response, name, typeName }) =>\n renderEntry({\n schema: response.schema,\n name,\n typeName,\n description: response.description,\n }),\n )}\n {dataEntry\n ? renderEntry({\n schema: dataEntry.schema,\n name: dataEntry.name,\n typeName: dataEntry.typeName,\n description: dataEntry.description,\n })\n : null}\n {renderEntry({\n schema: buildResponseUnionSchema(node, resolver),\n name: responseName,\n typeName: tsResolver.resolveResponseName(node),\n skipImportNames: responseEntries.map(({ name }) => name),\n })}\n </File>\n )\n },\n})\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fakerGenerator-Crs3X84u.js","names":[],"sources":["../../../internals/utils/src/imports.ts","../../../internals/utils/src/object.ts","../../../internals/utils/src/regexp.ts","../src/printers/printerFaker.ts","../src/generators/fakerGenerator.tsx"],"sourcesContent":["export type ImportName = string | { propertyName: string; name?: string }\n\nexport type ImportEntry = {\n name: string | Array<ImportName>\n path: string\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\nfunction getImportNames(entry: ImportEntry): Array<string> {\n return (Array.isArray(entry.name) ? entry.name : [entry.name])\n .map((name) => {\n if (typeof name === 'string') {\n return name\n }\n\n return name.name ?? name.propertyName\n })\n .filter((name): name is string => Boolean(name))\n}\n\nexport function filterUsedImports(imports: Array<ImportEntry>, text: string, skipImportNames: Array<string> = []): Array<ImportEntry> {\n return imports.filter((entry) => {\n const names = getImportNames(entry)\n\n return names.some((name) => {\n if (skipImportNames.includes(name)) {\n return false\n }\n\n return new RegExp(`\\\\b${escapeRegExp(name)}\\\\b(?=\\\\s*\\\\()`).test(text)\n })\n })\n}\n\nexport function aliasConflictingImports(\n imports: Array<ImportEntry>,\n reservedNames: Iterable<string>,\n): { imports: Array<ImportEntry>; aliases: Map<string, string> } {\n const reservedNameSet = new Set(reservedNames)\n const aliases = new Map<string, string>()\n\n const aliasedImports = imports.map((entry) => {\n const names = Array.isArray(entry.name) ? entry.name : [entry.name]\n const aliasedNames = names.map((item): ImportName => {\n if (typeof item !== 'string' || !reservedNameSet.has(item)) {\n return item\n }\n\n const alias = `${item}Schema`\n aliases.set(item, alias)\n\n return { propertyName: item, name: alias }\n })\n\n return aliasedNames.some((item) => typeof item === 'object' && item.name)\n ? {\n ...entry,\n name: aliasedNames,\n }\n : entry\n })\n\n return {\n imports: aliasedImports,\n aliases,\n }\n}\n\nexport function rewriteAliasedImports(text: string, aliases: ReadonlyMap<string, string>): string {\n return Array.from(aliases).reduce((acc, [name, alias]) => acc.replace(new RegExp(`\\\\b${escapeRegExp(name)}\\\\b`, 'g'), alias), text)\n}\n","import { trimQuotes } from './string.ts'\n\n/**\n * Serializes a primitive value to a JSON string literal, stripping any surrounding quote characters first.\n *\n * @example\n * stringify('hello') // '\"hello\"'\n * stringify('\"hello\"') // '\"hello\"'\n */\nexport function stringify(value: string | number | boolean | undefined): string {\n if (value === undefined || value === null) return '\"\"'\n return JSON.stringify(trimQuotes(value.toString()))\n}\n\n/**\n * Converts a plain object into a multiline key-value string suitable for embedding in generated code.\n * Nested objects are recursively stringified with indentation.\n *\n * @example\n * stringifyObject({ foo: 'bar', nested: { a: 1 } })\n * // 'foo: bar,\\nnested: {\\n a: 1\\n }'\n */\nexport function stringifyObject(value: Record<string, unknown>): string {\n const items = Object.entries(value)\n .map(([key, val]) => {\n if (val !== null && typeof val === 'object') {\n return `${key}: {\\n ${stringifyObject(val as Record<string, unknown>)}\\n }`\n }\n return `${key}: ${val}`\n })\n .filter(Boolean)\n return items.join(',\\n')\n}\n\n/**\n * Converts a dot-notation path or string array into an optional-chaining accessor expression.\n *\n * @example\n * getNestedAccessor('pagination.next.id', 'lastPage')\n * // → \"lastPage?.['pagination']?.['next']?.['id']\"\n */\nexport function getNestedAccessor(param: string | string[], accessor: string): string | null {\n const parts = Array.isArray(param) ? param : param.split('.')\n if (parts.length === 0 || (parts.length === 1 && parts[0] === '')) return null\n return `${accessor}?.['${`${parts.join(\"']?.['\")}']`}`\n}\n","import { trimQuotes } from './string.ts'\n\n/**\n * Converts a pattern string into a `new RegExp(...)` constructor call or a regex literal string.\n * Inline flags expressed as `^(?im)` prefixes are extracted and applied to the resulting expression.\n * Pass `null` as the second argument to emit a `/pattern/flags` literal instead.\n *\n * @example\n * toRegExpString('^(?im)foo') // → 'new RegExp(\"foo\", \"im\")'\n * toRegExpString('^(?im)foo', null) // → '/foo/im'\n */\nexport function toRegExpString(text: string, func: string | null = 'RegExp'): string {\n const raw = trimQuotes(text)\n\n const match = raw.match(/^\\^(\\(\\?([igmsuy]+)\\))/i)\n const replacementTarget = match?.[1] ?? ''\n const matchedFlags = match?.[2]\n const cleaned = raw\n .replace(/^\\\\?\\//, '')\n .replace(/\\\\?\\/$/, '')\n .replace(replacementTarget, '')\n\n const { source, flags } = new RegExp(cleaned, matchedFlags)\n\n if (func === null) return `/${source}/${flags}`\n\n return `new ${func}(${JSON.stringify(source)}${flags ? `, ${JSON.stringify(flags)}` : ''})`\n}\n","import { stringify, toRegExpString } from '@internals/utils'\nimport { ast } from '@kubb/core'\nimport type { PluginFaker, ResolverFaker } from '../types.ts'\n\n/**\n * Partial map of node-type overrides for the Faker printer. Each key is a\n * `SchemaType` (`'string'`, `'date'`, ...) and each handler returns the\n * Faker expression for that schema as a string. Use `this.transform` to\n * recurse into nested schema nodes and `this.options` to read printer options.\n *\n * @example Override the integer handler\n * ```ts\n * pluginFaker({\n * printer: {\n * nodes: {\n * integer() {\n * return 'faker.number.float()'\n * },\n * },\n * },\n * })\n * ```\n */\nexport type PrinterFakerNodes = ast.PrinterPartial<string, PrinterFakerOptions>\n\n/**\n * Options passed to the Faker printer at instantiation: the parser library\n * for date strings, the regex generator, the user-supplied schema-name\n * mapper, and the resolver used to compute identifiers.\n */\nexport type PrinterFakerOptions = {\n dateParser?: PluginFaker['resolvedOptions']['dateParser']\n regexGenerator?: PluginFaker['resolvedOptions']['regexGenerator']\n mapper?: PluginFaker['resolvedOptions']['mapper']\n resolver: ResolverFaker\n typeName?: string\n schemaName?: string\n nestedInObject?: boolean\n nodes?: PrinterFakerNodes\n /**\n * Names of schemas that participate in a circular dependency chain.\n * Properties whose schema transitively references one of these are emitted\n * as lazy getters so that user overrides via the `data` parameter prevent\n * the recursive faker call from ever executing (avoiding stack overflow).\n */\n cyclicSchemas?: ReadonlySet<string>\n}\n\n/**\n * Factory options for the Faker printer, defining input/output types and configuration.\n */\nexport type PrinterFakerFactory = ast.PrinterFactoryOptions<'faker', PrinterFakerOptions, string, string>\n\nconst fakerKeywordMapper = {\n any: () => 'undefined',\n unknown: () => 'undefined',\n void: () => 'undefined',\n number: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.number.float({ min: ${min}, max: ${max} })`\n }\n\n if (max !== undefined) {\n return `faker.number.float({ max: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.number.float({ min: ${min} })`\n }\n\n return 'faker.number.float()'\n },\n integer: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.number.int({ min: ${min}, max: ${max} })`\n }\n\n if (max !== undefined) {\n return `faker.number.int({ max: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.number.int({ min: ${min} })`\n }\n\n return 'faker.number.int()'\n },\n bigint: () => 'faker.number.bigInt()',\n string: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.string.alpha({ length: { min: ${min}, max: ${max} } })`\n }\n\n if (max !== undefined) {\n return `faker.string.alpha({ length: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.string.alpha({ length: ${min} })`\n }\n\n return 'faker.string.alpha()'\n },\n boolean: () => 'faker.datatype.boolean()',\n null: () => 'null',\n array: (items: Array<string> = [], min?: number, max?: number) => {\n if (items.length > 1) {\n return `faker.helpers.arrayElements([${items.join(', ')}])`\n }\n\n const item = items.at(0)\n\n if (min !== undefined && max !== undefined) {\n return `faker.helpers.multiple(() => (${item}), { count: { min: ${min}, max: ${max} }})`\n }\n\n if (min !== undefined) {\n return `faker.helpers.multiple(() => (${item}), { count: ${min} })`\n }\n\n if (max !== undefined) {\n return `faker.helpers.multiple(() => (${item}), { count: { min: 0, max: ${max} }})`\n }\n\n return `faker.helpers.multiple(() => (${item}))`\n },\n tuple: (items: Array<string> = []) => `[${items.join(', ')}]`,\n enum: (items: Array<string | number | boolean | undefined> = [], type = 'any') => `faker.helpers.arrayElement<${type}>([${items.join(', ')}])`,\n union: (items: Array<string> = []) => `faker.helpers.arrayElement<any>([${items.join(', ')}])`,\n datetime: () => 'faker.date.anytime().toISOString()',\n date: (representation: 'date' | 'string' = 'string', parser: PluginFaker['resolvedOptions']['dateParser'] = 'faker') => {\n if (representation === 'string') {\n if (parser !== 'faker') {\n return `${parser}(faker.date.anytime()).format(\"YYYY-MM-DD\")`\n }\n\n return 'faker.date.anytime().toISOString().substring(0, 10)'\n }\n\n if (parser !== 'faker') {\n throw new Error(`type '${representation}' and parser '${parser}' can not work together`)\n }\n\n return 'faker.date.anytime()'\n },\n time: (representation: 'date' | 'string' = 'string', parser: PluginFaker['resolvedOptions']['dateParser'] = 'faker') => {\n if (representation === 'string') {\n if (parser !== 'faker') {\n return `${parser}(faker.date.anytime()).format(\"HH:mm:ss\")`\n }\n\n return 'faker.date.anytime().toISOString().substring(11, 19)'\n }\n\n if (parser !== 'faker') {\n throw new Error(`type '${representation}' and parser '${parser}' can not work together`)\n }\n\n return 'faker.date.anytime()'\n },\n uuid: () => 'faker.string.uuid()',\n url: () => 'faker.internet.url()',\n and: (items: Array<string> = []) => {\n if (items.length === 0) {\n return '{}'\n }\n\n if (items.length === 1) {\n return items[0] ?? '{}'\n }\n\n return `{...${items.join(', ...')}}`\n },\n matches: (value = '', regexGenerator: 'faker' | 'randexp' = 'faker') => {\n if (regexGenerator === 'randexp') {\n return `${toRegExpString(value, 'RandExp')}.gen()`\n }\n\n return `faker.helpers.fromRegExp(\"${value}\")`\n },\n email: () => 'faker.internet.email()',\n blob: () => 'faker.image.url() as unknown as Blob',\n} as const\n\nfunction getEnumValues(node: ast.EnumSchemaNode): Array<string | number | boolean | undefined> {\n if (node.namedEnumValues?.length) {\n return node.namedEnumValues.map((item) => item.value as string | number | boolean | undefined)\n }\n\n return (node.enumValues ?? []) as Array<string | number | boolean | undefined>\n}\n\nfunction parseEnumValue(value: string | number | boolean | undefined) {\n if (typeof value === 'string') {\n return stringify(value)\n }\n\n return value\n}\n\n/**\n * Creates a Faker printer that generates mock data generation code from schema nodes.\n * Handles circular references gracefully by emitting memoizing getters for cyclic properties.\n */\nexport const printerFaker: (options: PrinterFakerOptions) => ast.Printer<PrinterFakerFactory> = ast.definePrinter<PrinterFakerFactory>((options) => {\n const printNested = (node: ast.SchemaNode, overrideOptions: Partial<PrinterFakerOptions> = {}): string => {\n return (\n printerFaker({\n ...options,\n ...overrideOptions,\n nodes: options.nodes,\n }).print(node) ?? 'undefined'\n )\n }\n\n return {\n name: 'faker',\n options,\n nodes: {\n any: () => fakerKeywordMapper.any(),\n unknown: () => fakerKeywordMapper.unknown(),\n void: () => fakerKeywordMapper.void(),\n boolean: () => fakerKeywordMapper.boolean(),\n null: () => fakerKeywordMapper.null(),\n string(node) {\n if (node.pattern) {\n return fakerKeywordMapper.matches(node.pattern, this.options.regexGenerator)\n }\n\n return fakerKeywordMapper.string(node.min, node.max)\n },\n email: () => fakerKeywordMapper.email(),\n url: () => fakerKeywordMapper.url(),\n uuid: () => fakerKeywordMapper.uuid(),\n number(node) {\n return fakerKeywordMapper.number(node.min, node.max)\n },\n integer(node) {\n return fakerKeywordMapper.integer(node.min, node.max)\n },\n bigint: () => fakerKeywordMapper.bigint(),\n blob: () => fakerKeywordMapper.blob(),\n datetime: () => fakerKeywordMapper.datetime(),\n date(node) {\n return fakerKeywordMapper.date(node.representation ?? 'string', this.options.dateParser)\n },\n time(node) {\n return fakerKeywordMapper.time(node.representation ?? 'string', this.options.dateParser)\n },\n ref(node) {\n // Parser-generated refs (with $ref) carry raw schema names that need resolving.\n // Use the canonical name from the $ref path — node.name may have been overridden\n // (e.g. by single-member allOf flatten using the property-derived child name).\n // Inline refs (without $ref) from faker utils already carry resolved helper names.\n const refName = node.ref ? (ast.extractRefName(node.ref) ?? node.name ?? node.schema?.name) : (node.name ?? node.schema?.name)\n\n if (!refName) {\n throw new Error('Name not defined for ref node')\n }\n\n if (this.options.schemaName && refName === this.options.schemaName) {\n return 'undefined as any'\n }\n\n // Internal helper refs (for generated response/data helpers) are already\n // emitted with resolver output and should not be transformed twice.\n const resolvedName = node.ref ? this.options.resolver.resolveName(refName) : refName\n\n if (!this.options.nestedInObject) {\n return `${resolvedName}(data)`\n }\n\n return `${resolvedName}()`\n },\n enum(node) {\n return fakerKeywordMapper.enum(getEnumValues(node).map(parseEnumValue), this.options.typeName)\n },\n union(node): string {\n const items: Array<string> = (node.members ?? [])\n .map((member) =>\n printNested(member, {\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.union(items)\n },\n intersection(node): string {\n const items: Array<string> = (node.members ?? [])\n .map((member) =>\n printNested(member, {\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.and(items)\n },\n array(node): string {\n const items: Array<string> = (node.items ?? [])\n .map((member) =>\n printNested(member, {\n typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[number]` : undefined,\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.array(items, node.min, node.max)\n },\n tuple(node): string {\n const items: Array<string> = (node.items ?? [])\n .map((member, index) =>\n printNested(member, {\n typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${index}]` : undefined,\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.tuple(items)\n },\n object(node): string {\n const cyclicSchemas = this.options.cyclicSchemas\n const properties = (node.properties ?? [])\n .map((property): string => {\n if (this.options.mapper && Object.hasOwn(this.options.mapper, property.name)) {\n return `\"${property.name}\": ${this.options.mapper[property.name]}`\n }\n\n const value: string =\n printNested(property.schema, {\n typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${JSON.stringify(property.name)}]` : undefined,\n nestedInObject: true,\n }) ?? 'undefined'\n\n // When the property's schema transitively references a schema that is\n // part of a circular dependency (other than the current schema itself),\n // emit a memoizing lazy getter. On first access it computes the value,\n // replaces itself with a plain data property via Object.defineProperty,\n // and returns the cached value – so every subsequent read is stable.\n if (cyclicSchemas && ast.containsCircularRef(property.schema, { circularSchemas: cyclicSchemas, excludeName: this.options.schemaName })) {\n return `get ${property.name}() { const _value = ${value}; Object.defineProperty(this, ${JSON.stringify(property.name)}, { value: _value, configurable: true, writable: true, enumerable: true }); return _value }`\n }\n\n return `\"${property.name}\": ${value}`\n })\n .join(',')\n\n return `{${properties}}`\n },\n ...options.nodes,\n },\n print(node) {\n return this.transform(node) ?? null\n },\n }\n})\n","import { aliasConflictingImports, filterUsedImports, rewriteAliasedImports } from '@internals/utils'\nimport { ast, defineGenerator } from '@kubb/core'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { File, jsxRendererSync } from '@kubb/renderer-jsx'\nimport { Faker } from '../components/Faker.tsx'\nimport { printerFaker } from '../printers/printerFaker.ts'\nimport type { PluginFaker } from '../types.ts'\nimport { buildResponseUnionSchema, canOverrideSchema, localeToFakerImport, resolveParamNameByLocation, resolveTypeReference } from '../utils.ts'\n\n/**\n * Built-in generator for `@kubb/plugin-faker`. Emits one `createX` factory\n * per schema in the spec plus per-operation request/response factories. Each\n * factory returns a value matching the corresponding TypeScript type from\n * `@kubb/plugin-ts`.\n */\nexport const fakerGenerator = defineGenerator<PluginFaker>({\n name: 'faker',\n renderer: jsxRendererSync,\n schema(node, ctx) {\n const { adapter, config, resolver, root } = ctx\n const { output, group, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options\n const pluginTs = ctx.driver.getPlugin(pluginTsName)\n\n if (!node.name || !pluginTs) {\n return\n }\n\n const tsResolver = ctx.driver.getResolver(pluginTsName)\n\n const schemaName = node.name\n const mode = ctx.getMode(output)\n const meta = {\n name: resolver.resolveName(schemaName),\n file: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }),\n typeName: tsResolver.resolveTypeName(schemaName),\n typeFile: tsResolver.resolveFile(\n { name: schemaName, extname: '.ts' },\n { root, output: pluginTs.options?.output ?? output, group: pluginTs.options?.group ?? undefined },\n ),\n } as const\n const canOverride = canOverrideSchema(node)\n const cyclicSchemas = new Set<string>(ctx.meta.circularNames)\n const printerInstance = printerFaker({\n resolver,\n schemaName,\n typeName: meta.typeName,\n dateParser,\n regexGenerator,\n mapper,\n nodes: printer?.nodes,\n cyclicSchemas,\n })\n const fakerText = printerInstance.print(node) ?? 'undefined'\n const typeReference = resolveTypeReference({\n node,\n canOverride,\n name: meta.name,\n typeName: meta.typeName,\n filePath: meta.file.path,\n typeFilePath: meta.typeFile.path,\n })\n\n const imports = adapter\n .getImports(node, (schemaName) => ({\n name: resolver.resolveName(schemaName),\n path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }).path,\n }))\n .filter((entry) => entry.path !== meta.file.path)\n const usedImports = filterUsedImports(imports, fakerText)\n\n return (\n <File\n baseName={meta.file.baseName}\n path={meta.file.path}\n meta={meta.file.meta}\n banner={resolver.resolveBanner(ctx.meta, { output, config })}\n footer={resolver.resolveFooter(ctx.meta, { output, config })}\n >\n <File.Import name={locale ? [{ propertyName: localeToFakerImport(locale), name: 'faker' }] : ['faker']} path=\"@faker-js/faker\" />\n {regexGenerator === 'randexp' && <File.Import name={'RandExp'} path={'randexp'} />}\n {dateParser !== 'faker' && <File.Import path={dateParser} name={dateParser} />}\n {typeReference.importPath && <File.Import isTypeOnly root={meta.file.path} path={typeReference.importPath} name={[meta.typeName]} />}\n {mode === 'split' &&\n usedImports.map((imp) => <File.Import key={[schemaName, imp.path, imp.name].join('-')} root={meta.file.path} path={imp.path} name={imp.name} />)}\n <Faker\n name={meta.name}\n typeName={typeReference.typeName}\n description={node.description}\n node={node}\n printer={printerInstance}\n seed={seed}\n canOverride={canOverride}\n />\n </File>\n )\n },\n operation(node, ctx) {\n const { adapter, config, resolver, root } = ctx\n const { output, group, paramsCasing, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options\n const pluginTs = ctx.driver.getPlugin(pluginTsName)\n\n if (!pluginTs) {\n return\n }\n\n const tsResolver = ctx.driver.getResolver(pluginTsName)\n\n const params = ast.caseParams(node.parameters, paramsCasing)\n const paramEntries = params.map((param) => ({\n param,\n name: resolveParamNameByLocation(resolver, node, param),\n typeName: resolveParamNameByLocation(tsResolver, node, param),\n }))\n const responseEntries = node.responses.map((response) => ({\n response,\n name: resolver.resolveResponseStatusName(node, response.statusCode),\n typeName: tsResolver.resolveResponseStatusName(node, response.statusCode),\n }))\n const dataEntry = node.requestBody?.content?.[0]?.schema\n ? {\n schema: {\n ...node.requestBody.content![0]!.schema!,\n description: node.requestBody.description ?? node.requestBody.content![0]!.schema!.description,\n },\n name: resolver.resolveDataName(node),\n typeName: tsResolver.resolveDataName(node),\n description: node.requestBody.description ?? node.requestBody.content![0]!.schema!.description,\n }\n : null\n const responseName = resolver.resolveResponseName(node)\n const localHelperNames = new Set([\n ...paramEntries.map((entry) => entry.name),\n ...responseEntries.map((entry) => entry.name),\n ...(dataEntry ? [dataEntry.name] : []),\n responseName,\n ])\n const cyclicSchemas = new Set<string>(ctx.meta.circularNames)\n\n const meta = {\n file: resolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n { root, output, group: group ?? undefined },\n ),\n typeFile: tsResolver.resolveFile(\n {\n name: node.operationId,\n extname: '.ts',\n tag: node.tags[0] ?? 'default',\n path: node.path,\n },\n {\n root,\n output: pluginTs.options?.output ?? output,\n group: pluginTs.options?.group ?? undefined,\n },\n ),\n } as const\n\n function resolveMockImports(schema: ast.SchemaNode) {\n return adapter\n .getImports(schema, (schemaName) => ({\n name: resolver.resolveName(schemaName),\n path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }).path,\n }))\n .filter((entry) => entry.path !== meta.file.path)\n }\n\n function renderEntry({\n schema,\n name,\n typeName,\n description,\n skipImportNames = [],\n }: {\n schema: ast.SchemaNode | null\n name: string\n typeName: string\n description?: string\n skipImportNames?: Array<string>\n }) {\n if (!schema) {\n return null\n }\n\n const canOverride = canOverrideSchema(schema)\n const printerInstance = printerFaker({\n resolver,\n schemaName: name,\n typeName,\n dateParser,\n regexGenerator,\n mapper,\n nodes: printer?.nodes,\n cyclicSchemas,\n })\n const fakerText = printerInstance.print(schema) ?? 'undefined'\n const usedImports = filterUsedImports(resolveMockImports(schema), fakerText, skipImportNames)\n const { imports, aliases } = aliasConflictingImports(usedImports, localHelperNames)\n const rewrittenFakerText = rewriteAliasedImports(fakerText, aliases)\n const typeReference = resolveTypeReference({\n node: schema,\n canOverride,\n name,\n typeName,\n filePath: meta.file.path,\n typeFilePath: meta.typeFile.path,\n })\n\n return (\n <>\n {typeReference.importPath && <File.Import isTypeOnly root={meta.file.path} path={typeReference.importPath} name={[typeName]} />}\n {imports.map((imp) => (\n <File.Import key={[name, imp.path, imp.name].join('-')} root={meta.file.path} path={imp.path} name={imp.name} />\n ))}\n <Faker\n name={name}\n typeName={typeReference.typeName}\n description={description}\n node={schema}\n printer={{ ...printerInstance, print: () => rewrittenFakerText }}\n seed={seed}\n canOverride={canOverride}\n />\n </>\n )\n }\n\n return (\n <File\n baseName={meta.file.baseName}\n path={meta.file.path}\n meta={meta.file.meta}\n banner={resolver.resolveBanner(ctx.meta, { output, config })}\n footer={resolver.resolveFooter(ctx.meta, { output, config })}\n >\n <File.Import name={locale ? [{ propertyName: localeToFakerImport(locale), name: 'faker' }] : ['faker']} path=\"@faker-js/faker\" />\n {regexGenerator === 'randexp' && <File.Import name={'RandExp'} path={'randexp'} />}\n {dateParser !== 'faker' && <File.Import path={dateParser} name={dateParser} />}\n {paramEntries.map(({ param, name, typeName }) =>\n renderEntry({\n schema: param.schema,\n name,\n typeName,\n }),\n )}\n {responseEntries.map(({ response, name, typeName }) =>\n renderEntry({\n schema: response.schema,\n name,\n typeName,\n description: response.description,\n }),\n )}\n {dataEntry\n ? renderEntry({\n schema: dataEntry.schema,\n name: dataEntry.name,\n typeName: dataEntry.typeName,\n description: dataEntry.description,\n })\n : null}\n {renderEntry({\n schema: buildResponseUnionSchema(node, resolver),\n name: responseName,\n typeName: tsResolver.resolveResponseName(node),\n skipImportNames: responseEntries.map(({ name }) => name),\n })}\n </File>\n )\n },\n})\n"],"mappings":"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"}