@kubb/plugin-faker 5.0.0-beta.42 → 5.0.0-beta.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/{Faker-SBhWTdC7.d.ts → Faker-BA4l8DTe.d.ts} +2 -2
  2. package/dist/{Faker-DBPx_MVh.js → Faker-DUx7jvCo.js} +10 -55
  3. package/dist/Faker-DUx7jvCo.js.map +1 -0
  4. package/dist/{Faker-DRL0W5Lt.cjs → Faker-Ds2xP2-k.cjs} +11 -62
  5. package/dist/Faker-Ds2xP2-k.cjs.map +1 -0
  6. package/dist/components.cjs +1 -1
  7. package/dist/components.d.ts +1 -1
  8. package/dist/components.js +1 -1
  9. package/dist/{fakerGenerator-Duc28_FK.d.ts → fakerGenerator-BNysC6rh.d.ts} +2 -2
  10. package/dist/{fakerGenerator-CVOr0Pwm.cjs → fakerGenerator-BeKRKYuy.cjs} +26 -60
  11. package/dist/fakerGenerator-BeKRKYuy.cjs.map +1 -0
  12. package/dist/{fakerGenerator-DNJ61yLj.js → fakerGenerator-D5Bcy5WY.js} +25 -59
  13. package/dist/fakerGenerator-D5Bcy5WY.js.map +1 -0
  14. package/dist/generators.cjs +1 -1
  15. package/dist/generators.d.ts +1 -1
  16. package/dist/generators.js +1 -1
  17. package/dist/index.cjs +47 -44
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.ts +3 -3
  20. package/dist/index.js +47 -44
  21. package/dist/index.js.map +1 -1
  22. package/dist/{printerFaker-DXS861Q0.d.ts → printerFaker-BzEB43Jz.d.ts} +11 -15
  23. package/package.json +8 -16
  24. package/dist/Faker-DBPx_MVh.js.map +0 -1
  25. package/dist/Faker-DRL0W5Lt.cjs.map +0 -1
  26. package/dist/fakerGenerator-CVOr0Pwm.cjs.map +0 -1
  27. package/dist/fakerGenerator-DNJ61yLj.js.map +0 -1
  28. package/extension.yaml +0 -819
  29. package/src/components/Faker.tsx +0 -139
  30. package/src/components/index.ts +0 -1
  31. package/src/generators/fakerGenerator.tsx +0 -311
  32. package/src/generators/index.ts +0 -1
  33. package/src/index.ts +0 -7
  34. package/src/plugin.ts +0 -92
  35. package/src/printers/printerFaker.ts +0 -405
  36. package/src/resolvers/resolverFaker.ts +0 -84
  37. package/src/types.ts +0 -185
  38. package/src/utils.ts +0 -257
