@kubb/plugin-faker 5.0.0-beta.22 → 5.0.0-beta.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Faker-BMgoFj8b.d.ts → Faker-BQpBZ2hU.d.ts} +2 -2
- package/dist/{Faker-AHTTvWZS.js → Faker-C7Cu9GKC.js} +3 -3
- package/dist/Faker-C7Cu9GKC.js.map +1 -0
- package/dist/{Faker-BoPNqNfi.cjs → Faker-DaKMu5pc.cjs} +3 -3
- package/dist/Faker-DaKMu5pc.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-DnCf6Dr6.cjs → fakerGenerator-C00Es7eC.cjs} +14 -8
- package/dist/fakerGenerator-C00Es7eC.cjs.map +1 -0
- package/dist/fakerGenerator-C85ME3uM.d.ts +15 -0
- package/dist/{fakerGenerator-Br2FyPbG.js → fakerGenerator-Crs3X84u.js} +14 -8
- package/dist/fakerGenerator-Crs3X84u.js.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 +54 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +33 -12
- package/dist/index.js +54 -14
- package/dist/index.js.map +1 -1
- package/dist/{printerFaker-W0pLunAj.d.ts → printerFaker-GYscoNnG.d.ts} +50 -26
- package/extension.yaml +572 -122
- package/package.json +5 -5
- package/src/components/Faker.tsx +1 -1
- package/src/generators/fakerGenerator.tsx +15 -6
- package/src/plugin.ts +23 -6
- package/src/printers/printerFaker.ts +28 -10
- package/src/resolvers/resolverFaker.ts +10 -11
- package/src/types.ts +29 -23
- package/src/utils.ts +2 -2
- package/dist/Faker-AHTTvWZS.js.map +0 -1
- package/dist/Faker-BoPNqNfi.cjs.map +0 -1
- package/dist/fakerGenerator-B-QnVz9o.d.ts +0 -9
- package/dist/fakerGenerator-Br2FyPbG.js.map +0 -1
- package/dist/fakerGenerator-DnCf6Dr6.cjs.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubb/plugin-faker",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.27",
|
|
4
4
|
"description": "Generate Faker.js mock data factories from your OpenAPI schemas. Produces realistic seed data, test fixtures, and datasets for development and testing.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"code-generation",
|
|
@@ -66,15 +66,15 @@
|
|
|
66
66
|
"registry": "https://registry.npmjs.org/"
|
|
67
67
|
},
|
|
68
68
|
"dependencies": {
|
|
69
|
-
"@kubb/core": "5.0.0-beta.
|
|
70
|
-
"@kubb/renderer-jsx": "5.0.0-beta.
|
|
71
|
-
"@kubb/plugin-ts": "5.0.0-beta.
|
|
69
|
+
"@kubb/core": "5.0.0-beta.27",
|
|
70
|
+
"@kubb/renderer-jsx": "5.0.0-beta.27",
|
|
71
|
+
"@kubb/plugin-ts": "5.0.0-beta.27"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@internals/utils": "0.0.0"
|
|
75
75
|
},
|
|
76
76
|
"peerDependencies": {
|
|
77
|
-
"@kubb/renderer-jsx": "5.0.0-beta.
|
|
77
|
+
"@kubb/renderer-jsx": "5.0.0-beta.27"
|
|
78
78
|
},
|
|
79
79
|
"size-limit": [
|
|
80
80
|
{
|
package/src/components/Faker.tsx
CHANGED
|
@@ -76,7 +76,7 @@ export function Faker({ node, description, name, typeName, printer, seed, canOve
|
|
|
76
76
|
name={name}
|
|
77
77
|
JSDoc={{ comments: description ? [`@description ${jsStringEscape(description)}`] : [] }}
|
|
78
78
|
params={canOverride ? paramsSignature : undefined}
|
|
79
|
-
returnType={returnType}
|
|
79
|
+
returnType={returnType ?? undefined}
|
|
80
80
|
>
|
|
81
81
|
{seed ? (
|
|
82
82
|
<>
|
|
@@ -7,6 +7,12 @@ import { printerFaker } from '../printers/printerFaker.ts'
|
|
|
7
7
|
import type { PluginFaker } from '../types.ts'
|
|
8
8
|
import { buildResponseUnionSchema, canOverrideSchema, localeToFakerImport, resolveParamNameByLocation, resolveTypeReference } from '../utils.ts'
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Built-in generator for `@kubb/plugin-faker`. Emits one `createX` factory
|
|
12
|
+
* per schema in the spec plus per-operation request/response factories. Each
|
|
13
|
+
* factory returns a value matching the corresponding TypeScript type from
|
|
14
|
+
* `@kubb/plugin-ts`.
|
|
15
|
+
*/
|
|
10
16
|
export const fakerGenerator = defineGenerator<PluginFaker>({
|
|
11
17
|
name: 'faker',
|
|
12
18
|
renderer: jsxRendererSync,
|
|
@@ -25,11 +31,11 @@ export const fakerGenerator = defineGenerator<PluginFaker>({
|
|
|
25
31
|
const mode = ctx.getMode(output)
|
|
26
32
|
const meta = {
|
|
27
33
|
name: resolver.resolveName(schemaName),
|
|
28
|
-
file: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group }),
|
|
34
|
+
file: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }),
|
|
29
35
|
typeName: tsResolver.resolveTypeName(schemaName),
|
|
30
36
|
typeFile: tsResolver.resolveFile(
|
|
31
37
|
{ name: schemaName, extname: '.ts' },
|
|
32
|
-
{ root, output: pluginTs.options?.output ?? output, group: pluginTs.options?.group },
|
|
38
|
+
{ root, output: pluginTs.options?.output ?? output, group: pluginTs.options?.group ?? undefined },
|
|
33
39
|
),
|
|
34
40
|
} as const
|
|
35
41
|
const canOverride = canOverrideSchema(node)
|
|
@@ -57,7 +63,7 @@ export const fakerGenerator = defineGenerator<PluginFaker>({
|
|
|
57
63
|
const imports = adapter
|
|
58
64
|
.getImports(node, (schemaName) => ({
|
|
59
65
|
name: resolver.resolveName(schemaName),
|
|
60
|
-
path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group }).path,
|
|
66
|
+
path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }).path,
|
|
61
67
|
}))
|
|
62
68
|
.filter((entry) => entry.path !== meta.file.path)
|
|
63
69
|
const usedImports = filterUsedImports(imports, fakerText)
|
|
@@ -131,7 +137,10 @@ export const fakerGenerator = defineGenerator<PluginFaker>({
|
|
|
131
137
|
const cyclicSchemas = new Set<string>(ctx.meta.circularNames)
|
|
132
138
|
|
|
133
139
|
const meta = {
|
|
134
|
-
file: resolver.resolveFile(
|
|
140
|
+
file: resolver.resolveFile(
|
|
141
|
+
{ name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
|
|
142
|
+
{ root, output, group: group ?? undefined },
|
|
143
|
+
),
|
|
135
144
|
typeFile: tsResolver.resolveFile(
|
|
136
145
|
{
|
|
137
146
|
name: node.operationId,
|
|
@@ -142,7 +151,7 @@ export const fakerGenerator = defineGenerator<PluginFaker>({
|
|
|
142
151
|
{
|
|
143
152
|
root,
|
|
144
153
|
output: pluginTs.options?.output ?? output,
|
|
145
|
-
group: pluginTs.options?.group,
|
|
154
|
+
group: pluginTs.options?.group ?? undefined,
|
|
146
155
|
},
|
|
147
156
|
),
|
|
148
157
|
} as const
|
|
@@ -151,7 +160,7 @@ export const fakerGenerator = defineGenerator<PluginFaker>({
|
|
|
151
160
|
return adapter
|
|
152
161
|
.getImports(schema, (schemaName) => ({
|
|
153
162
|
name: resolver.resolveName(schemaName),
|
|
154
|
-
path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group }).path,
|
|
163
|
+
path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }).path,
|
|
155
164
|
}))
|
|
156
165
|
.filter((entry) => entry.path !== meta.file.path)
|
|
157
166
|
}
|
package/src/plugin.ts
CHANGED
|
@@ -6,17 +6,34 @@ import { resolverFaker } from './resolvers/resolverFaker.ts'
|
|
|
6
6
|
import type { PluginFaker } from './types.ts'
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* Canonical plugin name for `@kubb/plugin-faker
|
|
9
|
+
* Canonical plugin name for `@kubb/plugin-faker`. Used for driver lookups and
|
|
10
|
+
* cross-plugin dependency references.
|
|
10
11
|
*/
|
|
11
12
|
export const pluginFakerName = 'plugin-faker' satisfies PluginFaker['name']
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
|
-
* Generates
|
|
15
|
-
*
|
|
16
|
-
*
|
|
15
|
+
* Generates one mock-data factory per OpenAPI schema using Faker.js. Call
|
|
16
|
+
* `createPet()` to get a realistic `Pet` object. Useful for tests, Storybook,
|
|
17
|
+
* and local development without a running backend.
|
|
17
18
|
*
|
|
18
19
|
* @example
|
|
19
|
-
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* import { defineConfig } from 'kubb'
|
|
22
|
+
* import { pluginTs } from '@kubb/plugin-ts'
|
|
23
|
+
* import { pluginFaker } from '@kubb/plugin-faker'
|
|
24
|
+
*
|
|
25
|
+
* export default defineConfig({
|
|
26
|
+
* input: { path: './petStore.yaml' },
|
|
27
|
+
* output: { path: './src/gen' },
|
|
28
|
+
* plugins: [
|
|
29
|
+
* pluginTs(),
|
|
30
|
+
* pluginFaker({
|
|
31
|
+
* output: { path: './mocks' },
|
|
32
|
+
* seed: [100],
|
|
33
|
+
* }),
|
|
34
|
+
* ],
|
|
35
|
+
* })
|
|
36
|
+
* ```
|
|
20
37
|
*/
|
|
21
38
|
export const pluginFaker = definePlugin<PluginFaker>((options) => {
|
|
22
39
|
const {
|
|
@@ -50,7 +67,7 @@ export const pluginFaker = definePlugin<PluginFaker>((options) => {
|
|
|
50
67
|
return `${camelCase(ctx.group)}Controller`
|
|
51
68
|
},
|
|
52
69
|
} satisfies Group)
|
|
53
|
-
:
|
|
70
|
+
: null
|
|
54
71
|
|
|
55
72
|
return {
|
|
56
73
|
name: pluginFakerName,
|
|
@@ -3,12 +3,30 @@ import { ast } from '@kubb/core'
|
|
|
3
3
|
import type { PluginFaker, ResolverFaker } from '../types.ts'
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* Partial
|
|
6
|
+
* Partial map of node-type overrides for the Faker printer. Each key is a
|
|
7
|
+
* `SchemaType` (`'string'`, `'date'`, ...) and each handler returns the
|
|
8
|
+
* Faker expression for that schema as a string. Use `this.transform` to
|
|
9
|
+
* recurse into nested schema nodes and `this.options` to read printer options.
|
|
10
|
+
*
|
|
11
|
+
* @example Override the integer handler
|
|
12
|
+
* ```ts
|
|
13
|
+
* pluginFaker({
|
|
14
|
+
* printer: {
|
|
15
|
+
* nodes: {
|
|
16
|
+
* integer() {
|
|
17
|
+
* return 'faker.number.float()'
|
|
18
|
+
* },
|
|
19
|
+
* },
|
|
20
|
+
* },
|
|
21
|
+
* })
|
|
22
|
+
* ```
|
|
7
23
|
*/
|
|
8
24
|
export type PrinterFakerNodes = ast.PrinterPartial<string, PrinterFakerOptions>
|
|
9
25
|
|
|
10
26
|
/**
|
|
11
|
-
*
|
|
27
|
+
* Options passed to the Faker printer at instantiation: the parser library
|
|
28
|
+
* for date strings, the regex generator, the user-supplied schema-name
|
|
29
|
+
* mapper, and the resolver used to compute identifiers.
|
|
12
30
|
*/
|
|
13
31
|
export type PrinterFakerOptions = {
|
|
14
32
|
dateParser?: PluginFaker['resolvedOptions']['dateParser']
|
|
@@ -85,7 +103,7 @@ const fakerKeywordMapper = {
|
|
|
85
103
|
},
|
|
86
104
|
boolean: () => 'faker.datatype.boolean()',
|
|
87
105
|
null: () => 'null',
|
|
88
|
-
array: (items: string
|
|
106
|
+
array: (items: Array<string> = [], min?: number, max?: number) => {
|
|
89
107
|
if (items.length > 1) {
|
|
90
108
|
return `faker.helpers.arrayElements([${items.join(', ')}])`
|
|
91
109
|
}
|
|
@@ -106,9 +124,9 @@ const fakerKeywordMapper = {
|
|
|
106
124
|
|
|
107
125
|
return `faker.helpers.multiple(() => (${item}))`
|
|
108
126
|
},
|
|
109
|
-
tuple: (items: string
|
|
127
|
+
tuple: (items: Array<string> = []) => `[${items.join(', ')}]`,
|
|
110
128
|
enum: (items: Array<string | number | boolean | undefined> = [], type = 'any') => `faker.helpers.arrayElement<${type}>([${items.join(', ')}])`,
|
|
111
|
-
union: (items: string
|
|
129
|
+
union: (items: Array<string> = []) => `faker.helpers.arrayElement<any>([${items.join(', ')}])`,
|
|
112
130
|
datetime: () => 'faker.date.anytime().toISOString()',
|
|
113
131
|
date: (representation: 'date' | 'string' = 'string', parser: PluginFaker['resolvedOptions']['dateParser'] = 'faker') => {
|
|
114
132
|
if (representation === 'string') {
|
|
@@ -142,7 +160,7 @@ const fakerKeywordMapper = {
|
|
|
142
160
|
},
|
|
143
161
|
uuid: () => 'faker.string.uuid()',
|
|
144
162
|
url: () => 'faker.internet.url()',
|
|
145
|
-
and: (items: string
|
|
163
|
+
and: (items: Array<string> = []) => {
|
|
146
164
|
if (items.length === 0) {
|
|
147
165
|
return '{}'
|
|
148
166
|
}
|
|
@@ -258,7 +276,7 @@ export const printerFaker: (options: PrinterFakerOptions) => ast.Printer<Printer
|
|
|
258
276
|
return fakerKeywordMapper.enum(getEnumValues(node).map(parseEnumValue), this.options.typeName)
|
|
259
277
|
},
|
|
260
278
|
union(node): string {
|
|
261
|
-
const items: string
|
|
279
|
+
const items: Array<string> = (node.members ?? [])
|
|
262
280
|
.map((member) =>
|
|
263
281
|
printNested(member, {
|
|
264
282
|
nestedInObject: true,
|
|
@@ -269,7 +287,7 @@ export const printerFaker: (options: PrinterFakerOptions) => ast.Printer<Printer
|
|
|
269
287
|
return fakerKeywordMapper.union(items)
|
|
270
288
|
},
|
|
271
289
|
intersection(node): string {
|
|
272
|
-
const items: string
|
|
290
|
+
const items: Array<string> = (node.members ?? [])
|
|
273
291
|
.map((member) =>
|
|
274
292
|
printNested(member, {
|
|
275
293
|
nestedInObject: true,
|
|
@@ -280,7 +298,7 @@ export const printerFaker: (options: PrinterFakerOptions) => ast.Printer<Printer
|
|
|
280
298
|
return fakerKeywordMapper.and(items)
|
|
281
299
|
},
|
|
282
300
|
array(node): string {
|
|
283
|
-
const items: string
|
|
301
|
+
const items: Array<string> = (node.items ?? [])
|
|
284
302
|
.map((member) =>
|
|
285
303
|
printNested(member, {
|
|
286
304
|
typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[number]` : undefined,
|
|
@@ -292,7 +310,7 @@ export const printerFaker: (options: PrinterFakerOptions) => ast.Printer<Printer
|
|
|
292
310
|
return fakerKeywordMapper.array(items, node.min, node.max)
|
|
293
311
|
},
|
|
294
312
|
tuple(node): string {
|
|
295
|
-
const items: string
|
|
313
|
+
const items: Array<string> = (node.items ?? [])
|
|
296
314
|
.map((member, index) =>
|
|
297
315
|
printNested(member, {
|
|
298
316
|
typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[${index}]` : undefined,
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto'
|
|
2
2
|
import path from 'node:path'
|
|
3
|
-
import { camelCase,
|
|
3
|
+
import { camelCase, ensureValidVarName } from '@internals/utils'
|
|
4
4
|
import { defineResolver, KubbDriver } from '@kubb/core'
|
|
5
5
|
import type { PluginFaker } from '../types.ts'
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Default resolver used by `@kubb/plugin-faker`. Decides the names and file
|
|
9
|
+
* paths for every generated mock factory. Functions and files are prefixed
|
|
10
|
+
* with `create` so `Pet` becomes `createPet`.
|
|
9
11
|
*
|
|
10
|
-
*
|
|
12
|
+
* @example Resolve a factory name
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { resolverFaker } from '@kubb/plugin-faker'
|
|
11
15
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
16
|
+
* resolverFaker.default('list pets', 'function') // 'createListPets'
|
|
17
|
+
* ```
|
|
14
18
|
*/
|
|
15
19
|
export const resolverFaker = defineResolver<PluginFaker>(() => {
|
|
16
20
|
return {
|
|
@@ -18,12 +22,7 @@ export const resolverFaker = defineResolver<PluginFaker>(() => {
|
|
|
18
22
|
pluginName: 'plugin-faker',
|
|
19
23
|
default(name, type) {
|
|
20
24
|
const resolvedName = camelCase(name, { isFile: type === 'file', prefix: 'create' })
|
|
21
|
-
|
|
22
|
-
if (type === 'file' || isValidVarName(resolvedName)) {
|
|
23
|
-
return resolvedName
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
return `_${resolvedName}`
|
|
25
|
+
return type === 'file' ? resolvedName : ensureValidVarName(resolvedName)
|
|
27
26
|
},
|
|
28
27
|
resolveName(name, type) {
|
|
29
28
|
return this.default(name, type)
|
package/src/types.ts
CHANGED
|
@@ -73,80 +73,86 @@ export type ResolverFaker = Resolver &
|
|
|
73
73
|
|
|
74
74
|
export type Options = {
|
|
75
75
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
76
|
+
* Where the generated mock factories are written and how they are exported.
|
|
77
|
+
*
|
|
78
|
+
* @default { path: 'mocks', barrel: { type: 'named' } }
|
|
78
79
|
*/
|
|
79
80
|
output?: Output
|
|
80
81
|
/**
|
|
81
|
-
*
|
|
82
|
+
* Split generated files into subfolders based on the operation's tag.
|
|
82
83
|
*/
|
|
83
84
|
group?: Group
|
|
84
85
|
/**
|
|
85
|
-
*
|
|
86
|
+
* Skip operations matching at least one entry in the list.
|
|
86
87
|
*/
|
|
87
88
|
exclude?: Array<Exclude>
|
|
88
89
|
/**
|
|
89
|
-
*
|
|
90
|
+
* Restrict generation to operations matching at least one entry in the list.
|
|
90
91
|
*/
|
|
91
92
|
include?: Array<Include>
|
|
92
93
|
/**
|
|
93
|
-
*
|
|
94
|
+
* Apply a different options object to operations matching a pattern.
|
|
94
95
|
*/
|
|
95
96
|
override?: Array<Override<ResolvedOptions>>
|
|
96
97
|
/**
|
|
97
|
-
*
|
|
98
|
+
* Library used to format string-represented date, time, and datetime fields.
|
|
99
|
+
* Any library exporting a default function works; Kubb adds the import for you.
|
|
98
100
|
*
|
|
99
101
|
* @default 'faker'
|
|
100
102
|
*/
|
|
101
103
|
dateParser?: 'faker' | 'dayjs' | 'moment' | (string & {})
|
|
102
104
|
/**
|
|
103
|
-
*
|
|
105
|
+
* Library used to generate strings that satisfy a regex `pattern` keyword.
|
|
106
|
+
* - `'faker'` uses `faker.helpers.fromRegExp`. No extra dependency.
|
|
107
|
+
* - `'randexp'` uses the `randexp` package. Supports a wider regex grammar.
|
|
104
108
|
*
|
|
105
109
|
* @default 'faker'
|
|
106
110
|
*/
|
|
107
111
|
regexGenerator?: 'faker' | 'randexp'
|
|
108
112
|
/**
|
|
109
|
-
*
|
|
113
|
+
* Map a schema name to a custom Faker expression. Use this when the schema name
|
|
114
|
+
* does not give Faker enough context (`'email'`, `'avatarUrl'`, `'phoneNumber'`).
|
|
110
115
|
*/
|
|
111
116
|
mapper?: Record<string, string>
|
|
112
117
|
/**
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
* and phone numbers reflect the target region.
|
|
118
|
+
* Faker locale code. Switches the named import to `fakerXX` from `@faker-js/faker`
|
|
119
|
+
* so names, addresses, and phone numbers reflect the target region.
|
|
116
120
|
*
|
|
117
121
|
* @default 'en'
|
|
118
|
-
*
|
|
119
122
|
* @example German
|
|
120
123
|
* `locale: 'de'`
|
|
121
|
-
*
|
|
122
124
|
* @example Austrian German
|
|
123
125
|
* `locale: 'de_AT'`
|
|
124
|
-
*
|
|
125
126
|
* @see https://fakerjs.dev/api/localization.html
|
|
126
127
|
*/
|
|
127
128
|
locale?: string
|
|
128
129
|
/**
|
|
129
|
-
*
|
|
130
|
+
* Value passed to `faker.seed(...)`. Set this for deterministic mock output,
|
|
131
|
+
* which is useful for snapshot tests.
|
|
130
132
|
*/
|
|
131
|
-
seed?: number | number
|
|
133
|
+
seed?: number | Array<number>
|
|
132
134
|
/**
|
|
133
|
-
*
|
|
135
|
+
* Rename properties inside path/query/header mocks. Body mocks are unaffected.
|
|
136
|
+
*
|
|
137
|
+
* @note Must match the value of `paramsCasing` on `@kubb/plugin-ts`.
|
|
134
138
|
*/
|
|
135
139
|
paramsCasing?: 'camelcase'
|
|
136
140
|
/**
|
|
137
|
-
*
|
|
141
|
+
* Custom generators that run alongside the built-in Faker generators.
|
|
138
142
|
*/
|
|
139
143
|
generators?: Array<Generator<PluginFaker>>
|
|
140
144
|
/**
|
|
141
|
-
* Override naming
|
|
145
|
+
* Override the naming of generated factory helpers. Common use: append `Mock` or
|
|
146
|
+
* `Factory` so helpers do not clash with imported types.
|
|
142
147
|
*/
|
|
143
148
|
resolver?: Partial<ResolverFaker> & ThisType<ResolverFaker>
|
|
144
149
|
/**
|
|
145
|
-
* AST visitor to
|
|
150
|
+
* AST visitor applied to schema and operation nodes before printing.
|
|
146
151
|
*/
|
|
147
152
|
transformer?: ast.Visitor
|
|
148
153
|
/**
|
|
149
|
-
*
|
|
154
|
+
* Replace the Faker handler for a specific schema type (`'integer'`, `'date'`, ...).
|
|
155
|
+
* Each handler returns the Faker expression as a string.
|
|
150
156
|
*/
|
|
151
157
|
printer?: {
|
|
152
158
|
nodes?: PrinterFakerNodes
|
|
@@ -155,7 +161,7 @@ export type Options = {
|
|
|
155
161
|
|
|
156
162
|
type ResolvedOptions = {
|
|
157
163
|
output: Output
|
|
158
|
-
group: Group |
|
|
164
|
+
group: Group | null
|
|
159
165
|
exclude: NonNullable<Options['exclude']>
|
|
160
166
|
include: Options['include']
|
|
161
167
|
override: NonNullable<Options['override']>
|
package/src/utils.ts
CHANGED
|
@@ -225,7 +225,7 @@ export function resolveFakerTypeUsage(
|
|
|
225
225
|
canOverride: boolean,
|
|
226
226
|
): {
|
|
227
227
|
dataType: string
|
|
228
|
-
returnType: string |
|
|
228
|
+
returnType: string | null
|
|
229
229
|
usesTypeName: boolean
|
|
230
230
|
} {
|
|
231
231
|
const isArray = ARRAY_TYPES.has(node.type)
|
|
@@ -242,7 +242,7 @@ export function resolveFakerTypeUsage(
|
|
|
242
242
|
dataType = getScalarType(node, typeName)
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
let returnType = canOverride ? typeName :
|
|
245
|
+
let returnType = canOverride ? typeName : null
|
|
246
246
|
|
|
247
247
|
if (isScalar) {
|
|
248
248
|
returnType = getScalarType(node, typeName)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Faker-AHTTvWZS.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.schema)\n\n if (!responses.length) {\n return null\n }\n\n if (responses.length === 1) {\n if (shouldInlineSingleResponseSchema(responses[0]!.schema)) {\n return responses[0]!.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 | undefined\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 : undefined\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}\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":";;;;;;;;;;;;;;;AAQA,SAAgB,WAAW,MAAsB;CAC/C,IAAI,KAAK,UAAU,GAAG;EACpB,MAAM,QAAQ,KAAK;EACnB,MAAM,OAAO,KAAK,KAAK,SAAS;EAChC,IAAK,UAAU,QAAO,SAAS,QAAS,UAAU,OAAO,SAAS,OAAS,UAAU,OAAO,SAAS,KACnG,OAAO,KAAK,MAAM,GAAG,GAAG;;CAG5B,OAAO;;;;;;;;;;;;;AAcT,SAAgB,eAAe,OAAwB;CACrD,OAAO,GAAG,QAAQ,QAAQ,4BAA4B,cAAc;EAClE,QAAQ,WAAR;GACE,KAAK;GACL,KAAK;GACL,KAAK,MACH,OAAO,KAAK;GACd,KAAK,MACH,OAAO;GACT,KAAK,MACH,OAAO;GACT,KAAK,UACH,OAAO;GACT,KAAK,UACH,OAAO;GACT,SACE,OAAO;;GAEX;;;;;;;;;;;;;;;;;;;AC7BJ,SAAgB,oBAAoB,QAAyB;CAC3D,IAAI,CAAC,QACH,OAAO;CAGT,MAAM,QAAQ,OAAO,MAAM,IAAI;CAC/B,MAAM,KAAK,MAAM,GAAI,aAAa;CAClC,OAAO,QAAQ,MAAM,KAAK,IAAI;;;;;AAMhC,SAAgB,kBAAkB,MAA+B;CAC/D,OAAO,IAAI,IAA4B;EACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,CAAC,IAAI,KAAK,KAAK;;;;;AAMnB,SAAgB,2BACd,UACA,MACA,OACQ;CACR,QAAQ,MAAM,IAAd;EACE,KAAK,QACH,OAAO,SAAS,sBAAsB,MAAM,MAAM;EACpD,KAAK,SACH,OAAO,SAAS,uBAAuB,MAAM,MAAM;EACrD,KAAK,UACH,OAAO,SAAS,wBAAwB,MAAM,MAAM;EACtD,SACE,OAAO,SAAS,iBAAiB,MAAM,MAAM;;;AAInD,SAAS,iCAAiC,QAAiC;CACzE,OAAO,IAAI,IAA4B;EACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,CAAC,IAAI,OAAO,KAAK;;;;;;AAOrB,SAAgB,yBAAyB,MAAyB,UAAgD;CAChH,MAAM,YAAY,KAAK,UAAU,QAAQ,aAAa,SAAS,OAAO;CAEtE,IAAI,CAAC,UAAU,QACb,OAAO;CAGT,IAAI,UAAU,WAAW,GAAG;EAC1B,IAAI,iCAAiC,UAAU,GAAI,OAAO,EACxD,OAAO,UAAU,GAAI;EAGvB,OAAO,IAAI,aAAa;GAAE,MAAM;GAAO,MAAM,SAAS,0BAA0B,MAAM,UAAU,GAAI,WAAW;GAAE,CAAC;;CAGpH,OAAO,IAAI,aAAa;EACtB,MAAM;EACN,SAAS,UAAU,KAAK,aAAa,IAAI,aAAa;GAAE,MAAM;GAAO,MAAM,SAAS,0BAA0B,MAAM,SAAS,WAAW;GAAE,CAAC,CAAC;EAC7I,CAAC;;AAGJ,MAAMA,iBAAe,IAAI,IAA4B;CACnD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AACF,MAAMC,gBAAc,IAAI,IAA4B,CAAC,QAAQ,CAAC;AAE9D,SAAS,qBAAqB,MAAc,IAAoB;CAC9D,MAAM,eAAe,MAAM,SAAS,MAAM,QAAQ,KAAK,EAAE,GAAG;CAC5D,OAAO,aAAa,WAAW,MAAM,GAAG,eAAe,KAAK;;;;;;AAO9D,SAAgB,qBAAqB,EACnC,MACA,aACA,MACA,UACA,UACA,gBAQ4C;CAC5C,MAAM,EAAE,iBAAiB,sBAAsB,MAAM,UAAU,YAAY;CAE3E,IAAI,CAAC,cACH,OAAO,EAAE,UAAU;CAGrB,IAAI,SAAS,UACX,OAAO,EACL,UAAU,WAAW,qBAAqB,UAAU,aAAa,CAAC,KAAK,YACxE;CAGH,OAAO;EACL,YAAY;EACZ;EACD;;;;;;AAOH,SAAgB,cAAc,MAAsB,UAA0B;CAC5E,QAAQ,KAAK,MAAb;EACE,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,QACH,OAAO;EACT,KAAK;EACL,KAAK,WACH,OAAO;EACT,KAAK,UACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK;EACL,KAAK,QACH,OAAO,KAAK,mBAAmB,SAAS,SAAS;EACnD,KAAK,YACH,OAAO;EACT,KAAK,QACH,OAAO;EACT,KAAK,QACH,OAAO;EACT,SACE,OAAO;;;;;;;AAQb,SAAgB,sBACd,MACA,UACA,aAKA;CACA,MAAM,UAAUA,cAAY,IAAI,KAAK,KAAK;CAC1C,MAAM,UAAU,KAAK,SAAS;CAC9B,MAAM,WAAWD,eAAa,IAAI,KAAK,KAAK;CAE5C,IAAI,WAAW,WAAW,SAAS;CAEnC,IAAI,WAAW,WAAW,KAAK,SAAS,WAAW,KAAK,SAAS,QAC/D,WAAW;CAGb,IAAI,UACF,WAAW,cAAc,MAAM,SAAS;CAG1C,IAAI,aAAa,cAAc,WAAW,KAAA;CAE1C,IAAI,UACF,aAAa,cAAc,MAAM,SAAS;CAG5C,OAAO;EACL;EACA;EACA,cAAc,SAAS,SAAS,SAAS,IAAI,QAAQ,YAAY,SAAS,SAAS,CAAC;EACrF;;;;AC3OH,MAAM,eAAe,IAAI,IAA4B,CAAC,UAAU,eAAe,CAAC;AAChF,MAAM,cAAc,IAAI,IAA4B,CAAC,QAAQ,CAAC;AAC9D,MAAM,eAAe,IAAI,IAA4B;CACnD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AACF,MAAM,qBAAqB,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEnE,SAAgB,MAAM,EAAE,MAAM,aAAa,MAAM,UAAU,SAAS,MAAM,eAAqC;CAC7G,MAAM,YAAY,QAAQ,MAAM,KAAK,IAAI;CAEzC,MAAM,UAAU,YAAY,IAAI,KAAK,KAAK;CAC1C,MAAM,WAAW,aAAa,IAAI,KAAK,KAAK;CAC5C,MAAM,UAAU,KAAK,SAAS;CAC9B,MAAM,WAAW,aAAa,IAAI,KAAK,KAAK;CAE5C,MAAM,qBAAqB,eAAe;CAC1C,MAAM,+BAA+B;EACnC,IAAI,eAAe,SAAS,OAAO,WAAW;EAC9C,IAAI,eAAe,SAAS,OAAO,WAAW,UAAU;EACxD,IAAI,eAAe,UAAU,OAAO,WAAW;EAC/C,OAAO;KACL;CAEJ,MAAM,EAAE,UAAU,YAAY,uBAAuB,sBAAsB,MAAM,UAAU,YAAY;CAEvG,IAAI,CAAC,oBAAoB;EAEvB,MAAM,gBADW,WAAW,KAAK,sBACH,GAAG,SAAS;EAC1C,MAAM,SAAS,IAAI,yBAAyB,EAC1C,QAAQ,CACN,IAAI,wBAAwB;GAC1B,MAAM;GACN,MAAM,IAAI,iBAAiB;IAAE,SAAS;IAAa,MAAM;IAAU,CAAC;GACpE,UAAU;GACX,CAAC,CACH,EACF,CAAC;EACF,MAAM,kBAAkB,mBAAmB,MAAM,OAAO,IAAI;EAC5D,MAAM,aAAa;EAEnB,OACE,oBAAC,KAAK,QAAN;GAAmB;GAAM,cAAA;GAAa,aAAA;aACpC,qBAAC,UAAD;IACE,QAAA;IACM;IACN,OAAO,EAAE,UAAU,cAAc,CAAC,gBAAgB,eAAe,YAAY,GAAG,GAAG,EAAE,EAAE;IACvF,QAAQ,cAAc,kBAAkB,KAAA;IAC5B;cALd,CAOG,OACC,qBAAA,UAAA,EAAA,UAAA,CACG,cAAc,KAAK,UAAU,KAAK,CAAC,IACpC,oBAAC,MAAD,EAAM,CAAA,CACL,EAAA,CAAA,GACD,KAAA,GACH,UAAU,wBACF;;GACC,CAAA;;CAMlB,MAAM,oBAAoB,GADZ,cAAc,0BAA0B,eAAe,YAAY,CAAC,eAAe,GAC9D,kBAAkB,KAAK,kBAAkB,SAAS,eAAe,SAAS;CAE7G,MAAM,WAAW,OAAO,cAAc,KAAK,UAAU,KAAK,CAAC,SAAS;CAOpE,MAAM,EAAE,eAAe,eAAe,QAAQ;CAM9C,MAAM,eAJJ,KAAK,SAAS,YACd,CAAC,CAAC,kBACD,KAAK,cAAc,EAAE,EAAE,MAAM,MAAM,IAAI,oBAAoB,EAAE,QAAQ;EAAE,iBAAiB;EAAe,aAAa;EAAY,CAAC,CAAC,GAGjI;IACF,SAAS,0BAA0B,UAAU;;;;;;uCAMV,SAAS;KAE1C;IACF,SAAS,0BAA0B,UAAU;;;;kBAI/B,SAAS;;CAGzB,OACE,qBAAC,KAAK,QAAN;EAAmB;EAAM,cAAA;EAAa,aAAA;YAAtC,CACG,mBACA,aACW"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Faker-BoPNqNfi.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.schema)\n\n if (!responses.length) {\n return null\n }\n\n if (responses.length === 1) {\n if (shouldInlineSingleResponseSchema(responses[0]!.schema)) {\n return responses[0]!.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 | undefined\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 : undefined\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}\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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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { t as __name } from "./chunk--u3MIqq1.js";
|
|
2
|
-
import { o as PluginFaker } from "./printerFaker-W0pLunAj.js";
|
|
3
|
-
import * as _$_kubb_core0 from "@kubb/core";
|
|
4
|
-
|
|
5
|
-
//#region src/generators/fakerGenerator.d.ts
|
|
6
|
-
declare const fakerGenerator: _$_kubb_core0.Generator<PluginFaker, unknown>;
|
|
7
|
-
//#endregion
|
|
8
|
-
export { fakerGenerator as t };
|
|
9
|
-
//# sourceMappingURL=fakerGenerator-B-QnVz9o.d.ts.map
|