@kubb/plugin-faker 0.0.0-canary-20250812004141 → 0.0.0-canary-20250816141041

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 (39) hide show
  1. package/dist/components-BPhQ4XSw.cjs +323 -0
  2. package/dist/components-BPhQ4XSw.cjs.map +1 -0
  3. package/dist/components-iqgTT-Ux.js +289 -0
  4. package/dist/components-iqgTT-Ux.js.map +1 -0
  5. package/dist/components.cjs +2 -11
  6. package/dist/components.d.cts +24 -15
  7. package/dist/components.d.ts +24 -15
  8. package/dist/components.js +3 -3
  9. package/dist/fakerGenerator-CF5BYfUw.cjs +204 -0
  10. package/dist/fakerGenerator-CF5BYfUw.cjs.map +1 -0
  11. package/dist/fakerGenerator-Cz3dcC9B.js +199 -0
  12. package/dist/fakerGenerator-Cz3dcC9B.js.map +1 -0
  13. package/dist/generators.cjs +3 -12
  14. package/dist/generators.d.cts +5 -6
  15. package/dist/generators.d.ts +5 -6
  16. package/dist/generators.js +4 -4
  17. package/dist/index.cjs +96 -124
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.cts +6 -7
  20. package/dist/index.d.ts +6 -7
  21. package/dist/index.js +96 -118
  22. package/dist/index.js.map +1 -1
  23. package/dist/types-Bh_6SttY.d.cts +1214 -0
  24. package/dist/types-DYUKPbgH.d.ts +1214 -0
  25. package/package.json +23 -28
  26. package/dist/chunk-BQQKSGJ4.js +0 -370
  27. package/dist/chunk-BQQKSGJ4.js.map +0 -1
  28. package/dist/chunk-DP3UK3GA.js +0 -137
  29. package/dist/chunk-DP3UK3GA.js.map +0 -1
  30. package/dist/chunk-DUV3ZLQX.cjs +0 -139
  31. package/dist/chunk-DUV3ZLQX.cjs.map +0 -1
  32. package/dist/chunk-ZA3QHI3O.cjs +0 -376
  33. package/dist/chunk-ZA3QHI3O.cjs.map +0 -1
  34. package/dist/components.cjs.map +0 -1
  35. package/dist/components.js.map +0 -1
  36. package/dist/generators.cjs.map +0 -1
  37. package/dist/generators.js.map +0 -1
  38. package/dist/types-kyHdJ8oH.d.cts +0 -107
  39. package/dist/types-kyHdJ8oH.d.ts +0 -107
