@kubb/plugin-faker 5.0.0-beta.4 → 5.0.0-beta.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -22
- package/dist/{Faker-fcQEB9i5.js → Faker-DBPx_MVh.js} +39 -101
- package/dist/Faker-DBPx_MVh.js.map +1 -0
- package/dist/{Faker-BgleOzVN.cjs → Faker-DRL0W5Lt.cjs} +37 -123
- package/dist/Faker-DRL0W5Lt.cjs.map +1 -0
- package/dist/{Faker-CdyPfOPg.d.ts → Faker-SBhWTdC7.d.ts} +3 -3
- package/dist/components.cjs +1 -1
- package/dist/components.d.ts +1 -1
- package/dist/components.js +1 -1
- package/dist/{fakerGenerator-VJEVzLjc.cjs → fakerGenerator-CVOr0Pwm.cjs} +237 -60
- package/dist/fakerGenerator-CVOr0Pwm.cjs.map +1 -0
- package/dist/{fakerGenerator-D7daHCh6.js → fakerGenerator-DNJ61yLj.js} +237 -60
- package/dist/fakerGenerator-DNJ61yLj.js.map +1 -0
- package/dist/fakerGenerator-Duc28_FK.d.ts +14 -0
- package/dist/generators.cjs +1 -1
- package/dist/generators.d.ts +1 -1
- package/dist/generators.js +1 -1
- package/dist/index.cjs +211 -43
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +35 -15
- package/dist/index.js +213 -45
- package/dist/index.js.map +1 -1
- package/dist/{printerFaker-CJiwzoto.d.ts → printerFaker-DXS861Q0.d.ts} +64 -27
- package/extension.yaml +590 -135
- package/package.json +9 -12
- package/src/components/Faker.tsx +50 -64
- package/src/generators/fakerGenerator.tsx +107 -67
- package/src/plugin.ts +26 -22
- package/src/printers/printerFaker.ts +80 -16
- package/src/resolvers/resolverFaker.ts +29 -37
- package/src/types.ts +36 -23
- package/src/utils.ts +6 -105
- package/dist/Faker-BgleOzVN.cjs.map +0 -1
- package/dist/Faker-fcQEB9i5.js.map +0 -1
- package/dist/fakerGenerator-C3Ho3BaI.d.ts +0 -9
- package/dist/fakerGenerator-D7daHCh6.js.map +0 -1
- package/dist/fakerGenerator-VJEVzLjc.cjs.map +0 -1
- /package/dist/{chunk--u3MIqq1.js → chunk-C0LytTxp.js} +0 -0
|
@@ -1,9 +1,54 @@
|
|
|
1
|
-
import "./chunk
|
|
2
|
-
import { a as
|
|
1
|
+
import "./chunk-C0LytTxp.js";
|
|
2
|
+
import { a as resolveParamNameByLocation, i as localeToFakerImport, n as buildResponseUnionSchema, o as resolveTypeReference, r as canOverrideSchema, s as trimQuotes, t as Faker } from "./Faker-DBPx_MVh.js";
|
|
3
3
|
import { ast, defineGenerator } from "@kubb/core";
|
|
4
4
|
import { pluginTsName } from "@kubb/plugin-ts";
|
|
5
|
-
import { File,
|
|
5
|
+
import { File, jsxRendererSync } from "@kubb/renderer-jsx";
|
|
6
6
|
import { Fragment, jsx, jsxs } from "@kubb/renderer-jsx/jsx-runtime";
|
|
7
|
+
//#region ../../internals/utils/src/imports.ts
|
|
8
|
+
function escapeRegExp(value) {
|
|
9
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
10
|
+
}
|
|
11
|
+
function getImportNames(entry) {
|
|
12
|
+
return (Array.isArray(entry.name) ? entry.name : [entry.name]).map((name) => {
|
|
13
|
+
if (typeof name === "string") return name;
|
|
14
|
+
return name.name ?? name.propertyName;
|
|
15
|
+
}).filter((name) => Boolean(name));
|
|
16
|
+
}
|
|
17
|
+
function filterUsedImports(imports, text, skipImportNames = []) {
|
|
18
|
+
const skip = new Set(skipImportNames);
|
|
19
|
+
return imports.filter((entry) => {
|
|
20
|
+
return getImportNames(entry).some((name) => {
|
|
21
|
+
if (skip.has(name)) return false;
|
|
22
|
+
return new RegExp(`\\b${escapeRegExp(name)}\\b(?=\\s*\\()`).test(text);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function aliasConflictingImports(imports, reservedNames) {
|
|
27
|
+
const reservedNameSet = new Set(reservedNames);
|
|
28
|
+
const aliases = /* @__PURE__ */ new Map();
|
|
29
|
+
return {
|
|
30
|
+
imports: imports.map((entry) => {
|
|
31
|
+
const aliasedNames = (Array.isArray(entry.name) ? entry.name : [entry.name]).map((item) => {
|
|
32
|
+
if (typeof item !== "string" || !reservedNameSet.has(item)) return item;
|
|
33
|
+
const alias = `${item}Schema`;
|
|
34
|
+
aliases.set(item, alias);
|
|
35
|
+
return {
|
|
36
|
+
propertyName: item,
|
|
37
|
+
name: alias
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
return aliasedNames.some((item) => typeof item === "object" && item.name) ? {
|
|
41
|
+
...entry,
|
|
42
|
+
name: aliasedNames
|
|
43
|
+
} : entry;
|
|
44
|
+
}),
|
|
45
|
+
aliases
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function rewriteAliasedImports(text, aliases) {
|
|
49
|
+
return Array.from(aliases).reduce((acc, [name, alias]) => acc.replace(new RegExp(`\\b${escapeRegExp(name)}\\b`, "g"), alias), text);
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
7
52
|
//#region ../../internals/utils/src/object.ts
|
|
8
53
|
/**
|
|
9
54
|
* Serializes a primitive value to a JSON string literal, stripping any surrounding quote characters first.
|
|
@@ -38,6 +83,56 @@ function toRegExpString(text, func = "RegExp") {
|
|
|
38
83
|
return `new ${func}(${JSON.stringify(source)}${flags ? `, ${JSON.stringify(flags)}` : ""})`;
|
|
39
84
|
}
|
|
40
85
|
//#endregion
|
|
86
|
+
//#region ../../internals/shared/src/operation.ts
|
|
87
|
+
/**
|
|
88
|
+
* Maps a content type to the PascalCase suffix used to name per-content-type variants
|
|
89
|
+
* (e.g. `application/json` → `Json`, `application/xml` → `Xml`, `multipart/form-data` → `FormData`).
|
|
90
|
+
*/
|
|
91
|
+
function getContentTypeSuffix(contentType) {
|
|
92
|
+
const baseType = contentType.split(";")[0].trim();
|
|
93
|
+
if (baseType === "application/json") return "Json";
|
|
94
|
+
if (baseType === "multipart/form-data") return "FormData";
|
|
95
|
+
if (baseType === "application/x-www-form-urlencoded") return "FormUrlEncoded";
|
|
96
|
+
const parts = (baseType.split("/").pop() ?? baseType).split(/[^a-zA-Z0-9]+/).filter(Boolean);
|
|
97
|
+
if (parts.length === 0) return "Unknown";
|
|
98
|
+
return parts.map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("");
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Appends a content-type suffix to a base name, keeping a trailing `Data` segment last
|
|
102
|
+
* (e.g. `AddPetData` + `Json` → `AddPetJsonData`, `AddPetStatus200` + `Xml` → `AddPetStatus200Xml`).
|
|
103
|
+
*/
|
|
104
|
+
function getPerContentTypeName(baseName, suffix) {
|
|
105
|
+
if (baseName.endsWith("Data")) return suffix.endsWith("Data") ? baseName.slice(0, -4) + suffix : `${baseName.slice(0, -4)}${suffix}Data`;
|
|
106
|
+
return baseName + suffix;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Resolves per-content-type variant names for a set of content entries, deduplicating suffix
|
|
110
|
+
* collisions with a numeric counter. Entries without a schema are skipped. The returned `suffix` is
|
|
111
|
+
* the final (possibly counter-augmented) value, so callers can derive parallel names in another
|
|
112
|
+
* namespace (e.g. plugin-faker deriving the matching plugin-ts type name).
|
|
113
|
+
*/
|
|
114
|
+
function resolveContentTypeVariants(entries, baseName) {
|
|
115
|
+
const usedNames = /* @__PURE__ */ new Set();
|
|
116
|
+
return entries.filter((entry) => entry.schema).map((entry) => {
|
|
117
|
+
const baseSuffix = getContentTypeSuffix(entry.contentType);
|
|
118
|
+
let suffix = baseSuffix;
|
|
119
|
+
let name = getPerContentTypeName(baseName, suffix);
|
|
120
|
+
let counter = 2;
|
|
121
|
+
while (usedNames.has(name)) {
|
|
122
|
+
suffix = `${baseSuffix}${counter++}`;
|
|
123
|
+
name = getPerContentTypeName(baseName, suffix);
|
|
124
|
+
}
|
|
125
|
+
usedNames.add(name);
|
|
126
|
+
return {
|
|
127
|
+
name,
|
|
128
|
+
suffix,
|
|
129
|
+
schema: entry.schema,
|
|
130
|
+
keysToOmit: entry.keysToOmit,
|
|
131
|
+
contentType: entry.contentType
|
|
132
|
+
};
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
//#endregion
|
|
41
136
|
//#region src/printers/printerFaker.ts
|
|
42
137
|
const fakerKeywordMapper = {
|
|
43
138
|
any: () => "undefined",
|
|
@@ -114,6 +209,22 @@ function parseEnumValue(value) {
|
|
|
114
209
|
if (typeof value === "string") return stringify(value);
|
|
115
210
|
return value;
|
|
116
211
|
}
|
|
212
|
+
/** Reads the discriminator literal off a variant, or `undefined` when it can't be determined. */
|
|
213
|
+
function getDiscriminatorValue(member, discriminatorPropertyName) {
|
|
214
|
+
const prop = ast.narrowSchema(member, "object")?.properties?.find((p) => p.name === discriminatorPropertyName);
|
|
215
|
+
const enumNode = prop ? ast.narrowSchema(prop.schema, "enum") : null;
|
|
216
|
+
return enumNode ? getEnumValues(enumNode)[0] : void 0;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Type expression for an object property's value, indexed off the parent `typeName`.
|
|
220
|
+
*
|
|
221
|
+
* In a union (`oneOf`), a key that only some branches declare turns a plain `NonNullable<T>[K]`
|
|
222
|
+
* into a TS2339 error, so union members guard the access. The breakdown is below.
|
|
223
|
+
*/
|
|
224
|
+
function indexedTypeName(typeName, propertyName, nestedInUnion) {
|
|
225
|
+
const key = JSON.stringify(propertyName);
|
|
226
|
+
return nestedInUnion ? `(NonNullable<${typeName}> & Record<${key}, unknown>)[${key}]` : `NonNullable<${typeName}>[${key}]`;
|
|
227
|
+
}
|
|
117
228
|
/**
|
|
118
229
|
* Creates a Faker printer that generates mock data generation code from schema nodes.
|
|
119
230
|
* Handles circular references gracefully by emitting memoizing getters for cyclic properties.
|
|
@@ -169,7 +280,20 @@ const printerFaker = ast.definePrinter((options) => {
|
|
|
169
280
|
return fakerKeywordMapper.enum(getEnumValues(node).map(parseEnumValue), this.options.typeName);
|
|
170
281
|
},
|
|
171
282
|
union(node) {
|
|
172
|
-
const
|
|
283
|
+
const { discriminatorPropertyName } = node;
|
|
284
|
+
const baseTypeName = this.options.typeName;
|
|
285
|
+
const items = (node.members ?? []).map((member) => {
|
|
286
|
+
const value = discriminatorPropertyName ? getDiscriminatorValue(member, discriminatorPropertyName) : void 0;
|
|
287
|
+
if (baseTypeName && value !== void 0) return printNested(member, {
|
|
288
|
+
typeName: `Extract<NonNullable<${baseTypeName}>, { ${JSON.stringify(discriminatorPropertyName)}: ${parseEnumValue(value)} }>`,
|
|
289
|
+
nestedInObject: true
|
|
290
|
+
});
|
|
291
|
+
return printNested(member, {
|
|
292
|
+
typeName: baseTypeName,
|
|
293
|
+
nestedInObject: true,
|
|
294
|
+
nestedInUnion: true
|
|
295
|
+
});
|
|
296
|
+
}).filter((item) => Boolean(item));
|
|
173
297
|
return fakerKeywordMapper.union(items);
|
|
174
298
|
},
|
|
175
299
|
intersection(node) {
|
|
@@ -195,7 +319,7 @@ const printerFaker = ast.definePrinter((options) => {
|
|
|
195
319
|
return `{${(node.properties ?? []).map((property) => {
|
|
196
320
|
if (this.options.mapper && Object.hasOwn(this.options.mapper, property.name)) return `"${property.name}": ${this.options.mapper[property.name]}`;
|
|
197
321
|
const value = printNested(property.schema, {
|
|
198
|
-
typeName: this.options.typeName ?
|
|
322
|
+
typeName: this.options.typeName ? indexedTypeName(this.options.typeName, property.name, this.options.nestedInUnion) : void 0,
|
|
199
323
|
nestedInObject: true
|
|
200
324
|
}) ?? "undefined";
|
|
201
325
|
if (cyclicSchemas && ast.containsCircularRef(property.schema, {
|
|
@@ -214,18 +338,27 @@ const printerFaker = ast.definePrinter((options) => {
|
|
|
214
338
|
});
|
|
215
339
|
//#endregion
|
|
216
340
|
//#region src/generators/fakerGenerator.tsx
|
|
341
|
+
/**
|
|
342
|
+
* Built-in generator for `@kubb/plugin-faker`. Emits one `createX` factory
|
|
343
|
+
* per schema in the spec plus per-operation request/response factories. Each
|
|
344
|
+
* factory returns a value matching the corresponding TypeScript type from
|
|
345
|
+
* `@kubb/plugin-ts`.
|
|
346
|
+
*/
|
|
217
347
|
const fakerGenerator = defineGenerator({
|
|
218
348
|
name: "faker",
|
|
219
|
-
renderer:
|
|
349
|
+
renderer: jsxRendererSync,
|
|
220
350
|
schema(node, ctx) {
|
|
221
351
|
const { adapter, config, resolver, root } = ctx;
|
|
222
352
|
const { output, group, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options;
|
|
223
353
|
const pluginTs = ctx.driver.getPlugin(pluginTsName);
|
|
224
|
-
if (!node.name || !pluginTs
|
|
354
|
+
if (!node.name || !pluginTs) return;
|
|
225
355
|
const tsResolver = ctx.driver.getResolver(pluginTsName);
|
|
226
|
-
const
|
|
227
|
-
const schemaName = schemaNode.name ?? node.name;
|
|
356
|
+
const schemaName = node.name;
|
|
228
357
|
const mode = ctx.getMode(output);
|
|
358
|
+
const isEnumSchema = !!ast.narrowSchema(node, ast.schemaTypes.enum);
|
|
359
|
+
const tsEnumType = pluginTs.options?.enumType;
|
|
360
|
+
const tsEnumTypeSuffix = pluginTs.options?.enumTypeSuffix ?? "Key";
|
|
361
|
+
const schemaTypeName = isEnumSchema && (tsEnumType === "asConst" || tsEnumType === "asPascalConst") ? tsResolver.resolveEnumKeyName({ name: schemaName }, tsEnumTypeSuffix) : tsResolver.resolveTypeName(schemaName);
|
|
229
362
|
const meta = {
|
|
230
363
|
name: resolver.resolveName(schemaName),
|
|
231
364
|
file: resolver.resolveFile({
|
|
@@ -234,20 +367,20 @@ const fakerGenerator = defineGenerator({
|
|
|
234
367
|
}, {
|
|
235
368
|
root,
|
|
236
369
|
output,
|
|
237
|
-
group
|
|
370
|
+
group: group ?? void 0
|
|
238
371
|
}),
|
|
239
|
-
typeName:
|
|
372
|
+
typeName: schemaTypeName,
|
|
240
373
|
typeFile: tsResolver.resolveFile({
|
|
241
374
|
name: schemaName,
|
|
242
375
|
extname: ".ts"
|
|
243
376
|
}, {
|
|
244
377
|
root,
|
|
245
378
|
output: pluginTs.options?.output ?? output,
|
|
246
|
-
group: pluginTs.options?.group
|
|
379
|
+
group: pluginTs.options?.group ?? void 0
|
|
247
380
|
})
|
|
248
381
|
};
|
|
249
|
-
const canOverride = canOverrideSchema(
|
|
250
|
-
const cyclicSchemas =
|
|
382
|
+
const canOverride = canOverrideSchema(node);
|
|
383
|
+
const cyclicSchemas = new Set(ctx.meta.circularNames);
|
|
251
384
|
const printerInstance = printerFaker({
|
|
252
385
|
resolver,
|
|
253
386
|
schemaName,
|
|
@@ -258,16 +391,16 @@ const fakerGenerator = defineGenerator({
|
|
|
258
391
|
nodes: printer?.nodes,
|
|
259
392
|
cyclicSchemas
|
|
260
393
|
});
|
|
261
|
-
const fakerText = printerInstance.print(
|
|
394
|
+
const fakerText = printerInstance.print(node) ?? "undefined";
|
|
262
395
|
const typeReference = resolveTypeReference({
|
|
263
|
-
node
|
|
396
|
+
node,
|
|
264
397
|
canOverride,
|
|
265
398
|
name: meta.name,
|
|
266
399
|
typeName: meta.typeName,
|
|
267
400
|
filePath: meta.file.path,
|
|
268
401
|
typeFilePath: meta.typeFile.path
|
|
269
402
|
});
|
|
270
|
-
const usedImports = filterUsedImports(adapter.getImports(
|
|
403
|
+
const usedImports = filterUsedImports(adapter.getImports(node, (schemaName) => ({
|
|
271
404
|
name: resolver.resolveName(schemaName),
|
|
272
405
|
path: resolver.resolveFile({
|
|
273
406
|
name: schemaName,
|
|
@@ -275,20 +408,28 @@ const fakerGenerator = defineGenerator({
|
|
|
275
408
|
}, {
|
|
276
409
|
root,
|
|
277
410
|
output,
|
|
278
|
-
group
|
|
411
|
+
group: group ?? void 0
|
|
279
412
|
}).path
|
|
280
413
|
})).filter((entry) => entry.path !== meta.file.path), fakerText);
|
|
281
414
|
return /* @__PURE__ */ jsxs(File, {
|
|
282
415
|
baseName: meta.file.baseName,
|
|
283
416
|
path: meta.file.path,
|
|
284
417
|
meta: meta.file.meta,
|
|
285
|
-
banner: resolver.resolveBanner(
|
|
418
|
+
banner: resolver.resolveBanner(ctx.meta, {
|
|
286
419
|
output,
|
|
287
|
-
config
|
|
420
|
+
config,
|
|
421
|
+
file: {
|
|
422
|
+
path: meta.file.path,
|
|
423
|
+
baseName: meta.file.baseName
|
|
424
|
+
}
|
|
288
425
|
}),
|
|
289
|
-
footer: resolver.resolveFooter(
|
|
426
|
+
footer: resolver.resolveFooter(ctx.meta, {
|
|
290
427
|
output,
|
|
291
|
-
config
|
|
428
|
+
config,
|
|
429
|
+
file: {
|
|
430
|
+
path: meta.file.path,
|
|
431
|
+
baseName: meta.file.baseName
|
|
432
|
+
}
|
|
292
433
|
}),
|
|
293
434
|
children: [
|
|
294
435
|
/* @__PURE__ */ jsx(File.Import, {
|
|
@@ -324,8 +465,8 @@ const fakerGenerator = defineGenerator({
|
|
|
324
465
|
/* @__PURE__ */ jsx(Faker, {
|
|
325
466
|
name: meta.name,
|
|
326
467
|
typeName: typeReference.typeName,
|
|
327
|
-
description:
|
|
328
|
-
node
|
|
468
|
+
description: node.description,
|
|
469
|
+
node,
|
|
329
470
|
printer: printerInstance,
|
|
330
471
|
seed,
|
|
331
472
|
canOverride
|
|
@@ -344,27 +485,54 @@ const fakerGenerator = defineGenerator({
|
|
|
344
485
|
name: resolveParamNameByLocation(resolver, node, param),
|
|
345
486
|
typeName: resolveParamNameByLocation(tsResolver, node, param)
|
|
346
487
|
}));
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
488
|
+
function expandContentUnits(entries, baseName, tsBaseName, description, decorate) {
|
|
489
|
+
const withSchema = entries.filter((entry) => entry.schema);
|
|
490
|
+
if (withSchema.length <= 1) {
|
|
491
|
+
const primary = withSchema[0] ?? entries[0];
|
|
492
|
+
if (!primary?.schema) return [];
|
|
493
|
+
return [{
|
|
494
|
+
schema: decorate ? decorate(primary.schema) : primary.schema,
|
|
495
|
+
name: baseName,
|
|
496
|
+
typeName: tsBaseName,
|
|
497
|
+
description,
|
|
498
|
+
skipImportNames: []
|
|
499
|
+
}];
|
|
500
|
+
}
|
|
501
|
+
const variants = resolveContentTypeVariants(entries, baseName);
|
|
502
|
+
const unionSchema = ast.createSchema({
|
|
503
|
+
type: "union",
|
|
504
|
+
members: variants.map((variant) => ast.createSchema({
|
|
505
|
+
type: "ref",
|
|
506
|
+
name: variant.name
|
|
507
|
+
}))
|
|
508
|
+
});
|
|
509
|
+
return [...variants.map((variant) => ({
|
|
510
|
+
schema: decorate ? decorate(variant.schema) : variant.schema,
|
|
511
|
+
name: variant.name,
|
|
512
|
+
typeName: getPerContentTypeName(tsBaseName, variant.suffix),
|
|
513
|
+
description,
|
|
514
|
+
skipImportNames: []
|
|
515
|
+
})), {
|
|
516
|
+
schema: unionSchema,
|
|
517
|
+
name: baseName,
|
|
518
|
+
typeName: tsBaseName,
|
|
519
|
+
description,
|
|
520
|
+
skipImportNames: variants.map((variant) => variant.name)
|
|
521
|
+
}];
|
|
522
|
+
}
|
|
523
|
+
const responseUnits = node.responses.flatMap((response) => expandContentUnits(response.content ?? [], resolver.resolveResponseStatusName(node, response.statusCode), tsResolver.resolveResponseStatusName(node, response.statusCode), response.description));
|
|
524
|
+
const dataUnits = expandContentUnits(node.requestBody?.content ?? [], resolver.resolveDataName(node), tsResolver.resolveDataName(node), node.requestBody?.description, (schema) => ({
|
|
525
|
+
...schema,
|
|
526
|
+
description: node.requestBody?.description ?? schema.description
|
|
351
527
|
}));
|
|
352
|
-
const dataEntry = node.requestBody?.content?.[0]?.schema ? {
|
|
353
|
-
schema: {
|
|
354
|
-
...node.requestBody.content[0].schema,
|
|
355
|
-
description: node.requestBody.description ?? node.requestBody.content[0].schema.description
|
|
356
|
-
},
|
|
357
|
-
name: resolver.resolveDataName(node),
|
|
358
|
-
typeName: tsResolver.resolveDataName(node),
|
|
359
|
-
description: node.requestBody.description ?? node.requestBody.content[0].schema.description
|
|
360
|
-
} : null;
|
|
361
528
|
const responseName = resolver.resolveResponseName(node);
|
|
362
529
|
const localHelperNames = new Set([
|
|
363
530
|
...paramEntries.map((entry) => entry.name),
|
|
364
|
-
...
|
|
365
|
-
...
|
|
531
|
+
...responseUnits.map((unit) => unit.name),
|
|
532
|
+
...dataUnits.map((unit) => unit.name),
|
|
366
533
|
responseName
|
|
367
534
|
]);
|
|
535
|
+
const cyclicSchemas = new Set(ctx.meta.circularNames);
|
|
368
536
|
const meta = {
|
|
369
537
|
file: resolver.resolveFile({
|
|
370
538
|
name: node.operationId,
|
|
@@ -374,7 +542,7 @@ const fakerGenerator = defineGenerator({
|
|
|
374
542
|
}, {
|
|
375
543
|
root,
|
|
376
544
|
output,
|
|
377
|
-
group
|
|
545
|
+
group: group ?? void 0
|
|
378
546
|
}),
|
|
379
547
|
typeFile: tsResolver.resolveFile({
|
|
380
548
|
name: node.operationId,
|
|
@@ -384,7 +552,7 @@ const fakerGenerator = defineGenerator({
|
|
|
384
552
|
}, {
|
|
385
553
|
root,
|
|
386
554
|
output: pluginTs.options?.output ?? output,
|
|
387
|
-
group: pluginTs.options?.group
|
|
555
|
+
group: pluginTs.options?.group ?? void 0
|
|
388
556
|
})
|
|
389
557
|
};
|
|
390
558
|
function resolveMockImports(schema) {
|
|
@@ -396,14 +564,13 @@ const fakerGenerator = defineGenerator({
|
|
|
396
564
|
}, {
|
|
397
565
|
root,
|
|
398
566
|
output,
|
|
399
|
-
group
|
|
567
|
+
group: group ?? void 0
|
|
400
568
|
}).path
|
|
401
569
|
})).filter((entry) => entry.path !== meta.file.path);
|
|
402
570
|
}
|
|
403
571
|
function renderEntry({ schema, name, typeName, description, skipImportNames = [] }) {
|
|
404
572
|
if (!schema) return null;
|
|
405
573
|
const canOverride = canOverrideSchema(schema);
|
|
406
|
-
const cyclicSchemas = adapter.inputNode ? ast.findCircularSchemas(adapter.inputNode.schemas) : void 0;
|
|
407
574
|
const printerInstance = printerFaker({
|
|
408
575
|
resolver,
|
|
409
576
|
schemaName: name,
|
|
@@ -459,13 +626,21 @@ const fakerGenerator = defineGenerator({
|
|
|
459
626
|
baseName: meta.file.baseName,
|
|
460
627
|
path: meta.file.path,
|
|
461
628
|
meta: meta.file.meta,
|
|
462
|
-
banner: resolver.resolveBanner(
|
|
629
|
+
banner: resolver.resolveBanner(ctx.meta, {
|
|
463
630
|
output,
|
|
464
|
-
config
|
|
631
|
+
config,
|
|
632
|
+
file: {
|
|
633
|
+
path: meta.file.path,
|
|
634
|
+
baseName: meta.file.baseName
|
|
635
|
+
}
|
|
465
636
|
}),
|
|
466
|
-
footer: resolver.resolveFooter(
|
|
637
|
+
footer: resolver.resolveFooter(ctx.meta, {
|
|
467
638
|
output,
|
|
468
|
-
config
|
|
639
|
+
config,
|
|
640
|
+
file: {
|
|
641
|
+
path: meta.file.path,
|
|
642
|
+
baseName: meta.file.baseName
|
|
643
|
+
}
|
|
469
644
|
}),
|
|
470
645
|
children: [
|
|
471
646
|
/* @__PURE__ */ jsx(File.Import, {
|
|
@@ -488,23 +663,25 @@ const fakerGenerator = defineGenerator({
|
|
|
488
663
|
name,
|
|
489
664
|
typeName
|
|
490
665
|
})),
|
|
491
|
-
|
|
492
|
-
schema:
|
|
493
|
-
name,
|
|
494
|
-
typeName,
|
|
495
|
-
description:
|
|
666
|
+
responseUnits.map((unit) => renderEntry({
|
|
667
|
+
schema: unit.schema,
|
|
668
|
+
name: unit.name,
|
|
669
|
+
typeName: unit.typeName,
|
|
670
|
+
description: unit.description,
|
|
671
|
+
skipImportNames: unit.skipImportNames
|
|
672
|
+
})),
|
|
673
|
+
dataUnits.map((unit) => renderEntry({
|
|
674
|
+
schema: unit.schema,
|
|
675
|
+
name: unit.name,
|
|
676
|
+
typeName: unit.typeName,
|
|
677
|
+
description: unit.description,
|
|
678
|
+
skipImportNames: unit.skipImportNames
|
|
496
679
|
})),
|
|
497
|
-
dataEntry ? renderEntry({
|
|
498
|
-
schema: dataEntry.schema,
|
|
499
|
-
name: dataEntry.name,
|
|
500
|
-
typeName: dataEntry.typeName,
|
|
501
|
-
description: dataEntry.description
|
|
502
|
-
}) : null,
|
|
503
680
|
renderEntry({
|
|
504
681
|
schema: buildResponseUnionSchema(node, resolver),
|
|
505
682
|
name: responseName,
|
|
506
683
|
typeName: tsResolver.resolveResponseName(node),
|
|
507
|
-
skipImportNames:
|
|
684
|
+
skipImportNames: responseUnits.map((unit) => unit.name)
|
|
508
685
|
})
|
|
509
686
|
]
|
|
510
687
|
});
|
|
@@ -513,4 +690,4 @@ const fakerGenerator = defineGenerator({
|
|
|
513
690
|
//#endregion
|
|
514
691
|
export { printerFaker as n, fakerGenerator as t };
|
|
515
692
|
|
|
516
|
-
//# sourceMappingURL=fakerGenerator-
|
|
693
|
+
//# sourceMappingURL=fakerGenerator-DNJ61yLj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fakerGenerator-DNJ61yLj.js","names":[],"sources":["../../../internals/utils/src/imports.ts","../../../internals/utils/src/object.ts","../../../internals/utils/src/regexp.ts","../../../internals/shared/src/operation.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 const skip = new Set(skipImportNames)\n\n return imports.filter((entry) => {\n const names = getImportNames(entry)\n\n return names.some((name) => {\n if (skip.has(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 { URLPath } from '@internals/utils'\nimport { ast, type ResolverFileParams } from '@kubb/core'\n\n/**\n * Builds the `ResolverFileParams` every operation generator passes to\n * `resolver.resolveFile`: a file named `name`, tagged by the operation's first\n * tag (or `'default'`), at the operation's path. Centralizes the entry object\n * that was repeated at dozens of call sites across the client and query plugins.\n *\n * @example\n * ```ts\n * resolver.resolveFile(operationFileEntry(node, node.operationId), { root, output, group })\n * ```\n */\nexport function operationFileEntry(node: ast.OperationNode, name: string, extname: ResolverFileParams['extname'] = '.ts'): ResolverFileParams {\n return {\n name,\n extname,\n tag: node.tags[0] ?? 'default',\n path: node.path,\n }\n}\n\nexport type ContentTypeInfo = {\n contentTypes: string[]\n isMultipleContentTypes: boolean\n contentTypeUnion: string\n defaultContentType: string\n hasFormData: boolean\n}\n\nexport type RequestConfigResolver = {\n resolveDataName(node: ast.OperationNode): string\n}\n\nexport type ResponseStatusNameResolver = {\n resolveResponseStatusName(node: ast.OperationNode, statusCode: ast.StatusCode): string\n}\n\nexport type ResponseNameResolver = ResponseStatusNameResolver & {\n resolveResponseName(node: ast.OperationNode): string\n}\n\nexport type OperationTypeNameResolver = RequestConfigResolver &\n ResponseNameResolver & {\n resolvePathParamsName(node: ast.OperationNode, param: ast.ParameterNode): string\n resolveQueryParamsName(node: ast.OperationNode, param: ast.ParameterNode): string\n resolveHeaderParamsName(node: ast.OperationNode, param: ast.ParameterNode): string\n }\n\nexport type OperationCommentLink = 'pathTemplate' | 'urlPath' | false | ((node: ast.OperationNode) => string | undefined)\n\nexport type BuildOperationCommentsOptions = {\n link?: OperationCommentLink\n linkPosition?: 'beforeDeprecated' | 'afterDeprecated'\n splitLines?: boolean\n}\n\ntype ResponseLike = {\n statusCode: ast.StatusCode | number | string\n}\n\nexport type OperationParameterGroups = Record<ast.ParameterNode['in'], Array<ast.ParameterNode>>\n\nexport type ResolveOperationTypeNameOptions = {\n paramsCasing?: 'camelcase'\n responseStatusNames?: boolean | 'error'\n exclude?: ReadonlyArray<string | undefined>\n order?: 'params-first' | 'body-response-first'\n}\n\nfunction getOperationLink(node: ast.OperationNode, link: OperationCommentLink): string | null {\n if (!link) {\n return null\n }\n\n if (typeof link === 'function') {\n return link(node) ?? null\n }\n\n if (link === 'urlPath') {\n return node.path ? `{@link ${new URLPath(node.path).URL}}` : null\n }\n\n return node.path ? `{@link ${node.path.replaceAll('{', ':').replaceAll('}', '')}}` : null\n}\n\nexport function getContentTypeInfo(node: ast.OperationNode): ContentTypeInfo {\n const contentTypes = node.requestBody?.content?.map((e) => e.contentType) ?? []\n const isMultipleContentTypes = contentTypes.length > 1\n\n return {\n contentTypes,\n isMultipleContentTypes,\n contentTypeUnion: isMultipleContentTypes ? contentTypes.map((ct) => JSON.stringify(ct)).join(' | ') : '',\n defaultContentType: contentTypes[0] ?? 'application/json',\n hasFormData: contentTypes.some((ct) => ct === 'multipart/form-data'),\n }\n}\n\nexport type ResponseType = 'arraybuffer' | 'blob' | 'document' | 'json' | 'text' | 'stream'\n\n/**\n * Derives the default `responseType` for an operation from its primary success response.\n *\n * Returns a value only when that response declares a single non-JSON content type — a binary type\n * (`application/octet-stream`, `application/pdf`, `image/*`, `audio/*`, `video/*`) maps to `'blob'`\n * and other `text/*` maps to `'text'`. Otherwise `undefined`, leaving the runtime client's\n * `Content-Type` auto-detection in charge.\n */\nexport function getResponseType(node: ast.OperationNode): ResponseType | undefined {\n const contentTypes = getPrimarySuccessResponse(node)?.content?.map((entry) => entry.contentType) ?? []\n if (contentTypes.length !== 1) return undefined\n\n const baseType = contentTypes[0]!.split(';')[0]!.trim().toLowerCase()\n if (baseType === 'application/json' || baseType.endsWith('+json') || baseType === 'text/json') return undefined\n if (baseType.startsWith('text/')) return 'text'\n if (baseType === 'application/octet-stream' || baseType === 'application/pdf' || /^(image|audio|video)\\//.test(baseType)) return 'blob'\n return undefined\n}\n\n/**\n * Maps a content type to the PascalCase suffix used to name per-content-type variants\n * (e.g. `application/json` → `Json`, `application/xml` → `Xml`, `multipart/form-data` → `FormData`).\n */\nexport function getContentTypeSuffix(contentType: string): string {\n const baseType = contentType.split(';')[0]!.trim()\n if (baseType === 'application/json') return 'Json'\n if (baseType === 'multipart/form-data') return 'FormData'\n if (baseType === 'application/x-www-form-urlencoded') return 'FormUrlEncoded'\n const subtype = baseType.split('/').pop() ?? baseType\n const parts = subtype.split(/[^a-zA-Z0-9]+/).filter(Boolean)\n if (parts.length === 0) return 'Unknown'\n return parts.map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join('')\n}\n\n/**\n * Appends a content-type suffix to a base name, keeping a trailing `Data` segment last\n * (e.g. `AddPetData` + `Json` → `AddPetJsonData`, `AddPetStatus200` + `Xml` → `AddPetStatus200Xml`).\n */\nexport function getPerContentTypeName(baseName: string, suffix: string): string {\n if (baseName.endsWith('Data')) {\n return suffix.endsWith('Data') ? baseName.slice(0, -4) + suffix : `${baseName.slice(0, -4)}${suffix}Data`\n }\n return baseName + suffix\n}\n\nexport type ContentVariantInput = { contentType: string; schema?: ast.SchemaNode | null; keysToOmit?: Array<string> | null }\nexport type ContentVariant = { name: string; suffix: string; schema: ast.SchemaNode; keysToOmit?: Array<string> | null; contentType: string }\n\n/**\n * Resolves per-content-type variant names for a set of content entries, deduplicating suffix\n * collisions with a numeric counter. Entries without a schema are skipped. The returned `suffix` is\n * the final (possibly counter-augmented) value, so callers can derive parallel names in another\n * namespace (e.g. plugin-faker deriving the matching plugin-ts type name).\n */\nexport function resolveContentTypeVariants(entries: Array<ContentVariantInput>, baseName: string): Array<ContentVariant> {\n const usedNames = new Set<string>()\n return entries\n .filter((entry) => entry.schema)\n .map((entry) => {\n const baseSuffix = getContentTypeSuffix(entry.contentType)\n let suffix = baseSuffix\n let name = getPerContentTypeName(baseName, suffix)\n let counter = 2\n while (usedNames.has(name)) {\n suffix = `${baseSuffix}${counter++}`\n name = getPerContentTypeName(baseName, suffix)\n }\n usedNames.add(name)\n return { name, suffix, schema: entry.schema!, keysToOmit: entry.keysToOmit, contentType: entry.contentType }\n })\n}\n\nexport function buildRequestConfigType(node: ast.OperationNode, resolver: RequestConfigResolver): string {\n const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null\n const { isMultipleContentTypes, contentTypeUnion } = getContentTypeInfo(node)\n const configType = requestName ? `Partial<RequestConfig<${requestName}>>` : 'Partial<RequestConfig>'\n const configProps = ['client?: Client', isMultipleContentTypes ? `contentType?: ${contentTypeUnion}` : null].filter(Boolean).join('; ')\n\n return `${configType} & { ${configProps} }`\n}\n\nexport function buildOperationComments(node: ast.OperationNode, options: BuildOperationCommentsOptions = {}): Array<string> {\n const { link = 'pathTemplate', linkPosition = 'afterDeprecated', splitLines = false } = options\n const linkComment = getOperationLink(node, link)\n const comments =\n linkPosition === 'beforeDeprecated'\n ? [node.description && `@description ${node.description}`, node.summary && `@summary ${node.summary}`, linkComment, node.deprecated && '@deprecated']\n : [node.description && `@description ${node.description}`, node.summary && `@summary ${node.summary}`, node.deprecated && '@deprecated', linkComment]\n\n const filteredComments = comments.filter((comment): comment is string => Boolean(comment))\n\n if (!splitLines) {\n return filteredComments\n }\n\n return filteredComments.flatMap((text) => text.split(/\\r?\\n/).map((line) => line.trim())).filter((comment): comment is string => Boolean(comment))\n}\n\nexport function getOperationParameters(node: ast.OperationNode, options: { paramsCasing?: 'camelcase' } = {}): OperationParameterGroups {\n const params = ast.caseParams(node.parameters, options.paramsCasing)\n\n return {\n path: params.filter((param) => param.in === 'path'),\n query: params.filter((param) => param.in === 'query'),\n header: params.filter((param) => param.in === 'header'),\n cookie: params.filter((param) => param.in === 'cookie'),\n }\n}\n\nexport function getStatusCodeNumber(statusCode: ast.StatusCode | number | string): number | null {\n const code = Number(statusCode)\n\n return Number.isNaN(code) ? null : code\n}\n\nexport function isSuccessStatusCode(statusCode: ast.StatusCode | number | string): boolean {\n const code = getStatusCodeNumber(statusCode)\n\n return code !== null && code >= 200 && code < 300\n}\n\nexport function isErrorStatusCode(statusCode: ast.StatusCode | number | string): boolean {\n const code = getStatusCodeNumber(statusCode)\n\n return code !== null && code >= 400\n}\n\nexport function getSuccessResponses<TResponse extends ResponseLike>(responses: ReadonlyArray<TResponse>): Array<TResponse> {\n return responses.filter((response) => isSuccessStatusCode(response.statusCode))\n}\n\nexport function getOperationSuccessResponses(node: ast.OperationNode): Array<ast.ResponseNode> {\n return getSuccessResponses(node.responses)\n}\n\nexport function getPrimarySuccessResponse(node: ast.OperationNode): ast.ResponseNode | null {\n return getOperationSuccessResponses(node)[0] ?? null\n}\n\nexport function resolveErrorNames(node: ast.OperationNode, resolver: ResponseStatusNameResolver): string[] {\n return node.responses\n .filter((response) => isErrorStatusCode(response.statusCode))\n .map((response) => resolver.resolveResponseStatusName(node, response.statusCode))\n}\n\nexport function resolveSuccessNames(node: ast.OperationNode, resolver: ResponseStatusNameResolver): string[] {\n return node.responses\n .filter((response) => isSuccessStatusCode(response.statusCode))\n .map((response) => resolver.resolveResponseStatusName(node, response.statusCode))\n}\n\nexport function resolveStatusCodeNames(node: ast.OperationNode, resolver: ResponseStatusNameResolver): string[] {\n return node.responses.map((response) => resolver.resolveResponseStatusName(node, response.statusCode))\n}\n\nconst typeNamesByResolver = new WeakMap<OperationTypeNameResolver, Map<string, string[]>>()\n\nexport function resolveOperationTypeNames(\n node: ast.OperationNode,\n resolver: OperationTypeNameResolver,\n options: ResolveOperationTypeNameOptions = {},\n): string[] {\n const cacheKey = `${node.operationId}\\0${options.paramsCasing ?? ''}\\0${options.order ?? ''}\\0${options.responseStatusNames ?? ''}\\0${(options.exclude ?? []).join(',')}`\n let byResolver = typeNamesByResolver.get(resolver)\n if (byResolver) {\n const cached = byResolver.get(cacheKey)\n if (cached) return cached\n } else {\n byResolver = new Map()\n typeNamesByResolver.set(resolver, byResolver)\n }\n\n const { path, query, header } = getOperationParameters(node, { paramsCasing: options.paramsCasing })\n const responseStatusNames =\n options.responseStatusNames === 'error'\n ? resolveErrorNames(node, resolver)\n : options.responseStatusNames === false\n ? []\n : resolveStatusCodeNames(node, resolver)\n const exclude = new Set(options.exclude ?? [])\n const paramNames = [\n ...path.map((param) => resolver.resolvePathParamsName(node, param)),\n ...query.map((param) => resolver.resolveQueryParamsName(node, param)),\n ...header.map((param) => resolver.resolveHeaderParamsName(node, param)),\n ]\n const bodyAndResponseNames = [node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null, resolver.resolveResponseName(node)]\n const names =\n options.order === 'body-response-first'\n ? [...bodyAndResponseNames, ...paramNames, ...responseStatusNames]\n : [...paramNames, ...bodyAndResponseNames, ...responseStatusNames]\n\n const result = names.filter((name): name is string => Boolean(name) && !exclude.has(name as string))\n byResolver.set(cacheKey, result)\n return result\n}\n\nexport function resolveResponseTypes(node: ast.OperationNode, resolver: ResponseNameResolver): Array<[statusCode: number | 'default', typeName: string]> {\n const types: Array<[number | 'default', string]> = []\n\n for (const response of node.responses) {\n if (response.statusCode === 'default') {\n types.push(['default', resolver.resolveResponseName(node)])\n continue\n }\n\n const code = getStatusCodeNumber(response.statusCode)\n if (code === null) {\n continue\n }\n\n types.push([code, isSuccessStatusCode(code) ? resolver.resolveResponseName(node) : resolver.resolveResponseStatusName(node, response.statusCode)])\n }\n\n return types\n}\n\nexport function findSuccessStatusCode(responses: Array<{ statusCode: ast.StatusCode | number | string }>): ast.StatusCode | null {\n for (const response of responses) {\n if (isSuccessStatusCode(response.statusCode)) {\n return response.statusCode as ast.StatusCode\n }\n }\n\n return null\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 { getPerContentTypeName, resolveContentTypeVariants } from '@internals/shared'\nimport { 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 isEnumSchema = !!ast.narrowSchema(node, ast.schemaTypes.enum)\n const tsEnumType = pluginTs.options?.enumType\n const tsEnumTypeSuffix = pluginTs.options?.enumTypeSuffix ?? 'Key'\n const schemaTypeName =\n isEnumSchema && (tsEnumType === 'asConst' || tsEnumType === 'asPascalConst')\n ? tsResolver.resolveEnumKeyName({ name: schemaName }, tsEnumTypeSuffix)\n : tsResolver.resolveTypeName(schemaName)\n const meta = {\n name: resolver.resolveName(schemaName),\n file: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }),\n typeName: schemaTypeName,\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 type RenderUnit = { schema: ast.SchemaNode | null; name: string; typeName: string; description?: string; skipImportNames: Array<string> }\n\n // Expands a content array into render units: one faker per content type plus a union faker\n // (named `baseName`) when more than one content type carries a schema, else a single faker.\n function expandContentUnits(\n entries: Array<{ contentType: string; schema?: ast.SchemaNode | null }>,\n baseName: string,\n tsBaseName: string,\n description: string | undefined,\n decorate?: (schema: ast.SchemaNode) => ast.SchemaNode,\n ): Array<RenderUnit> {\n const withSchema = entries.filter((entry) => entry.schema)\n if (withSchema.length <= 1) {\n const primary = withSchema[0] ?? entries[0]\n if (!primary?.schema) return []\n return [{ schema: decorate ? decorate(primary.schema) : primary.schema, name: baseName, typeName: tsBaseName, description, skipImportNames: [] }]\n }\n const variants = resolveContentTypeVariants(entries, baseName)\n const unionSchema = ast.createSchema({ type: 'union', members: variants.map((variant) => ast.createSchema({ type: 'ref', name: variant.name })) })\n return [\n ...variants.map((variant) => ({\n schema: decorate ? decorate(variant.schema) : variant.schema,\n name: variant.name,\n typeName: getPerContentTypeName(tsBaseName, variant.suffix),\n description,\n skipImportNames: [],\n })),\n { schema: unionSchema, name: baseName, typeName: tsBaseName, description, skipImportNames: variants.map((variant) => variant.name) },\n ]\n }\n\n const responseUnits = node.responses.flatMap((response) =>\n expandContentUnits(\n response.content ?? [],\n resolver.resolveResponseStatusName(node, response.statusCode),\n tsResolver.resolveResponseStatusName(node, response.statusCode),\n response.description,\n ),\n )\n const dataUnits = expandContentUnits(\n node.requestBody?.content ?? [],\n resolver.resolveDataName(node),\n tsResolver.resolveDataName(node),\n node.requestBody?.description,\n (schema) => ({ ...schema, description: node.requestBody?.description ?? schema.description }),\n )\n const responseName = resolver.resolveResponseName(node)\n const localHelperNames = new Set([\n ...paramEntries.map((entry) => entry.name),\n ...responseUnits.map((unit) => unit.name),\n ...dataUnits.map((unit) => unit.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 {responseUnits.map((unit) =>\n renderEntry({\n schema: unit.schema,\n name: unit.name,\n typeName: unit.typeName,\n description: unit.description,\n skipImportNames: unit.skipImportNames,\n }),\n )}\n {dataUnits.map((unit) =>\n renderEntry({\n schema: unit.schema,\n name: unit.name,\n typeName: unit.typeName,\n description: unit.description,\n skipImportNames: unit.skipImportNames,\n }),\n )}\n {renderEntry({\n schema: buildResponseUnionSchema(node, resolver),\n name: responseName,\n typeName: tsResolver.resolveResponseName(node),\n skipImportNames: responseUnits.map((unit) => unit.name),\n })}\n </File>\n )\n },\n})\n"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { t as __name } from "./chunk-C0LytTxp.js";
|
|
2
|
+
import { o as PluginFaker } from "./printerFaker-DXS861Q0.js";
|
|
3
|
+
|
|
4
|
+
//#region src/generators/fakerGenerator.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Built-in generator for `@kubb/plugin-faker`. Emits one `createX` factory
|
|
7
|
+
* per schema in the spec plus per-operation request/response factories. Each
|
|
8
|
+
* factory returns a value matching the corresponding TypeScript type from
|
|
9
|
+
* `@kubb/plugin-ts`.
|
|
10
|
+
*/
|
|
11
|
+
declare const fakerGenerator: import("@kubb/core").Generator<PluginFaker, unknown>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { fakerGenerator as t };
|
|
14
|
+
//# sourceMappingURL=fakerGenerator-Duc28_FK.d.ts.map
|
package/dist/generators.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_fakerGenerator = require("./fakerGenerator-
|
|
2
|
+
const require_fakerGenerator = require("./fakerGenerator-CVOr0Pwm.cjs");
|
|
3
3
|
exports.fakerGenerator = require_fakerGenerator.fakerGenerator;
|
package/dist/generators.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as fakerGenerator } from "./fakerGenerator-
|
|
1
|
+
import { t as fakerGenerator } from "./fakerGenerator-Duc28_FK.js";
|
|
2
2
|
export { fakerGenerator };
|
package/dist/generators.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as fakerGenerator } from "./fakerGenerator-
|
|
1
|
+
import { t as fakerGenerator } from "./fakerGenerator-DNJ61yLj.js";
|
|
2
2
|
export { fakerGenerator };
|