@kubb/plugin-faker 5.0.0-beta.3 → 5.0.0-beta.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -5
- package/dist/{Faker-CdyPfOPg.d.ts → Faker-BaLJxPyl.d.ts} +2 -2
- package/dist/{Faker-fcQEB9i5.js → Faker-CXZVQQ7e.js} +36 -99
- package/dist/Faker-CXZVQQ7e.js.map +1 -0
- package/dist/{Faker-BgleOzVN.cjs → Faker-CkJccVKI.cjs} +35 -122
- package/dist/Faker-CkJccVKI.cjs.map +1 -0
- package/dist/components.cjs +1 -1
- package/dist/components.d.ts +1 -1
- package/dist/components.js +1 -1
- package/dist/{fakerGenerator-D7daHCh6.js → fakerGenerator-BvMBDgwp.js} +126 -32
- package/dist/fakerGenerator-BvMBDgwp.js.map +1 -0
- package/dist/fakerGenerator-DSvAJTq3.d.ts +15 -0
- package/dist/{fakerGenerator-VJEVzLjc.cjs → fakerGenerator-DhNV9xBw.cjs} +127 -33
- package/dist/fakerGenerator-DhNV9xBw.cjs.map +1 -0
- package/dist/generators.cjs +1 -1
- package/dist/generators.d.ts +1 -1
- package/dist/generators.js +1 -1
- package/dist/index.cjs +177 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +33 -12
- package/dist/index.js +178 -37
- package/dist/index.js.map +1 -1
- package/dist/{printerFaker-CJiwzoto.d.ts → printerFaker-Bhwq62d1.d.ts} +63 -26
- package/extension.yaml +817 -0
- package/package.json +8 -13
- package/src/components/Faker.tsx +44 -63
- package/src/generators/fakerGenerator.tsx +35 -35
- package/src/plugin.ts +23 -6
- package/src/printers/printerFaker.ts +80 -16
- package/src/resolvers/resolverFaker.ts +29 -37
- package/src/types.ts +36 -23
- package/src/utils.ts +6 -105
- package/dist/Faker-BgleOzVN.cjs.map +0 -1
- package/dist/Faker-fcQEB9i5.js.map +0 -1
- package/dist/fakerGenerator-C3Ho3BaI.d.ts +0 -9
- package/dist/fakerGenerator-D7daHCh6.js.map +0 -1
- package/dist/fakerGenerator-VJEVzLjc.cjs.map +0 -1
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
-
<h1
|
|
2
|
+
<h1>@kubb/plugin-faker</h1>
|
|
3
3
|
<a href="https://kubb.dev" target="_blank" rel="noopener noreferrer">
|
|
4
4
|
<img width="180" src="https://raw.githubusercontent.com/kubb-labs/kubb/main/assets/logo.png" alt="Kubb logo">
|
|
5
5
|
</a>
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
[![Sponsors][sponsors-src]][sponsors-href]
|
|
12
12
|
|
|
13
13
|
<h4>
|
|
14
|
-
<a href="https://codesandbox.io/s/github/kubb-labs/
|
|
14
|
+
<a href="https://codesandbox.io/s/github/kubb-labs/plugins/tree/main/examples/faker" target="_blank">View Demo</a>
|
|
15
15
|
<span> · </span>
|
|
16
|
-
<a href="https://kubb.dev/" target="_blank">Documentation</a>
|
|
16
|
+
<a href="https://kubb.dev/plugins/faker" target="_blank">Documentation</a>
|
|
17
17
|
<span> · </span>
|
|
18
18
|
<a href="https://github.com/kubb-labs/kubb/issues/" target="_blank">Report Bug</a>
|
|
19
19
|
<span> · </span>
|
|
@@ -21,11 +21,32 @@
|
|
|
21
21
|
</h4>
|
|
22
22
|
</div>
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
`@kubb/plugin-faker` generates Faker.js factory functions from your OpenAPI schemas. Each schema produces a function that returns realistic mock data matching the schema's structure.
|
|
25
|
+
|
|
26
|
+
## Features
|
|
27
|
+
|
|
28
|
+
- Creates one factory function per schema with optional field overrides
|
|
29
|
+
- Uses Faker.js to produce realistic values for common field types
|
|
30
|
+
- Handles recursive schemas with lazy getters to avoid circular reference errors
|
|
31
|
+
- Works with `@kubb/plugin-msw` to serve mock responses in the browser or Node.js
|
|
32
|
+
|
|
33
|
+
## Installation
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
bun add @kubb/plugin-faker
|
|
37
|
+
# or
|
|
38
|
+
pnpm add @kubb/plugin-faker
|
|
39
|
+
# or
|
|
40
|
+
npm install @kubb/plugin-faker
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Documentation
|
|
44
|
+
|
|
45
|
+
See the [full documentation](https://kubb.dev/plugins/faker) for configuration options and examples.
|
|
25
46
|
|
|
26
47
|
## Supporting Kubb
|
|
27
48
|
|
|
28
|
-
Kubb
|
|
49
|
+
Kubb is an MIT-licensed open source project with its ongoing development made possible entirely by the support of Sponsors. If you would like to become a sponsor, please consider:
|
|
29
50
|
|
|
30
51
|
- [Become a Sponsor on GitHub](https://github.com/sponsors/stijnvanhulle)
|
|
31
52
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __name } from "./chunk--u3MIqq1.js";
|
|
2
|
-
import { o as PluginFaker, t as PrinterFakerFactory } from "./printerFaker-
|
|
2
|
+
import { o as PluginFaker, t as PrinterFakerFactory } from "./printerFaker-Bhwq62d1.js";
|
|
3
3
|
import { ast } from "@kubb/core";
|
|
4
4
|
import { KubbReactNode } from "@kubb/renderer-jsx/types";
|
|
5
5
|
|
|
@@ -24,4 +24,4 @@ declare function Faker({
|
|
|
24
24
|
}: Props): KubbReactNode;
|
|
25
25
|
//#endregion
|
|
26
26
|
export { Faker as t };
|
|
27
|
-
//# sourceMappingURL=Faker-
|
|
27
|
+
//# sourceMappingURL=Faker-BaLJxPyl.d.ts.map
|
|
@@ -96,14 +96,6 @@ function canOverrideSchema(node) {
|
|
|
96
96
|
]).has(node.type);
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
|
-
* Resolves a schema reference by looking up the referenced schema in the provided array.
|
|
100
|
-
* Returns the original node if it's not a reference.
|
|
101
|
-
*/
|
|
102
|
-
function resolveSchemaRef(node, schemas) {
|
|
103
|
-
if (node.type !== "ref") return node;
|
|
104
|
-
return schemas.find((schema) => schema.name === node.name && schema.type !== "ref") ?? node;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
99
|
* Resolves a parameter name based on its location (path, query, header, etc.) using the provided resolver.
|
|
108
100
|
*/
|
|
109
101
|
function resolveParamNameByLocation(resolver, node, param) {
|
|
@@ -143,10 +135,11 @@ function shouldInlineSingleResponseSchema(schema) {
|
|
|
143
135
|
* Returns null if no responses are provided, or embeds single simple responses inline.
|
|
144
136
|
*/
|
|
145
137
|
function buildResponseUnionSchema(node, resolver) {
|
|
146
|
-
const responses = node.responses.filter((response) => response.schema);
|
|
138
|
+
const responses = node.responses.filter((response) => response.content?.[0]?.schema);
|
|
147
139
|
if (!responses.length) return null;
|
|
148
140
|
if (responses.length === 1) {
|
|
149
|
-
|
|
141
|
+
const schema = responses[0].content?.[0]?.schema;
|
|
142
|
+
if (schema && shouldInlineSingleResponseSchema(schema)) return schema;
|
|
150
143
|
return ast.createSchema({
|
|
151
144
|
type: "ref",
|
|
152
145
|
name: resolver.resolveResponseStatusName(node, responses[0].statusCode)
|
|
@@ -180,56 +173,6 @@ function toRelativeImportPath(from, to) {
|
|
|
180
173
|
const relativePath = posix.relative(posix.dirname(from), to);
|
|
181
174
|
return relativePath.startsWith("../") ? relativePath : `./${relativePath}`;
|
|
182
175
|
}
|
|
183
|
-
function escapeRegExp(value) {
|
|
184
|
-
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Filters imports to only those that are actually used in the generated code.
|
|
188
|
-
* Checks for function calls matching the imported names.
|
|
189
|
-
*/
|
|
190
|
-
function filterUsedImports(imports, text, skipImportNames = []) {
|
|
191
|
-
return imports.filter((entry) => {
|
|
192
|
-
return (Array.isArray(entry.name) ? entry.name : [entry.name]).map((name) => {
|
|
193
|
-
if (typeof name === "string") return name;
|
|
194
|
-
return name?.name ?? name?.propertyName;
|
|
195
|
-
}).filter((name) => Boolean(name)).some((name) => {
|
|
196
|
-
if (skipImportNames.includes(name)) return false;
|
|
197
|
-
return new RegExp(`\\b${escapeRegExp(name)}\\b(?=\\s*\\()`).test(text);
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Detects and resolves import name conflicts by adding aliases to conflicting names.
|
|
203
|
-
* Returns updated imports with a mapping of original names to their aliases.
|
|
204
|
-
*/
|
|
205
|
-
function aliasConflictingImports(imports, reservedNames) {
|
|
206
|
-
const reservedNameSet = new Set(reservedNames);
|
|
207
|
-
const aliases = /* @__PURE__ */ new Map();
|
|
208
|
-
return {
|
|
209
|
-
imports: imports.map((entry) => {
|
|
210
|
-
const aliasedNames = (Array.isArray(entry.name) ? entry.name : [entry.name]).map((item) => {
|
|
211
|
-
if (typeof item !== "string" || !reservedNameSet.has(item)) return item;
|
|
212
|
-
const alias = `${item}Schema`;
|
|
213
|
-
aliases.set(item, alias);
|
|
214
|
-
return {
|
|
215
|
-
propertyName: item,
|
|
216
|
-
name: alias
|
|
217
|
-
};
|
|
218
|
-
});
|
|
219
|
-
return aliasedNames.some((item) => typeof item === "object" && item.name) ? {
|
|
220
|
-
...entry,
|
|
221
|
-
name: aliasedNames
|
|
222
|
-
} : entry;
|
|
223
|
-
}),
|
|
224
|
-
aliases
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Replaces all occurrences of original names with their aliased versions in the given text.
|
|
229
|
-
*/
|
|
230
|
-
function rewriteAliasedImports(text, aliases) {
|
|
231
|
-
return Array.from(aliases).reduce((acc, [name, alias]) => acc.replace(new RegExp(`\\b${escapeRegExp(name)}\\b`, "g"), alias), text);
|
|
232
|
-
}
|
|
233
176
|
/**
|
|
234
177
|
* Resolves a type reference, determining if it needs an import statement or inline type reference.
|
|
235
178
|
* Takes into account whether the type can be overridden and the file paths.
|
|
@@ -276,7 +219,7 @@ function resolveFakerTypeUsage(node, typeName, canOverride) {
|
|
|
276
219
|
let dataType = `Partial<${typeName}>`;
|
|
277
220
|
if (isArray || isTuple || node.type === "union" || node.type === "enum") dataType = typeName;
|
|
278
221
|
if (isScalar) dataType = getScalarType(node, typeName);
|
|
279
|
-
let returnType = canOverride ? typeName :
|
|
222
|
+
let returnType = canOverride ? typeName : null;
|
|
280
223
|
if (isScalar) returnType = getScalarType(node, typeName);
|
|
281
224
|
return {
|
|
282
225
|
dataType,
|
|
@@ -310,42 +253,15 @@ function Faker({ node, description, name, typeName, printer, seed, canOverride }
|
|
|
310
253
|
const isObject = OBJECT_TYPES.has(node.type);
|
|
311
254
|
const isTuple = node.type === "tuple";
|
|
312
255
|
const isScalar = SCALAR_TYPES.has(node.type);
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
]`;
|
|
321
|
-
if (canOverride && isScalar) fakerTextWithOverride = `data ?? ${fakerText}`;
|
|
256
|
+
const useGenericOverride = canOverride && isObject;
|
|
257
|
+
const fakerTextWithOverride = (() => {
|
|
258
|
+
if (canOverride && isTuple) return `data || ${fakerText}`;
|
|
259
|
+
if (canOverride && isArray) return `[\n ...${fakerText},\n ...(data || [])\n]`;
|
|
260
|
+
if (canOverride && isScalar) return `data ?? ${fakerText}`;
|
|
261
|
+
return fakerText;
|
|
262
|
+
})();
|
|
322
263
|
const { dataType, returnType: resolvedReturnType } = resolveFakerTypeUsage(node, typeName, canOverride);
|
|
323
|
-
|
|
324
|
-
let functionBody = "";
|
|
325
|
-
if (useGenericOverride) {
|
|
326
|
-
functionSignature = `${description ? `/**\n * @description ${jsStringEscape(description)}\n */\n ` : ""}export function ${name}(data?: Partial<${typeName}>): Required<${typeName}>`;
|
|
327
|
-
const seedCode = seed ? `faker.seed(${JSON.stringify(seed)})\n ` : "";
|
|
328
|
-
const { cyclicSchemas, schemaName } = printer.options;
|
|
329
|
-
if (node.type === "object" && !!cyclicSchemas && (node.properties ?? []).some((p) => ast.containsCircularRef(p.schema, {
|
|
330
|
-
circularSchemas: cyclicSchemas,
|
|
331
|
-
excludeName: schemaName
|
|
332
|
-
}))) functionBody = `{
|
|
333
|
-
${seedCode}const defaultFakeData = ${fakerText}
|
|
334
|
-
if (data) {
|
|
335
|
-
for (const [key, value] of Object.entries(data)) {
|
|
336
|
-
Object.defineProperty(defaultFakeData, key, { value, configurable: true, writable: true, enumerable: true })
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
return defaultFakeData as Required<${typeName}>
|
|
340
|
-
}`;
|
|
341
|
-
else functionBody = `{
|
|
342
|
-
${seedCode}const defaultFakeData = ${fakerText}
|
|
343
|
-
return {
|
|
344
|
-
...defaultFakeData,
|
|
345
|
-
...(data || {}),
|
|
346
|
-
} as Required<${typeName}>
|
|
347
|
-
}`;
|
|
348
|
-
} else {
|
|
264
|
+
if (!useGenericOverride) {
|
|
349
265
|
const dataParamName = /\bdata\b/.test(fakerTextWithOverride) ? "data" : "_data";
|
|
350
266
|
const params = ast.createFunctionParameters({ params: [ast.createFunctionParameter({
|
|
351
267
|
name: dataParamName,
|
|
@@ -366,11 +282,32 @@ function Faker({ node, description, name, typeName, printer, seed, canOverride }
|
|
|
366
282
|
name,
|
|
367
283
|
JSDoc: { comments: description ? [`@description ${jsStringEscape(description)}`] : [] },
|
|
368
284
|
params: canOverride ? paramsSignature : void 0,
|
|
369
|
-
returnType,
|
|
285
|
+
returnType: returnType ?? void 0,
|
|
370
286
|
children: [seed ? /* @__PURE__ */ jsxs(Fragment, { children: [`faker.seed(${JSON.stringify(seed)})`, /* @__PURE__ */ jsx("br", {})] }) : void 0, `return ${fakerTextWithOverride}`]
|
|
371
287
|
})
|
|
372
288
|
});
|
|
373
289
|
}
|
|
290
|
+
const functionSignature = `${description ? `/**\n * @description ${jsStringEscape(description)}\n */\n ` : ""}export function ${name}(data?: Partial<${typeName}>): Required<${typeName}>`;
|
|
291
|
+
const seedCode = seed ? `faker.seed(${JSON.stringify(seed)})\n ` : "";
|
|
292
|
+
const { cyclicSchemas, schemaName } = printer.options;
|
|
293
|
+
const functionBody = node.type === "object" && !!cyclicSchemas && (node.properties ?? []).some((p) => ast.containsCircularRef(p.schema, {
|
|
294
|
+
circularSchemas: cyclicSchemas,
|
|
295
|
+
excludeName: schemaName
|
|
296
|
+
})) ? `{
|
|
297
|
+
${seedCode}const defaultFakeData = ${fakerText}
|
|
298
|
+
if (data) {
|
|
299
|
+
for (const [key, value] of Object.entries(data)) {
|
|
300
|
+
Object.defineProperty(defaultFakeData, key, { value, configurable: true, writable: true, enumerable: true })
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return defaultFakeData as Required<${typeName}>
|
|
304
|
+
}` : `{
|
|
305
|
+
${seedCode}const defaultFakeData = ${fakerText}
|
|
306
|
+
return {
|
|
307
|
+
...defaultFakeData,
|
|
308
|
+
...(data || {}),
|
|
309
|
+
} as Required<${typeName}>
|
|
310
|
+
}`;
|
|
374
311
|
return /* @__PURE__ */ jsxs(File.Source, {
|
|
375
312
|
name,
|
|
376
313
|
isExportable: true,
|
|
@@ -379,6 +316,6 @@ function Faker({ node, description, name, typeName, printer, seed, canOverride }
|
|
|
379
316
|
});
|
|
380
317
|
}
|
|
381
318
|
//#endregion
|
|
382
|
-
export {
|
|
319
|
+
export { resolveParamNameByLocation as a, localeToFakerImport as i, buildResponseUnionSchema as n, resolveTypeReference as o, canOverrideSchema as r, trimQuotes as s, Faker as t };
|
|
383
320
|
|
|
384
|
-
//# sourceMappingURL=Faker-
|
|
321
|
+
//# sourceMappingURL=Faker-CXZVQQ7e.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Faker-CXZVQQ7e.js","names":["SCALAR_TYPES","ARRAY_TYPES"],"sources":["../../../internals/utils/src/string.ts","../src/utils.ts","../src/components/Faker.tsx"],"sourcesContent":["/**\n * Strips a single matching pair of `\"...\"`, `'...'`, or `` `...` `` from both ends of `text`.\n * Returns the string unchanged when no balanced quote pair is found.\n *\n * @example\n * trimQuotes('\"hello\"') // 'hello'\n * trimQuotes('hello') // 'hello'\n */\nexport function trimQuotes(text: string): string {\n if (text.length >= 2) {\n const first = text[0]\n const last = text[text.length - 1]\n if ((first === '\"' && last === '\"') || (first === \"'\" && last === \"'\") || (first === '`' && last === '`')) {\n return text.slice(1, -1)\n }\n }\n return text\n}\n\n/**\n * Escapes characters that are not allowed inside JS string literals.\n * Handles quotes, backslashes, and Unicode line terminators (U+2028 / U+2029).\n *\n * @see http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4\n *\n * @example\n * ```ts\n * jsStringEscape('say \"hi\"\\nbye') // 'say \\\\\"hi\\\\\"\\\\nbye'\n * ```\n */\nexport function jsStringEscape(input: unknown): string {\n return `${input}`.replace(/[\"'\\\\\\n\\r\\u2028\\u2029]/g, (character) => {\n switch (character) {\n case '\"':\n case \"'\":\n case '\\\\':\n return `\\\\${character}`\n case '\\n':\n return '\\\\n'\n case '\\r':\n return '\\\\r'\n case '\\u2028':\n return '\\\\u2028'\n case '\\u2029':\n return '\\\\u2029'\n default:\n return ''\n }\n })\n}\n\n/**\n * Strips the file extension from a path or file name.\n * Only removes the last `.ext` segment when the dot is not part of a directory name.\n *\n * @example\n * trimExtName('petStore.ts') // 'petStore'\n * trimExtName('/src/models/pet.ts') // '/src/models/pet'\n * trimExtName('/project.v2/gen/pet.ts') // '/project.v2/gen/pet'\n * trimExtName('noExtension') // 'noExtension'\n */\nexport function trimExtName(text: string): string {\n const dotIndex = text.lastIndexOf('.')\n if (dotIndex > 0 && !text.includes('/', dotIndex)) {\n return text.slice(0, dotIndex)\n }\n return text\n}\n","import { posix } from 'node:path'\nimport { ast } from '@kubb/core'\nimport type { ResolverFaker } from './types.ts'\n\n/**\n * Returns the `@faker-js/faker` named export for a locale code.\n *\n * Without a locale, returns `'faker'` for the default English instance.\n * With a locale, the language code is converted to upper case and joined with any region suffix.\n *\n * @example Default\n * `localeToFakerImport() // 'faker'`\n *\n * @example Simple locale\n * `localeToFakerImport('de') // 'fakerDE'`\n *\n * @example Compound locale\n * `localeToFakerImport('de_AT') // 'fakerDE_AT'`\n */\nexport function localeToFakerImport(locale?: string): string {\n if (!locale) {\n return 'faker'\n }\n\n const parts = locale.split('_')\n parts[0] = parts[0]!.toUpperCase()\n return `faker${parts.join('_')}`\n}\n\n/**\n * Determines if a schema node can be overridden during faker generation.\n */\nexport function canOverrideSchema(node: ast.SchemaNode): boolean {\n return new Set<ast.SchemaNode['type']>([\n 'array',\n 'tuple',\n 'object',\n 'intersection',\n 'union',\n 'enum',\n 'ref',\n 'string',\n 'email',\n 'url',\n 'uuid',\n 'number',\n 'integer',\n 'bigint',\n 'boolean',\n 'date',\n 'time',\n 'datetime',\n 'blob',\n ]).has(node.type)\n}\n\n/**\n * Resolves a parameter name based on its location (path, query, header, etc.) using the provided resolver.\n */\nexport function resolveParamNameByLocation(\n resolver: Pick<ResolverFaker, 'resolvePathParamsName' | 'resolveQueryParamsName' | 'resolveHeaderParamsName' | 'resolveParamName'>,\n node: ast.OperationNode,\n param: ast.ParameterNode,\n): string {\n switch (param.in) {\n case 'path':\n return resolver.resolvePathParamsName(node, param)\n case 'query':\n return resolver.resolveQueryParamsName(node, param)\n case 'header':\n return resolver.resolveHeaderParamsName(node, param)\n default:\n return resolver.resolveParamName(node, param)\n }\n}\n\nfunction shouldInlineSingleResponseSchema(schema: ast.SchemaNode): boolean {\n return new Set<ast.SchemaNode['type']>([\n 'any',\n 'unknown',\n 'void',\n 'null',\n 'array',\n 'tuple',\n 'string',\n 'email',\n 'url',\n 'uuid',\n 'number',\n 'integer',\n 'bigint',\n 'boolean',\n 'date',\n 'time',\n 'datetime',\n 'blob',\n 'enum',\n 'union',\n ]).has(schema.type)\n}\n\n/**\n * Builds a response schema as a union of all response statuses.\n * Returns null if no responses are provided, or embeds single simple responses inline.\n */\nexport function buildResponseUnionSchema(node: ast.OperationNode, resolver: ResolverFaker): ast.SchemaNode | null {\n const responses = node.responses.filter((response) => response.content?.[0]?.schema)\n\n if (!responses.length) {\n return null\n }\n\n if (responses.length === 1) {\n const schema = responses[0]!.content?.[0]?.schema\n if (schema && shouldInlineSingleResponseSchema(schema)) {\n return schema\n }\n\n return ast.createSchema({ type: 'ref', name: resolver.resolveResponseStatusName(node, responses[0]!.statusCode) })\n }\n\n return ast.createSchema({\n type: 'union',\n members: responses.map((response) => ast.createSchema({ type: 'ref', name: resolver.resolveResponseStatusName(node, response.statusCode) })),\n })\n}\n\nconst SCALAR_TYPES = new Set<ast.SchemaNode['type']>([\n 'string',\n 'email',\n 'url',\n 'uuid',\n 'number',\n 'integer',\n 'bigint',\n 'boolean',\n 'date',\n 'time',\n 'datetime',\n 'blob',\n 'enum',\n])\nconst ARRAY_TYPES = new Set<ast.SchemaNode['type']>(['array'])\n\nfunction toRelativeImportPath(from: string, to: string): string {\n const relativePath = posix.relative(posix.dirname(from), to)\n return relativePath.startsWith('../') ? relativePath : `./${relativePath}`\n}\n\n/**\n * Resolves a type reference, determining if it needs an import statement or inline type reference.\n * Takes into account whether the type can be overridden and the file paths.\n */\nexport function resolveTypeReference({\n node,\n canOverride,\n name,\n typeName,\n filePath,\n typeFilePath,\n}: {\n node: ast.SchemaNode\n canOverride: boolean\n name: string\n typeName: string\n filePath: string\n typeFilePath: string\n}): { importPath?: string; typeName: string } {\n const { usesTypeName } = resolveFakerTypeUsage(node, typeName, canOverride)\n\n if (!usesTypeName) {\n return { typeName }\n }\n\n if (name === typeName) {\n return {\n typeName: `import('${toRelativeImportPath(filePath, typeFilePath)}').${typeName}`,\n }\n }\n\n return {\n importPath: typeFilePath,\n typeName,\n }\n}\n\n/**\n * Maps a schema node type to its corresponding scalar type representation.\n * Returns the type name for enums or the base type (string, number, etc.) for primitives.\n */\nexport function getScalarType(node: ast.SchemaNode, typeName: string): string {\n switch (node.type) {\n case 'string':\n case 'email':\n case 'url':\n case 'uuid':\n return 'string'\n case 'number':\n case 'integer':\n return 'number'\n case 'bigint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'date':\n case 'time':\n return node.representation === 'date' ? 'Date' : 'string'\n case 'datetime':\n return 'string'\n case 'blob':\n return 'Blob'\n case 'enum':\n return typeName\n default:\n return typeName\n }\n}\n\n/**\n * Resolves faker type usage information for a schema.\n * Determines the data type, return type, and whether it uses the type name.\n */\nexport function resolveFakerTypeUsage(\n node: ast.SchemaNode,\n typeName: string,\n canOverride: boolean,\n): {\n dataType: string\n returnType: string | null\n usesTypeName: boolean\n} {\n const isArray = ARRAY_TYPES.has(node.type)\n const isTuple = node.type === 'tuple'\n const isScalar = SCALAR_TYPES.has(node.type)\n\n let dataType = `Partial<${typeName}>`\n\n if (isArray || isTuple || node.type === 'union' || node.type === 'enum') {\n dataType = typeName\n }\n\n if (isScalar) {\n dataType = getScalarType(node, typeName)\n }\n\n let returnType = canOverride ? typeName : null\n\n if (isScalar) {\n returnType = getScalarType(node, typeName)\n }\n\n return {\n dataType,\n returnType,\n usesTypeName: dataType.includes(typeName) || Boolean(returnType?.includes(typeName)),\n }\n}\n","import { jsStringEscape } from '@internals/utils'\nimport { ast } from '@kubb/core'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { PrinterFakerFactory } from '../printers/printerFaker.ts'\nimport type { PluginFaker } from '../types.ts'\nimport { resolveFakerTypeUsage } from '../utils.ts'\n\ntype Props = {\n name: string\n typeName: string\n node: ast.SchemaNode\n printer: ast.Printer<PrinterFakerFactory>\n seed?: PluginFaker['options']['seed']\n description?: string\n canOverride: boolean\n}\n\nconst OBJECT_TYPES = new Set<ast.SchemaNode['type']>(['object', 'intersection'])\nconst ARRAY_TYPES = new Set<ast.SchemaNode['type']>(['array'])\nconst SCALAR_TYPES = new Set<ast.SchemaNode['type']>([\n 'string',\n 'email',\n 'url',\n 'uuid',\n 'number',\n 'integer',\n 'bigint',\n 'boolean',\n 'date',\n 'time',\n 'datetime',\n 'blob',\n 'enum',\n])\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nexport function Faker({ node, description, name, typeName, printer, seed, canOverride }: Props): KubbReactNode {\n const fakerText = printer.print(node) ?? 'undefined'\n\n const isArray = ARRAY_TYPES.has(node.type)\n const isObject = OBJECT_TYPES.has(node.type)\n const isTuple = node.type === 'tuple'\n const isScalar = SCALAR_TYPES.has(node.type)\n\n const useGenericOverride = canOverride && isObject\n const fakerTextWithOverride = (() => {\n if (canOverride && isTuple) return `data || ${fakerText}`\n if (canOverride && isArray) return `[\\n ...${fakerText},\\n ...(data || [])\\n]`\n if (canOverride && isScalar) return `data ?? ${fakerText}`\n return fakerText\n })()\n\n const { dataType, returnType: resolvedReturnType } = resolveFakerTypeUsage(node, typeName, canOverride)\n\n if (!useGenericOverride) {\n const usesData = /\\bdata\\b/.test(fakerTextWithOverride)\n const dataParamName = usesData ? 'data' : '_data'\n const params = ast.createFunctionParameters({\n params: [\n ast.createFunctionParameter({\n name: dataParamName,\n type: ast.createParamsType({ variant: 'reference', name: dataType }),\n optional: true,\n }),\n ],\n })\n const paramsSignature = declarationPrinter.print(params) ?? ''\n const returnType = resolvedReturnType\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function\n export\n name={name}\n JSDoc={{ comments: description ? [`@description ${jsStringEscape(description)}`] : [] }}\n params={canOverride ? paramsSignature : undefined}\n returnType={returnType ?? undefined}\n >\n {seed ? (\n <>\n {`faker.seed(${JSON.stringify(seed)})`}\n <br />\n </>\n ) : undefined}\n {`return ${fakerTextWithOverride}`}\n </Function>\n </File.Source>\n )\n }\n\n // Generate function with defaultFakeData structure\n const jsdoc = description ? `/**\\n * @description ${jsStringEscape(description)}\\n */\\n ` : ''\n const functionSignature = `${jsdoc}export function ${name}(data?: Partial<${typeName}>): Required<${typeName}>`\n\n const seedCode = seed ? `faker.seed(${JSON.stringify(seed)})\\n ` : ''\n\n // When the object node has properties that transitively reference a cyclic schema,\n // the printer emits memoizing getters for those properties. Spreading the object\n // literal would immediately invoke those getters, triggering recursive faker calls\n // and causing a stack overflow. Detect this upfront via ast helpers so we can\n // use Object.defineProperty-based merging instead of spread.\n const { cyclicSchemas, schemaName } = printer.options\n const hasGetters =\n node.type === 'object' &&\n !!cyclicSchemas &&\n (node.properties ?? []).some((p) => ast.containsCircularRef(p.schema, { circularSchemas: cyclicSchemas, excludeName: schemaName }))\n\n const functionBody = hasGetters\n ? `{\n ${seedCode}const defaultFakeData = ${fakerText}\n if (data) {\n for (const [key, value] of Object.entries(data)) {\n Object.defineProperty(defaultFakeData, key, { value, configurable: true, writable: true, enumerable: true })\n }\n }\n return defaultFakeData as Required<${typeName}>\n}`\n : `{\n ${seedCode}const defaultFakeData = ${fakerText}\n return {\n ...defaultFakeData,\n ...(data || {}),\n } as Required<${typeName}>\n}`\n\n return (\n <File.Source name={name} isExportable isIndexable>\n {functionSignature}\n {functionBody}\n </File.Source>\n )\n}\n"],"mappings":"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"}
|
|
@@ -121,14 +121,6 @@ function canOverrideSchema(node) {
|
|
|
121
121
|
]).has(node.type);
|
|
122
122
|
}
|
|
123
123
|
/**
|
|
124
|
-
* Resolves a schema reference by looking up the referenced schema in the provided array.
|
|
125
|
-
* Returns the original node if it's not a reference.
|
|
126
|
-
*/
|
|
127
|
-
function resolveSchemaRef(node, schemas) {
|
|
128
|
-
if (node.type !== "ref") return node;
|
|
129
|
-
return schemas.find((schema) => schema.name === node.name && schema.type !== "ref") ?? node;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
124
|
* Resolves a parameter name based on its location (path, query, header, etc.) using the provided resolver.
|
|
133
125
|
*/
|
|
134
126
|
function resolveParamNameByLocation(resolver, node, param) {
|
|
@@ -168,10 +160,11 @@ function shouldInlineSingleResponseSchema(schema) {
|
|
|
168
160
|
* Returns null if no responses are provided, or embeds single simple responses inline.
|
|
169
161
|
*/
|
|
170
162
|
function buildResponseUnionSchema(node, resolver) {
|
|
171
|
-
const responses = node.responses.filter((response) => response.schema);
|
|
163
|
+
const responses = node.responses.filter((response) => response.content?.[0]?.schema);
|
|
172
164
|
if (!responses.length) return null;
|
|
173
165
|
if (responses.length === 1) {
|
|
174
|
-
|
|
166
|
+
const schema = responses[0].content?.[0]?.schema;
|
|
167
|
+
if (schema && shouldInlineSingleResponseSchema(schema)) return schema;
|
|
175
168
|
return _kubb_core.ast.createSchema({
|
|
176
169
|
type: "ref",
|
|
177
170
|
name: resolver.resolveResponseStatusName(node, responses[0].statusCode)
|
|
@@ -205,56 +198,6 @@ function toRelativeImportPath(from, to) {
|
|
|
205
198
|
const relativePath = node_path.posix.relative(node_path.posix.dirname(from), to);
|
|
206
199
|
return relativePath.startsWith("../") ? relativePath : `./${relativePath}`;
|
|
207
200
|
}
|
|
208
|
-
function escapeRegExp(value) {
|
|
209
|
-
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Filters imports to only those that are actually used in the generated code.
|
|
213
|
-
* Checks for function calls matching the imported names.
|
|
214
|
-
*/
|
|
215
|
-
function filterUsedImports(imports, text, skipImportNames = []) {
|
|
216
|
-
return imports.filter((entry) => {
|
|
217
|
-
return (Array.isArray(entry.name) ? entry.name : [entry.name]).map((name) => {
|
|
218
|
-
if (typeof name === "string") return name;
|
|
219
|
-
return name?.name ?? name?.propertyName;
|
|
220
|
-
}).filter((name) => Boolean(name)).some((name) => {
|
|
221
|
-
if (skipImportNames.includes(name)) return false;
|
|
222
|
-
return new RegExp(`\\b${escapeRegExp(name)}\\b(?=\\s*\\()`).test(text);
|
|
223
|
-
});
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Detects and resolves import name conflicts by adding aliases to conflicting names.
|
|
228
|
-
* Returns updated imports with a mapping of original names to their aliases.
|
|
229
|
-
*/
|
|
230
|
-
function aliasConflictingImports(imports, reservedNames) {
|
|
231
|
-
const reservedNameSet = new Set(reservedNames);
|
|
232
|
-
const aliases = /* @__PURE__ */ new Map();
|
|
233
|
-
return {
|
|
234
|
-
imports: imports.map((entry) => {
|
|
235
|
-
const aliasedNames = (Array.isArray(entry.name) ? entry.name : [entry.name]).map((item) => {
|
|
236
|
-
if (typeof item !== "string" || !reservedNameSet.has(item)) return item;
|
|
237
|
-
const alias = `${item}Schema`;
|
|
238
|
-
aliases.set(item, alias);
|
|
239
|
-
return {
|
|
240
|
-
propertyName: item,
|
|
241
|
-
name: alias
|
|
242
|
-
};
|
|
243
|
-
});
|
|
244
|
-
return aliasedNames.some((item) => typeof item === "object" && item.name) ? {
|
|
245
|
-
...entry,
|
|
246
|
-
name: aliasedNames
|
|
247
|
-
} : entry;
|
|
248
|
-
}),
|
|
249
|
-
aliases
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Replaces all occurrences of original names with their aliased versions in the given text.
|
|
254
|
-
*/
|
|
255
|
-
function rewriteAliasedImports(text, aliases) {
|
|
256
|
-
return Array.from(aliases).reduce((acc, [name, alias]) => acc.replace(new RegExp(`\\b${escapeRegExp(name)}\\b`, "g"), alias), text);
|
|
257
|
-
}
|
|
258
201
|
/**
|
|
259
202
|
* Resolves a type reference, determining if it needs an import statement or inline type reference.
|
|
260
203
|
* Takes into account whether the type can be overridden and the file paths.
|
|
@@ -301,7 +244,7 @@ function resolveFakerTypeUsage(node, typeName, canOverride) {
|
|
|
301
244
|
let dataType = `Partial<${typeName}>`;
|
|
302
245
|
if (isArray || isTuple || node.type === "union" || node.type === "enum") dataType = typeName;
|
|
303
246
|
if (isScalar) dataType = getScalarType(node, typeName);
|
|
304
|
-
let returnType = canOverride ? typeName :
|
|
247
|
+
let returnType = canOverride ? typeName : null;
|
|
305
248
|
if (isScalar) returnType = getScalarType(node, typeName);
|
|
306
249
|
return {
|
|
307
250
|
dataType,
|
|
@@ -335,42 +278,15 @@ function Faker({ node, description, name, typeName, printer, seed, canOverride }
|
|
|
335
278
|
const isObject = OBJECT_TYPES.has(node.type);
|
|
336
279
|
const isTuple = node.type === "tuple";
|
|
337
280
|
const isScalar = SCALAR_TYPES.has(node.type);
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
]`;
|
|
346
|
-
if (canOverride && isScalar) fakerTextWithOverride = `data ?? ${fakerText}`;
|
|
281
|
+
const useGenericOverride = canOverride && isObject;
|
|
282
|
+
const fakerTextWithOverride = (() => {
|
|
283
|
+
if (canOverride && isTuple) return `data || ${fakerText}`;
|
|
284
|
+
if (canOverride && isArray) return `[\n ...${fakerText},\n ...(data || [])\n]`;
|
|
285
|
+
if (canOverride && isScalar) return `data ?? ${fakerText}`;
|
|
286
|
+
return fakerText;
|
|
287
|
+
})();
|
|
347
288
|
const { dataType, returnType: resolvedReturnType } = resolveFakerTypeUsage(node, typeName, canOverride);
|
|
348
|
-
|
|
349
|
-
let functionBody = "";
|
|
350
|
-
if (useGenericOverride) {
|
|
351
|
-
functionSignature = `${description ? `/**\n * @description ${jsStringEscape(description)}\n */\n ` : ""}export function ${name}(data?: Partial<${typeName}>): Required<${typeName}>`;
|
|
352
|
-
const seedCode = seed ? `faker.seed(${JSON.stringify(seed)})\n ` : "";
|
|
353
|
-
const { cyclicSchemas, schemaName } = printer.options;
|
|
354
|
-
if (node.type === "object" && !!cyclicSchemas && (node.properties ?? []).some((p) => _kubb_core.ast.containsCircularRef(p.schema, {
|
|
355
|
-
circularSchemas: cyclicSchemas,
|
|
356
|
-
excludeName: schemaName
|
|
357
|
-
}))) functionBody = `{
|
|
358
|
-
${seedCode}const defaultFakeData = ${fakerText}
|
|
359
|
-
if (data) {
|
|
360
|
-
for (const [key, value] of Object.entries(data)) {
|
|
361
|
-
Object.defineProperty(defaultFakeData, key, { value, configurable: true, writable: true, enumerable: true })
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
return defaultFakeData as Required<${typeName}>
|
|
365
|
-
}`;
|
|
366
|
-
else functionBody = `{
|
|
367
|
-
${seedCode}const defaultFakeData = ${fakerText}
|
|
368
|
-
return {
|
|
369
|
-
...defaultFakeData,
|
|
370
|
-
...(data || {}),
|
|
371
|
-
} as Required<${typeName}>
|
|
372
|
-
}`;
|
|
373
|
-
} else {
|
|
289
|
+
if (!useGenericOverride) {
|
|
374
290
|
const dataParamName = /\bdata\b/.test(fakerTextWithOverride) ? "data" : "_data";
|
|
375
291
|
const params = _kubb_core.ast.createFunctionParameters({ params: [_kubb_core.ast.createFunctionParameter({
|
|
376
292
|
name: dataParamName,
|
|
@@ -391,11 +307,32 @@ function Faker({ node, description, name, typeName, printer, seed, canOverride }
|
|
|
391
307
|
name,
|
|
392
308
|
JSDoc: { comments: description ? [`@description ${jsStringEscape(description)}`] : [] },
|
|
393
309
|
params: canOverride ? paramsSignature : void 0,
|
|
394
|
-
returnType,
|
|
310
|
+
returnType: returnType ?? void 0,
|
|
395
311
|
children: [seed ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [`faker.seed(${JSON.stringify(seed)})`, /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)("br", {})] }) : void 0, `return ${fakerTextWithOverride}`]
|
|
396
312
|
})
|
|
397
313
|
});
|
|
398
314
|
}
|
|
315
|
+
const functionSignature = `${description ? `/**\n * @description ${jsStringEscape(description)}\n */\n ` : ""}export function ${name}(data?: Partial<${typeName}>): Required<${typeName}>`;
|
|
316
|
+
const seedCode = seed ? `faker.seed(${JSON.stringify(seed)})\n ` : "";
|
|
317
|
+
const { cyclicSchemas, schemaName } = printer.options;
|
|
318
|
+
const functionBody = node.type === "object" && !!cyclicSchemas && (node.properties ?? []).some((p) => _kubb_core.ast.containsCircularRef(p.schema, {
|
|
319
|
+
circularSchemas: cyclicSchemas,
|
|
320
|
+
excludeName: schemaName
|
|
321
|
+
})) ? `{
|
|
322
|
+
${seedCode}const defaultFakeData = ${fakerText}
|
|
323
|
+
if (data) {
|
|
324
|
+
for (const [key, value] of Object.entries(data)) {
|
|
325
|
+
Object.defineProperty(defaultFakeData, key, { value, configurable: true, writable: true, enumerable: true })
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return defaultFakeData as Required<${typeName}>
|
|
329
|
+
}` : `{
|
|
330
|
+
${seedCode}const defaultFakeData = ${fakerText}
|
|
331
|
+
return {
|
|
332
|
+
...defaultFakeData,
|
|
333
|
+
...(data || {}),
|
|
334
|
+
} as Required<${typeName}>
|
|
335
|
+
}`;
|
|
399
336
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File.Source, {
|
|
400
337
|
name,
|
|
401
338
|
isExportable: true,
|
|
@@ -422,12 +359,6 @@ Object.defineProperty(exports, "__toESM", {
|
|
|
422
359
|
return __toESM;
|
|
423
360
|
}
|
|
424
361
|
});
|
|
425
|
-
Object.defineProperty(exports, "aliasConflictingImports", {
|
|
426
|
-
enumerable: true,
|
|
427
|
-
get: function() {
|
|
428
|
-
return aliasConflictingImports;
|
|
429
|
-
}
|
|
430
|
-
});
|
|
431
362
|
Object.defineProperty(exports, "buildResponseUnionSchema", {
|
|
432
363
|
enumerable: true,
|
|
433
364
|
get: function() {
|
|
@@ -440,12 +371,6 @@ Object.defineProperty(exports, "canOverrideSchema", {
|
|
|
440
371
|
return canOverrideSchema;
|
|
441
372
|
}
|
|
442
373
|
});
|
|
443
|
-
Object.defineProperty(exports, "filterUsedImports", {
|
|
444
|
-
enumerable: true,
|
|
445
|
-
get: function() {
|
|
446
|
-
return filterUsedImports;
|
|
447
|
-
}
|
|
448
|
-
});
|
|
449
374
|
Object.defineProperty(exports, "localeToFakerImport", {
|
|
450
375
|
enumerable: true,
|
|
451
376
|
get: function() {
|
|
@@ -458,24 +383,12 @@ Object.defineProperty(exports, "resolveParamNameByLocation", {
|
|
|
458
383
|
return resolveParamNameByLocation;
|
|
459
384
|
}
|
|
460
385
|
});
|
|
461
|
-
Object.defineProperty(exports, "resolveSchemaRef", {
|
|
462
|
-
enumerable: true,
|
|
463
|
-
get: function() {
|
|
464
|
-
return resolveSchemaRef;
|
|
465
|
-
}
|
|
466
|
-
});
|
|
467
386
|
Object.defineProperty(exports, "resolveTypeReference", {
|
|
468
387
|
enumerable: true,
|
|
469
388
|
get: function() {
|
|
470
389
|
return resolveTypeReference;
|
|
471
390
|
}
|
|
472
391
|
});
|
|
473
|
-
Object.defineProperty(exports, "rewriteAliasedImports", {
|
|
474
|
-
enumerable: true,
|
|
475
|
-
get: function() {
|
|
476
|
-
return rewriteAliasedImports;
|
|
477
|
-
}
|
|
478
|
-
});
|
|
479
392
|
Object.defineProperty(exports, "trimQuotes", {
|
|
480
393
|
enumerable: true,
|
|
481
394
|
get: function() {
|
|
@@ -483,4 +396,4 @@ Object.defineProperty(exports, "trimQuotes", {
|
|
|
483
396
|
}
|
|
484
397
|
});
|
|
485
398
|
|
|
486
|
-
//# sourceMappingURL=Faker-
|
|
399
|
+
//# sourceMappingURL=Faker-CkJccVKI.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Faker-CkJccVKI.cjs","names":["ast","SCALAR_TYPES","ARRAY_TYPES","posix","ast","File","Function"],"sources":["../../../internals/utils/src/string.ts","../src/utils.ts","../src/components/Faker.tsx"],"sourcesContent":["/**\n * Strips a single matching pair of `\"...\"`, `'...'`, or `` `...` `` from both ends of `text`.\n * Returns the string unchanged when no balanced quote pair is found.\n *\n * @example\n * trimQuotes('\"hello\"') // 'hello'\n * trimQuotes('hello') // 'hello'\n */\nexport function trimQuotes(text: string): string {\n if (text.length >= 2) {\n const first = text[0]\n const last = text[text.length - 1]\n if ((first === '\"' && last === '\"') || (first === \"'\" && last === \"'\") || (first === '`' && last === '`')) {\n return text.slice(1, -1)\n }\n }\n return text\n}\n\n/**\n * Escapes characters that are not allowed inside JS string literals.\n * Handles quotes, backslashes, and Unicode line terminators (U+2028 / U+2029).\n *\n * @see http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4\n *\n * @example\n * ```ts\n * jsStringEscape('say \"hi\"\\nbye') // 'say \\\\\"hi\\\\\"\\\\nbye'\n * ```\n */\nexport function jsStringEscape(input: unknown): string {\n return `${input}`.replace(/[\"'\\\\\\n\\r\\u2028\\u2029]/g, (character) => {\n switch (character) {\n case '\"':\n case \"'\":\n case '\\\\':\n return `\\\\${character}`\n case '\\n':\n return '\\\\n'\n case '\\r':\n return '\\\\r'\n case '\\u2028':\n return '\\\\u2028'\n case '\\u2029':\n return '\\\\u2029'\n default:\n return ''\n }\n })\n}\n\n/**\n * Strips the file extension from a path or file name.\n * Only removes the last `.ext` segment when the dot is not part of a directory name.\n *\n * @example\n * trimExtName('petStore.ts') // 'petStore'\n * trimExtName('/src/models/pet.ts') // '/src/models/pet'\n * trimExtName('/project.v2/gen/pet.ts') // '/project.v2/gen/pet'\n * trimExtName('noExtension') // 'noExtension'\n */\nexport function trimExtName(text: string): string {\n const dotIndex = text.lastIndexOf('.')\n if (dotIndex > 0 && !text.includes('/', dotIndex)) {\n return text.slice(0, dotIndex)\n }\n return text\n}\n","import { posix } from 'node:path'\nimport { ast } from '@kubb/core'\nimport type { ResolverFaker } from './types.ts'\n\n/**\n * Returns the `@faker-js/faker` named export for a locale code.\n *\n * Without a locale, returns `'faker'` for the default English instance.\n * With a locale, the language code is converted to upper case and joined with any region suffix.\n *\n * @example Default\n * `localeToFakerImport() // 'faker'`\n *\n * @example Simple locale\n * `localeToFakerImport('de') // 'fakerDE'`\n *\n * @example Compound locale\n * `localeToFakerImport('de_AT') // 'fakerDE_AT'`\n */\nexport function localeToFakerImport(locale?: string): string {\n if (!locale) {\n return 'faker'\n }\n\n const parts = locale.split('_')\n parts[0] = parts[0]!.toUpperCase()\n return `faker${parts.join('_')}`\n}\n\n/**\n * Determines if a schema node can be overridden during faker generation.\n */\nexport function canOverrideSchema(node: ast.SchemaNode): boolean {\n return new Set<ast.SchemaNode['type']>([\n 'array',\n 'tuple',\n 'object',\n 'intersection',\n 'union',\n 'enum',\n 'ref',\n 'string',\n 'email',\n 'url',\n 'uuid',\n 'number',\n 'integer',\n 'bigint',\n 'boolean',\n 'date',\n 'time',\n 'datetime',\n 'blob',\n ]).has(node.type)\n}\n\n/**\n * Resolves a parameter name based on its location (path, query, header, etc.) using the provided resolver.\n */\nexport function resolveParamNameByLocation(\n resolver: Pick<ResolverFaker, 'resolvePathParamsName' | 'resolveQueryParamsName' | 'resolveHeaderParamsName' | 'resolveParamName'>,\n node: ast.OperationNode,\n param: ast.ParameterNode,\n): string {\n switch (param.in) {\n case 'path':\n return resolver.resolvePathParamsName(node, param)\n case 'query':\n return resolver.resolveQueryParamsName(node, param)\n case 'header':\n return resolver.resolveHeaderParamsName(node, param)\n default:\n return resolver.resolveParamName(node, param)\n }\n}\n\nfunction shouldInlineSingleResponseSchema(schema: ast.SchemaNode): boolean {\n return new Set<ast.SchemaNode['type']>([\n 'any',\n 'unknown',\n 'void',\n 'null',\n 'array',\n 'tuple',\n 'string',\n 'email',\n 'url',\n 'uuid',\n 'number',\n 'integer',\n 'bigint',\n 'boolean',\n 'date',\n 'time',\n 'datetime',\n 'blob',\n 'enum',\n 'union',\n ]).has(schema.type)\n}\n\n/**\n * Builds a response schema as a union of all response statuses.\n * Returns null if no responses are provided, or embeds single simple responses inline.\n */\nexport function buildResponseUnionSchema(node: ast.OperationNode, resolver: ResolverFaker): ast.SchemaNode | null {\n const responses = node.responses.filter((response) => response.content?.[0]?.schema)\n\n if (!responses.length) {\n return null\n }\n\n if (responses.length === 1) {\n const schema = responses[0]!.content?.[0]?.schema\n if (schema && shouldInlineSingleResponseSchema(schema)) {\n return schema\n }\n\n return ast.createSchema({ type: 'ref', name: resolver.resolveResponseStatusName(node, responses[0]!.statusCode) })\n }\n\n return ast.createSchema({\n type: 'union',\n members: responses.map((response) => ast.createSchema({ type: 'ref', name: resolver.resolveResponseStatusName(node, response.statusCode) })),\n })\n}\n\nconst SCALAR_TYPES = new Set<ast.SchemaNode['type']>([\n 'string',\n 'email',\n 'url',\n 'uuid',\n 'number',\n 'integer',\n 'bigint',\n 'boolean',\n 'date',\n 'time',\n 'datetime',\n 'blob',\n 'enum',\n])\nconst ARRAY_TYPES = new Set<ast.SchemaNode['type']>(['array'])\n\nfunction toRelativeImportPath(from: string, to: string): string {\n const relativePath = posix.relative(posix.dirname(from), to)\n return relativePath.startsWith('../') ? relativePath : `./${relativePath}`\n}\n\n/**\n * Resolves a type reference, determining if it needs an import statement or inline type reference.\n * Takes into account whether the type can be overridden and the file paths.\n */\nexport function resolveTypeReference({\n node,\n canOverride,\n name,\n typeName,\n filePath,\n typeFilePath,\n}: {\n node: ast.SchemaNode\n canOverride: boolean\n name: string\n typeName: string\n filePath: string\n typeFilePath: string\n}): { importPath?: string; typeName: string } {\n const { usesTypeName } = resolveFakerTypeUsage(node, typeName, canOverride)\n\n if (!usesTypeName) {\n return { typeName }\n }\n\n if (name === typeName) {\n return {\n typeName: `import('${toRelativeImportPath(filePath, typeFilePath)}').${typeName}`,\n }\n }\n\n return {\n importPath: typeFilePath,\n typeName,\n }\n}\n\n/**\n * Maps a schema node type to its corresponding scalar type representation.\n * Returns the type name for enums or the base type (string, number, etc.) for primitives.\n */\nexport function getScalarType(node: ast.SchemaNode, typeName: string): string {\n switch (node.type) {\n case 'string':\n case 'email':\n case 'url':\n case 'uuid':\n return 'string'\n case 'number':\n case 'integer':\n return 'number'\n case 'bigint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'date':\n case 'time':\n return node.representation === 'date' ? 'Date' : 'string'\n case 'datetime':\n return 'string'\n case 'blob':\n return 'Blob'\n case 'enum':\n return typeName\n default:\n return typeName\n }\n}\n\n/**\n * Resolves faker type usage information for a schema.\n * Determines the data type, return type, and whether it uses the type name.\n */\nexport function resolveFakerTypeUsage(\n node: ast.SchemaNode,\n typeName: string,\n canOverride: boolean,\n): {\n dataType: string\n returnType: string | null\n usesTypeName: boolean\n} {\n const isArray = ARRAY_TYPES.has(node.type)\n const isTuple = node.type === 'tuple'\n const isScalar = SCALAR_TYPES.has(node.type)\n\n let dataType = `Partial<${typeName}>`\n\n if (isArray || isTuple || node.type === 'union' || node.type === 'enum') {\n dataType = typeName\n }\n\n if (isScalar) {\n dataType = getScalarType(node, typeName)\n }\n\n let returnType = canOverride ? typeName : null\n\n if (isScalar) {\n returnType = getScalarType(node, typeName)\n }\n\n return {\n dataType,\n returnType,\n usesTypeName: dataType.includes(typeName) || Boolean(returnType?.includes(typeName)),\n }\n}\n","import { jsStringEscape } from '@internals/utils'\nimport { ast } from '@kubb/core'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { PrinterFakerFactory } from '../printers/printerFaker.ts'\nimport type { PluginFaker } from '../types.ts'\nimport { resolveFakerTypeUsage } from '../utils.ts'\n\ntype Props = {\n name: string\n typeName: string\n node: ast.SchemaNode\n printer: ast.Printer<PrinterFakerFactory>\n seed?: PluginFaker['options']['seed']\n description?: string\n canOverride: boolean\n}\n\nconst OBJECT_TYPES = new Set<ast.SchemaNode['type']>(['object', 'intersection'])\nconst ARRAY_TYPES = new Set<ast.SchemaNode['type']>(['array'])\nconst SCALAR_TYPES = new Set<ast.SchemaNode['type']>([\n 'string',\n 'email',\n 'url',\n 'uuid',\n 'number',\n 'integer',\n 'bigint',\n 'boolean',\n 'date',\n 'time',\n 'datetime',\n 'blob',\n 'enum',\n])\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nexport function Faker({ node, description, name, typeName, printer, seed, canOverride }: Props): KubbReactNode {\n const fakerText = printer.print(node) ?? 'undefined'\n\n const isArray = ARRAY_TYPES.has(node.type)\n const isObject = OBJECT_TYPES.has(node.type)\n const isTuple = node.type === 'tuple'\n const isScalar = SCALAR_TYPES.has(node.type)\n\n const useGenericOverride = canOverride && isObject\n const fakerTextWithOverride = (() => {\n if (canOverride && isTuple) return `data || ${fakerText}`\n if (canOverride && isArray) return `[\\n ...${fakerText},\\n ...(data || [])\\n]`\n if (canOverride && isScalar) return `data ?? ${fakerText}`\n return fakerText\n })()\n\n const { dataType, returnType: resolvedReturnType } = resolveFakerTypeUsage(node, typeName, canOverride)\n\n if (!useGenericOverride) {\n const usesData = /\\bdata\\b/.test(fakerTextWithOverride)\n const dataParamName = usesData ? 'data' : '_data'\n const params = ast.createFunctionParameters({\n params: [\n ast.createFunctionParameter({\n name: dataParamName,\n type: ast.createParamsType({ variant: 'reference', name: dataType }),\n optional: true,\n }),\n ],\n })\n const paramsSignature = declarationPrinter.print(params) ?? ''\n const returnType = resolvedReturnType\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function\n export\n name={name}\n JSDoc={{ comments: description ? [`@description ${jsStringEscape(description)}`] : [] }}\n params={canOverride ? paramsSignature : undefined}\n returnType={returnType ?? undefined}\n >\n {seed ? (\n <>\n {`faker.seed(${JSON.stringify(seed)})`}\n <br />\n </>\n ) : undefined}\n {`return ${fakerTextWithOverride}`}\n </Function>\n </File.Source>\n )\n }\n\n // Generate function with defaultFakeData structure\n const jsdoc = description ? `/**\\n * @description ${jsStringEscape(description)}\\n */\\n ` : ''\n const functionSignature = `${jsdoc}export function ${name}(data?: Partial<${typeName}>): Required<${typeName}>`\n\n const seedCode = seed ? `faker.seed(${JSON.stringify(seed)})\\n ` : ''\n\n // When the object node has properties that transitively reference a cyclic schema,\n // the printer emits memoizing getters for those properties. Spreading the object\n // literal would immediately invoke those getters, triggering recursive faker calls\n // and causing a stack overflow. Detect this upfront via ast helpers so we can\n // use Object.defineProperty-based merging instead of spread.\n const { cyclicSchemas, schemaName } = printer.options\n const hasGetters =\n node.type === 'object' &&\n !!cyclicSchemas &&\n (node.properties ?? []).some((p) => ast.containsCircularRef(p.schema, { circularSchemas: cyclicSchemas, excludeName: schemaName }))\n\n const functionBody = hasGetters\n ? `{\n ${seedCode}const defaultFakeData = ${fakerText}\n if (data) {\n for (const [key, value] of Object.entries(data)) {\n Object.defineProperty(defaultFakeData, key, { value, configurable: true, writable: true, enumerable: true })\n }\n }\n return defaultFakeData as Required<${typeName}>\n}`\n : `{\n ${seedCode}const defaultFakeData = ${fakerText}\n return {\n ...defaultFakeData,\n ...(data || {}),\n } as Required<${typeName}>\n}`\n\n return (\n <File.Source name={name} isExportable isIndexable>\n {functionSignature}\n {functionBody}\n </File.Source>\n )\n}\n"],"mappings":"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"}
|
package/dist/components.cjs
CHANGED
package/dist/components.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as Faker } from "./Faker-
|
|
1
|
+
import { t as Faker } from "./Faker-BaLJxPyl.js";
|
|
2
2
|
export { Faker };
|
package/dist/components.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as Faker } from "./Faker-
|
|
1
|
+
import { t as Faker } from "./Faker-CXZVQQ7e.js";
|
|
2
2
|
export { Faker };
|