@@ -0,0 +1,323 @@
1
+ //#region rolldown:runtime
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
+ key = keys[i];
11
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
+ get: ((k) => from[k]).bind(null, key),
13
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
+ });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
19
+ value: mod,
20
+ enumerable: true
21
+ }) : target, mod));
22
+
23
+ //#endregion
24
+ const __kubb_core_transformers = __toESM(require("@kubb/core/transformers"));
25
+ const __kubb_plugin_oas = __toESM(require("@kubb/plugin-oas"));
26
+ const __kubb_react = __toESM(require("@kubb/react"));
27
+ const __kubb_react_jsx_runtime = __toESM(require("@kubb/react/jsx-runtime"));
28
+
29
+ //#region src/parser.ts
30
+ const fakerKeywordMapper = {
31
+ any: () => "undefined",
32
+ unknown: () => "undefined",
33
+ void: () => "undefined",
34
+ number: (min, max) => {
35
+ if (max !== void 0 && min !== void 0) return `faker.number.float({ min: ${min}, max: ${max} })`;
36
+ if (max !== void 0) return `faker.number.float({ max: ${max} })`;
37
+ if (min !== void 0) return `faker.number.float({ min: ${min} })`;
38
+ return "faker.number.float()";
39
+ },
40
+ integer: (min, max) => {
41
+ if (max !== void 0 && min !== void 0) return `faker.number.int({ min: ${min}, max: ${max} })`;
42
+ if (max !== void 0) return `faker.number.int({ max: ${max} })`;
43
+ if (min !== void 0) return `faker.number.int({ min: ${min} })`;
44
+ return "faker.number.int()";
45
+ },
46
+ string: (min, max) => {
47
+ if (max !== void 0 && min !== void 0) return `faker.string.alpha({ length: { min: ${min}, max: ${max} } })`;
48
+ if (max !== void 0) return `faker.string.alpha({ length: ${max} })`;
49
+ if (min !== void 0) return `faker.string.alpha({ length: ${min} })`;
50
+ return "faker.string.alpha()";
51
+ },
52
+ boolean: () => "faker.datatype.boolean()",
53
+ undefined: () => "undefined",
54
+ null: () => "null",
55
+ array: (items = [], min, max) => {
56
+ if (items.length > 1) return `faker.helpers.arrayElements([${items.join(", ")}])`;
57
+ const item = items.at(0);
58
+ if (min !== void 0 && max !== void 0) return `faker.helpers.multiple(() => (${item}), { count: { min: ${min}, max: ${max} }})`;
59
+ if (min !== void 0) return `faker.helpers.multiple(() => (${item}), { count: ${min} })`;
60
+ if (max !== void 0) return `faker.helpers.multiple(() => (${item}), { count: { min: 0, max: ${max} }})`;
61
+ return `faker.helpers.multiple(() => (${item}))`;
62
+ },
63
+ tuple: (items = []) => `[${items.join(", ")}]`,
64
+ enum: (items = [], type = "any") => `faker.helpers.arrayElement<${type}>([${items.join(", ")}])`,
65
+ union: (items = []) => `faker.helpers.arrayElement<any>([${items.join(", ")}])`,
66
+ datetime: () => "faker.date.anytime().toISOString()",
67
+ date: (type = "string", parser = "faker") => {
68
+ if (type === "string") {
69
+ if (parser !== "faker") return `${parser}(faker.date.anytime()).format("YYYY-MM-DD")`;
70
+ return "faker.date.anytime().toISOString().substring(0, 10)";
71
+ }
72
+ if (parser !== "faker") throw new Error(`type '${type}' and parser '${parser}' can not work together`);
73
+ return "faker.date.anytime()";
74
+ },
75
+ time: (type = "string", parser = "faker") => {
76
+ if (type === "string") {
77
+ if (parser !== "faker") return `${parser}(faker.date.anytime()).format("HH:mm:ss")`;
78
+ return "faker.date.anytime().toISOString().substring(11, 19)";
79
+ }
80
+ if (parser !== "faker") throw new Error(`type '${type}' and parser '${parser}' can not work together`);
81
+ return "faker.date.anytime()";
82
+ },
83
+ uuid: () => "faker.string.uuid()",
84
+ url: () => "faker.internet.url()",
85
+ and: (items = []) => `Object.assign({}, ${items.join(", ")})`,
86
+ object: () => "object",
87
+ ref: () => "ref",
88
+ matches: (value = "", regexGenerator = "faker") => {
89
+ if (regexGenerator === "randexp") return `${__kubb_core_transformers.default.toRegExpString(value, "RandExp")}.gen()`;
90
+ return `faker.helpers.fromRegExp(${__kubb_core_transformers.default.toRegExpString(value)})`;
91
+ },
92
+ email: () => "faker.internet.email()",
93
+ firstName: () => "faker.person.firstName()",
94
+ lastName: () => "faker.person.lastName()",
95
+ password: () => "faker.internet.password()",
96
+ phone: () => "faker.phone.number()",
97
+ blob: () => "faker.image.url() as unknown as Blob",
98
+ default: void 0,
99
+ describe: void 0,
100
+ const: (value) => value ?? "",
101
+ max: void 0,
102
+ min: void 0,
103
+ nullable: void 0,
104
+ nullish: void 0,
105
+ optional: void 0,
106
+ readOnly: void 0,
107
+ writeOnly: void 0,
108
+ deprecated: void 0,
109
+ example: void 0,
110
+ schema: void 0,
111
+ catchall: void 0,
112
+ name: void 0,
113
+ interface: void 0
114
+ };
115
+ /**
116
+ * @link based on https://github.com/cellular/oazapfts/blob/7ba226ebb15374e8483cc53e7532f1663179a22c/src/codegen/generate.ts#L398
117
+ */
118
+ function schemaKeywordSorter(_a, b) {
119
+ if (b.keyword === "null") return -1;
120
+ return 0;
121
+ }
122
+ function joinItems(items) {
123
+ switch (items.length) {
124
+ case 0: return "undefined";
125
+ case 1: return items[0];
126
+ default: return fakerKeywordMapper.union(items);
127
+ }
128
+ }
129
+ function parse({ current, parent, name, siblings }, options) {
130
+ const value = fakerKeywordMapper[current.keyword];
131
+ if (!value) return void 0;
132
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.union)) {
133
+ if (Array.isArray(current.args) && !current.args.length) return "";
134
+ return fakerKeywordMapper.union(current.args.map((schema) => parse({
135
+ parent: current,
136
+ current: schema,
137
+ siblings
138
+ }, {
139
+ ...options,
140
+ canOverride: false
141
+ })).filter(Boolean));
142
+ }
143
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.and)) return fakerKeywordMapper.and(current.args.map((schema) => parse({
144
+ parent: current,
145
+ current: schema,
146
+ siblings
147
+ }, {
148
+ ...options,
149
+ canOverride: false
150
+ })).filter(Boolean));
151
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.array)) return fakerKeywordMapper.array(current.args.items.map((schema) => parse({
152
+ parent: current,
153
+ current: schema,
154
+ siblings
155
+ }, {
156
+ ...options,
157
+ typeName: `${options.typeName}["${name}"][number]`,
158
+ canOverride: false
159
+ })).filter(Boolean), current.args.min, current.args.max);
160
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.enum)) {
161
+ const isParentTuple = parent ? (0, __kubb_plugin_oas.isKeyword)(parent, __kubb_plugin_oas.schemaKeywords.tuple) : false;
162
+ if (isParentTuple) return fakerKeywordMapper.enum(current.args.items.map((schema) => {
163
+ if (schema.format === "number") return schema.value;
164
+ if (schema.format === "boolean") return schema.value;
165
+ return __kubb_core_transformers.default.stringify(schema.value);
166
+ }));
167
+ return fakerKeywordMapper.enum(current.args.items.map((schema) => {
168
+ if (schema.format === "number") return schema.value;
169
+ if (schema.format === "boolean") return schema.value;
170
+ return __kubb_core_transformers.default.stringify(schema.value);
171
+ }), name ? `NonNullable<${options.typeName}>['${name}']` : void 0);
172
+ }
173
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.ref)) {
174
+ if (!current.args?.name) throw new Error(`Name not defined for keyword ${current.keyword}`);
175
+ if (options.canOverride) return `${current.args.name}(data)`;
176
+ return `${current.args.name}()`;
177
+ }
178
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.object)) {
179
+ const argsObject = Object.entries(current.args?.properties || {}).filter((item) => {
180
+ const schema = item[1];
181
+ return schema && typeof schema.map === "function";
182
+ }).map(([name$1, schemas]) => {
183
+ const nameSchema = schemas.find((schema) => schema.keyword === __kubb_plugin_oas.schemaKeywords.name);
184
+ const mappedName = nameSchema?.args || name$1;
185
+ if (options.mapper?.[mappedName]) return `"${name$1}": ${options.mapper?.[mappedName]}`;
186
+ return `"${name$1}": ${joinItems(schemas.sort(schemaKeywordSorter).map((schema) => parse({
187
+ name: name$1,
188
+ parent: current,
189
+ current: schema,
190
+ siblings: schemas
191
+ }, {
192
+ ...options,
193
+ canOverride: false
194
+ })).filter(Boolean))}`;
195
+ }).join(",");
196
+ return `{${argsObject}}`;
197
+ }
198
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.tuple)) {
199
+ if (Array.isArray(current.args.items)) return fakerKeywordMapper.tuple(current.args.items.map((schema) => parse({
200
+ parent: current,
201
+ current: schema,
202
+ siblings
203
+ }, {
204
+ ...options,
205
+ canOverride: false
206
+ })).filter(Boolean));
207
+ return parse({
208
+ parent: current,
209
+ current: current.args.items,
210
+ siblings
211
+ }, {
212
+ ...options,
213
+ canOverride: false
214
+ });
215
+ }
216
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.const)) {
217
+ if (current.args.format === "number" && current.args.name !== void 0) return fakerKeywordMapper.const(current.args.name?.toString());
218
+ return fakerKeywordMapper.const(__kubb_core_transformers.default.stringify(current.args.value));
219
+ }
220
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.matches) && current.args) return fakerKeywordMapper.matches(current.args, options.regexGenerator);
221
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.null) || (0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.undefined) || (0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.any)) return value() || "";
222
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.string)) {
223
+ if (siblings) {
224
+ const minSchema = __kubb_plugin_oas.SchemaGenerator.find(siblings, __kubb_plugin_oas.schemaKeywords.min);
225
+ const maxSchema = __kubb_plugin_oas.SchemaGenerator.find(siblings, __kubb_plugin_oas.schemaKeywords.max);
226
+ return fakerKeywordMapper.string(minSchema?.args, maxSchema?.args);
227
+ }
228
+ return fakerKeywordMapper.string();
229
+ }
230
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.number)) {
231
+ if (siblings) {
232
+ const minSchema = __kubb_plugin_oas.SchemaGenerator.find(siblings, __kubb_plugin_oas.schemaKeywords.min);
233
+ const maxSchema = __kubb_plugin_oas.SchemaGenerator.find(siblings, __kubb_plugin_oas.schemaKeywords.max);
234
+ return fakerKeywordMapper.number(minSchema?.args, maxSchema?.args);
235
+ }
236
+ return fakerKeywordMapper.number();
237
+ }
238
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.integer)) {
239
+ if (siblings) {
240
+ const minSchema = __kubb_plugin_oas.SchemaGenerator.find(siblings, __kubb_plugin_oas.schemaKeywords.min);
241
+ const maxSchema = __kubb_plugin_oas.SchemaGenerator.find(siblings, __kubb_plugin_oas.schemaKeywords.max);
242
+ return fakerKeywordMapper.integer(minSchema?.args, maxSchema?.args);
243
+ }
244
+ return fakerKeywordMapper.integer();
245
+ }
246
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.datetime)) return fakerKeywordMapper.datetime();
247
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.date)) return fakerKeywordMapper.date(current.args.type, options.dateParser);
248
+ if ((0, __kubb_plugin_oas.isKeyword)(current, __kubb_plugin_oas.schemaKeywords.time)) return fakerKeywordMapper.time(current.args.type, options.dateParser);
249
+ if (current.keyword in fakerKeywordMapper && "args" in current) {
250
+ const value$1 = fakerKeywordMapper[current.keyword];
251
+ const options$1 = JSON.stringify(current.args);
252
+ return value$1(options$1);
253
+ }
254
+ if (current.keyword in fakerKeywordMapper) return value();
255
+ return void 0;
256
+ }
257
+
258
+ //#endregion
259
+ //#region src/components/Faker.tsx
260
+ function Faker({ tree, description, name, typeName, seed, regexGenerator, canOverride, mapper, dateParser }) {
261
+ const fakerText = joinItems(tree.map((schema, _index, siblings) => parse({
262
+ parent: void 0,
263
+ current: schema,
264
+ siblings
265
+ }, {
266
+ name,
267
+ typeName,
268
+ seed,
269
+ regexGenerator,
270
+ mapper,
271
+ canOverride,
272
+ dateParser
273
+ })).filter(Boolean));
274
+ const isArray = fakerText.startsWith("faker.helpers.arrayElements") || fakerText.startsWith("faker.helpers.multiple");
275
+ const isObject = fakerText.startsWith("{");
276
+ const isTuple = fakerText.startsWith("faker.helpers.arrayElement");
277
+ let fakerTextWithOverride = fakerText;
278
+ if (canOverride && isObject) fakerTextWithOverride = `{
279
+ ...${fakerText},
280
+ ...data || {}
281
+ }`;
282
+ if (canOverride && isTuple) fakerTextWithOverride = `data || ${fakerText}`;
283
+ if (canOverride && isArray) fakerTextWithOverride = `[
284
+ ...${fakerText},
285
+ ...data || []
286
+ ]`;
287
+ const params = __kubb_react.FunctionParams.factory({ data: {
288
+ type: isArray ? typeName : `Partial<${typeName}>`,
289
+ optional: true
290
+ } });
291
+ return /* @__PURE__ */ (0, __kubb_react_jsx_runtime.jsx)(__kubb_react.File.Source, {
292
+ name,
293
+ isExportable: true,
294
+ isIndexable: true,
295
+ children: /* @__PURE__ */ (0, __kubb_react_jsx_runtime.jsxs)(__kubb_react.Function, {
296
+ export: true,
297
+ name,
298
+ JSDoc: { comments: [description ? `@description ${__kubb_core_transformers.default.jsStringEscape(description)}` : void 0].filter(Boolean) },
299
+ params: canOverride ? params.toConstructor() : void 0,
300
+ returnType: canOverride ? typeName : void 0,
301
+ children: [
302
+ seed ? `faker.seed(${JSON.stringify(seed)})` : void 0,
303
+ /* @__PURE__ */ (0, __kubb_react_jsx_runtime.jsx)("br", {}),
304
+ `return ${fakerTextWithOverride}`
305
+ ]
306
+ })
307
+ });
308
+ }
309
+
310
+ //#endregion
311
+ Object.defineProperty(exports, 'Faker', {
312
+ enumerable: true,
313
+ get: function () {
314
+ return Faker;
315
+ }
316
+ });
317
+ Object.defineProperty(exports, '__toESM', {
318
+ enumerable: true,
319
+ get: function () {
320
+ return __toESM;
321
+ }
322
+ });
323
+ //# sourceMappingURL=components-BPhQ4XSw.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components-BPhQ4XSw.cjs","names":["min?: number","max?: number","items: string[]","items: Array<string | number | boolean | undefined>","type: 'date' | 'string'","parser: Options['dateParser']","regexGenerator: 'faker' | 'randexp'","transformers","value?: string | number","_a: Schema","b: Schema","options: ParserOptions","schemaKeywords","name","SchemaGenerator","value","options","FunctionParams","File","Function","transformers"],"sources":["../src/parser.ts","../src/components/Faker.tsx"],"sourcesContent":["import transformers from '@kubb/core/transformers'\nimport type { Schema, SchemaKeywordBase, SchemaKeywordMapper, SchemaMapper } from '@kubb/plugin-oas'\nimport { isKeyword, SchemaGenerator, type SchemaTree, schemaKeywords } from '@kubb/plugin-oas'\nimport type { Options } from './types.ts'\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 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 undefined: () => 'undefined',\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 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 if (min !== undefined) {\n return `faker.helpers.multiple(() => (${item}), { count: ${min} })`\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 /**\n * ISO 8601\n */\n datetime: () => 'faker.date.anytime().toISOString()',\n /**\n * Type `'date'` Date\n * Type `'string'` ISO date format (YYYY-MM-DD)\n * @default ISO date format (YYYY-MM-DD)\n */\n date: (type: 'date' | 'string' = 'string', parser: Options['dateParser'] = 'faker') => {\n if (type === 'string') {\n if (parser !== 'faker') {\n return `${parser}(faker.date.anytime()).format(\"YYYY-MM-DD\")`\n }\n return 'faker.date.anytime().toISOString().substring(0, 10)'\n }\n\n if (parser !== 'faker') {\n throw new Error(`type '${type}' and parser '${parser}' can not work together`)\n }\n\n return 'faker.date.anytime()'\n },\n /**\n * Type `'date'` Date\n * Type `'string'` ISO time format (HH:mm:ss[.SSSSSS])\n * @default ISO time format (HH:mm:ss[.SSSSSS])\n */\n time: (type: 'date' | 'string' = 'string', parser: Options['dateParser'] = 'faker') => {\n if (type === 'string') {\n if (parser !== 'faker') {\n return `${parser}(faker.date.anytime()).format(\"HH:mm:ss\")`\n }\n return 'faker.date.anytime().toISOString().substring(11, 19)'\n }\n\n if (parser !== 'faker') {\n throw new Error(`type '${type}' 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[] = []) => `Object.assign({}, ${items.join(', ')})`,\n object: () => 'object',\n ref: () => 'ref',\n matches: (value = '', regexGenerator: 'faker' | 'randexp' = 'faker') => {\n if (regexGenerator === 'randexp') {\n return `${transformers.toRegExpString(value, 'RandExp')}.gen()`\n }\n return `faker.helpers.fromRegExp(${transformers.toRegExpString(value)})`\n },\n email: () => 'faker.internet.email()',\n firstName: () => 'faker.person.firstName()',\n lastName: () => 'faker.person.lastName()',\n password: () => 'faker.internet.password()',\n phone: () => 'faker.phone.number()',\n blob: () => 'faker.image.url() as unknown as Blob',\n default: undefined,\n describe: undefined,\n const: (value?: string | number) => (value as string) ?? '',\n max: undefined,\n min: undefined,\n nullable: undefined,\n nullish: undefined,\n optional: undefined,\n readOnly: undefined,\n writeOnly: undefined,\n deprecated: undefined,\n example: undefined,\n schema: undefined,\n catchall: undefined,\n name: undefined,\n interface: undefined,\n} satisfies SchemaMapper<string | null | undefined>\n\n/**\n * @link based on https://github.com/cellular/oazapfts/blob/7ba226ebb15374e8483cc53e7532f1663179a22c/src/codegen/generate.ts#L398\n */\n\nfunction schemaKeywordSorter(_a: Schema, b: Schema) {\n if (b.keyword === 'null') {\n return -1\n }\n\n return 0\n}\n\nexport function joinItems(items: string[]): string {\n switch (items.length) {\n case 0:\n return 'undefined'\n case 1:\n return items[0]!\n default:\n return fakerKeywordMapper.union(items)\n }\n}\n\ntype ParserOptions = {\n name: string\n typeName?: string\n description?: string\n\n seed?: number | number[]\n regexGenerator?: 'faker' | 'randexp'\n canOverride?: boolean\n dateParser?: Options['dateParser']\n mapper?: Record<string, string>\n}\n\nexport function parse({ current, parent, name, siblings }: SchemaTree, options: ParserOptions): string | null | undefined {\n const value = fakerKeywordMapper[current.keyword as keyof typeof fakerKeywordMapper]\n\n if (!value) {\n return undefined\n }\n\n if (isKeyword(current, schemaKeywords.union)) {\n if (Array.isArray(current.args) && !current.args.length) {\n return ''\n }\n\n return fakerKeywordMapper.union(\n current.args.map((schema) => parse({ parent: current, current: schema, siblings }, { ...options, canOverride: false })).filter(Boolean),\n )\n }\n\n if (isKeyword(current, schemaKeywords.and)) {\n return fakerKeywordMapper.and(\n current.args.map((schema) => parse({ parent: current, current: schema, siblings }, { ...options, canOverride: false })).filter(Boolean),\n )\n }\n\n if (isKeyword(current, schemaKeywords.array)) {\n return fakerKeywordMapper.array(\n current.args.items\n .map((schema) =>\n parse(\n { parent: current, current: schema, siblings },\n {\n ...options,\n typeName: `${options.typeName}[\"${name}\"][number]`,\n canOverride: false,\n },\n ),\n )\n .filter(Boolean),\n current.args.min,\n current.args.max,\n )\n }\n\n if (isKeyword(current, schemaKeywords.enum)) {\n const isParentTuple = parent ? isKeyword(parent, schemaKeywords.tuple) : false\n\n if (isParentTuple) {\n return fakerKeywordMapper.enum(\n current.args.items.map((schema) => {\n if (schema.format === 'number') {\n return schema.value\n }\n\n if (schema.format === 'boolean') {\n return schema.value\n }\n return transformers.stringify(schema.value)\n }),\n )\n }\n\n return fakerKeywordMapper.enum(\n current.args.items.map((schema) => {\n if (schema.format === 'number') {\n return schema.value\n }\n if (schema.format === 'boolean') {\n return schema.value\n }\n return transformers.stringify(schema.value)\n }),\n // TODO replace this with getEnumNameFromSchema\n name ? `NonNullable<${options.typeName}>['${name}']` : undefined,\n )\n }\n\n if (isKeyword(current, schemaKeywords.ref)) {\n if (!current.args?.name) {\n throw new Error(`Name not defined for keyword ${current.keyword}`)\n }\n\n if (options.canOverride) {\n return `${current.args.name}(data)`\n }\n\n return `${current.args.name}()`\n }\n\n if (isKeyword(current, schemaKeywords.object)) {\n const argsObject = Object.entries(current.args?.properties || {})\n .filter((item) => {\n const schema = item[1]\n return schema && typeof schema.map === 'function'\n })\n .map(([name, schemas]) => {\n const nameSchema = schemas.find((schema) => schema.keyword === schemaKeywords.name) as SchemaKeywordMapper['name']\n const mappedName = nameSchema?.args || name\n\n // custom mapper(pluginOptions)\n if (options.mapper?.[mappedName]) {\n return `\"${name}\": ${options.mapper?.[mappedName]}`\n }\n\n return `\"${name}\": ${joinItems(\n schemas\n .sort(schemaKeywordSorter)\n .map((schema) => parse({ name, parent: current, current: schema, siblings: schemas }, { ...options, canOverride: false }))\n .filter(Boolean),\n )}`\n })\n .join(',')\n\n return `{${argsObject}}`\n }\n\n if (isKeyword(current, schemaKeywords.tuple)) {\n if (Array.isArray(current.args.items)) {\n return fakerKeywordMapper.tuple(\n current.args.items.map((schema) => parse({ parent: current, current: schema, siblings }, { ...options, canOverride: false })).filter(Boolean),\n )\n }\n\n return parse({ parent: current, current: current.args.items, siblings }, { ...options, canOverride: false })\n }\n\n if (isKeyword(current, schemaKeywords.const)) {\n if (current.args.format === 'number' && current.args.name !== undefined) {\n return fakerKeywordMapper.const(current.args.name?.toString())\n }\n return fakerKeywordMapper.const(transformers.stringify(current.args.value))\n }\n\n if (isKeyword(current, schemaKeywords.matches) && current.args) {\n return fakerKeywordMapper.matches(current.args, options.regexGenerator)\n }\n\n if (isKeyword(current, schemaKeywords.null) || isKeyword(current, schemaKeywords.undefined) || isKeyword(current, schemaKeywords.any)) {\n return value() || ''\n }\n\n if (isKeyword(current, schemaKeywords.string)) {\n if (siblings) {\n const minSchema = SchemaGenerator.find(siblings, schemaKeywords.min)\n const maxSchema = SchemaGenerator.find(siblings, schemaKeywords.max)\n\n return fakerKeywordMapper.string(minSchema?.args, maxSchema?.args)\n }\n\n return fakerKeywordMapper.string()\n }\n\n if (isKeyword(current, schemaKeywords.number)) {\n if (siblings) {\n const minSchema = SchemaGenerator.find(siblings, schemaKeywords.min)\n const maxSchema = SchemaGenerator.find(siblings, schemaKeywords.max)\n\n return fakerKeywordMapper.number(minSchema?.args, maxSchema?.args)\n }\n\n return fakerKeywordMapper.number()\n }\n\n if (isKeyword(current, schemaKeywords.integer)) {\n if (siblings) {\n const minSchema = SchemaGenerator.find(siblings, schemaKeywords.min)\n const maxSchema = SchemaGenerator.find(siblings, schemaKeywords.max)\n\n return fakerKeywordMapper.integer(minSchema?.args, maxSchema?.args)\n }\n\n return fakerKeywordMapper.integer()\n }\n\n if (isKeyword(current, schemaKeywords.datetime)) {\n return fakerKeywordMapper.datetime()\n }\n\n if (isKeyword(current, schemaKeywords.date)) {\n return fakerKeywordMapper.date(current.args.type, options.dateParser)\n }\n\n if (isKeyword(current, schemaKeywords.time)) {\n return fakerKeywordMapper.time(current.args.type, options.dateParser)\n }\n\n if (current.keyword in fakerKeywordMapper && 'args' in current) {\n const value = fakerKeywordMapper[current.keyword as keyof typeof fakerKeywordMapper] as (typeof fakerKeywordMapper)['const']\n\n const options = JSON.stringify((current as SchemaKeywordBase<unknown>).args)\n\n return value(options)\n }\n\n if (current.keyword in fakerKeywordMapper) {\n return value()\n }\n\n return undefined\n}\n","import { File, Function, FunctionParams } from '@kubb/react'\n\nimport transformers from '@kubb/core/transformers'\nimport type { Schema } from '@kubb/plugin-oas'\nimport * as parserFaker from '../parser.ts'\nimport type { PluginFaker } from '../types.ts'\n\ntype Props = {\n name: string\n typeName: string\n tree: Array<Schema>\n seed?: PluginFaker['options']['seed']\n description?: string\n regexGenerator?: PluginFaker['options']['regexGenerator']\n mapper?: PluginFaker['options']['mapper']\n dateParser?: PluginFaker['options']['dateParser']\n canOverride: boolean\n}\n\nexport function Faker({ tree, description, name, typeName, seed, regexGenerator, canOverride, mapper, dateParser }: Props) {\n const fakerText = parserFaker.joinItems(\n tree\n .map((schema, _index, siblings) =>\n parserFaker.parse(\n { parent: undefined, current: schema, siblings },\n {\n name,\n typeName,\n seed,\n regexGenerator,\n mapper,\n canOverride,\n dateParser,\n },\n ),\n )\n .filter(Boolean),\n )\n\n const isArray = fakerText.startsWith('faker.helpers.arrayElements') || fakerText.startsWith('faker.helpers.multiple')\n const isObject = fakerText.startsWith('{')\n const isTuple = fakerText.startsWith('faker.helpers.arrayElement')\n\n let fakerTextWithOverride = fakerText\n\n if (canOverride && isObject) {\n fakerTextWithOverride = `{\n ...${fakerText},\n ...data || {}\n}`\n }\n\n if (canOverride && isTuple) {\n fakerTextWithOverride = `data || ${fakerText}`\n }\n\n if (canOverride && isArray) {\n fakerTextWithOverride = `[\n ...${fakerText},\n ...data || []\n ]`\n }\n\n const params = FunctionParams.factory({\n data: {\n // making a partial out of an array does not make sense\n type: isArray ? typeName : `Partial<${typeName}>`,\n optional: true,\n },\n })\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function\n export\n name={name}\n JSDoc={{ comments: [description ? `@description ${transformers.jsStringEscape(description)}` : undefined].filter(Boolean) }}\n params={canOverride ? params.toConstructor() : undefined}\n returnType={canOverride ? typeName : undefined}\n >\n {seed ? `faker.seed(${JSON.stringify(seed)})` : undefined}\n <br />\n {`return ${fakerTextWithOverride}`}\n </Function>\n </File.Source>\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,289 @@
1
+ import transformers from "@kubb/core/transformers";
2
+ import { SchemaGenerator, isKeyword, schemaKeywords } from "@kubb/plugin-oas";
3
+ import { File, Function, FunctionParams } from "@kubb/react";
4
+ import { jsx, jsxs } from "@kubb/react/jsx-runtime";
5
+
6
+ //#region src/parser.ts
7
+ const fakerKeywordMapper = {
8
+ any: () => "undefined",
9
+ unknown: () => "undefined",
10
+ void: () => "undefined",
11
+ number: (min, max) => {
12
+ if (max !== void 0 && min !== void 0) return `faker.number.float({ min: ${min}, max: ${max} })`;
13
+ if (max !== void 0) return `faker.number.float({ max: ${max} })`;
14
+ if (min !== void 0) return `faker.number.float({ min: ${min} })`;
15
+ return "faker.number.float()";
16
+ },
17
+ integer: (min, max) => {
18
+ if (max !== void 0 && min !== void 0) return `faker.number.int({ min: ${min}, max: ${max} })`;
19
+ if (max !== void 0) return `faker.number.int({ max: ${max} })`;
20
+ if (min !== void 0) return `faker.number.int({ min: ${min} })`;
21
+ return "faker.number.int()";
22
+ },
23
+ string: (min, max) => {
24
+ if (max !== void 0 && min !== void 0) return `faker.string.alpha({ length: { min: ${min}, max: ${max} } })`;
25
+ if (max !== void 0) return `faker.string.alpha({ length: ${max} })`;
26
+ if (min !== void 0) return `faker.string.alpha({ length: ${min} })`;
27
+ return "faker.string.alpha()";
28
+ },
29
+ boolean: () => "faker.datatype.boolean()",
30
+ undefined: () => "undefined",
31
+ null: () => "null",
32
+ array: (items = [], min, max) => {
33
+ if (items.length > 1) return `faker.helpers.arrayElements([${items.join(", ")}])`;
34
+ const item = items.at(0);
35
+ if (min !== void 0 && max !== void 0) return `faker.helpers.multiple(() => (${item}), { count: { min: ${min}, max: ${max} }})`;
36
+ if (min !== void 0) return `faker.helpers.multiple(() => (${item}), { count: ${min} })`;
37
+ if (max !== void 0) return `faker.helpers.multiple(() => (${item}), { count: { min: 0, max: ${max} }})`;
38
+ return `faker.helpers.multiple(() => (${item}))`;
39
+ },
40
+ tuple: (items = []) => `[${items.join(", ")}]`,
41
+ enum: (items = [], type = "any") => `faker.helpers.arrayElement<${type}>([${items.join(", ")}])`,
42
+ union: (items = []) => `faker.helpers.arrayElement<any>([${items.join(", ")}])`,
43
+ datetime: () => "faker.date.anytime().toISOString()",
44
+ date: (type = "string", parser = "faker") => {
45
+ if (type === "string") {
46
+ if (parser !== "faker") return `${parser}(faker.date.anytime()).format("YYYY-MM-DD")`;
47
+ return "faker.date.anytime().toISOString().substring(0, 10)";
48
+ }
49
+ if (parser !== "faker") throw new Error(`type '${type}' and parser '${parser}' can not work together`);
50
+ return "faker.date.anytime()";
51
+ },
52
+ time: (type = "string", parser = "faker") => {
53
+ if (type === "string") {
54
+ if (parser !== "faker") return `${parser}(faker.date.anytime()).format("HH:mm:ss")`;
55
+ return "faker.date.anytime().toISOString().substring(11, 19)";
56
+ }
57
+ if (parser !== "faker") throw new Error(`type '${type}' and parser '${parser}' can not work together`);
58
+ return "faker.date.anytime()";
59
+ },
60
+ uuid: () => "faker.string.uuid()",
61
+ url: () => "faker.internet.url()",
62
+ and: (items = []) => `Object.assign({}, ${items.join(", ")})`,
63
+ object: () => "object",
64
+ ref: () => "ref",
65
+ matches: (value = "", regexGenerator = "faker") => {
66
+ if (regexGenerator === "randexp") return `${transformers.toRegExpString(value, "RandExp")}.gen()`;
67
+ return `faker.helpers.fromRegExp(${transformers.toRegExpString(value)})`;
68
+ },
69
+ email: () => "faker.internet.email()",
70
+ firstName: () => "faker.person.firstName()",
71
+ lastName: () => "faker.person.lastName()",
72
+ password: () => "faker.internet.password()",
73
+ phone: () => "faker.phone.number()",
74
+ blob: () => "faker.image.url() as unknown as Blob",
75
+ default: void 0,
76
+ describe: void 0,
77
+ const: (value) => value ?? "",
78
+ max: void 0,
79
+ min: void 0,
80
+ nullable: void 0,
81
+ nullish: void 0,
82
+ optional: void 0,
83
+ readOnly: void 0,
84
+ writeOnly: void 0,
85
+ deprecated: void 0,
86
+ example: void 0,
87
+ schema: void 0,
88
+ catchall: void 0,
89
+ name: void 0,
90
+ interface: void 0
91
+ };
92
+ /**
93
+ * @link based on https://github.com/cellular/oazapfts/blob/7ba226ebb15374e8483cc53e7532f1663179a22c/src/codegen/generate.ts#L398
94
+ */
95
+ function schemaKeywordSorter(_a, b) {
96
+ if (b.keyword === "null") return -1;
97
+ return 0;
98
+ }
99
+ function joinItems(items) {
100
+ switch (items.length) {
101
+ case 0: return "undefined";
102
+ case 1: return items[0];
103
+ default: return fakerKeywordMapper.union(items);
104
+ }
105
+ }
106
+ function parse({ current, parent, name, siblings }, options) {
107
+ const value = fakerKeywordMapper[current.keyword];
108
+ if (!value) return void 0;
109
+ if (isKeyword(current, schemaKeywords.union)) {
110
+ if (Array.isArray(current.args) && !current.args.length) return "";
111
+ return fakerKeywordMapper.union(current.args.map((schema) => parse({
112
+ parent: current,
113
+ current: schema,
114
+ siblings
115
+ }, {
116
+ ...options,
117
+ canOverride: false
118
+ })).filter(Boolean));
119
+ }
120
+ if (isKeyword(current, schemaKeywords.and)) return fakerKeywordMapper.and(current.args.map((schema) => parse({
121
+ parent: current,
122
+ current: schema,
123
+ siblings
124
+ }, {
125
+ ...options,
126
+ canOverride: false
127
+ })).filter(Boolean));
128
+ if (isKeyword(current, schemaKeywords.array)) return fakerKeywordMapper.array(current.args.items.map((schema) => parse({
129
+ parent: current,
130
+ current: schema,
131
+ siblings
132
+ }, {
133
+ ...options,
134
+ typeName: `${options.typeName}["${name}"][number]`,
135
+ canOverride: false
136
+ })).filter(Boolean), current.args.min, current.args.max);
137
+ if (isKeyword(current, schemaKeywords.enum)) {
138
+ const isParentTuple = parent ? isKeyword(parent, schemaKeywords.tuple) : false;
139
+ if (isParentTuple) return fakerKeywordMapper.enum(current.args.items.map((schema) => {
140
+ if (schema.format === "number") return schema.value;
141
+ if (schema.format === "boolean") return schema.value;
142
+ return transformers.stringify(schema.value);
143
+ }));
144
+ return fakerKeywordMapper.enum(current.args.items.map((schema) => {
145
+ if (schema.format === "number") return schema.value;
146
+ if (schema.format === "boolean") return schema.value;
147
+ return transformers.stringify(schema.value);
148
+ }), name ? `NonNullable<${options.typeName}>['${name}']` : void 0);
149
+ }
150
+ if (isKeyword(current, schemaKeywords.ref)) {
151
+ if (!current.args?.name) throw new Error(`Name not defined for keyword ${current.keyword}`);
152
+ if (options.canOverride) return `${current.args.name}(data)`;
153
+ return `${current.args.name}()`;
154
+ }
155
+ if (isKeyword(current, schemaKeywords.object)) {
156
+ const argsObject = Object.entries(current.args?.properties || {}).filter((item) => {
157
+ const schema = item[1];
158
+ return schema && typeof schema.map === "function";
159
+ }).map(([name$1, schemas]) => {
160
+ const nameSchema = schemas.find((schema) => schema.keyword === schemaKeywords.name);
161
+ const mappedName = nameSchema?.args || name$1;
162
+ if (options.mapper?.[mappedName]) return `"${name$1}": ${options.mapper?.[mappedName]}`;
163
+ return `"${name$1}": ${joinItems(schemas.sort(schemaKeywordSorter).map((schema) => parse({
164
+ name: name$1,
165
+ parent: current,
166
+ current: schema,
167
+ siblings: schemas
168
+ }, {
169
+ ...options,
170
+ canOverride: false
171
+ })).filter(Boolean))}`;
172
+ }).join(",");
173
+ return `{${argsObject}}`;
174
+ }
175
+ if (isKeyword(current, schemaKeywords.tuple)) {
176
+ if (Array.isArray(current.args.items)) return fakerKeywordMapper.tuple(current.args.items.map((schema) => parse({
177
+ parent: current,
178
+ current: schema,
179
+ siblings
180
+ }, {
181
+ ...options,
182
+ canOverride: false
183
+ })).filter(Boolean));
184
+ return parse({
185
+ parent: current,
186
+ current: current.args.items,
187
+ siblings
188
+ }, {
189
+ ...options,
190
+ canOverride: false
191
+ });
192
+ }
193
+ if (isKeyword(current, schemaKeywords.const)) {
194
+ if (current.args.format === "number" && current.args.name !== void 0) return fakerKeywordMapper.const(current.args.name?.toString());
195
+ return fakerKeywordMapper.const(transformers.stringify(current.args.value));
196
+ }
197
+ if (isKeyword(current, schemaKeywords.matches) && current.args) return fakerKeywordMapper.matches(current.args, options.regexGenerator);
198
+ if (isKeyword(current, schemaKeywords.null) || isKeyword(current, schemaKeywords.undefined) || isKeyword(current, schemaKeywords.any)) return value() || "";
199
+ if (isKeyword(current, schemaKeywords.string)) {
200
+ if (siblings) {
201
+ const minSchema = SchemaGenerator.find(siblings, schemaKeywords.min);
202
+ const maxSchema = SchemaGenerator.find(siblings, schemaKeywords.max);
203
+ return fakerKeywordMapper.string(minSchema?.args, maxSchema?.args);
204
+ }
205
+ return fakerKeywordMapper.string();
206
+ }
207
+ if (isKeyword(current, schemaKeywords.number)) {
208
+ if (siblings) {
209
+ const minSchema = SchemaGenerator.find(siblings, schemaKeywords.min);
210
+ const maxSchema = SchemaGenerator.find(siblings, schemaKeywords.max);
211
+ return fakerKeywordMapper.number(minSchema?.args, maxSchema?.args);
212
+ }
213
+ return fakerKeywordMapper.number();
214
+ }
215
+ if (isKeyword(current, schemaKeywords.integer)) {
216
+ if (siblings) {
217
+ const minSchema = SchemaGenerator.find(siblings, schemaKeywords.min);
218
+ const maxSchema = SchemaGenerator.find(siblings, schemaKeywords.max);
219
+ return fakerKeywordMapper.integer(minSchema?.args, maxSchema?.args);
220
+ }
221
+ return fakerKeywordMapper.integer();
222
+ }
223
+ if (isKeyword(current, schemaKeywords.datetime)) return fakerKeywordMapper.datetime();
224
+ if (isKeyword(current, schemaKeywords.date)) return fakerKeywordMapper.date(current.args.type, options.dateParser);
225
+ if (isKeyword(current, schemaKeywords.time)) return fakerKeywordMapper.time(current.args.type, options.dateParser);
226
+ if (current.keyword in fakerKeywordMapper && "args" in current) {
227
+ const value$1 = fakerKeywordMapper[current.keyword];
228
+ const options$1 = JSON.stringify(current.args);
229
+ return value$1(options$1);
230
+ }
231
+ if (current.keyword in fakerKeywordMapper) return value();
232
+ return void 0;
233
+ }
234
+
235
+ //#endregion
236
+ //#region src/components/Faker.tsx
237
+ function Faker({ tree, description, name, typeName, seed, regexGenerator, canOverride, mapper, dateParser }) {
238
+ const fakerText = joinItems(tree.map((schema, _index, siblings) => parse({
239
+ parent: void 0,
240
+ current: schema,
241
+ siblings
242
+ }, {
243
+ name,
244
+ typeName,
245
+ seed,
246
+ regexGenerator,
247
+ mapper,
248
+ canOverride,
249
+ dateParser
250
+ })).filter(Boolean));
251
+ const isArray = fakerText.startsWith("faker.helpers.arrayElements") || fakerText.startsWith("faker.helpers.multiple");
252
+ const isObject = fakerText.startsWith("{");
253
+ const isTuple = fakerText.startsWith("faker.helpers.arrayElement");
254
+ let fakerTextWithOverride = fakerText;
255
+ if (canOverride && isObject) fakerTextWithOverride = `{
256
+ ...${fakerText},
257
+ ...data || {}
258
+ }`;
259
+ if (canOverride && isTuple) fakerTextWithOverride = `data || ${fakerText}`;
260
+ if (canOverride && isArray) fakerTextWithOverride = `[
261
+ ...${fakerText},
262
+ ...data || []
263
+ ]`;
264
+ const params = FunctionParams.factory({ data: {
265
+ type: isArray ? typeName : `Partial<${typeName}>`,
266
+ optional: true
267
+ } });
268
+ return /* @__PURE__ */ jsx(File.Source, {
269
+ name,
270
+ isExportable: true,
271
+ isIndexable: true,
272
+ children: /* @__PURE__ */ jsxs(Function, {
273
+ export: true,
274
+ name,
275
+ JSDoc: { comments: [description ? `@description ${transformers.jsStringEscape(description)}` : void 0].filter(Boolean) },
276
+ params: canOverride ? params.toConstructor() : void 0,
277
+ returnType: canOverride ? typeName : void 0,
278
+ children: [
279
+ seed ? `faker.seed(${JSON.stringify(seed)})` : void 0,
280
+ /* @__PURE__ */ jsx("br", {}),
281
+ `return ${fakerTextWithOverride}`
282
+ ]
283
+ })
284
+ });
285
+ }
286
+
287
+ //#endregion
288
+ export { Faker };
289
+ //# sourceMappingURL=components-iqgTT-Ux.js.map