@kubb/plugin-faker 5.0.0-beta.64 → 5.0.0-beta.74

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/dist/index.cjs CHANGED
@@ -2,13 +2,302 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_Faker = require("./Faker-Ds2xP2-k.cjs");
6
- const require_fakerGenerator = require("./fakerGenerator-BeKRKYuy.cjs");
7
- let _kubb_core = require("@kubb/core");
5
+ //#region \0rolldown/runtime.js
6
+ var __create = Object.create;
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
+ var __getOwnPropNames = Object.getOwnPropertyNames;
10
+ var __getProtoOf = Object.getPrototypeOf;
11
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
14
+ key = keys[i];
15
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
+ get: ((k) => from[k]).bind(null, key),
17
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
+ });
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
25
+ }) : target, mod));
26
+ //#endregion
27
+ let _kubb_ast_utils = require("@kubb/ast/utils");
8
28
  let _kubb_plugin_ts = require("@kubb/plugin-ts");
29
+ let _kubb_renderer_jsx = require("@kubb/renderer-jsx");
9
30
  let node_path = require("node:path");
10
- node_path = require_Faker.__toESM(node_path, 1);
31
+ node_path = __toESM(node_path, 1);
32
+ let _kubb_core = require("@kubb/core");
33
+ let _kubb_renderer_jsx_jsx_runtime = require("@kubb/renderer-jsx/jsx-runtime");
11
34
  let node_crypto = require("node:crypto");
