@kubb/plugin-faker 5.0.0-beta.4 → 5.0.0-beta.56
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 +39 -22
- package/dist/{Faker-CdyPfOPg.d.ts → Faker-A5UuxwJj.d.ts} +3 -3
- package/dist/{Faker-fcQEB9i5.js → Faker-CHh0JtBG.js} +41 -145
- package/dist/Faker-CHh0JtBG.js.map +1 -0
- package/dist/{Faker-BgleOzVN.cjs → Faker-CcGjn5ZM.cjs} +40 -174
- package/dist/Faker-CcGjn5ZM.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-DDNsdbH2.js} +237 -94
- package/dist/fakerGenerator-DDNsdbH2.js.map +1 -0
- package/dist/{fakerGenerator-VJEVzLjc.cjs → fakerGenerator-DrwGWYwv.cjs} +240 -97
- package/dist/fakerGenerator-DrwGWYwv.cjs.map +1 -0
- package/dist/fakerGenerator-KKVr-CA2.d.ts +14 -0
- package/dist/generators.cjs +1 -1
- package/dist/generators.d.ts +1 -1
- package/dist/generators.js +1 -1
- package/dist/index.cjs +240 -69
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +35 -15
- package/dist/index.js +241 -70
- package/dist/index.js.map +1 -1
- package/dist/{printerFaker-CJiwzoto.d.ts → printerFaker-CMCJT3FB.d.ts} +68 -35
- package/package.json +12 -22
- package/src/components/Faker.tsx +51 -65
- package/src/generators/fakerGenerator.tsx +108 -72
- package/src/plugin.ts +27 -23
- package/src/printers/printerFaker.ts +102 -40
- package/src/resolvers/resolverFaker.ts +31 -39
- package/src/types.ts +40 -31
- package/src/utils.ts +7 -106
- 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/extension.yaml +0 -364
- /package/dist/{chunk--u3MIqq1.js → chunk-C0LytTxp.js} +0 -0
|
@@ -1,58 +1,47 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto'
|
|
2
2
|
import path from 'node:path'
|
|
3
|
-
import { camelCase } from '@internals/utils'
|
|
4
|
-
import { defineResolver
|
|
3
|
+
import { camelCase, ensureValidVarName, toFilePath } from '@internals/utils'
|
|
4
|
+
import { defineResolver } from '@kubb/core'
|
|
5
5
|
import type { PluginFaker } from '../types.ts'
|
|
6
6
|
|
|
7
|
-
function isValidStrictIdentifier(name: string): boolean {
|
|
8
|
-
try {
|
|
9
|
-
new Function(`"use strict"; const ${name} = 1;`)
|
|
10
|
-
} catch {
|
|
11
|
-
return false
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
return true
|
|
15
|
-
}
|
|
16
|
-
|
|
17
7
|
/**
|
|
18
|
-
*
|
|
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`.
|
|
19
11
|
*
|
|
20
|
-
*
|
|
12
|
+
* @example Resolve a factory name
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { resolverFaker } from '@kubb/plugin-faker'
|
|
21
15
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
16
|
+
* resolverFaker.default('list pets', 'function') // 'createListPets'
|
|
17
|
+
* ```
|
|
24
18
|
*/
|
|
25
|
-
export const resolverFaker = defineResolver<PluginFaker>((
|
|
19
|
+
export const resolverFaker = defineResolver<PluginFaker>(() => {
|
|
26
20
|
return {
|
|
27
21
|
name: 'default',
|
|
28
22
|
pluginName: 'plugin-faker',
|
|
29
23
|
default(name, type) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (type === 'file' || isValidStrictIdentifier(resolvedName)) {
|
|
33
|
-
return resolvedName
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return `_${resolvedName}`
|
|
24
|
+
if (type === 'file') return toFilePath(name, (part) => camelCase(part, { prefix: 'create' }))
|
|
25
|
+
return ensureValidVarName(camelCase(name, { prefix: 'create' }))
|
|
37
26
|
},
|
|
38
27
|
resolveName(name, type) {
|
|
39
|
-
return
|
|
28
|
+
return this.default(name, type)
|
|
40
29
|
},
|
|
41
30
|
resolvePathName(name, type) {
|
|
42
|
-
return
|
|
31
|
+
return this.default(name, type)
|
|
43
32
|
},
|
|
44
33
|
resolveFile({ name, extname, tag, path: groupPath }, context) {
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
const filePath =
|
|
34
|
+
const resolvedName = context.output.mode === 'file' ? '' : this.resolveName(name, 'file')
|
|
35
|
+
const inputBaseName = `${resolvedName}${extname}` as `${string}.${string}`
|
|
36
|
+
const filePath = this.resolvePath(
|
|
48
37
|
{
|
|
49
|
-
baseName,
|
|
50
|
-
pathMode,
|
|
38
|
+
baseName: inputBaseName,
|
|
51
39
|
tag,
|
|
52
40
|
path: groupPath,
|
|
53
41
|
},
|
|
54
42
|
context,
|
|
55
43
|
)
|
|
44
|
+
const baseName = path.basename(filePath) as `${string}.${string}`
|
|
56
45
|
|
|
57
46
|
return {
|
|
58
47
|
kind: 'File',
|
|
@@ -61,32 +50,35 @@ export const resolverFaker = defineResolver<PluginFaker>((ctx) => {
|
|
|
61
50
|
path: filePath,
|
|
62
51
|
baseName,
|
|
63
52
|
extname,
|
|
64
|
-
meta: { pluginName:
|
|
53
|
+
meta: { pluginName: this.pluginName },
|
|
65
54
|
sources: [],
|
|
66
55
|
imports: [],
|
|
67
56
|
exports: [],
|
|
68
57
|
}
|
|
69
58
|
},
|
|
70
59
|
resolveParamName(node, param) {
|
|
71
|
-
return
|
|
60
|
+
return this.resolveName(`${node.operationId} ${param.in} ${param.name}`)
|
|
72
61
|
},
|
|
73
62
|
resolveDataName(node) {
|
|
74
|
-
return
|
|
63
|
+
return this.resolveName(`${node.operationId} Data`)
|
|
75
64
|
},
|
|
76
65
|
resolveResponseStatusName(node, statusCode) {
|
|
77
|
-
return
|
|
66
|
+
return this.resolveName(`${node.operationId} Status ${statusCode}`)
|
|
78
67
|
},
|
|
79
68
|
resolveResponseName(node) {
|
|
80
|
-
return
|
|
69
|
+
return this.resolveName(`${node.operationId} Response`)
|
|
70
|
+
},
|
|
71
|
+
resolveResponsesName(node) {
|
|
72
|
+
return this.resolveName(`${node.operationId} Responses`)
|
|
81
73
|
},
|
|
82
74
|
resolvePathParamsName(node, param) {
|
|
83
|
-
return
|
|
75
|
+
return this.resolveParamName(node, param)
|
|
84
76
|
},
|
|
85
77
|
resolveQueryParamsName(node, param) {
|
|
86
|
-
return
|
|
78
|
+
return this.resolveParamName(node, param)
|
|
87
79
|
},
|
|
88
80
|
resolveHeaderParamsName(node, param) {
|
|
89
|
-
return
|
|
81
|
+
return this.resolveParamName(node, param)
|
|
90
82
|
},
|
|
91
83
|
}
|
|
92
84
|
})
|
package/src/types.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ast, Exclude, Generator, Group, Include, Output, Override, PluginFactoryOptions, Resolver } from '@kubb/core'
|
|
1
|
+
import type { ast, Exclude, Generator, Group, Include, Output, OutputOptions, Override, PluginFactoryOptions, Resolver } from '@kubb/core'
|
|
2
2
|
import type { PrinterFakerNodes } from './printers/printerFaker.ts'
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -41,6 +41,13 @@ export type ResolverFaker = Resolver &
|
|
|
41
41
|
* `resolver.resolveResponseName(node) // -> 'listPetsResponse'`
|
|
42
42
|
*/
|
|
43
43
|
resolveResponseName(this: ResolverFaker, node: ast.OperationNode): string
|
|
44
|
+
/**
|
|
45
|
+
* Resolves the faker function name for the response collection.
|
|
46
|
+
*
|
|
47
|
+
* @example Responses collection names
|
|
48
|
+
* `resolver.resolveResponsesName(node) // -> 'listPetsResponses'`
|
|
49
|
+
*/
|
|
50
|
+
resolveResponsesName(this: ResolverFaker, node: ast.OperationNode): string
|
|
44
51
|
/**
|
|
45
52
|
* Resolves the faker function name for path parameters.
|
|
46
53
|
*
|
|
@@ -64,82 +71,84 @@ export type ResolverFaker = Resolver &
|
|
|
64
71
|
resolveHeaderParamsName(this: ResolverFaker, node: ast.OperationNode, param: ast.ParameterNode): string
|
|
65
72
|
}
|
|
66
73
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
* Group the Faker mocks based on the provided name.
|
|
75
|
-
*/
|
|
76
|
-
group?: Group
|
|
74
|
+
/**
|
|
75
|
+
* Where the generated mock factories are written and how they are exported, plus the optional
|
|
76
|
+
* `group` strategy. The `group` option organizes `output.mode: 'directory'` output into per-tag or per-path subdirectories.
|
|
77
|
+
*
|
|
78
|
+
* @default { path: 'mocks', barrel: { type: 'named' } }
|
|
79
|
+
*/
|
|
80
|
+
export type Options = OutputOptions & {
|
|
77
81
|
/**
|
|
78
|
-
*
|
|
82
|
+
* Skip operations matching at least one entry in the list.
|
|
79
83
|
*/
|
|
80
84
|
exclude?: Array<Exclude>
|
|
81
85
|
/**
|
|
82
|
-
*
|
|
86
|
+
* Restrict generation to operations matching at least one entry in the list.
|
|
83
87
|
*/
|
|
84
88
|
include?: Array<Include>
|
|
85
89
|
/**
|
|
86
|
-
*
|
|
90
|
+
* Apply a different options object to operations matching a pattern.
|
|
87
91
|
*/
|
|
88
92
|
override?: Array<Override<ResolvedOptions>>
|
|
89
93
|
/**
|
|
90
|
-
*
|
|
94
|
+
* Library used to format string-represented date, time, and datetime fields.
|
|
95
|
+
* Any library exporting a default function works; Kubb adds the import for you.
|
|
91
96
|
*
|
|
92
97
|
* @default 'faker'
|
|
93
98
|
*/
|
|
94
99
|
dateParser?: 'faker' | 'dayjs' | 'moment' | (string & {})
|
|
95
100
|
/**
|
|
96
|
-
*
|
|
101
|
+
* Library used to generate strings that satisfy a regex `pattern` keyword.
|
|
102
|
+
* - `'faker'` uses `faker.helpers.fromRegExp`. No extra dependency.
|
|
103
|
+
* - `'randexp'` uses the `randexp` package. Supports a wider regex grammar.
|
|
97
104
|
*
|
|
98
105
|
* @default 'faker'
|
|
99
106
|
*/
|
|
100
107
|
regexGenerator?: 'faker' | 'randexp'
|
|
101
108
|
/**
|
|
102
|
-
*
|
|
109
|
+
* Map a schema name to a custom Faker expression. Use this when the schema name
|
|
110
|
+
* does not give Faker enough context (`'email'`, `'avatarUrl'`, `'phoneNumber'`).
|
|
103
111
|
*/
|
|
104
112
|
mapper?: Record<string, string>
|
|
105
113
|
/**
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
* and phone numbers reflect the target region.
|
|
114
|
+
* Faker locale code. Switches the named import to `fakerXX` from `@faker-js/faker`
|
|
115
|
+
* so names, addresses, and phone numbers reflect the target region.
|
|
109
116
|
*
|
|
110
117
|
* @default 'en'
|
|
111
|
-
*
|
|
112
118
|
* @example German
|
|
113
119
|
* `locale: 'de'`
|
|
114
|
-
*
|
|
115
120
|
* @example Austrian German
|
|
116
121
|
* `locale: 'de_AT'`
|
|
117
|
-
*
|
|
118
122
|
* @see https://fakerjs.dev/api/localization.html
|
|
119
123
|
*/
|
|
120
124
|
locale?: string
|
|
121
125
|
/**
|
|
122
|
-
*
|
|
126
|
+
* Value passed to `faker.seed(...)`. Set this for deterministic mock output,
|
|
127
|
+
* which is useful for snapshot tests.
|
|
123
128
|
*/
|
|
124
|
-
seed?: number | number
|
|
129
|
+
seed?: number | Array<number>
|
|
125
130
|
/**
|
|
126
|
-
*
|
|
131
|
+
* Rename properties inside path/query/header mocks. Body mocks are unaffected.
|
|
132
|
+
*
|
|
133
|
+
* @note Must match the value of `paramsCasing` on `@kubb/plugin-ts`.
|
|
127
134
|
*/
|
|
128
135
|
paramsCasing?: 'camelcase'
|
|
129
136
|
/**
|
|
130
|
-
*
|
|
137
|
+
* Custom generators that run alongside the built-in Faker generators.
|
|
131
138
|
*/
|
|
132
139
|
generators?: Array<Generator<PluginFaker>>
|
|
133
140
|
/**
|
|
134
|
-
* Override naming
|
|
141
|
+
* Override the naming of generated factory helpers. Common use: append `Mock` or
|
|
142
|
+
* `Factory` so helpers do not clash with imported types.
|
|
135
143
|
*/
|
|
136
144
|
resolver?: Partial<ResolverFaker> & ThisType<ResolverFaker>
|
|
137
145
|
/**
|
|
138
|
-
* AST visitor to
|
|
146
|
+
* AST visitor applied to schema and operation nodes before printing.
|
|
139
147
|
*/
|
|
140
148
|
transformer?: ast.Visitor
|
|
141
149
|
/**
|
|
142
|
-
*
|
|
150
|
+
* Replace the Faker handler for a specific schema type (`'integer'`, `'date'`, ...).
|
|
151
|
+
* Each handler returns the Faker expression as a string.
|
|
143
152
|
*/
|
|
144
153
|
printer?: {
|
|
145
154
|
nodes?: PrinterFakerNodes
|
|
@@ -148,7 +157,7 @@ export type Options = {
|
|
|
148
157
|
|
|
149
158
|
type ResolvedOptions = {
|
|
150
159
|
output: Output
|
|
151
|
-
group: Group |
|
|
160
|
+
group: Group | null
|
|
152
161
|
exclude: NonNullable<Options['exclude']>
|
|
153
162
|
include: Options['include']
|
|
154
163
|
override: NonNullable<Options['override']>
|
package/src/utils.ts
CHANGED
|
@@ -54,18 +54,6 @@ export function canOverrideSchema(node: ast.SchemaNode): boolean {
|
|
|
54
54
|
]).has(node.type)
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
/**
|
|
58
|
-
* Resolves a schema reference by looking up the referenced schema in the provided array.
|
|
59
|
-
* Returns the original node if it's not a reference.
|
|
60
|
-
*/
|
|
61
|
-
export function resolveSchemaRef(node: ast.SchemaNode, schemas: Array<ast.SchemaNode>): ast.SchemaNode {
|
|
62
|
-
if (node.type !== 'ref') {
|
|
63
|
-
return node
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return schemas.find((schema) => schema.name === node.name && schema.type !== 'ref') ?? node
|
|
67
|
-
}
|
|
68
|
-
|
|
69
57
|
/**
|
|
70
58
|
* Resolves a parameter name based on its location (path, query, header, etc.) using the provided resolver.
|
|
71
59
|
*/
|
|
@@ -116,15 +104,16 @@ function shouldInlineSingleResponseSchema(schema: ast.SchemaNode): boolean {
|
|
|
116
104
|
* Returns null if no responses are provided, or embeds single simple responses inline.
|
|
117
105
|
*/
|
|
118
106
|
export function buildResponseUnionSchema(node: ast.OperationNode, resolver: ResolverFaker): ast.SchemaNode | null {
|
|
119
|
-
const responses = node.responses.filter((response) => response.schema)
|
|
107
|
+
const responses = node.responses.filter((response) => response.content?.[0]?.schema)
|
|
120
108
|
|
|
121
109
|
if (!responses.length) {
|
|
122
110
|
return null
|
|
123
111
|
}
|
|
124
112
|
|
|
125
113
|
if (responses.length === 1) {
|
|
126
|
-
|
|
127
|
-
|
|
114
|
+
const schema = responses[0]!.content?.[0]?.schema
|
|
115
|
+
if (schema && shouldInlineSingleResponseSchema(schema)) {
|
|
116
|
+
return schema
|
|
128
117
|
}
|
|
129
118
|
|
|
130
119
|
return ast.createSchema({ type: 'ref', name: resolver.resolveResponseStatusName(node, responses[0]!.statusCode) })
|
|
@@ -136,19 +125,6 @@ export function buildResponseUnionSchema(node: ast.OperationNode, resolver: Reso
|
|
|
136
125
|
})
|
|
137
126
|
}
|
|
138
127
|
|
|
139
|
-
/**
|
|
140
|
-
* Import name that can be a string or a renamed import object.
|
|
141
|
-
*/
|
|
142
|
-
export type ImportName = string | { propertyName: string; name?: string }
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Import entry containing module path and imported names.
|
|
146
|
-
*/
|
|
147
|
-
export type ImportEntry = {
|
|
148
|
-
name: string | Array<ImportName>
|
|
149
|
-
path: string
|
|
150
|
-
}
|
|
151
|
-
|
|
152
128
|
const SCALAR_TYPES = new Set<ast.SchemaNode['type']>([
|
|
153
129
|
'string',
|
|
154
130
|
'email',
|
|
@@ -171,81 +147,6 @@ function toRelativeImportPath(from: string, to: string): string {
|
|
|
171
147
|
return relativePath.startsWith('../') ? relativePath : `./${relativePath}`
|
|
172
148
|
}
|
|
173
149
|
|
|
174
|
-
function escapeRegExp(value: string): string {
|
|
175
|
-
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Filters imports to only those that are actually used in the generated code.
|
|
180
|
-
* Checks for function calls matching the imported names.
|
|
181
|
-
*/
|
|
182
|
-
export function filterUsedImports(imports: Array<ImportEntry>, text: string, skipImportNames: Array<string> = []): Array<ImportEntry> {
|
|
183
|
-
return imports.filter((entry) => {
|
|
184
|
-
const names = (Array.isArray(entry.name) ? entry.name : [entry.name])
|
|
185
|
-
.map((name) => {
|
|
186
|
-
if (typeof name === 'string') {
|
|
187
|
-
return name
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
return name?.name ?? name?.propertyName
|
|
191
|
-
})
|
|
192
|
-
.filter((name): name is string => Boolean(name))
|
|
193
|
-
|
|
194
|
-
return names.some((name) => {
|
|
195
|
-
if (skipImportNames.includes(name)) {
|
|
196
|
-
return false
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
return new RegExp(`\\b${escapeRegExp(name)}\\b(?=\\s*\\()`).test(text)
|
|
200
|
-
})
|
|
201
|
-
})
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Detects and resolves import name conflicts by adding aliases to conflicting names.
|
|
206
|
-
* Returns updated imports with a mapping of original names to their aliases.
|
|
207
|
-
*/
|
|
208
|
-
export function aliasConflictingImports(
|
|
209
|
-
imports: Array<ImportEntry>,
|
|
210
|
-
reservedNames: Iterable<string>,
|
|
211
|
-
): { imports: Array<ImportEntry>; aliases: Map<string, string> } {
|
|
212
|
-
const reservedNameSet = new Set(reservedNames)
|
|
213
|
-
const aliases = new Map<string, string>()
|
|
214
|
-
|
|
215
|
-
const aliasedImports = imports.map((entry) => {
|
|
216
|
-
const names = Array.isArray(entry.name) ? entry.name : [entry.name]
|
|
217
|
-
const aliasedNames = names.map((item): ImportName => {
|
|
218
|
-
if (typeof item !== 'string' || !reservedNameSet.has(item)) {
|
|
219
|
-
return item
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
const alias = `${item}Schema`
|
|
223
|
-
aliases.set(item, alias)
|
|
224
|
-
|
|
225
|
-
return { propertyName: item, name: alias }
|
|
226
|
-
})
|
|
227
|
-
|
|
228
|
-
return aliasedNames.some((item) => typeof item === 'object' && item.name)
|
|
229
|
-
? {
|
|
230
|
-
...entry,
|
|
231
|
-
name: aliasedNames,
|
|
232
|
-
}
|
|
233
|
-
: entry
|
|
234
|
-
})
|
|
235
|
-
|
|
236
|
-
return {
|
|
237
|
-
imports: aliasedImports,
|
|
238
|
-
aliases,
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* Replaces all occurrences of original names with their aliased versions in the given text.
|
|
244
|
-
*/
|
|
245
|
-
export function rewriteAliasedImports(text: string, aliases: ReadonlyMap<string, string>): string {
|
|
246
|
-
return Array.from(aliases).reduce((acc, [name, alias]) => acc.replace(new RegExp(`\\b${escapeRegExp(name)}\\b`, 'g'), alias), text)
|
|
247
|
-
}
|
|
248
|
-
|
|
249
150
|
/**
|
|
250
151
|
* Resolves a type reference, determining if it needs an import statement or inline type reference.
|
|
251
152
|
* Takes into account whether the type can be overridden and the file paths.
|
|
@@ -287,7 +188,7 @@ export function resolveTypeReference({
|
|
|
287
188
|
* Maps a schema node type to its corresponding scalar type representation.
|
|
288
189
|
* Returns the type name for enums or the base type (string, number, etc.) for primitives.
|
|
289
190
|
*/
|
|
290
|
-
|
|
191
|
+
function getScalarType(node: ast.SchemaNode, typeName: string): string {
|
|
291
192
|
switch (node.type) {
|
|
292
193
|
case 'string':
|
|
293
194
|
case 'email':
|
|
@@ -325,7 +226,7 @@ export function resolveFakerTypeUsage(
|
|
|
325
226
|
canOverride: boolean,
|
|
326
227
|
): {
|
|
327
228
|
dataType: string
|
|
328
|
-
returnType: string |
|
|
229
|
+
returnType: string | null
|
|
329
230
|
usesTypeName: boolean
|
|
330
231
|
} {
|
|
331
232
|
const isArray = ARRAY_TYPES.has(node.type)
|
|
@@ -342,7 +243,7 @@ export function resolveFakerTypeUsage(
|
|
|
342
243
|
dataType = getScalarType(node, typeName)
|
|
343
244
|
}
|
|
344
245
|
|
|
345
|
-
let returnType = canOverride ? typeName :
|
|
246
|
+
let returnType = canOverride ? typeName : null
|
|
346
247
|
|
|
347
248
|
if (isScalar) {
|
|
348
249
|
returnType = getScalarType(node, typeName)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Faker-BgleOzVN.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 schema reference by looking up the referenced schema in the provided array.\n * Returns the original node if it's not a reference.\n */\nexport function resolveSchemaRef(node: ast.SchemaNode, schemas: Array<ast.SchemaNode>): ast.SchemaNode {\n if (node.type !== 'ref') {\n return node\n }\n\n return schemas.find((schema) => schema.name === node.name && schema.type !== 'ref') ?? node\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\n/**\n * Import name that can be a string or a renamed import object.\n */\nexport type ImportName = string | { propertyName: string; name?: string }\n\n/**\n * Import entry containing module path and imported names.\n */\nexport type ImportEntry = {\n name: string | Array<ImportName>\n path: string\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\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * Filters imports to only those that are actually used in the generated code.\n * Checks for function calls matching the imported names.\n */\nexport function filterUsedImports(imports: Array<ImportEntry>, text: string, skipImportNames: Array<string> = []): Array<ImportEntry> {\n return imports.filter((entry) => {\n const names = (Array.isArray(entry.name) ? entry.name : [entry.name])\n .map((name) => {\n if (typeof name === 'string') {\n return name\n }\n\n return name?.name ?? name?.propertyName\n })\n .filter((name): name is string => Boolean(name))\n\n return names.some((name) => {\n if (skipImportNames.includes(name)) {\n return false\n }\n\n return new RegExp(`\\\\b${escapeRegExp(name)}\\\\b(?=\\\\s*\\\\()`).test(text)\n })\n })\n}\n\n/**\n * Detects and resolves import name conflicts by adding aliases to conflicting names.\n * Returns updated imports with a mapping of original names to their aliases.\n */\nexport function aliasConflictingImports(\n imports: Array<ImportEntry>,\n reservedNames: Iterable<string>,\n): { imports: Array<ImportEntry>; aliases: Map<string, string> } {\n const reservedNameSet = new Set(reservedNames)\n const aliases = new Map<string, string>()\n\n const aliasedImports = imports.map((entry) => {\n const names = Array.isArray(entry.name) ? entry.name : [entry.name]\n const aliasedNames = names.map((item): ImportName => {\n if (typeof item !== 'string' || !reservedNameSet.has(item)) {\n return item\n }\n\n const alias = `${item}Schema`\n aliases.set(item, alias)\n\n return { propertyName: item, name: alias }\n })\n\n return aliasedNames.some((item) => typeof item === 'object' && item.name)\n ? {\n ...entry,\n name: aliasedNames,\n }\n : entry\n })\n\n return {\n imports: aliasedImports,\n aliases,\n }\n}\n\n/**\n * Replaces all occurrences of original names with their aliased versions in the given text.\n */\nexport function rewriteAliasedImports(text: string, aliases: ReadonlyMap<string, string>): string {\n return Array.from(aliases).reduce((acc, [name, alias]) => acc.replace(new RegExp(`\\\\b${escapeRegExp(name)}\\\\b`, 'g'), alias), text)\n}\n\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 let fakerTextWithOverride = fakerText\n let useGenericOverride = false\n\n if (canOverride && isObject) {\n useGenericOverride = true\n }\n\n if (canOverride && isTuple) {\n fakerTextWithOverride = `data || ${fakerText}`\n }\n\n if (canOverride && isArray) {\n fakerTextWithOverride = `[\n ...${fakerText},\n ...(data || [])\n]`\n }\n\n if (canOverride && isScalar) {\n fakerTextWithOverride = `data ?? ${fakerText}`\n }\n\n const { dataType, returnType: resolvedReturnType } = resolveFakerTypeUsage(node, typeName, canOverride)\n\n let functionSignature = ''\n let functionBody = ''\n\n if (useGenericOverride) {\n // Generate function with defaultFakeData structure\n const jsdoc = description ? `/**\\n * @description ${jsStringEscape(description)}\\n */\\n ` : ''\n 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 if (hasGetters) {\n functionBody = `{\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 } else {\n functionBody = `{\n ${seedCode}const defaultFakeData = ${fakerText}\n return {\n ...defaultFakeData,\n ...(data || {}),\n } as Required<${typeName}>\n}`\n }\n } else {\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 return (\n <File.Source name={name} isExportable isIndexable>\n {functionSignature}\n {functionBody}\n </File.Source>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Faker-fcQEB9i5.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 schema reference by looking up the referenced schema in the provided array.\n * Returns the original node if it's not a reference.\n */\nexport function resolveSchemaRef(node: ast.SchemaNode, schemas: Array<ast.SchemaNode>): ast.SchemaNode {\n if (node.type !== 'ref') {\n return node\n }\n\n return schemas.find((schema) => schema.name === node.name && schema.type !== 'ref') ?? node\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\n/**\n * Import name that can be a string or a renamed import object.\n */\nexport type ImportName = string | { propertyName: string; name?: string }\n\n/**\n * Import entry containing module path and imported names.\n */\nexport type ImportEntry = {\n name: string | Array<ImportName>\n path: string\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\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * Filters imports to only those that are actually used in the generated code.\n * Checks for function calls matching the imported names.\n */\nexport function filterUsedImports(imports: Array<ImportEntry>, text: string, skipImportNames: Array<string> = []): Array<ImportEntry> {\n return imports.filter((entry) => {\n const names = (Array.isArray(entry.name) ? entry.name : [entry.name])\n .map((name) => {\n if (typeof name === 'string') {\n return name\n }\n\n return name?.name ?? name?.propertyName\n })\n .filter((name): name is string => Boolean(name))\n\n return names.some((name) => {\n if (skipImportNames.includes(name)) {\n return false\n }\n\n return new RegExp(`\\\\b${escapeRegExp(name)}\\\\b(?=\\\\s*\\\\()`).test(text)\n })\n })\n}\n\n/**\n * Detects and resolves import name conflicts by adding aliases to conflicting names.\n * Returns updated imports with a mapping of original names to their aliases.\n */\nexport function aliasConflictingImports(\n imports: Array<ImportEntry>,\n reservedNames: Iterable<string>,\n): { imports: Array<ImportEntry>; aliases: Map<string, string> } {\n const reservedNameSet = new Set(reservedNames)\n const aliases = new Map<string, string>()\n\n const aliasedImports = imports.map((entry) => {\n const names = Array.isArray(entry.name) ? entry.name : [entry.name]\n const aliasedNames = names.map((item): ImportName => {\n if (typeof item !== 'string' || !reservedNameSet.has(item)) {\n return item\n }\n\n const alias = `${item}Schema`\n aliases.set(item, alias)\n\n return { propertyName: item, name: alias }\n })\n\n return aliasedNames.some((item) => typeof item === 'object' && item.name)\n ? {\n ...entry,\n name: aliasedNames,\n }\n : entry\n })\n\n return {\n imports: aliasedImports,\n aliases,\n }\n}\n\n/**\n * Replaces all occurrences of original names with their aliased versions in the given text.\n */\nexport function rewriteAliasedImports(text: string, aliases: ReadonlyMap<string, string>): string {\n return Array.from(aliases).reduce((acc, [name, alias]) => acc.replace(new RegExp(`\\\\b${escapeRegExp(name)}\\\\b`, 'g'), alias), text)\n}\n\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 let fakerTextWithOverride = fakerText\n let useGenericOverride = false\n\n if (canOverride && isObject) {\n useGenericOverride = true\n }\n\n if (canOverride && isTuple) {\n fakerTextWithOverride = `data || ${fakerText}`\n }\n\n if (canOverride && isArray) {\n fakerTextWithOverride = `[\n ...${fakerText},\n ...(data || [])\n]`\n }\n\n if (canOverride && isScalar) {\n fakerTextWithOverride = `data ?? ${fakerText}`\n }\n\n const { dataType, returnType: resolvedReturnType } = resolveFakerTypeUsage(node, typeName, canOverride)\n\n let functionSignature = ''\n let functionBody = ''\n\n if (useGenericOverride) {\n // Generate function with defaultFakeData structure\n const jsdoc = description ? `/**\\n * @description ${jsStringEscape(description)}\\n */\\n ` : ''\n 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 if (hasGetters) {\n functionBody = `{\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 } else {\n functionBody = `{\n ${seedCode}const defaultFakeData = ${fakerText}\n return {\n ...defaultFakeData,\n ...(data || {}),\n } as Required<${typeName}>\n}`\n }\n } else {\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 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-CJiwzoto.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-C3Ho3BaI.d.ts.map
|