@@ -1,139 +0,0 @@
1
- import { jsStringEscape } from '@internals/utils'
2
- import { ast } from '@kubb/core'
3
- import { functionPrinter } from '@kubb/plugin-ts'
4
- import { File, Function } from '@kubb/renderer-jsx'
5
- import type { KubbReactNode } from '@kubb/renderer-jsx/types'
6
- import type { PrinterFakerFactory } from '../printers/printerFaker.ts'
7
- import type { PluginFaker } from '../types.ts'
8
- import { resolveFakerTypeUsage } from '../utils.ts'
9
-
10
- type Props = {
11
- name: string
12
- typeName: string
13
- node: ast.SchemaNode
14
- printer: ast.Printer<PrinterFakerFactory>
15
- seed?: PluginFaker['options']['seed']
16
- description?: string
17
- canOverride: boolean
18
- }
19
-
20
- const OBJECT_TYPES = new Set<ast.SchemaNode['type']>(['object', 'intersection'])
21
- const ARRAY_TYPES = new Set<ast.SchemaNode['type']>(['array'])
22
- const SCALAR_TYPES = new Set<ast.SchemaNode['type']>([
23
- 'string',
24
- 'email',
25
- 'url',
26
- 'uuid',
27
- 'number',
28
- 'integer',
29
- 'bigint',
30
- 'boolean',
31
- 'date',
32
- 'time',
33
- 'datetime',
34
- 'blob',
35
- 'enum',
36
- ])
37
- const declarationPrinter = functionPrinter({ mode: 'declaration' })
38
-
39
- export function Faker({ node, description, name, typeName, printer, seed, canOverride }: Props): KubbReactNode {
40
- const fakerText = printer.print(node) ?? 'undefined'
41
-
42
- const isArray = ARRAY_TYPES.has(node.type)
43
- const isObject = OBJECT_TYPES.has(node.type)
44
- const isTuple = node.type === 'tuple'
45
- const isScalar = SCALAR_TYPES.has(node.type)
46
-
47
- const useGenericOverride = canOverride && isObject
48
- const fakerTextWithOverride = (() => {
49
- if (canOverride && isTuple) return `data || ${fakerText}`
50
- if (canOverride && isArray) return `[\n ...${fakerText},\n ...(data || [])\n]`
51
- if (canOverride && isScalar) return `data ?? ${fakerText}`
52
- return fakerText
53
- })()
54
-
55
- const { dataType, returnType: resolvedReturnType } = resolveFakerTypeUsage(node, typeName, canOverride)
56
-
57
- if (!useGenericOverride) {
58
- const usesData = /\bdata\b/.test(fakerTextWithOverride)
59
- const dataParamName = usesData ? 'data' : '_data'
60
- const params = ast.createFunctionParameters({
61
- params: [
62
- ast.createFunctionParameter({
63
- name: dataParamName,
64
- type: ast.createParamsType({ variant: 'reference', name: dataType }),
65
- optional: true,
66
- }),
67
- ],
68
- })
69
- const paramsSignature = declarationPrinter.print(params) ?? ''
70
- const returnType = resolvedReturnType
71
-
72
- // A `ref` wrapper delegates to another faker. Object fakers are now generic and
73
- // widen to `Partial<T>` when called with a `Partial<T>`-typed argument, so cast
74
- // back to the wrapper's declared return type to keep it assignable.
75
- const returnExpression = node.type === 'ref' && canOverride && returnType ? `${fakerTextWithOverride} as ${returnType}` : fakerTextWithOverride
76
-
77
- return (
78
- <File.Source name={name} isExportable isIndexable>
79
- <Function
80
- export
81
- name={name}
82
- JSDoc={{ comments: description ? [`@description ${jsStringEscape(description)}`] : [] }}
83
- params={canOverride ? paramsSignature : undefined}
84
- returnType={returnType ?? undefined}
85
- >
86
- {seed ? (
87
- <>
88
- {`faker.seed(${JSON.stringify(seed)})`}
89
- <br />
90
- </>
91
- ) : undefined}
92
- {`return ${returnExpression}`}
93
- </Function>
94
- </File.Source>
95
- )
96
- }
97
-
98
- // Generate function with defaultFakeData structure
99
- const jsdoc = description ? `/**\n * @description ${jsStringEscape(description)}\n */\n ` : ''
100
- const functionSignature = `${jsdoc}export function ${name}<TData extends Partial<${typeName}> = object>(data?: TData)`
101
-
102
- const seedCode = seed ? `faker.seed(${JSON.stringify(seed)})\n ` : ''
103
-
104
- // When the object node has properties that transitively reference a cyclic schema,
105
- // the printer emits memoizing getters for those properties. Spreading the object
106
- // literal would immediately invoke those getters, triggering recursive faker calls
107
- // and causing a stack overflow. Detect this upfront via ast helpers so we can
108
- // use Object.defineProperty-based merging instead of spread.
109
- const { cyclicSchemas, schemaName } = printer.options
110
- const hasGetters =
111
- node.type === 'object' &&
112
- !!cyclicSchemas &&
113
- (node.properties ?? []).some((p) => ast.containsCircularRef(p.schema, { circularSchemas: cyclicSchemas, excludeName: schemaName }))
114
-
115
- const functionBody = hasGetters
116
- ? `{
117
- ${seedCode}const defaultFakeData = ${fakerText}
118
- if (data) {
119
- for (const [key, value] of Object.entries(data)) {
120
- Object.defineProperty(defaultFakeData, key, { value, configurable: true, writable: true, enumerable: true })
121
- }
122
- }
123
- return defaultFakeData as Omit<typeof defaultFakeData, keyof TData> & TData
124
- }`
125
- : `{
126
- ${seedCode}const defaultFakeData = ${fakerText}
127
- return {
128
- ...defaultFakeData,
129
- ...(data || {}),
130
- } as Omit<typeof defaultFakeData, keyof TData> & TData
131
- }`
132
-
133
- return (
134
- <File.Source name={name} isExportable isIndexable>
135
- {functionSignature}
136
- {functionBody}
137
- </File.Source>
138
- )
139
- }
@@ -1 +0,0 @@
1
- export { Faker } from './Faker.tsx'
@@ -1,311 +0,0 @@
1
- import { getPerContentTypeName, resolveContentTypeVariants } from '@internals/shared'
2
- import { aliasConflictingImports, filterUsedImports, rewriteAliasedImports } from '@internals/utils'
3
- import { ast, defineGenerator } from '@kubb/core'
4
- import { pluginTsName } from '@kubb/plugin-ts'
5
- import { File, jsxRendererSync } from '@kubb/renderer-jsx'
6
- import { Faker } from '../components/Faker.tsx'
7
- import { printerFaker } from '../printers/printerFaker.ts'
8
- import type { PluginFaker } from '../types.ts'
9
- import { buildResponseUnionSchema, canOverrideSchema, localeToFakerImport, resolveParamNameByLocation, resolveTypeReference } from '../utils.ts'
10
-
11
- /**
12
- * Built-in generator for `@kubb/plugin-faker`. Emits one `createX` factory
13
- * per schema in the spec plus per-operation request/response factories. Each
14
- * factory returns a value matching the corresponding TypeScript type from
15
- * `@kubb/plugin-ts`.
16
- */
17
- export const fakerGenerator = defineGenerator<PluginFaker>({
18
- name: 'faker',
19
- renderer: jsxRendererSync,
20
- schema(node, ctx) {
21
- const { adapter, config, resolver, root } = ctx
22
- const { output, group, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options
23
- const pluginTs = ctx.driver.getPlugin(pluginTsName)
24
-
25
- if (!node.name || !pluginTs) {
26
- return
27
- }
28
-
29
- const tsResolver = ctx.driver.getResolver(pluginTsName)
30
-
31
- const schemaName = node.name
32
- const mode = ctx.getMode(output)
33
- const isEnumSchema = !!ast.narrowSchema(node, ast.schemaTypes.enum)
34
- const tsEnumType = pluginTs.options?.enumType
35
- const tsEnumTypeSuffix = pluginTs.options?.enumTypeSuffix ?? 'Key'
36
- const schemaTypeName =
37
- isEnumSchema && (tsEnumType === 'asConst' || tsEnumType === 'asPascalConst')
38
- ? tsResolver.resolveEnumKeyName({ name: schemaName }, tsEnumTypeSuffix)
39
- : tsResolver.resolveTypeName(schemaName)
40
- const meta = {
41
- name: resolver.resolveName(schemaName),
42
- file: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }),
43
- typeName: schemaTypeName,
44
- typeFile: tsResolver.resolveFile(
45
- { name: schemaName, extname: '.ts' },
46
- { root, output: pluginTs.options?.output ?? output, group: pluginTs.options?.group ?? undefined },
47
- ),
48
- } as const
49
- const canOverride = canOverrideSchema(node)
50
- const cyclicSchemas = new Set<string>(ctx.meta.circularNames)
51
- const printerInstance = printerFaker({
52
- resolver,
53
- schemaName,
54
- typeName: meta.typeName,
55
- dateParser,
56
- regexGenerator,
57
- mapper,
58
- nodes: printer?.nodes,
59
- cyclicSchemas,
60
- })
61
- const fakerText = printerInstance.print(node) ?? 'undefined'
62
- const typeReference = resolveTypeReference({
63
- node,
64
- canOverride,
65
- name: meta.name,
66
- typeName: meta.typeName,
67
- filePath: meta.file.path,
68
- typeFilePath: meta.typeFile.path,
69
- })
70
-
71
- const imports = adapter
72
- .getImports(node, (schemaName) => ({
73
- name: resolver.resolveName(schemaName),
74
- path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }).path,
75
- }))
76
- .filter((entry) => entry.path !== meta.file.path)
77
- const usedImports = filterUsedImports(imports, fakerText)
78
-
79
- return (
80
- <File
81
- baseName={meta.file.baseName}
82
- path={meta.file.path}
83
- meta={meta.file.meta}
84
- banner={resolver.resolveBanner(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}
85
- footer={resolver.resolveFooter(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}
86
- >
87
- <File.Import name={locale ? [{ propertyName: localeToFakerImport(locale), name: 'faker' }] : ['faker']} path="@faker-js/faker" />
88
- {regexGenerator === 'randexp' && <File.Import name={'RandExp'} path={'randexp'} />}
89
- {dateParser !== 'faker' && <File.Import path={dateParser} name={dateParser} />}
90
- {typeReference.importPath && <File.Import isTypeOnly root={meta.file.path} path={typeReference.importPath} name={[meta.typeName]} />}
91
- {mode === 'split' &&
92
- usedImports.map((imp) => <File.Import key={[schemaName, imp.path, imp.name].join('-')} root={meta.file.path} path={imp.path} name={imp.name} />)}
93
- <Faker
94
- name={meta.name}
95
- typeName={typeReference.typeName}
96
- description={node.description}
97
- node={node}
98
- printer={printerInstance}
99
- seed={seed}
100
- canOverride={canOverride}
101
- />
102
- </File>
103
- )
104
- },
105
- operation(node, ctx) {
106
- const { adapter, config, resolver, root } = ctx
107
- const { output, group, paramsCasing, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options
108
- const pluginTs = ctx.driver.getPlugin(pluginTsName)
109
-
110
- if (!pluginTs) {
111
- return
112
- }
113
-
114
- const tsResolver = ctx.driver.getResolver(pluginTsName)
115
-
116
- const params = ast.caseParams(node.parameters, paramsCasing)
117
- const paramEntries = params.map((param) => ({
118
- param,
119
- name: resolveParamNameByLocation(resolver, node, param),
120
- typeName: resolveParamNameByLocation(tsResolver, node, param),
121
- }))
122
- type RenderUnit = { schema: ast.SchemaNode | null; name: string; typeName: string; description?: string; skipImportNames: Array<string> }
123
-
124
- // Expands a content array into render units: one faker per content type plus a union faker
125
- // (named `baseName`) when more than one content type carries a schema, else a single faker.
126
- function expandContentUnits(
127
- entries: Array<{ contentType: string; schema?: ast.SchemaNode | null }>,
128
- baseName: string,
129
- tsBaseName: string,
130
- description: string | undefined,
131
- decorate?: (schema: ast.SchemaNode) => ast.SchemaNode,
132
- ): Array<RenderUnit> {
133
- const withSchema = entries.filter((entry) => entry.schema)
134
- if (withSchema.length <= 1) {
135
- const primary = withSchema[0] ?? entries[0]
136
- if (!primary?.schema) return []
137
- return [{ schema: decorate ? decorate(primary.schema) : primary.schema, name: baseName, typeName: tsBaseName, description, skipImportNames: [] }]
138
- }
139
- const variants = resolveContentTypeVariants(entries, baseName)
140
- const unionSchema = ast.createSchema({ type: 'union', members: variants.map((variant) => ast.createSchema({ type: 'ref', name: variant.name })) })
141
- return [
142
- ...variants.map((variant) => ({
143
- schema: decorate ? decorate(variant.schema) : variant.schema,
144
- name: variant.name,
145
- typeName: getPerContentTypeName(tsBaseName, variant.suffix),
146
- description,
147
- skipImportNames: [],
148
- })),
149
- { schema: unionSchema, name: baseName, typeName: tsBaseName, description, skipImportNames: variants.map((variant) => variant.name) },
150
- ]
151
- }
152
-
153
- const responseUnits = node.responses.flatMap((response) =>
154
- expandContentUnits(
155
- response.content ?? [],
156
- resolver.resolveResponseStatusName(node, response.statusCode),
157
- tsResolver.resolveResponseStatusName(node, response.statusCode),
158
- response.description,
159
- ),
160
- )
161
- const dataUnits = expandContentUnits(
162
- node.requestBody?.content ?? [],
163
- resolver.resolveDataName(node),
164
- tsResolver.resolveDataName(node),
165
- node.requestBody?.description,
166
- (schema) => ({ ...schema, description: node.requestBody?.description ?? schema.description }),
167
- )
168
- const responseName = resolver.resolveResponseName(node)
169
- const localHelperNames = new Set([
170
- ...paramEntries.map((entry) => entry.name),
171
- ...responseUnits.map((unit) => unit.name),
172
- ...dataUnits.map((unit) => unit.name),
173
- responseName,
174
- ])
175
- const cyclicSchemas = new Set<string>(ctx.meta.circularNames)
176
-
177
- const meta = {
178
- file: resolver.resolveFile(
179
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
180
- { root, output, group: group ?? undefined },
181
- ),
182
- typeFile: tsResolver.resolveFile(
183
- {
184
- name: node.operationId,
185
- extname: '.ts',
186
- tag: node.tags[0] ?? 'default',
187
- path: node.path,
188
- },
189
- {
190
- root,
191
- output: pluginTs.options?.output ?? output,
192
- group: pluginTs.options?.group ?? undefined,
193
- },
194
- ),
195
- } as const
196
-
197
- function resolveMockImports(schema: ast.SchemaNode) {
198
- return adapter
199
- .getImports(schema, (schemaName) => ({
200
- name: resolver.resolveName(schemaName),
201
- path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group: group ?? undefined }).path,
202
- }))
203
- .filter((entry) => entry.path !== meta.file.path)
204
- }
205
-
206
- function renderEntry({
207
- schema,
208
- name,
209
- typeName,
210
- description,
211
- skipImportNames = [],
212
- }: {
213
- schema: ast.SchemaNode | null
214
- name: string
215
- typeName: string
216
- description?: string
217
- skipImportNames?: Array<string>
218
- }) {
219
- if (!schema) {
220
- return null
221
- }
222
-
223
- const canOverride = canOverrideSchema(schema)
224
- const printerInstance = printerFaker({
225
- resolver,
226
- schemaName: name,
227
- typeName,
228
- dateParser,
229
- regexGenerator,
230
- mapper,
231
- nodes: printer?.nodes,
232
- cyclicSchemas,
233
- })
234
- const fakerText = printerInstance.print(schema) ?? 'undefined'
235
- const usedImports = filterUsedImports(resolveMockImports(schema), fakerText, skipImportNames)
236
- const { imports, aliases } = aliasConflictingImports(usedImports, localHelperNames)
237
- const rewrittenFakerText = rewriteAliasedImports(fakerText, aliases)
238
- const typeReference = resolveTypeReference({
239
- node: schema,
240
- canOverride,
241
- name,
242
- typeName,
243
- filePath: meta.file.path,
244
- typeFilePath: meta.typeFile.path,
245
- })
246
-
247
- return (
248
- <>
249
- {typeReference.importPath && <File.Import isTypeOnly root={meta.file.path} path={typeReference.importPath} name={[typeName]} />}
250
- {imports.map((imp) => (
251
- <File.Import key={[name, imp.path, imp.name].join('-')} root={meta.file.path} path={imp.path} name={imp.name} />
252
- ))}
253
- <Faker
254
- name={name}
255
- typeName={typeReference.typeName}
256
- description={description}
257
- node={schema}
258
- printer={{ ...printerInstance, print: () => rewrittenFakerText }}
259
- seed={seed}
260
- canOverride={canOverride}
261
- />
262
- </>
263
- )
264
- }
265
-
266
- return (
267
- <File
268
- baseName={meta.file.baseName}
269
- path={meta.file.path}
270
- meta={meta.file.meta}
271
- banner={resolver.resolveBanner(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}
272
- footer={resolver.resolveFooter(ctx.meta, { output, config, file: { path: meta.file.path, baseName: meta.file.baseName } })}
273
- >
274
- <File.Import name={locale ? [{ propertyName: localeToFakerImport(locale), name: 'faker' }] : ['faker']} path="@faker-js/faker" />
275
- {regexGenerator === 'randexp' && <File.Import name={'RandExp'} path={'randexp'} />}
276
- {dateParser !== 'faker' && <File.Import path={dateParser} name={dateParser} />}
277
- {paramEntries.map(({ param, name, typeName }) =>
278
- renderEntry({
279
- schema: param.schema,
280
- name,
281
- typeName,
282
- }),
283
- )}
284
- {responseUnits.map((unit) =>
285
- renderEntry({
286
- schema: unit.schema,
287
- name: unit.name,
288
- typeName: unit.typeName,
289
- description: unit.description,
290
- skipImportNames: unit.skipImportNames,
291
- }),
292
- )}
293
- {dataUnits.map((unit) =>
294
- renderEntry({
295
- schema: unit.schema,
296
- name: unit.name,
297
- typeName: unit.typeName,
298
- description: unit.description,
299
- skipImportNames: unit.skipImportNames,
300
- }),
301
- )}
302
- {renderEntry({
303
- schema: buildResponseUnionSchema(node, resolver),
304
- name: responseName,
305
- typeName: tsResolver.resolveResponseName(node),
306
- skipImportNames: responseUnits.map((unit) => unit.name),
307
- })}
308
- </File>
309
- )
310
- },
311
- })
@@ -1 +0,0 @@
1
- export { fakerGenerator } from './fakerGenerator.tsx'
package/src/index.ts DELETED
@@ -1,7 +0,0 @@
1
- export { Faker } from './components/Faker.tsx'
2
- export { fakerGenerator } from './generators/fakerGenerator.tsx'
3
- export { default, pluginFaker, pluginFakerName } from './plugin.ts'
4
- export type { PrinterFakerFactory, PrinterFakerNodes, PrinterFakerOptions } from './printers/printerFaker.ts'
5
- export { printerFaker } from './printers/printerFaker.ts'
6
- export { resolverFaker } from './resolvers/resolverFaker.ts'
7
- export type { PluginFaker, ResolverFaker } from './types.ts'
package/src/plugin.ts DELETED
@@ -1,92 +0,0 @@
1
- import { createGroupConfig } from '@internals/shared'
2
- import { definePlugin } from '@kubb/core'
3
- import { pluginTsName } from '@kubb/plugin-ts'
4
- import { fakerGenerator } from './generators/fakerGenerator.tsx'
5
- import { resolverFaker } from './resolvers/resolverFaker.ts'
6
- import type { PluginFaker } from './types.ts'
7
-
8
- /**
9
- * Canonical plugin name for `@kubb/plugin-faker`. Used for driver lookups and
10
- * cross-plugin dependency references.
11
- */
12
- export const pluginFakerName = 'plugin-faker' satisfies PluginFaker['name']
13
-
14
- /**
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.
18
- *
19
- * @example
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
- * ```
37
- */
38
- export const pluginFaker = definePlugin<PluginFaker>((options) => {
39
- const {
40
- output = { path: 'mocks', barrelType: 'named' },
41
- seed,
42
- locale = 'en',
43
- group,
44
- exclude = [],
45
- include,
46
- override = [],
47
- mapper = {},
48
- dateParser = 'faker',
49
- generators: userGenerators = [],
50
- regexGenerator = 'faker',
51
- paramsCasing,
52
- printer,
53
- resolver: userResolver,
54
- transformer: userTransformer,
55
- } = options
56
-
57
- const groupConfig = createGroupConfig(group, { suffix: 'Controller' })
58
-
59
- return {
60
- name: pluginFakerName,
61
- options,
62
- dependencies: [pluginTsName],
63
- hooks: {
64
- 'kubb:plugin:setup'(ctx) {
65
- ctx.setOptions({
66
- output,
67
- seed,
68
- locale,
69
- exclude,
70
- include,
71
- override,
72
- group: groupConfig,
73
- mapper,
74
- dateParser,
75
- regexGenerator,
76
- paramsCasing,
77
- printer,
78
- })
79
- ctx.setResolver(userResolver ? { ...resolverFaker, ...userResolver } : resolverFaker)
80
- if (userTransformer) {
81
- ctx.setTransformer(userTransformer)
82
- }
83
- ctx.addGenerator(fakerGenerator)
84
- for (const generator of userGenerators) {
85
- ctx.addGenerator(generator)
86
- }
87
- },
88
- },
89
- }
90
- })
91
-
92
- export default pluginFaker