35
+ //#region src/utils.ts
36
+ /**
37
+ * Returns the `@faker-js/faker` named export for a locale code.
38
+ *
39
+ * Without a locale, returns `'faker'` for the default English instance.
40
+ * With a locale, the language code is converted to upper case and joined with any region suffix.
41
+ *
42
+ * @example Default
43
+ * `localeToFakerImport() // 'faker'`
44
+ *
45
+ * @example Simple locale
46
+ * `localeToFakerImport('de') // 'fakerDE'`
47
+ *
48
+ * @example Compound locale
49
+ * `localeToFakerImport('de_AT') // 'fakerDE_AT'`
50
+ */
51
+ function localeToFakerImport(locale) {
52
+ if (!locale) return "faker";
53
+ const parts = locale.split("_");
54
+ parts[0] = parts[0].toUpperCase();
55
+ return `faker${parts.join("_")}`;
56
+ }
57
+ /**
58
+ * Determines if a schema node can be overridden during faker generation.
59
+ */
60
+ function canOverrideSchema(node) {
61
+ return new Set([
62
+ "array",
63
+ "tuple",
64
+ "object",
65
+ "intersection",
66
+ "union",
67
+ "enum",
68
+ "ref",
69
+ "string",
70
+ "email",
71
+ "url",
72
+ "uuid",
73
+ "number",
74
+ "integer",
75
+ "bigint",
76
+ "boolean",
77
+ "date",
78
+ "time",
79
+ "datetime",
80
+ "blob"
81
+ ]).has(node.type);
82
+ }
83
+ /**
84
+ * Resolves a parameter name based on its location (path, query, header, etc.) using the provided resolver.
85
+ */
86
+ function resolveParamNameByLocation(resolver, node, param) {
87
+ switch (param.in) {
88
+ case "path": return resolver.resolvePathParamsName(node, param);
89
+ case "query": return resolver.resolveQueryParamsName(node, param);
90
+ case "header": return resolver.resolveHeaderParamsName(node, param);
91
+ default: return resolver.resolveParamName(node, param);
92
+ }
93
+ }
94
+ function shouldInlineSingleResponseSchema(schema) {
95
+ return new Set([
96
+ "any",
97
+ "unknown",
98
+ "void",
99
+ "null",
100
+ "array",
101
+ "tuple",
102
+ "string",
103
+ "email",
104
+ "url",
105
+ "uuid",
106
+ "number",
107
+ "integer",
108
+ "bigint",
109
+ "boolean",
110
+ "date",
111
+ "time",
112
+ "datetime",
113
+ "blob",
114
+ "enum",
115
+ "union"
116
+ ]).has(schema.type);
117
+ }
118
+ /**
119
+ * Builds a response schema as a union of all response statuses.
120
+ * Returns null if no responses are provided, or embeds single simple responses inline.
121
+ */
122
+ function buildResponseUnionSchema(node, resolver) {
123
+ const responses = node.responses.filter((response) => response.content?.[0]?.schema);
124
+ if (!responses.length) return null;
125
+ if (responses.length === 1) {
126
+ const schema = responses[0].content?.[0]?.schema;
127
+ if (schema && shouldInlineSingleResponseSchema(schema)) return schema;
128
+ return _kubb_core.ast.factory.createSchema({
129
+ type: "ref",
130
+ name: resolver.resolveResponseStatusName(node, responses[0].statusCode)
131
+ });
132
+ }
133
+ return _kubb_core.ast.factory.createSchema({
134
+ type: "union",
135
+ members: responses.map((response) => _kubb_core.ast.factory.createSchema({
136
+ type: "ref",
137
+ name: resolver.resolveResponseStatusName(node, response.statusCode)
138
+ }))
139
+ });
140
+ }
141
+ const SCALAR_TYPES$1 = new Set([
142
+ "string",
143
+ "email",
144
+ "url",
145
+ "uuid",
146
+ "number",
147
+ "integer",
148
+ "bigint",
149
+ "boolean",
150
+ "date",
151
+ "time",
152
+ "datetime",
153
+ "blob",
154
+ "enum"
155
+ ]);
156
+ const ARRAY_TYPES$1 = new Set(["array"]);
157
+ function toRelativeImportPath(from, to) {
158
+ const relativePath = node_path.posix.relative(node_path.posix.dirname(from), to);
159
+ return relativePath.startsWith("../") ? relativePath : `./${relativePath}`;
160
+ }
161
+ /**
162
+ * Resolves a type reference, determining if it needs an import statement or inline type reference.
163
+ * Takes into account whether the type can be overridden and the file paths.
164
+ */
165
+ function resolveTypeReference({ node, canOverride, name, typeName, filePath, typeFilePath }) {
166
+ const { usesTypeName } = resolveFakerTypeUsage(node, typeName, canOverride);
167
+ if (!usesTypeName) return { typeName };
168
+ if (name === typeName) return { typeName: `import('${toRelativeImportPath(filePath, typeFilePath)}').${typeName}` };
169
+ return {
170
+ importPath: typeFilePath,
171
+ typeName
172
+ };
173
+ }
174
+ /**
175
+ * Maps a schema node type to its corresponding scalar type representation.
176
+ * Returns the type name for enums or the base type (string, number, etc.) for primitives.
177
+ */
178
+ function getScalarType(node, typeName) {
179
+ switch (node.type) {
180
+ case "string":
181
+ case "email":
182
+ case "url":
183
+ case "uuid": return "string";
184
+ case "number":
185
+ case "integer": return "number";
186
+ case "bigint": return "bigint";
187
+ case "boolean": return "boolean";
188
+ case "date":
189
+ case "time": return node.representation === "date" ? "Date" : "string";
190
+ case "datetime": return "string";
191
+ case "blob": return "Blob";
192
+ case "enum": return typeName;
193
+ default: return typeName;
194
+ }
195
+ }
196
+ /**
197
+ * Resolves faker type usage information for a schema.
198
+ * Determines the data type, return type, and whether it uses the type name.
199
+ */
200
+ function resolveFakerTypeUsage(node, typeName, canOverride) {
201
+ const isArray = ARRAY_TYPES$1.has(node.type);
202
+ const isTuple = node.type === "tuple";
203
+ const isScalar = SCALAR_TYPES$1.has(node.type);
204
+ let dataType = `Partial<${typeName}>`;
205
+ if (isArray || isTuple || node.type === "union" || node.type === "enum") dataType = typeName;
206
+ if (isScalar) dataType = getScalarType(node, typeName);
207
+ let returnType = canOverride ? typeName : null;
208
+ if (isScalar) returnType = getScalarType(node, typeName);
209
+ return {
210
+ dataType,
211
+ returnType,
212
+ usesTypeName: dataType.includes(typeName) || Boolean(returnType?.includes(typeName))
213
+ };
214
+ }
215
+ //#endregion
216
+ //#region src/components/Faker.tsx
217
+ const OBJECT_TYPES = new Set(["object", "intersection"]);
218
+ const ARRAY_TYPES = new Set(["array"]);
219
+ const SCALAR_TYPES = new Set([
220
+ "string",
221
+ "email",
222
+ "url",
223
+ "uuid",
224
+ "number",
225
+ "integer",
226
+ "bigint",
227
+ "boolean",
228
+ "date",
229
+ "time",
230
+ "datetime",
231
+ "blob",
232
+ "enum"
233
+ ]);
234
+ const declarationPrinter = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
235
+ function Faker({ node, description, name, typeName, printer, seed, canOverride }) {
236
+ const fakerText = printer.print(node) ?? "undefined";
237
+ const isArray = ARRAY_TYPES.has(node.type);
238
+ const isObject = OBJECT_TYPES.has(node.type);
239
+ const isTuple = node.type === "tuple";
240
+ const isScalar = SCALAR_TYPES.has(node.type);
241
+ const useGenericOverride = canOverride && isObject;
242
+ const fakerTextWithOverride = (() => {
243
+ if (canOverride && isTuple) return `data || ${fakerText}`;
244
+ if (canOverride && isArray) return `[\n ...${fakerText},\n ...(data || [])\n]`;
245
+ if (canOverride && isScalar) return `data ?? ${fakerText}`;
246
+ return fakerText;
247
+ })();
248
+ const { dataType, returnType: resolvedReturnType } = resolveFakerTypeUsage(node, typeName, canOverride);
249
+ if (!useGenericOverride) {
250
+ const params = (0, _kubb_plugin_ts.createFunctionParameters)({ params: [(0, _kubb_plugin_ts.createFunctionParameter)({
251
+ name: /\bdata\b/.test(fakerTextWithOverride) ? "data" : "_data",
252
+ type: dataType,
253
+ optional: true
254
+ })] });
255
+ const paramsSignature = declarationPrinter.print(params) ?? "";
256
+ const returnType = resolvedReturnType;
257
+ const returnExpression = node.type === "ref" && canOverride && returnType ? `${fakerTextWithOverride} as ${returnType}` : fakerTextWithOverride;
258
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
259
+ name,
260
+ isExportable: true,
261
+ isIndexable: true,
262
+ children: /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.Function, {
263
+ export: true,
264
+ name,
265
+ JSDoc: { comments: description ? [`@description ${(0, _kubb_ast_utils.jsStringEscape)(description)}`] : [] },
266
+ params: canOverride ? paramsSignature : void 0,
267
+ returnType: returnType ?? void 0,
268
+ children: [seed ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [`faker.seed(${JSON.stringify(seed)})`, /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)("br", {})] }) : void 0, `return ${returnExpression}`]
269
+ })
270
+ });
271
+ }
272
+ const functionSignature = `${description ? `/**\n * @description ${(0, _kubb_ast_utils.jsStringEscape)(description)}\n */\n ` : ""}export function ${name}<TData extends Partial<${typeName}> = object>(data?: TData)`;
273
+ const seedCode = seed ? `faker.seed(${JSON.stringify(seed)})\n ` : "";
274
+ const { cyclicSchemas, schemaName } = printer.options;
275
+ const functionBody = node.type === "object" && !!cyclicSchemas && (node.properties ?? []).some((p) => (0, _kubb_ast_utils.containsCircularRef)(p.schema, {
276
+ circularSchemas: cyclicSchemas,
277
+ excludeName: schemaName
278
+ })) ? `{
279
+ ${seedCode}const defaultFakeData = ${fakerText}
280
+ if (data) {
281
+ for (const [key, value] of Object.entries(data)) {
282
+ Object.defineProperty(defaultFakeData, key, { value, configurable: true, writable: true, enumerable: true })
283
+ }
284
+ }
285
+ return defaultFakeData as Omit<typeof defaultFakeData, keyof TData> & TData
286
+ }` : `{
287
+ ${seedCode}const defaultFakeData = ${fakerText}
288
+ return {
289
+ ...defaultFakeData,
290
+ ...(data || {}),
291
+ } as Omit<typeof defaultFakeData, keyof TData> & TData
292
+ }`;
293
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File.Source, {
294
+ name,
295
+ isExportable: true,
296
+ isIndexable: true,
297
+ children: [functionSignature, functionBody]
298
+ });
299
+ }
300
+ //#endregion
12
301
  //#region ../../internals/utils/src/casing.ts
