@kubb/plugin-faker 5.0.0-alpha.9 → 5.0.0-beta.10

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.
Files changed (44) hide show
  1. package/LICENSE +17 -10
  2. package/README.md +25 -7
  3. package/dist/Faker-BMgoFj8b.d.ts +27 -0
  4. package/dist/Faker-CWtonujy.js +334 -0
  5. package/dist/Faker-CWtonujy.js.map +1 -0
  6. package/dist/Faker-D39THFJ-.cjs +418 -0
  7. package/dist/Faker-D39THFJ-.cjs.map +1 -0
  8. package/dist/components.cjs +2 -2
  9. package/dist/components.d.ts +2 -31
  10. package/dist/components.js +1 -1
  11. package/dist/fakerGenerator-B-QnVz9o.d.ts +9 -0
  12. package/dist/fakerGenerator-B-XuVREg.cjs +570 -0
  13. package/dist/fakerGenerator-B-XuVREg.cjs.map +1 -0
  14. package/dist/fakerGenerator-DH6hN3yb.js +560 -0
  15. package/dist/fakerGenerator-DH6hN3yb.js.map +1 -0
  16. package/dist/generators.cjs +1 -1
  17. package/dist/generators.d.ts +2 -505
  18. package/dist/generators.js +1 -1
  19. package/dist/index.cjs +237 -84
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.ts +28 -4
  22. package/dist/index.js +229 -83
  23. package/dist/index.js.map +1 -1
  24. package/dist/printerFaker-W0pLunAj.d.ts +213 -0
  25. package/extension.yaml +357 -0
  26. package/package.json +48 -51
  27. package/src/components/Faker.tsx +124 -78
  28. package/src/generators/fakerGenerator.tsx +233 -134
  29. package/src/index.ts +7 -2
  30. package/src/plugin.ts +60 -121
  31. package/src/printers/printerFaker.ts +341 -0
  32. package/src/resolvers/resolverFaker.ts +85 -0
  33. package/src/types.ts +134 -81
  34. package/src/utils.ts +268 -0
  35. package/dist/components-BkBIov4R.js +0 -419
  36. package/dist/components-BkBIov4R.js.map +0 -1
  37. package/dist/components-IdP8GXXX.cjs +0 -461
  38. package/dist/components-IdP8GXXX.cjs.map +0 -1
  39. package/dist/fakerGenerator-CYUCNH3Q.cjs +0 -204
  40. package/dist/fakerGenerator-CYUCNH3Q.cjs.map +0 -1
  41. package/dist/fakerGenerator-M5oCrPmy.js +0 -200
  42. package/dist/fakerGenerator-M5oCrPmy.js.map +0 -1
  43. package/dist/types-r7BubMLO.d.ts +0 -132
  44. package/src/parser.ts +0 -453