13
302
  /**
14
303
  * Shared implementation for camelCase and PascalCase conversion.
@@ -61,6 +350,51 @@ function toFilePath(name, caseLast = camelCase) {
61
350
  return parts.map((part, i) => i === parts.length - 1 ? caseLast(part) : camelCase(part)).filter(Boolean).join("/");
62
351
  }
63
352
  //#endregion
353
+ //#region ../../internals/utils/src/imports.ts
354
+ function escapeRegExp(value) {
355
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
356
+ }
357
+ function getImportNames(entry) {
358
+ return (Array.isArray(entry.name) ? entry.name : [entry.name]).map((name) => {
359
+ if (typeof name === "string") return name;
360
+ return name.name ?? name.propertyName;
361
+ }).filter((name) => Boolean(name));
362
+ }
363
+ function filterUsedImports(imports, text, skipImportNames = []) {
364
+ const skip = new Set(skipImportNames);
365
+ return imports.filter((entry) => {
366
+ return getImportNames(entry).some((name) => {
367
+ if (skip.has(name)) return false;
368
+ return new RegExp(`\\b${escapeRegExp(name)}\\b(?=\\s*\\()`).test(text);
369
+ });
370
+ });
371
+ }
372
+ function aliasConflictingImports(imports, reservedNames) {
373
+ const reservedNameSet = new Set(reservedNames);
374
+ const aliases = /* @__PURE__ */ new Map();
375
+ return {
376
+ imports: imports.map((entry) => {
377
+ const aliasedNames = (Array.isArray(entry.name) ? entry.name : [entry.name]).map((item) => {
378
+ if (typeof item !== "string" || !reservedNameSet.has(item)) return item;
379
+ const alias = `${item}Schema`;
380
+ aliases.set(item, alias);
381
+ return {
382
+ propertyName: item,
383
+ name: alias
384
+ };
385
+ });
386
+ return aliasedNames.some((item) => typeof item === "object" && item.name) ? {
387
+ ...entry,
388
+ name: aliasedNames
389
+ } : entry;
390
+ }),
391
+ aliases
392
+ };
393
+ }
394
+ function rewriteAliasedImports(text, aliases) {
395
+ return Array.from(aliases).reduce((acc, [name, alias]) => acc.replace(new RegExp(`\\b${escapeRegExp(name)}\\b`, "g"), alias), text);
396
+ }
397
+ //#endregion
64
398
  //#region ../../internals/utils/src/reserved.ts
65
399
  /**
66
400
  * JavaScript and Java reserved words.
@@ -184,6 +518,77 @@ function ensureValidVarName(name) {
184
518
  return `_${name}`;
185
519
  }
186
520
  //#endregion
521
+ //#region ../../internals/shared/src/params.ts
522
+ const caseParamsCache = /* @__PURE__ */ new WeakMap();
523
+ /**
524
+ * Applies camelCase to parameter names and returns a new array without mutating the input.
525
+ *
526
+ * Run it before handing parameters to schema builders so output property keys get the right casing
527
+ * while `OperationNode.parameters` stays intact for other consumers. When `casing` is unset, the
528
+ * original array is returned unchanged. Results are cached per input array.
529
+ */
530
+ function caseParams(params, casing) {
531
+ if (!casing) return params;
532
+ const cached = caseParamsCache.get(params);
533
+ if (cached) return cached;
534
+ const result = params.map((param) => ({
535
+ ...param,
536
+ name: camelCase(param.name)
537
+ }));
538
+ caseParamsCache.set(params, result);
539
+ return result;
540
+ }
541
+ //#endregion
542
+ //#region ../../internals/shared/src/operation.ts
543
+ /**
544
+ * Maps a content type to the PascalCase suffix used to name per-content-type variants
545
+ * (e.g. `application/json` → `Json`, `application/xml` → `Xml`, `multipart/form-data` → `FormData`).
546
+ */
547
+ function getContentTypeSuffix(contentType) {
548
+ const baseType = contentType.split(";")[0].trim();
549
+ if (baseType === "application/json") return "Json";
550
+ if (baseType === "multipart/form-data") return "FormData";
551
+ if (baseType === "application/x-www-form-urlencoded") return "FormUrlEncoded";
552
+ const parts = (baseType.split("/").pop() ?? baseType).split(/[^a-zA-Z0-9]+/).filter(Boolean);
553
+ if (parts.length === 0) return "Unknown";
554
+ return parts.map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("");
555
+ }
556
+ /**
557
+ * Appends a content-type suffix to a base name, keeping a trailing `Data` segment last
558
+ * (e.g. `AddPetData` + `Json` → `AddPetJsonData`, `AddPetStatus200` + `Xml` → `AddPetStatus200Xml`).
559
+ */
560
+ function getPerContentTypeName(baseName, suffix) {
561
+ if (baseName.endsWith("Data")) return suffix.endsWith("Data") ? baseName.slice(0, -4) + suffix : `${baseName.slice(0, -4)}${suffix}Data`;
562
+ return baseName + suffix;
563
+ }
564
+ /**
565
+ * Resolves per-content-type variant names for a set of content entries, deduplicating suffix
566
+ * collisions with a numeric counter. Entries without a schema are skipped. The returned `suffix` is
567
+ * the final (possibly counter-augmented) value, so callers can derive parallel names in another
568
+ * namespace (e.g. plugin-faker deriving the matching plugin-ts type name).
569
+ */
570
+ function resolveContentTypeVariants(entries, baseName) {
571
+ const usedNames = /* @__PURE__ */ new Set();
572
+ return entries.filter((entry) => entry.schema).map((entry) => {
573
+ const baseSuffix = getContentTypeSuffix(entry.contentType);
574
+ let suffix = baseSuffix;
575
+ let name = getPerContentTypeName(baseName, suffix);
576
+ let counter = 2;
577
+ while (usedNames.has(name)) {
578
+ suffix = `${baseSuffix}${counter++}`;
579
+ name = getPerContentTypeName(baseName, suffix);
580
+ }
581
+ usedNames.add(name);
582
+ return {
583
+ name,
584
+ suffix,
585
+ schema: entry.schema,
586
+ keysToOmit: entry.keysToOmit,
587
+ contentType: entry.contentType
588
+ };
589
+ });
590
+ }
591
+ //#endregion
187
592
  //#region ../../internals/shared/src/group.ts
188
593
  /**
189
594
  * Builds the `group` config a Kubb plugin passes to `ctx.setOptions`, applying the
@@ -215,6 +620,560 @@ function createGroupConfig(group) {
215
620
  };
216
621
  }
217
622
  //#endregion
623
+ //#region src/printers/printerFaker.ts
624
+ const fakerKeywordMapper = {
625
+ any: () => "undefined",
626
+ unknown: () => "undefined",
627
+ void: () => "undefined",
628
+ number: (min, max) => {
629
+ if (max !== void 0 && min !== void 0) return `faker.number.float({ min: ${min}, max: ${max} })`;
630
+ if (max !== void 0) return `faker.number.float({ max: ${max} })`;
631
+ if (min !== void 0) return `faker.number.float({ min: ${min} })`;
632
+ return "faker.number.float()";
633
+ },
634
+ integer: (min, max) => {
635
+ if (max !== void 0 && min !== void 0) return `faker.number.int({ min: ${min}, max: ${max} })`;
636
+ if (max !== void 0) return `faker.number.int({ max: ${max} })`;
637
+ if (min !== void 0) return `faker.number.int({ min: ${min} })`;
638
+ return "faker.number.int()";
639
+ },
640
+ bigint: () => "faker.number.bigInt()",
641
+ string: (min, max) => {
642
+ if (max !== void 0 && min !== void 0) return `faker.string.alpha({ length: { min: ${min}, max: ${max} } })`;
643
+ if (max !== void 0) return `faker.string.alpha({ length: ${max} })`;
644
+ if (min !== void 0) return `faker.string.alpha({ length: ${min} })`;
645
+ return "faker.string.alpha()";
646
+ },
647
+ boolean: () => "faker.datatype.boolean()",
648
+ null: () => "null",
649
+ array: (items = [], min, max) => {
650
+ if (items.length > 1) return `faker.helpers.arrayElements([${items.join(", ")}])`;
651
+ const item = items.at(0);
652
+ if (min !== void 0 && max !== void 0) return `faker.helpers.multiple(() => (${item}), { count: { min: ${min}, max: ${max} }})`;
653
+ if (min !== void 0) return `faker.helpers.multiple(() => (${item}), { count: ${min} })`;
654
+ if (max !== void 0) return `faker.helpers.multiple(() => (${item}), { count: { min: 0, max: ${max} }})`;
655
+ return `faker.helpers.multiple(() => (${item}))`;
656
+ },
657
+ tuple: (items = []) => `[${items.join(", ")}]`,
658
+ enum: (items = [], type = "any") => `faker.helpers.arrayElement<${type}>([${items.join(", ")}])`,
659
+ union: (items = []) => `faker.helpers.arrayElement<any>([${items.join(", ")}])`,
660
+ datetime: () => "faker.date.anytime().toISOString()",
661
+ date: (representation = "string", parser = "faker") => {
662
+ if (representation === "string") {
663
+ if (parser !== "faker") return `${parser}(faker.date.anytime()).format("YYYY-MM-DD")`;
664
+ return "faker.date.anytime().toISOString().substring(0, 10)";
665
+ }
666
+ if (parser !== "faker") throw new Error(`type '${representation}' and parser '${parser}' can not work together`);
667
+ return "faker.date.anytime()";
668
+ },
669
+ time: (representation = "string", parser = "faker") => {
670
+ if (representation === "string") {
671
+ if (parser !== "faker") return `${parser}(faker.date.anytime()).format("HH:mm:ss")`;
672
+ return "faker.date.anytime().toISOString().substring(11, 19)";
673
+ }
674
+ if (parser !== "faker") throw new Error(`type '${representation}' and parser '${parser}' can not work together`);
675
+ return "faker.date.anytime()";
676
+ },
677
+ uuid: () => "faker.string.uuid()",
678
+ url: () => "faker.internet.url()",
679
+ and: (items = []) => {
680
+ if (items.length === 0) return "{}";
681
+ if (items.length === 1) return items[0] ?? "{}";
682
+ return `{...${items.join(", ...")}}`;
683
+ },
684
+ matches: (value = "", regexGenerator = "faker") => {
685
+ if (regexGenerator === "randexp") return `${(0, _kubb_ast_utils.toRegExpString)(value, "RandExp")}.gen()`;
686
+ return `faker.helpers.fromRegExp("${value}")`;
687
+ },
688
+ email: () => "faker.internet.email()",
689
+ blob: () => "faker.image.url() as unknown as Blob"
690
+ };
691
+ function getEnumValues(node) {
692
+ if (node.namedEnumValues?.length) return node.namedEnumValues.map((item) => item.value);
693
+ return node.enumValues ?? [];
694
+ }
695
+ function parseEnumValue(value) {
696
+ if (typeof value === "string") return (0, _kubb_ast_utils.stringify)(value);
697
+ return value;
698
+ }
699
+ /** Reads the discriminator literal off a variant, or `undefined` when it can't be determined. */
700
+ function getDiscriminatorValue(member, discriminatorPropertyName) {
701
+ const prop = _kubb_core.ast.narrowSchema(member, "object")?.properties?.find((p) => p.name === discriminatorPropertyName);
702
+ const enumNode = prop ? _kubb_core.ast.narrowSchema(prop.schema, "enum") : null;
703
+ return enumNode ? getEnumValues(enumNode)[0] : void 0;
704
+ }
705
+ /**
706
+ * Type expression for an object property's value, indexed off the parent `typeName`.
707
+ *
708
+ * In a union (`oneOf`), a key that only some branches declare turns a plain `NonNullable<T>[K]`
709
+ * into a TS2339 error, so union members guard the access. The breakdown is below.
710
+ */
711
+ function indexedTypeName(typeName, propertyName, nestedInUnion) {
712
+ const key = JSON.stringify(propertyName);
713
+ return nestedInUnion ? `(NonNullable<${typeName}> & Record<${key}, unknown>)[${key}]` : `NonNullable<${typeName}>[${key}]`;
714
+ }
715
+ /**
716
+ * Creates a Faker printer that generates mock data generation code from schema nodes.
717
+ * Handles circular references gracefully by emitting memoizing getters for cyclic properties.
718
+ */
719
+ const printerFaker = _kubb_core.ast.createPrinter((options) => {
720
+ const printNested = (node, overrideOptions = {}) => {
721
+ return printerFaker({
722
+ ...options,
723
+ ...overrideOptions,
724
+ nodes: options.nodes
725
+ }).print(node) ?? "undefined";
726
+ };
727
+ return {
728
+ name: "faker",
729
+ options,
730
+ nodes: {
731
+ any: () => fakerKeywordMapper.any(),
732
+ unknown: () => fakerKeywordMapper.unknown(),
733
+ void: () => fakerKeywordMapper.void(),
734
+ boolean: () => fakerKeywordMapper.boolean(),
735
+ null: () => fakerKeywordMapper.null(),
736
+ string(node) {
737
+ if (node.pattern) return fakerKeywordMapper.matches(node.pattern, this.options.regexGenerator);
738
+ return fakerKeywordMapper.string(node.min, node.max);
739
+ },
740
+ email: () => fakerKeywordMapper.email(),
741
+ url: () => fakerKeywordMapper.url(),
742
+ uuid: () => fakerKeywordMapper.uuid(),
743
+ number(node) {
744
+ return fakerKeywordMapper.number(node.min, node.max);
745
+ },
746
+ integer(node) {
747
+ return fakerKeywordMapper.integer(node.min, node.max);
748
+ },
749
+ bigint: () => fakerKeywordMapper.bigint(),
750
+ blob: () => fakerKeywordMapper.blob(),
751
+ datetime: () => fakerKeywordMapper.datetime(),
752
+ date(node) {
753
+ return fakerKeywordMapper.date(node.representation ?? "string", this.options.dateParser);
754
+ },
755
+ time(node) {
756
+ return fakerKeywordMapper.time(node.representation ?? "string", this.options.dateParser);
757
+ },
758
+ ref(node) {
759
+ const refName = node.ref ? (0, _kubb_ast_utils.extractRefName)(node.ref) ?? node.name ?? node.schema?.name : node.name ?? node.schema?.name;
760
+ if (!refName) throw new Error("Name not defined for ref node");
761
+ if (this.options.schemaName && refName === this.options.schemaName) return "undefined as any";
762
+ const resolvedName = node.ref ? this.options.resolver.resolveName(refName) : refName;
763
+ if (!this.options.nestedInObject) return `${resolvedName}(data)`;
764
+ return `${resolvedName}()`;
765
+ },
766
+ enum(node) {
767
+ return fakerKeywordMapper.enum(getEnumValues(node).map(parseEnumValue), this.options.typeName);
768
+ },
769
+ union(node) {
770
+ const { discriminatorPropertyName } = node;
771
+ const baseTypeName = this.options.typeName;
772
+ const items = (0, _kubb_ast_utils.mapSchemaMembers)(node, (member) => {
773
+ const value = discriminatorPropertyName ? getDiscriminatorValue(member, discriminatorPropertyName) : void 0;
774
+ if (baseTypeName && value !== void 0) return printNested(member, {
775
+ typeName: `Extract<NonNullable<${baseTypeName}>, { ${JSON.stringify(discriminatorPropertyName)}: ${parseEnumValue(value)} }>`,
776
+ nestedInObject: true
777
+ });
778
+ return printNested(member, {
779
+ typeName: baseTypeName,
780
+ nestedInObject: true,
781
+ nestedInUnion: true
782
+ });
783
+ }).map(({ output }) => output).filter((item) => Boolean(item));
784
+ return fakerKeywordMapper.union(items);
785
+ },
786
+ intersection(node) {
787
+ const items = (0, _kubb_ast_utils.mapSchemaMembers)(node, (member) => printNested(member, { nestedInObject: true })).map(({ output }) => output).filter((item) => Boolean(item) && item !== "undefined");
788
+ return fakerKeywordMapper.and(items);
789
+ },
790
+ array(node) {
791
+ const items = (0, _kubb_ast_utils.mapSchemaItems)(node, (member) => printNested(member, {
792
+ typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[number]` : void 0,
793
+ nestedInObject: true
794
+ })).map(({ output }) => output).filter((item) => Boolean(item));
795
+ return fakerKeywordMapper.array(items, node.min, node.max);
796
+ },
797
+ tuple(node) {
798
+ const items = (node.items ?? []).map((member, index) => printNested(member, {
799
+ typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${index}]` : void 0,
800
+ nestedInObject: true
801
+ })).filter((item) => Boolean(item));
802
+ return fakerKeywordMapper.tuple(items);
803
+ },
804
+ object(node) {
805
+ const cyclicSchemas = this.options.cyclicSchemas;
806
+ return (0, _kubb_ast_utils.buildObject)((node.properties ?? []).map((property) => {
807
+ if (this.options.mapper && Object.hasOwn(this.options.mapper, property.name)) return `${(0, _kubb_ast_utils.objectKey)(property.name)}: ${this.options.mapper[property.name]}`;
808
+ const value = printNested(property.schema, {
809
+ typeName: this.options.typeName ? indexedTypeName(this.options.typeName, property.name, this.options.nestedInUnion) : void 0,
810
+ nestedInObject: true
811
+ }) ?? "undefined";
812
+ if (cyclicSchemas && (0, _kubb_ast_utils.containsCircularRef)(property.schema, {
813
+ circularSchemas: cyclicSchemas,
814
+ excludeName: this.options.schemaName
815
+ })) return `get ${(0, _kubb_ast_utils.objectKey)(property.name)}() { const _value = ${value}; Object.defineProperty(this, ${JSON.stringify(property.name)}, { value: _value, configurable: true, writable: true, enumerable: true }); return _value }`;
816
+ return `${(0, _kubb_ast_utils.objectKey)(property.name)}: ${value}`;
817
+ }));
818
+ },
819
+ ...options.nodes
820
+ },
821
+ print(node) {
822
+ return this.transform(node) ?? null;
823
+ }
824
+ };
825
+ });
826
+ //#endregion
827
+ //#region src/generators/fakerGenerator.tsx
828
+ /**
829
+ * Built-in generator for `@kubb/plugin-faker`. Emits one `createX` factory
830
+ * per schema in the spec plus per-operation request/response factories. Each
831
+ * factory returns a value matching the corresponding TypeScript type from
832
+ * `@kubb/plugin-ts`.
833
+ */
834
+ const fakerGenerator = (0, _kubb_core.defineGenerator)({
835
+ name: "faker",
836
+ renderer: _kubb_renderer_jsx.jsxRenderer,
837
+ schema(node, ctx) {
838
+ const { adapter, config, resolver, root } = ctx;
839
+ const { output, group, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options;
840
+ const pluginTs = ctx.driver.getPlugin(_kubb_plugin_ts.pluginTsName);
841
+ if (!node.name || !pluginTs) return;
842
+ const tsResolver = ctx.driver.getResolver(_kubb_plugin_ts.pluginTsName);
843
+ const schemaName = node.name;
844
+ const isEnumSchema = !!_kubb_core.ast.narrowSchema(node, _kubb_core.ast.schemaTypes.enum);
845
+ const tsEnumType = pluginTs.options?.enum?.type;
846
+ const tsEnumTypeSuffix = pluginTs.options?.enum?.typeSuffix ?? "Key";
847
+ const schemaTypeName = isEnumSchema && tsEnumType === "asConst" ? tsResolver.resolveEnumKeyName({ name: schemaName }, tsEnumTypeSuffix) : tsResolver.resolveTypeName(schemaName);
848
+ const meta = {
849
+ name: resolver.resolveName(schemaName),
850
+ file: resolver.resolveFile({
851
+ name: schemaName,
852
+ extname: ".ts"
853
+ }, {
854
+ root,
855
+ output,
856
+ group: group ?? void 0
857
+ }),
858
+ typeName: schemaTypeName,
859
+ typeFile: tsResolver.resolveFile({
860
+ name: schemaName,
861
+ extname: ".ts"
862
+ }, {
863
+ root,
864
+ output: pluginTs.options?.output ?? output,
865
+ group: pluginTs.options?.group ?? void 0
866
+ })
867
+ };
868
+ const canOverride = canOverrideSchema(node);
869
+ const cyclicSchemas = new Set(ctx.meta.circularNames);
870
+ const printerInstance = printerFaker({
871
+ resolver,
872
+ schemaName,
873
+ typeName: meta.typeName,
874
+ dateParser,
875
+ regexGenerator,
876
+ mapper,
877
+ nodes: printer?.nodes,
878
+ cyclicSchemas
879
+ });
880
+ const fakerText = printerInstance.print(node) ?? "undefined";
881
+ const typeReference = resolveTypeReference({
882
+ node,
883
+ canOverride,
884
+ name: meta.name,
885
+ typeName: meta.typeName,
886
+ filePath: meta.file.path,
887
+ typeFilePath: meta.typeFile.path
888
+ });
889
+ const usedImports = filterUsedImports(adapter.getImports(node, (schemaName) => ({
890
+ name: resolver.resolveName(schemaName),
891
+ path: resolver.resolveFile({
892
+ name: schemaName,
893
+ extname: ".ts"
894
+ }, {
895
+ root,
896
+ output,
897
+ group: group ?? void 0
898
+ }).path
899
+ })), fakerText);
900
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
901
+ baseName: meta.file.baseName,
902
+ path: meta.file.path,
903
+ meta: meta.file.meta,
904
+ banner: resolver.resolveBanner(ctx.meta, {
905
+ output,
906
+ config,
907
+ file: {
908
+ path: meta.file.path,
909
+ baseName: meta.file.baseName
910
+ }
911
+ }),
912
+ footer: resolver.resolveFooter(ctx.meta, {
913
+ output,
914
+ config,
915
+ file: {
916
+ path: meta.file.path,
917
+ baseName: meta.file.baseName
918
+ }
919
+ }),
920
+ children: [
921
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
922
+ name: locale ? [{
923
+ propertyName: localeToFakerImport(locale),
924
+ name: "faker"
925
+ }] : ["faker"],
926
+ path: "@faker-js/faker"
927
+ }),
928
+ regexGenerator === "randexp" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
929
+ name: "RandExp",
930
+ path: "randexp"
931
+ }),
932
+ dateParser !== "faker" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
933
+ path: dateParser,
934
+ name: dateParser
935
+ }),
936
+ typeReference.importPath && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
937
+ isTypeOnly: true,
938
+ root: meta.file.path,
939
+ path: typeReference.importPath,
940
+ name: [meta.typeName]
941
+ }),
942
+ usedImports.map((imp) => /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
943
+ root: meta.file.path,
944
+ path: imp.path,
945
+ name: imp.name
946
+ }, [
947
+ schemaName,
948
+ imp.path,
949
+ imp.name
950
+ ].join("-"))),
951
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(Faker, {
952
+ name: meta.name,
953
+ typeName: typeReference.typeName,
954
+ description: node.description,
955
+ node,
956
+ printer: printerInstance,
957
+ seed,
958
+ canOverride
959
+ })
960
+ ]
961
+ });
962
+ },
963
+ operation(node, ctx) {
964
+ const { adapter, config, resolver, root } = ctx;
965
+ const { output, group, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options;
966
+ const pluginTs = ctx.driver.getPlugin(_kubb_plugin_ts.pluginTsName);
967
+ if (!pluginTs) return;
968
+ const tsResolver = ctx.driver.getResolver(_kubb_plugin_ts.pluginTsName);
969
+ const paramEntries = caseParams(node.parameters, "camelcase").map((param) => ({
970
+ param,
971
+ name: resolveParamNameByLocation(resolver, node, param),
972
+ typeName: resolveParamNameByLocation(tsResolver, node, param)
973
+ }));
974
+ function expandContentUnits(entries, baseName, tsBaseName, description, decorate) {
975
+ const withSchema = entries.filter((entry) => entry.schema);
976
+ if (withSchema.length <= 1) {
977
+ const primary = withSchema[0] ?? entries[0];
978
+ if (!primary?.schema) return [];
979
+ return [{
980
+ schema: decorate ? decorate(primary.schema) : primary.schema,
981
+ name: baseName,
982
+ typeName: tsBaseName,
983
+ description,
984
+ skipImportNames: []
985
+ }];
986
+ }
987
+ const variants = resolveContentTypeVariants(entries, baseName);
988
+ const unionSchema = _kubb_core.ast.factory.createSchema({
989
+ type: "union",
990
+ members: variants.map((variant) => _kubb_core.ast.factory.createSchema({
991
+ type: "ref",
992
+ name: variant.name
993
+ }))
994
+ });
995
+ return [...variants.map((variant) => ({
996
+ schema: decorate ? decorate(variant.schema) : variant.schema,
997
+ name: variant.name,
998
+ typeName: getPerContentTypeName(tsBaseName, variant.suffix),
999
+ description,
1000
+ skipImportNames: []
1001
+ })), {
1002
+ schema: unionSchema,
1003
+ name: baseName,
1004
+ typeName: tsBaseName,
1005
+ description,
1006
+ skipImportNames: variants.map((variant) => variant.name)
1007
+ }];
1008
+ }
1009
+ const responseUnits = node.responses.flatMap((response) => expandContentUnits(response.content ?? [], resolver.resolveResponseStatusName(node, response.statusCode), tsResolver.resolveResponseStatusName(node, response.statusCode), response.description));
1010
+ const dataUnits = expandContentUnits(node.requestBody?.content ?? [], resolver.resolveDataName(node), tsResolver.resolveDataName(node), node.requestBody?.description, (schema) => ({
1011
+ ...schema,
1012
+ description: node.requestBody?.description ?? schema.description
1013
+ }));
1014
+ const responseName = resolver.resolveResponseName(node);
1015
+ const localHelperNames = new Set([
1016
+ ...paramEntries.map((entry) => entry.name),
1017
+ ...responseUnits.map((unit) => unit.name),
1018
+ ...dataUnits.map((unit) => unit.name),
1019
+ responseName
1020
+ ]);
1021
+ const cyclicSchemas = new Set(ctx.meta.circularNames);
1022
+ const meta = {
1023
+ file: resolver.resolveFile({
1024
+ name: node.operationId,
1025
+ extname: ".ts",
1026
+ tag: node.tags[0] ?? "default",
1027
+ path: node.path
1028
+ }, {
1029
+ root,
1030
+ output,
1031
+ group: group ?? void 0
1032
+ }),
1033
+ typeFile: tsResolver.resolveFile({
1034
+ name: node.operationId,
1035
+ extname: ".ts",
1036
+ tag: node.tags[0] ?? "default",
1037
+ path: node.path
1038
+ }, {
1039
+ root,
1040
+ output: pluginTs.options?.output ?? output,
1041
+ group: pluginTs.options?.group ?? void 0
1042
+ })
1043
+ };
1044
+ function resolveMockImports(schema) {
1045
+ return adapter.getImports(schema, (schemaName) => ({
1046
+ name: resolver.resolveName(schemaName),
1047
+ path: resolver.resolveFile({
1048
+ name: schemaName,
1049
+ extname: ".ts"
1050
+ }, {
1051
+ root,
1052
+ output,
1053
+ group: group ?? void 0
1054
+ }).path
1055
+ })).filter((entry) => entry.path !== meta.file.path);
1056
+ }
1057
+ function renderEntry({ schema, name, typeName, description, skipImportNames = [] }) {
1058
+ if (!schema) return null;
1059
+ const canOverride = canOverrideSchema(schema);
1060
+ const printerInstance = printerFaker({
1061
+ resolver,
1062
+ schemaName: name,
1063
+ typeName,
1064
+ dateParser,
1065
+ regexGenerator,
1066
+ mapper,
1067
+ nodes: printer?.nodes,
1068
+ cyclicSchemas
1069
+ });
1070
+ const fakerText = printerInstance.print(schema) ?? "undefined";
1071
+ const { imports, aliases } = aliasConflictingImports(filterUsedImports(resolveMockImports(schema), fakerText, skipImportNames), localHelperNames);
1072
+ const rewrittenFakerText = rewriteAliasedImports(fakerText, aliases);
1073
+ const typeReference = resolveTypeReference({
1074
+ node: schema,
1075
+ canOverride,
1076
+ name,
1077
+ typeName,
1078
+ filePath: meta.file.path,
1079
+ typeFilePath: meta.typeFile.path
1080
+ });
1081
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
1082
+ typeReference.importPath && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1083
+ isTypeOnly: true,
1084
+ root: meta.file.path,
1085
+ path: typeReference.importPath,
1086
+ name: [typeName]
1087
+ }),
1088
+ imports.map((imp) => /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1089
+ root: meta.file.path,
1090
+ path: imp.path,
1091
+ name: imp.name
1092
+ }, [
1093
+ name,
1094
+ imp.path,
1095
+ imp.name
1096
+ ].join("-"))),
1097
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(Faker, {
1098
+ name,
1099
+ typeName: typeReference.typeName,
1100
+ description,
1101
+ node: schema,
1102
+ printer: {
1103
+ ...printerInstance,
1104
+ print: () => rewrittenFakerText
1105
+ },
1106
+ seed,
1107
+ canOverride
1108
+ })
1109
+ ] });
1110
+ }
1111
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
1112
+ baseName: meta.file.baseName,
1113
+ path: meta.file.path,
1114
+ meta: meta.file.meta,
1115
+ banner: resolver.resolveBanner(ctx.meta, {
1116
+ output,
1117
+ config,
1118
+ file: {
1119
+ path: meta.file.path,
1120
+ baseName: meta.file.baseName
1121
+ }
1122
+ }),
1123
+ footer: resolver.resolveFooter(ctx.meta, {
1124
+ output,
1125
+ config,
1126
+ file: {
1127
+ path: meta.file.path,
1128
+ baseName: meta.file.baseName
1129
+ }
1130
+ }),
1131
+ children: [
1132
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1133
+ name: locale ? [{
1134
+ propertyName: localeToFakerImport(locale),
1135
+ name: "faker"
1136
+ }] : ["faker"],
1137
+ path: "@faker-js/faker"
1138
+ }),
1139
+ regexGenerator === "randexp" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1140
+ name: "RandExp",
1141
+ path: "randexp"
1142
+ }),
1143
+ dateParser !== "faker" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1144
+ path: dateParser,
1145
+ name: dateParser
1146
+ }),
1147
+ paramEntries.map(({ param, name, typeName }) => renderEntry({
1148
+ schema: param.schema,
1149
+ name,
1150
+ typeName
1151
+ })),
1152
+ responseUnits.map((unit) => renderEntry({
1153
+ schema: unit.schema,
1154
+ name: unit.name,
1155
+ typeName: unit.typeName,
1156
+ description: unit.description,
1157
+ skipImportNames: unit.skipImportNames
1158
+ })),
1159
+ dataUnits.map((unit) => renderEntry({
1160
+ schema: unit.schema,
1161
+ name: unit.name,
1162
+ typeName: unit.typeName,
1163
+ description: unit.description,
1164
+ skipImportNames: unit.skipImportNames
1165
+ })),
1166
+ renderEntry({
1167
+ schema: buildResponseUnionSchema(node, resolver),
1168
+ name: responseName,
1169
+ typeName: tsResolver.resolveResponseName(node),
1170
+ skipImportNames: responseUnits.map((unit) => unit.name)
1171
+ })
1172
+ ]
1173
+ });
1174
+ }
1175
+ });
1176
+ //#endregion
218
1177
  //#region src/resolvers/resolverFaker.ts