@@ -0,0 +1,570 @@
1
+ const require_Faker = require("./Faker-D39THFJ-.cjs");
2
+ let _kubb_core = require("@kubb/core");
3
+ let _kubb_plugin_ts = require("@kubb/plugin-ts");
4
+ let _kubb_renderer_jsx = require("@kubb/renderer-jsx");
5
+ let _kubb_renderer_jsx_jsx_runtime = require("@kubb/renderer-jsx/jsx-runtime");
6
+ //#region ../../internals/utils/src/imports.ts
7
+ function escapeRegExp(value) {
8
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
9
+ }
10
+ function getImportNames(entry) {
11
+ return (Array.isArray(entry.name) ? entry.name : [entry.name]).map((name) => {
12
+ if (typeof name === "string") return name;
13
+ return name.name ?? name.propertyName;
14
+ }).filter((name) => Boolean(name));
15
+ }
16
+ function filterUsedImports(imports, text, skipImportNames = []) {
17
+ return imports.filter((entry) => {
18
+ return getImportNames(entry).some((name) => {
19
+ if (skipImportNames.includes(name)) return false;
20
+ return new RegExp(`\\b${escapeRegExp(name)}\\b(?=\\s*\\()`).test(text);
21
+ });
22
+ });
23
+ }
24
+ function aliasConflictingImports(imports, reservedNames) {
25
+ const reservedNameSet = new Set(reservedNames);
26
+ const aliases = /* @__PURE__ */ new Map();
27
+ return {
28
+ imports: imports.map((entry) => {
29
+ const aliasedNames = (Array.isArray(entry.name) ? entry.name : [entry.name]).map((item) => {
30
+ if (typeof item !== "string" || !reservedNameSet.has(item)) return item;
31
+ const alias = `${item}Schema`;
32
+ aliases.set(item, alias);
33
+ return {
34
+ propertyName: item,
35
+ name: alias
36
+ };
37
+ });
38
+ return aliasedNames.some((item) => typeof item === "object" && item.name) ? {
39
+ ...entry,
40
+ name: aliasedNames
41
+ } : entry;
42
+ }),
43
+ aliases
44
+ };
45
+ }
46
+ function rewriteAliasedImports(text, aliases) {
47
+ return Array.from(aliases).reduce((acc, [name, alias]) => acc.replace(new RegExp(`\\b${escapeRegExp(name)}\\b`, "g"), alias), text);
48
+ }
49
+ //#endregion
50
+ //#region ../../internals/utils/src/object.ts
51
+ /**
52
+ * Serializes a primitive value to a JSON string literal, stripping any surrounding quote characters first.
53
+ *
54
+ * @example
55
+ * stringify('hello') // '"hello"'
56
+ * stringify('"hello"') // '"hello"'
57
+ */
58
+ function stringify(value) {
59
+ if (value === void 0 || value === null) return "\"\"";
60
+ return JSON.stringify(require_Faker.trimQuotes(value.toString()));
61
+ }
62
+ //#endregion
63
+ //#region ../../internals/utils/src/regexp.ts
64
+ /**
65
+ * Converts a pattern string into a `new RegExp(...)` constructor call or a regex literal string.
66
+ * Inline flags expressed as `^(?im)` prefixes are extracted and applied to the resulting expression.
67
+ * Pass `null` as the second argument to emit a `/pattern/flags` literal instead.
68
+ *
69
+ * @example
70
+ * toRegExpString('^(?im)foo') // → 'new RegExp("foo", "im")'
71
+ * toRegExpString('^(?im)foo', null) // → '/foo/im'
72
+ */
73
+ function toRegExpString(text, func = "RegExp") {
74
+ const raw = require_Faker.trimQuotes(text);
75
+ const match = raw.match(/^\^(\(\?([igmsuy]+)\))/i);
76
+ const replacementTarget = match?.[1] ?? "";
77
+ const matchedFlags = match?.[2];
78
+ const cleaned = raw.replace(/^\\?\//, "").replace(/\\?\/$/, "").replace(replacementTarget, "");
79
+ const { source, flags } = new RegExp(cleaned, matchedFlags);
80
+ if (func === null) return `/${source}/${flags}`;
81
+ return `new ${func}(${JSON.stringify(source)}${flags ? `, ${JSON.stringify(flags)}` : ""})`;
82
+ }
83
+ //#endregion
84
+ //#region src/printers/printerFaker.ts
85
+ const fakerKeywordMapper = {
86
+ any: () => "undefined",
87
+ unknown: () => "undefined",
88
+ void: () => "undefined",
89
+ number: (min, max) => {
90
+ if (max !== void 0 && min !== void 0) return `faker.number.float({ min: ${min}, max: ${max} })`;
91
+ if (max !== void 0) return `faker.number.float({ max: ${max} })`;
92
+ if (min !== void 0) return `faker.number.float({ min: ${min} })`;
93
+ return "faker.number.float()";
94
+ },
95
+ integer: (min, max) => {
96
+ if (max !== void 0 && min !== void 0) return `faker.number.int({ min: ${min}, max: ${max} })`;
97
+ if (max !== void 0) return `faker.number.int({ max: ${max} })`;
98
+ if (min !== void 0) return `faker.number.int({ min: ${min} })`;
99
+ return "faker.number.int()";
100
+ },
101
+ bigint: () => "faker.number.bigInt()",
102
+ string: (min, max) => {
103
+ if (max !== void 0 && min !== void 0) return `faker.string.alpha({ length: { min: ${min}, max: ${max} } })`;
104
+ if (max !== void 0) return `faker.string.alpha({ length: ${max} })`;
105
+ if (min !== void 0) return `faker.string.alpha({ length: ${min} })`;
106
+ return "faker.string.alpha()";
107
+ },
108
+ boolean: () => "faker.datatype.boolean()",
109
+ null: () => "null",
110
+ array: (items = [], min, max) => {
111
+ if (items.length > 1) return `faker.helpers.arrayElements([${items.join(", ")}])`;
112
+ const item = items.at(0);
113
+ if (min !== void 0 && max !== void 0) return `faker.helpers.multiple(() => (${item}), { count: { min: ${min}, max: ${max} }})`;
114
+ if (min !== void 0) return `faker.helpers.multiple(() => (${item}), { count: ${min} })`;
115
+ if (max !== void 0) return `faker.helpers.multiple(() => (${item}), { count: { min: 0, max: ${max} }})`;
116
+ return `faker.helpers.multiple(() => (${item}))`;
117
+ },
118
+ tuple: (items = []) => `[${items.join(", ")}]`,
119
+ enum: (items = [], type = "any") => `faker.helpers.arrayElement<${type}>([${items.join(", ")}])`,
120
+ union: (items = []) => `faker.helpers.arrayElement<any>([${items.join(", ")}])`,
121
+ datetime: () => "faker.date.anytime().toISOString()",
122
+ date: (representation = "string", parser = "faker") => {
123
+ if (representation === "string") {
124
+ if (parser !== "faker") return `${parser}(faker.date.anytime()).format("YYYY-MM-DD")`;
125
+ return "faker.date.anytime().toISOString().substring(0, 10)";
126
+ }
127
+ if (parser !== "faker") throw new Error(`type '${representation}' and parser '${parser}' can not work together`);
128
+ return "faker.date.anytime()";
129
+ },
130
+ time: (representation = "string", parser = "faker") => {
131
+ if (representation === "string") {
132
+ if (parser !== "faker") return `${parser}(faker.date.anytime()).format("HH:mm:ss")`;
133
+ return "faker.date.anytime().toISOString().substring(11, 19)";
134
+ }
135
+ if (parser !== "faker") throw new Error(`type '${representation}' and parser '${parser}' can not work together`);
136
+ return "faker.date.anytime()";
137
+ },
138
+ uuid: () => "faker.string.uuid()",
139
+ url: () => "faker.internet.url()",
140
+ and: (items = []) => {
141
+ if (items.length === 0) return "{}";
142
+ if (items.length === 1) return items[0] ?? "{}";
143
+ return `{...${items.join(", ...")}}`;
144
+ },
145
+ matches: (value = "", regexGenerator = "faker") => {
146
+ if (regexGenerator === "randexp") return `${toRegExpString(value, "RandExp")}.gen()`;
147
+ return `faker.helpers.fromRegExp("${value}")`;
148
+ },
149
+ email: () => "faker.internet.email()",
150
+ blob: () => "faker.image.url() as unknown as Blob"
151
+ };
152
+ function getEnumValues(node) {
153
+ if (node.namedEnumValues?.length) return node.namedEnumValues.map((item) => item.value);
154
+ return node.enumValues ?? [];
155
+ }
156
+ function parseEnumValue(value) {
157
+ if (typeof value === "string") return stringify(value);
158
+ return value;
159
+ }
160
+ /**
161
+ * Creates a Faker printer that generates mock data generation code from schema nodes.
162
+ * Handles circular references gracefully by emitting memoizing getters for cyclic properties.
163
+ */
164
+ const printerFaker = _kubb_core.ast.definePrinter((options) => {
165
+ const printNested = (node, overrideOptions = {}) => {
166
+ return printerFaker({
167
+ ...options,
168
+ ...overrideOptions,
169
+ nodes: options.nodes
170
+ }).print(node) ?? "undefined";
171
+ };
172
+ return {
173
+ name: "faker",
174
+ options,
175
+ nodes: {
176
+ any: () => fakerKeywordMapper.any(),
177
+ unknown: () => fakerKeywordMapper.unknown(),
178
+ void: () => fakerKeywordMapper.void(),
179
+ boolean: () => fakerKeywordMapper.boolean(),
180
+ null: () => fakerKeywordMapper.null(),
181
+ string(node) {
182
+ if (node.pattern) return fakerKeywordMapper.matches(node.pattern, this.options.regexGenerator);
183
+ return fakerKeywordMapper.string(node.min, node.max);
184
+ },
185
+ email: () => fakerKeywordMapper.email(),
186
+ url: () => fakerKeywordMapper.url(),
187
+ uuid: () => fakerKeywordMapper.uuid(),
188
+ number(node) {
189
+ return fakerKeywordMapper.number(node.min, node.max);
190
+ },
191
+ integer(node) {
192
+ return fakerKeywordMapper.integer(node.min, node.max);
193
+ },
194
+ bigint: () => fakerKeywordMapper.bigint(),
195
+ blob: () => fakerKeywordMapper.blob(),
196
+ datetime: () => fakerKeywordMapper.datetime(),
197
+ date(node) {
198
+ return fakerKeywordMapper.date(node.representation ?? "string", this.options.dateParser);
199
+ },
200
+ time(node) {
201
+ return fakerKeywordMapper.time(node.representation ?? "string", this.options.dateParser);
202
+ },
203
+ ref(node) {
204
+ const refName = node.ref ? _kubb_core.ast.extractRefName(node.ref) ?? node.name ?? node.schema?.name : node.name ?? node.schema?.name;
205
+ if (!refName) throw new Error("Name not defined for ref node");
206
+ if (this.options.schemaName && refName === this.options.schemaName) return "undefined as any";
207
+ const resolvedName = node.ref ? this.options.resolver.resolveName(refName) : refName;
208
+ if (!this.options.nestedInObject) return `${resolvedName}(data)`;
209
+ return `${resolvedName}()`;
210
+ },
211
+ enum(node) {
212
+ return fakerKeywordMapper.enum(getEnumValues(node).map(parseEnumValue), this.options.typeName);
213
+ },
214
+ union(node) {
215
+ const items = (node.members ?? []).map((member) => printNested(member, { nestedInObject: true })).filter((item) => Boolean(item));
216
+ return fakerKeywordMapper.union(items);
217
+ },
218
+ intersection(node) {
219
+ const items = (node.members ?? []).map((member) => printNested(member, { nestedInObject: true })).filter((item) => Boolean(item));
220
+ return fakerKeywordMapper.and(items);
221
+ },
222
+ array(node) {
223
+ const items = (node.items ?? []).map((member) => printNested(member, {
224
+ typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[number]` : void 0,
225
+ nestedInObject: true
226
+ })).filter((item) => Boolean(item));
227
+ return fakerKeywordMapper.array(items, node.min, node.max);
228
+ },
229
+ tuple(node) {
230
+ const items = (node.items ?? []).map((member, index) => printNested(member, {
231
+ typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${index}]` : void 0,
232
+ nestedInObject: true
233
+ })).filter((item) => Boolean(item));
234
+ return fakerKeywordMapper.tuple(items);
235
+ },
236
+ object(node) {
237
+ const cyclicSchemas = this.options.cyclicSchemas;
238
+ return `{${(node.properties ?? []).map((property) => {
239
+ if (this.options.mapper && Object.hasOwn(this.options.mapper, property.name)) return `"${property.name}": ${this.options.mapper[property.name]}`;
240
+ const value = printNested(property.schema, {
241
+ typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${JSON.stringify(property.name)}]` : void 0,
242
+ nestedInObject: true
243
+ }) ?? "undefined";
244
+ if (cyclicSchemas && _kubb_core.ast.containsCircularRef(property.schema, {
245
+ circularSchemas: cyclicSchemas,
246
+ excludeName: this.options.schemaName
247
+ })) return `get ${property.name}() { const _value = ${value}; Object.defineProperty(this, ${JSON.stringify(property.name)}, { value: _value, configurable: true, writable: true, enumerable: true }); return _value }`;
248
+ return `"${property.name}": ${value}`;
249
+ }).join(",")}}`;
250
+ },
251
+ ...options.nodes
252
+ },
253
+ print(node) {
254
+ return this.transform(node) ?? null;
255
+ }
256
+ };
257
+ });
258
+ //#endregion
259
+ //#region src/generators/fakerGenerator.tsx
260
+ const fakerGenerator = (0, _kubb_core.defineGenerator)({
261
+ name: "faker",
262
+ renderer: _kubb_renderer_jsx.jsxRenderer,
263
+ schema(node, ctx) {
264
+ const { adapter, config, resolver, root } = ctx;
265
+ const { output, group, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options;
266
+ const pluginTs = ctx.driver.getPlugin(_kubb_plugin_ts.pluginTsName);
267
+ if (!node.name || !pluginTs || !adapter.inputNode) return;
268
+ const tsResolver = ctx.driver.getResolver(_kubb_plugin_ts.pluginTsName);
269
+ const schemaNode = require_Faker.resolveSchemaRef(node, adapter.inputNode.schemas);
270
+ const schemaName = schemaNode.name ?? node.name;
271
+ const mode = ctx.getMode(output);
272
+ const meta = {
273
+ name: resolver.resolveName(schemaName),
274
+ file: resolver.resolveFile({
275
+ name: schemaName,
276
+ extname: ".ts"
277
+ }, {
278
+ root,
279
+ output,
280
+ group
281
+ }),
282
+ typeName: tsResolver.resolveTypeName(schemaName),
283
+ typeFile: tsResolver.resolveFile({
284
+ name: schemaName,
285
+ extname: ".ts"
286
+ }, {
287
+ root,
288
+ output: pluginTs.options?.output ?? output,
289
+ group: pluginTs.options?.group
290
+ })
291
+ };
292
+ const canOverride = require_Faker.canOverrideSchema(schemaNode);
293
+ const cyclicSchemas = adapter.inputNode ? _kubb_core.ast.findCircularSchemas(adapter.inputNode.schemas) : void 0;
294
+ const printerInstance = printerFaker({
295
+ resolver,
296
+ schemaName,
297
+ typeName: meta.typeName,
298
+ dateParser,
299
+ regexGenerator,
300
+ mapper,
301
+ nodes: printer?.nodes,
302
+ cyclicSchemas
303
+ });
304
+ const fakerText = printerInstance.print(schemaNode) ?? "undefined";
305
+ const typeReference = require_Faker.resolveTypeReference({
306
+ node: schemaNode,
307
+ canOverride,
308
+ name: meta.name,
309
+ typeName: meta.typeName,
310
+ filePath: meta.file.path,
311
+ typeFilePath: meta.typeFile.path
312
+ });
313
+ const usedImports = filterUsedImports(adapter.getImports(schemaNode, (schemaName) => ({
314
+ name: resolver.resolveName(schemaName),
315
+ path: resolver.resolveFile({
316
+ name: schemaName,
317
+ extname: ".ts"
318
+ }, {
319
+ root,
320
+ output,
321
+ group
322
+ }).path
323
+ })).filter((entry) => entry.path !== meta.file.path), fakerText);
324
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
325
+ baseName: meta.file.baseName,
326
+ path: meta.file.path,
327
+ meta: meta.file.meta,
328
+ banner: resolver.resolveBanner(adapter.inputNode, {
329
+ output,
330
+ config
331
+ }),
332
+ footer: resolver.resolveFooter(adapter.inputNode, {
333
+ output,
334
+ config
335
+ }),
336
+ children: [
337
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
338
+ name: locale ? [{
339
+ propertyName: require_Faker.localeToFakerImport(locale),
340
+ name: "faker"
341
+ }] : ["faker"],
342
+ path: "@faker-js/faker"
343
+ }),
344
+ regexGenerator === "randexp" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
345
+ name: "RandExp",
346
+ path: "randexp"
347
+ }),
348
+ dateParser !== "faker" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
349
+ path: dateParser,
350
+ name: dateParser
351
+ }),
352
+ typeReference.importPath && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
353
+ isTypeOnly: true,
354
+ root: meta.file.path,
355
+ path: typeReference.importPath,
356
+ name: [meta.typeName]
357
+ }),
358
+ mode === "split" && usedImports.map((imp) => /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
359
+ root: meta.file.path,
360
+ path: imp.path,
361
+ name: imp.name
362
+ }, [
363
+ schemaName,
364
+ imp.path,
365
+ imp.name
366
+ ].join("-"))),
367
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_Faker.Faker, {
368
+ name: meta.name,
369
+ typeName: typeReference.typeName,
370
+ description: schemaNode.description,
371
+ node: schemaNode,
372
+ printer: printerInstance,
373
+ seed,
374
+ canOverride
375
+ })
376
+ ]
377
+ });
378
+ },
379
+ operation(node, ctx) {
380
+ const { adapter, config, resolver, root } = ctx;
381
+ const { output, group, paramsCasing, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options;
382
+ const pluginTs = ctx.driver.getPlugin(_kubb_plugin_ts.pluginTsName);
383
+ if (!pluginTs) return;
384
+ const tsResolver = ctx.driver.getResolver(_kubb_plugin_ts.pluginTsName);
385
+ const paramEntries = _kubb_core.ast.caseParams(node.parameters, paramsCasing).map((param) => ({
386
+ param,
387
+ name: require_Faker.resolveParamNameByLocation(resolver, node, param),
388
+ typeName: require_Faker.resolveParamNameByLocation(tsResolver, node, param)
389
+ }));
390
+ const responseEntries = node.responses.map((response) => ({
391
+ response,
392
+ name: resolver.resolveResponseStatusName(node, response.statusCode),
393
+ typeName: tsResolver.resolveResponseStatusName(node, response.statusCode)
394
+ }));
395
+ const dataEntry = node.requestBody?.content?.[0]?.schema ? {
396
+ schema: {
397
+ ...node.requestBody.content[0].schema,
398
+ description: node.requestBody.description ?? node.requestBody.content[0].schema.description
399
+ },
400
+ name: resolver.resolveDataName(node),
401
+ typeName: tsResolver.resolveDataName(node),
402
+ description: node.requestBody.description ?? node.requestBody.content[0].schema.description
403
+ } : null;
404
+ const responseName = resolver.resolveResponseName(node);
405
+ const localHelperNames = new Set([
406
+ ...paramEntries.map((entry) => entry.name),
407
+ ...responseEntries.map((entry) => entry.name),
408
+ ...dataEntry ? [dataEntry.name] : [],
409
+ responseName
410
+ ]);
411
+ const meta = {
412
+ file: resolver.resolveFile({
413
+ name: node.operationId,
414
+ extname: ".ts",
415
+ tag: node.tags[0] ?? "default",
416
+ path: node.path
417
+ }, {
418
+ root,
419
+ output,
420
+ group
421
+ }),
422
+ typeFile: tsResolver.resolveFile({
423
+ name: node.operationId,
424
+ extname: ".ts",
425
+ tag: node.tags[0] ?? "default",
426
+ path: node.path
427
+ }, {
428
+ root,
429
+ output: pluginTs.options?.output ?? output,
430
+ group: pluginTs.options?.group
431
+ })
432
+ };
433
+ function resolveMockImports(schema) {
434
+ return adapter.getImports(schema, (schemaName) => ({
435
+ name: resolver.resolveName(schemaName),
436
+ path: resolver.resolveFile({
437
+ name: schemaName,
438
+ extname: ".ts"
439
+ }, {
440
+ root,
441
+ output,
442
+ group
443
+ }).path
444
+ })).filter((entry) => entry.path !== meta.file.path);
445
+ }
446
+ function renderEntry({ schema, name, typeName, description, skipImportNames = [] }) {
447
+ if (!schema) return null;
448
+ const canOverride = require_Faker.canOverrideSchema(schema);
449
+ const cyclicSchemas = adapter.inputNode ? _kubb_core.ast.findCircularSchemas(adapter.inputNode.schemas) : void 0;
450
+ const printerInstance = printerFaker({
451
+ resolver,
452
+ schemaName: name,
453
+ typeName,
454
+ dateParser,
455
+ regexGenerator,
456
+ mapper,
457
+ nodes: printer?.nodes,
458
+ cyclicSchemas
459
+ });
460
+ const fakerText = printerInstance.print(schema) ?? "undefined";
461
+ const { imports, aliases } = aliasConflictingImports(filterUsedImports(resolveMockImports(schema), fakerText, skipImportNames), localHelperNames);
462
+ const rewrittenFakerText = rewriteAliasedImports(fakerText, aliases);
463
+ const typeReference = require_Faker.resolveTypeReference({
464
+ node: schema,
465
+ canOverride,
466
+ name,
467
+ typeName,
468
+ filePath: meta.file.path,
469
+ typeFilePath: meta.typeFile.path
470
+ });
471
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
472
+ typeReference.importPath && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
473
+ isTypeOnly: true,
474
+ root: meta.file.path,
475
+ path: typeReference.importPath,
476
+ name: [typeName]
477
+ }),
478
+ imports.map((imp) => /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
479
+ root: meta.file.path,
480
+ path: imp.path,
481
+ name: imp.name
482
+ }, [
483
+ name,
484
+ imp.path,
485
+ imp.name
486
+ ].join("-"))),
487
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_Faker.Faker, {
488
+ name,
489
+ typeName: typeReference.typeName,
490
+ description,
491
+ node: schema,
492
+ printer: {
493
+ ...printerInstance,
494
+ print: () => rewrittenFakerText
495
+ },
496
+ seed,
497
+ canOverride
498
+ })
499
+ ] });
500
+ }
501
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
502
+ baseName: meta.file.baseName,
503
+ path: meta.file.path,
504
+ meta: meta.file.meta,
505
+ banner: resolver.resolveBanner(adapter.inputNode, {
506
+ output,
507
+ config
508
+ }),
509
+ footer: resolver.resolveFooter(adapter.inputNode, {
510
+ output,
511
+ config
512
+ }),
513
+ children: [
514
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
515
+ name: locale ? [{
516
+ propertyName: require_Faker.localeToFakerImport(locale),
517
+ name: "faker"
518
+ }] : ["faker"],
519
+ path: "@faker-js/faker"
520
+ }),
521
+ regexGenerator === "randexp" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
522
+ name: "RandExp",
523
+ path: "randexp"
524
+ }),
525
+ dateParser !== "faker" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
526
+ path: dateParser,
527
+ name: dateParser
528
+ }),
529
+ paramEntries.map(({ param, name, typeName }) => renderEntry({
530
+ schema: param.schema,
531
+ name,
532
+ typeName
533
+ })),
534
+ responseEntries.map(({ response, name, typeName }) => renderEntry({
535
+ schema: response.schema,
536
+ name,
537
+ typeName,
538
+ description: response.description
539
+ })),
540
+ dataEntry ? renderEntry({
541
+ schema: dataEntry.schema,
542
+ name: dataEntry.name,
543
+ typeName: dataEntry.typeName,
544
+ description: dataEntry.description
545
+ }) : null,
546
+ renderEntry({
547
+ schema: require_Faker.buildResponseUnionSchema(node, resolver),
548
+ name: responseName,
549
+ typeName: tsResolver.resolveResponseName(node),
550
+ skipImportNames: responseEntries.map(({ name }) => name)
551
+ })
552
+ ]
553
+ });
554
+ }
555
+ });
556
+ //#endregion
557
+ Object.defineProperty(exports, "fakerGenerator", {
558
+ enumerable: true,
559
+ get: function() {
560
+ return fakerGenerator;
561
+ }
562
+ });
563
+ Object.defineProperty(exports, "printerFaker", {
564
+ enumerable: true,
565
+ get: function() {
566
+ return printerFaker;
567
+ }
568
+ });
569
+
570
+ //# sourceMappingURL=fakerGenerator-B-XuVREg.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fakerGenerator-B-XuVREg.cjs","names":["trimQuotes","trimQuotes","ast","jsxRenderer","pluginTsName","resolveSchemaRef","canOverrideSchema","ast","resolveTypeReference","File","localeToFakerImport","Faker","resolveParamNameByLocation","buildResponseUnionSchema"],"sources":["../../../internals/utils/src/imports.ts","../../../internals/utils/src/object.ts","../../../internals/utils/src/regexp.ts","../src/printers/printerFaker.ts","../src/generators/fakerGenerator.tsx"],"sourcesContent":["export type ImportName = string | { propertyName: string; name?: string }\n\nexport type ImportEntry = {\n name: string | Array<ImportName>\n path: string\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\nfunction getImportNames(entry: ImportEntry): Array<string> {\n return (Array.isArray(entry.name) ? entry.name : [entry.name])\n .map((name) => {\n if (typeof name === 'string') {\n return name\n }\n\n return name.name ?? name.propertyName\n })\n .filter((name): name is string => Boolean(name))\n}\n\nexport function filterUsedImports(imports: Array<ImportEntry>, text: string, skipImportNames: Array<string> = []): Array<ImportEntry> {\n return imports.filter((entry) => {\n const names = getImportNames(entry)\n\n return names.some((name) => {\n if (skipImportNames.includes(name)) {\n return false\n }\n\n return new RegExp(`\\\\b${escapeRegExp(name)}\\\\b(?=\\\\s*\\\\()`).test(text)\n })\n })\n}\n\nexport function aliasConflictingImports(\n imports: Array<ImportEntry>,\n reservedNames: Iterable<string>,\n): { imports: Array<ImportEntry>; aliases: Map<string, string> } {\n const reservedNameSet = new Set(reservedNames)\n const aliases = new Map<string, string>()\n\n const aliasedImports = imports.map((entry) => {\n const names = Array.isArray(entry.name) ? entry.name : [entry.name]\n const aliasedNames = names.map((item): ImportName => {\n if (typeof item !== 'string' || !reservedNameSet.has(item)) {\n return item\n }\n\n const alias = `${item}Schema`\n aliases.set(item, alias)\n\n return { propertyName: item, name: alias }\n })\n\n return aliasedNames.some((item) => typeof item === 'object' && item.name)\n ? {\n ...entry,\n name: aliasedNames,\n }\n : entry\n })\n\n return {\n imports: aliasedImports,\n aliases,\n }\n}\n\nexport function rewriteAliasedImports(text: string, aliases: ReadonlyMap<string, string>): string {\n return Array.from(aliases).reduce((acc, [name, alias]) => acc.replace(new RegExp(`\\\\b${escapeRegExp(name)}\\\\b`, 'g'), alias), text)\n}\n","import { trimQuotes } from './string.ts'\n\n/**\n * Serializes a primitive value to a JSON string literal, stripping any surrounding quote characters first.\n *\n * @example\n * stringify('hello') // '\"hello\"'\n * stringify('\"hello\"') // '\"hello\"'\n */\nexport function stringify(value: string | number | boolean | undefined): string {\n if (value === undefined || value === null) return '\"\"'\n return JSON.stringify(trimQuotes(value.toString()))\n}\n\n/**\n * Converts a plain object into a multiline key-value string suitable for embedding in generated code.\n * Nested objects are recursively stringified with indentation.\n *\n * @example\n * stringifyObject({ foo: 'bar', nested: { a: 1 } })\n * // 'foo: bar,\\nnested: {\\n a: 1\\n }'\n */\nexport function stringifyObject(value: Record<string, unknown>): string {\n const items = Object.entries(value)\n .map(([key, val]) => {\n if (val !== null && typeof val === 'object') {\n return `${key}: {\\n ${stringifyObject(val as Record<string, unknown>)}\\n }`\n }\n return `${key}: ${val}`\n })\n .filter(Boolean)\n return items.join(',\\n')\n}\n\n/**\n * Converts a dot-notation path or string array into an optional-chaining accessor expression.\n *\n * @example\n * getNestedAccessor('pagination.next.id', 'lastPage')\n * // → \"lastPage?.['pagination']?.['next']?.['id']\"\n */\nexport function getNestedAccessor(param: string | string[], accessor: string): string | null {\n const parts = Array.isArray(param) ? param : param.split('.')\n if (parts.length === 0 || (parts.length === 1 && parts[0] === '')) return null\n return `${accessor}?.['${`${parts.join(\"']?.['\")}']`}`\n}\n","import { trimQuotes } from './string.ts'\n\n/**\n * Converts a pattern string into a `new RegExp(...)` constructor call or a regex literal string.\n * Inline flags expressed as `^(?im)` prefixes are extracted and applied to the resulting expression.\n * Pass `null` as the second argument to emit a `/pattern/flags` literal instead.\n *\n * @example\n * toRegExpString('^(?im)foo') // → 'new RegExp(\"foo\", \"im\")'\n * toRegExpString('^(?im)foo', null) // → '/foo/im'\n */\nexport function toRegExpString(text: string, func: string | null = 'RegExp'): string {\n const raw = trimQuotes(text)\n\n const match = raw.match(/^\\^(\\(\\?([igmsuy]+)\\))/i)\n const replacementTarget = match?.[1] ?? ''\n const matchedFlags = match?.[2]\n const cleaned = raw\n .replace(/^\\\\?\\//, '')\n .replace(/\\\\?\\/$/, '')\n .replace(replacementTarget, '')\n\n const { source, flags } = new RegExp(cleaned, matchedFlags)\n\n if (func === null) return `/${source}/${flags}`\n\n return `new ${func}(${JSON.stringify(source)}${flags ? `, ${JSON.stringify(flags)}` : ''})`\n}\n","import { stringify, toRegExpString } from '@internals/utils'\nimport { ast } from '@kubb/core'\nimport type { PluginFaker, ResolverFaker } from '../types.ts'\n\n/**\n * Partial printer nodes for Faker generation, mapping schema types to output strings.\n */\nexport type PrinterFakerNodes = ast.PrinterPartial<string, PrinterFakerOptions>\n\n/**\n * Configuration options for the Faker printer, including resolvers, mappers, and cyclic schema tracking.\n */\nexport type PrinterFakerOptions = {\n dateParser?: PluginFaker['resolvedOptions']['dateParser']\n regexGenerator?: PluginFaker['resolvedOptions']['regexGenerator']\n mapper?: PluginFaker['resolvedOptions']['mapper']\n resolver: ResolverFaker\n typeName?: string\n schemaName?: string\n nestedInObject?: boolean\n nodes?: PrinterFakerNodes\n /**\n * Names of schemas that participate in a circular dependency chain.\n * Properties whose schema transitively references one of these are emitted\n * as lazy getters so that user overrides via the `data` parameter prevent\n * the recursive faker call from ever executing (avoiding stack overflow).\n */\n cyclicSchemas?: ReadonlySet<string>\n}\n\n/**\n * Factory options for the Faker printer, defining input/output types and configuration.\n */\nexport type PrinterFakerFactory = ast.PrinterFactoryOptions<'faker', PrinterFakerOptions, string, string>\n\nconst fakerKeywordMapper = {\n any: () => 'undefined',\n unknown: () => 'undefined',\n void: () => 'undefined',\n number: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.number.float({ min: ${min}, max: ${max} })`\n }\n\n if (max !== undefined) {\n return `faker.number.float({ max: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.number.float({ min: ${min} })`\n }\n\n return 'faker.number.float()'\n },\n integer: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.number.int({ min: ${min}, max: ${max} })`\n }\n\n if (max !== undefined) {\n return `faker.number.int({ max: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.number.int({ min: ${min} })`\n }\n\n return 'faker.number.int()'\n },\n bigint: () => 'faker.number.bigInt()',\n string: (min?: number, max?: number) => {\n if (max !== undefined && min !== undefined) {\n return `faker.string.alpha({ length: { min: ${min}, max: ${max} } })`\n }\n\n if (max !== undefined) {\n return `faker.string.alpha({ length: ${max} })`\n }\n\n if (min !== undefined) {\n return `faker.string.alpha({ length: ${min} })`\n }\n\n return 'faker.string.alpha()'\n },\n boolean: () => 'faker.datatype.boolean()',\n null: () => 'null',\n array: (items: 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: string[] = []) => `[${items.join(', ')}]`,\n enum: (items: Array<string | number | boolean | undefined> = [], type = 'any') => `faker.helpers.arrayElement<${type}>([${items.join(', ')}])`,\n union: (items: 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: string[] = []) => {\n if (items.length === 0) {\n return '{}'\n }\n\n if (items.length === 1) {\n return items[0] ?? '{}'\n }\n\n return `{...${items.join(', ...')}}`\n },\n matches: (value = '', regexGenerator: 'faker' | 'randexp' = 'faker') => {\n if (regexGenerator === 'randexp') {\n return `${toRegExpString(value, 'RandExp')}.gen()`\n }\n\n return `faker.helpers.fromRegExp(\"${value}\")`\n },\n email: () => 'faker.internet.email()',\n blob: () => 'faker.image.url() as unknown as Blob',\n} as const\n\nfunction getEnumValues(node: ast.EnumSchemaNode): Array<string | number | boolean | undefined> {\n if (node.namedEnumValues?.length) {\n return node.namedEnumValues.map((item) => item.value as string | number | boolean | undefined)\n }\n\n return (node.enumValues ?? []) as Array<string | number | boolean | undefined>\n}\n\nfunction parseEnumValue(value: string | number | boolean | undefined) {\n if (typeof value === 'string') {\n return stringify(value)\n }\n\n return value\n}\n\n/**\n * Creates a Faker printer that generates mock data generation code from schema nodes.\n * Handles circular references gracefully by emitting memoizing getters for cyclic properties.\n */\nexport const printerFaker: (options: PrinterFakerOptions) => ast.Printer<PrinterFakerFactory> = ast.definePrinter<PrinterFakerFactory>((options) => {\n const printNested = (node: ast.SchemaNode, overrideOptions: Partial<PrinterFakerOptions> = {}): string => {\n return (\n printerFaker({\n ...options,\n ...overrideOptions,\n nodes: options.nodes,\n }).print(node) ?? 'undefined'\n )\n }\n\n return {\n name: 'faker',\n options,\n nodes: {\n any: () => fakerKeywordMapper.any(),\n unknown: () => fakerKeywordMapper.unknown(),\n void: () => fakerKeywordMapper.void(),\n boolean: () => fakerKeywordMapper.boolean(),\n null: () => fakerKeywordMapper.null(),\n string(node) {\n if (node.pattern) {\n return fakerKeywordMapper.matches(node.pattern, this.options.regexGenerator)\n }\n\n return fakerKeywordMapper.string(node.min, node.max)\n },\n email: () => fakerKeywordMapper.email(),\n url: () => fakerKeywordMapper.url(),\n uuid: () => fakerKeywordMapper.uuid(),\n number(node) {\n return fakerKeywordMapper.number(node.min, node.max)\n },\n integer(node) {\n return fakerKeywordMapper.integer(node.min, node.max)\n },\n bigint: () => fakerKeywordMapper.bigint(),\n blob: () => fakerKeywordMapper.blob(),\n datetime: () => fakerKeywordMapper.datetime(),\n date(node) {\n return fakerKeywordMapper.date(node.representation ?? 'string', this.options.dateParser)\n },\n time(node) {\n return fakerKeywordMapper.time(node.representation ?? 'string', this.options.dateParser)\n },\n ref(node) {\n // Parser-generated refs (with $ref) carry raw schema names that need resolving.\n // Use the canonical name from the $ref path — node.name may have been overridden\n // (e.g. by single-member allOf flatten using the property-derived child name).\n // Inline refs (without $ref) from faker utils already carry resolved helper names.\n const refName = node.ref ? (ast.extractRefName(node.ref) ?? node.name ?? node.schema?.name) : (node.name ?? node.schema?.name)\n\n if (!refName) {\n throw new Error('Name not defined for ref node')\n }\n\n if (this.options.schemaName && refName === this.options.schemaName) {\n return 'undefined as any'\n }\n\n // Internal helper refs (for generated response/data helpers) are already\n // emitted with resolver output and should not be transformed twice.\n const resolvedName = node.ref ? this.options.resolver.resolveName(refName) : refName\n\n if (!this.options.nestedInObject) {\n return `${resolvedName}(data)`\n }\n\n return `${resolvedName}()`\n },\n enum(node) {\n return fakerKeywordMapper.enum(getEnumValues(node).map(parseEnumValue), this.options.typeName)\n },\n union(node): string {\n const items: string[] = (node.members ?? [])\n .map((member) =>\n printNested(member, {\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.union(items)\n },\n intersection(node): string {\n const items: 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: 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: string[] = (node.items ?? [])\n .map((member, index) =>\n printNested(member, {\n typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${index}]` : undefined,\n nestedInObject: true,\n }),\n )\n .filter((item): item is string => Boolean(item))\n\n return fakerKeywordMapper.tuple(items)\n },\n object(node): string {\n const cyclicSchemas = this.options.cyclicSchemas\n const properties = (node.properties ?? [])\n .map((property): string => {\n if (this.options.mapper && Object.hasOwn(this.options.mapper, property.name)) {\n return `\"${property.name}\": ${this.options.mapper[property.name]}`\n }\n\n const value: string =\n printNested(property.schema, {\n typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${JSON.stringify(property.name)}]` : undefined,\n nestedInObject: true,\n }) ?? 'undefined'\n\n // When the property's schema transitively references a schema that is\n // part of a circular dependency (other than the current schema itself),\n // emit a memoizing lazy getter. On first access it computes the value,\n // replaces itself with a plain data property via Object.defineProperty,\n // and returns the cached value – so every subsequent read is stable.\n if (cyclicSchemas && ast.containsCircularRef(property.schema, { circularSchemas: cyclicSchemas, excludeName: this.options.schemaName })) {\n return `get ${property.name}() { const _value = ${value}; Object.defineProperty(this, ${JSON.stringify(property.name)}, { value: _value, configurable: true, writable: true, enumerable: true }); return _value }`\n }\n\n return `\"${property.name}\": ${value}`\n })\n .join(',')\n\n return `{${properties}}`\n },\n ...options.nodes,\n },\n print(node) {\n return this.transform(node) ?? null\n },\n }\n})\n","import { aliasConflictingImports, filterUsedImports, rewriteAliasedImports } from '@internals/utils'\nimport { ast, defineGenerator } from '@kubb/core'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { File, jsxRenderer } from '@kubb/renderer-jsx'\nimport { Faker } from '../components/Faker.tsx'\nimport { printerFaker } from '../printers/printerFaker.ts'\nimport type { PluginFaker } from '../types.ts'\nimport {\n buildResponseUnionSchema,\n canOverrideSchema,\n localeToFakerImport,\n resolveParamNameByLocation,\n resolveSchemaRef,\n resolveTypeReference,\n} from '../utils.ts'\n\nexport const fakerGenerator = defineGenerator<PluginFaker>({\n name: 'faker',\n renderer: jsxRenderer,\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 || !adapter.inputNode) {\n return\n }\n\n const tsResolver = ctx.driver.getResolver(pluginTsName)\n\n const schemaNode = resolveSchemaRef(node, adapter.inputNode.schemas)\n const schemaName = schemaNode.name ?? node.name\n const mode = ctx.getMode(output)\n const meta = {\n name: resolver.resolveName(schemaName),\n file: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group }),\n typeName: tsResolver.resolveTypeName(schemaName),\n typeFile: tsResolver.resolveFile(\n { name: schemaName, extname: '.ts' },\n { root, output: pluginTs.options?.output ?? output, group: pluginTs.options?.group },\n ),\n } as const\n const canOverride = canOverrideSchema(schemaNode)\n const cyclicSchemas = adapter.inputNode ? ast.findCircularSchemas(adapter.inputNode.schemas) : undefined\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(schemaNode) ?? 'undefined'\n const typeReference = resolveTypeReference({\n node: schemaNode,\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(schemaNode, (schemaName) => ({\n name: resolver.resolveName(schemaName),\n path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group }).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(adapter.inputNode, { output, config })}\n footer={resolver.resolveFooter(adapter.inputNode, { output, config })}\n >\n <File.Import name={locale ? [{ propertyName: localeToFakerImport(locale), name: 'faker' }] : ['faker']} path=\"@faker-js/faker\" />\n {regexGenerator === 'randexp' && <File.Import name={'RandExp'} path={'randexp'} />}\n {dateParser !== 'faker' && <File.Import path={dateParser} name={dateParser} />}\n {typeReference.importPath && <File.Import isTypeOnly root={meta.file.path} path={typeReference.importPath} name={[meta.typeName]} />}\n {mode === 'split' &&\n usedImports.map((imp) => <File.Import key={[schemaName, imp.path, imp.name].join('-')} root={meta.file.path} path={imp.path} name={imp.name} />)}\n <Faker\n name={meta.name}\n typeName={typeReference.typeName}\n description={schemaNode.description}\n node={schemaNode}\n printer={printerInstance}\n seed={seed}\n canOverride={canOverride}\n />\n </File>\n )\n },\n operation(node, ctx) {\n const { adapter, config, resolver, root } = ctx\n const { output, group, paramsCasing, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options\n const pluginTs = ctx.driver.getPlugin(pluginTsName)\n\n if (!pluginTs) {\n return\n }\n\n const tsResolver = ctx.driver.getResolver(pluginTsName)\n\n const params = ast.caseParams(node.parameters, paramsCasing)\n const paramEntries = params.map((param) => ({\n param,\n name: resolveParamNameByLocation(resolver, node, param),\n typeName: resolveParamNameByLocation(tsResolver, node, param),\n }))\n const responseEntries = node.responses.map((response) => ({\n response,\n name: resolver.resolveResponseStatusName(node, response.statusCode),\n typeName: tsResolver.resolveResponseStatusName(node, response.statusCode),\n }))\n const dataEntry = node.requestBody?.content?.[0]?.schema\n ? {\n schema: {\n ...node.requestBody.content![0]!.schema!,\n description: node.requestBody.description ?? node.requestBody.content![0]!.schema!.description,\n },\n name: resolver.resolveDataName(node),\n typeName: tsResolver.resolveDataName(node),\n description: node.requestBody.description ?? node.requestBody.content![0]!.schema!.description,\n }\n : null\n const responseName = resolver.resolveResponseName(node)\n const localHelperNames = new Set([\n ...paramEntries.map((entry) => entry.name),\n ...responseEntries.map((entry) => entry.name),\n ...(dataEntry ? [dataEntry.name] : []),\n responseName,\n ])\n const meta = {\n file: resolver.resolveFile({ name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path }, { root, output, group }),\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,\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 }).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 cyclicSchemas = adapter.inputNode ? ast.findCircularSchemas(adapter.inputNode.schemas) : undefined\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(adapter.inputNode, { output, config })}\n footer={resolver.resolveFooter(adapter.inputNode, { output, config })}\n >\n <File.Import name={locale ? [{ propertyName: localeToFakerImport(locale), name: 'faker' }] : ['faker']} path=\"@faker-js/faker\" />\n {regexGenerator === 'randexp' && <File.Import name={'RandExp'} path={'randexp'} />}\n {dateParser !== 'faker' && <File.Import path={dateParser} name={dateParser} />}\n {paramEntries.map(({ param, name, typeName }) =>\n renderEntry({\n schema: param.schema,\n name,\n typeName,\n }),\n )}\n {responseEntries.map(({ response, name, typeName }) =>\n renderEntry({\n schema: response.schema,\n name,\n typeName,\n description: response.description,\n }),\n )}\n {dataEntry\n ? renderEntry({\n schema: dataEntry.schema,\n name: dataEntry.name,\n typeName: dataEntry.typeName,\n description: dataEntry.description,\n })\n : null}\n {renderEntry({\n schema: buildResponseUnionSchema(node, resolver),\n name: responseName,\n typeName: tsResolver.resolveResponseName(node),\n skipImportNames: responseEntries.map(({ name }) => name),\n })}\n </File>\n )\n },\n})\n"],"mappings":"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"}