219
1178
  /**
220
1179
  * Default resolver used by `@kubb/plugin-faker`. Decides the names and file
@@ -324,7 +1283,7 @@ const pluginFaker = (0, _kubb_core.definePlugin)((options) => {
324
1283
  const { output = {
325
1284
  path: "mocks",
326
1285
  barrel: { type: "named" }
327
- }, seed, locale = "en", group, exclude = [], include, override = [], mapper = {}, dateParser = "faker", generators: userGenerators = [], regexGenerator = "faker", paramsCasing, printer, resolver: userResolver, macros: userMacros } = options;
1286
+ }, seed, locale = "en", group, exclude = [], include, override = [], mapper = {}, dateParser = "faker", regexGenerator = "faker", printer, resolver: userResolver, macros: userMacros } = options;
328
1287
  const groupConfig = createGroupConfig(group);
329
1288
  return {
330
1289
  name: pluginFakerName,
@@ -342,7 +1301,6 @@ const pluginFaker = (0, _kubb_core.definePlugin)((options) => {
342
1301
  mapper,
343
1302
  dateParser,
344
1303
  regexGenerator,
345
- paramsCasing,
346
1304
  printer
347
1305
  });
348
1306
  ctx.setResolver(userResolver ? {
@@ -350,18 +1308,17 @@ const pluginFaker = (0, _kubb_core.definePlugin)((options) => {
350
1308
  ...userResolver
351
1309
  } : resolverFaker);
352
1310
  if (userMacros?.length) ctx.setMacros(userMacros);
353
- ctx.addGenerator(require_fakerGenerator.fakerGenerator);
354
- for (const generator of userGenerators) ctx.addGenerator(generator);
1311
+ ctx.addGenerator(fakerGenerator);
355
1312
  } }
356
1313
  };
357
1314
  });
358
1315
  //#endregion
359
- exports.Faker = require_Faker.Faker;
1316
+ exports.Faker = Faker;
360
1317
  exports.default = pluginFaker;
361
- exports.fakerGenerator = require_fakerGenerator.fakerGenerator;
1318
+ exports.fakerGenerator = fakerGenerator;
362
1319
  exports.pluginFaker = pluginFaker;
363
1320
  exports.pluginFakerName = pluginFakerName;
364
- exports.printerFaker = require_fakerGenerator.printerFaker;
1321
+ exports.printerFaker = printerFaker;
365
1322
  exports.resolverFaker = resolverFaker;
366
1323
 
367
1324
  //# sourceMappingURL=index.cjs.map