@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.
- package/dist/{Faker-SBhWTdC7.d.ts → Faker-BA4l8DTe.d.ts} +2 -2
- package/dist/{Faker-DBPx_MVh.js → Faker-DUx7jvCo.js} +10 -55
- package/dist/Faker-DUx7jvCo.js.map +1 -0
- package/dist/{Faker-DRL0W5Lt.cjs → Faker-Ds2xP2-k.cjs} +11 -62
- package/dist/Faker-Ds2xP2-k.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-Duc28_FK.d.ts → fakerGenerator-BNysC6rh.d.ts} +2 -2
- package/dist/{fakerGenerator-CVOr0Pwm.cjs → fakerGenerator-BeKRKYuy.cjs} +26 -60
- package/dist/fakerGenerator-BeKRKYuy.cjs.map +1 -0
- package/dist/{fakerGenerator-DNJ61yLj.js → fakerGenerator-D5Bcy5WY.js} +25 -59
- package/dist/fakerGenerator-D5Bcy5WY.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 +47 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +47 -44
- package/dist/index.js.map +1 -1
- package/dist/{printerFaker-DXS861Q0.d.ts → printerFaker-BzEB43Jz.d.ts} +11 -15
- package/package.json +8 -16
- package/dist/Faker-DBPx_MVh.js.map +0 -1
- package/dist/Faker-DRL0W5Lt.cjs.map +0 -1
- package/dist/fakerGenerator-CVOr0Pwm.cjs.map +0 -1
- package/dist/fakerGenerator-DNJ61yLj.js.map +0 -1
- package/extension.yaml +0 -819
- package/src/components/Faker.tsx +0 -139
- package/src/components/index.ts +0 -1
- package/src/generators/fakerGenerator.tsx +0 -311
- package/src/generators/index.ts +0 -1
- package/src/index.ts +0 -7
- package/src/plugin.ts +0 -92
- package/src/printers/printerFaker.ts +0 -405
- package/src/resolvers/resolverFaker.ts +0 -84
- package/src/types.ts +0 -185
- package/src/utils.ts +0 -257
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __name } from "./chunk-C0LytTxp.js";
|
|
2
|
-
import { o as PluginFaker, t as PrinterFakerFactory } from "./printerFaker-
|
|
2
|
+
import { o as PluginFaker, t as PrinterFakerFactory } from "./printerFaker-BzEB43Jz.js";
|
|
3
3
|
import { ast } from "@kubb/core";
|
|
4
4
|
import { KubbReactNode } from "@kubb/renderer-jsx/types";
|
|
5
5
|
|
|
@@ -24,4 +24,4 @@ declare function Faker({
|
|
|
24
24
|
}: Props): KubbReactNode;
|
|
25
25
|
//#endregion
|
|
26
26
|
export { Faker as t };
|
|
27
|
-
//# sourceMappingURL=Faker-
|
|
27
|
+
//# sourceMappingURL=Faker-BA4l8DTe.d.ts.map
|
|
@@ -1,52 +1,10 @@
|
|
|
1
1
|
import "./chunk-C0LytTxp.js";
|
|
2
|
-
import {
|
|
2
|
+
import { containsCircularRef, jsStringEscape } from "@kubb/ast/utils";
|
|
3
3
|
import { ast } from "@kubb/core";
|
|
4
4
|
import { functionPrinter } from "@kubb/plugin-ts";
|
|
5
5
|
import { File, Function } from "@kubb/renderer-jsx";
|
|
6
|
+
import { posix } from "node:path";
|
|
6
7
|
import { Fragment, jsx, jsxs } from "@kubb/renderer-jsx/jsx-runtime";
|
|
7
|
-
//#region ../../internals/utils/src/string.ts
|
|
8
|
-
/**
|
|
9
|
-
* Strips a single matching pair of `"..."`, `'...'`, or `` `...` `` from both ends of `text`.
|
|
10
|
-
* Returns the string unchanged when no balanced quote pair is found.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* trimQuotes('"hello"') // 'hello'
|
|
14
|
-
* trimQuotes('hello') // 'hello'
|
|
15
|
-
*/
|
|
16
|
-
function trimQuotes(text) {
|
|
17
|
-
if (text.length >= 2) {
|
|
18
|
-
const first = text[0];
|
|
19
|
-
const last = text[text.length - 1];
|
|
20
|
-
if (first === "\"" && last === "\"" || first === "'" && last === "'" || first === "`" && last === "`") return text.slice(1, -1);
|
|
21
|
-
}
|
|
22
|
-
return text;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Escapes characters that are not allowed inside JS string literals.
|
|
26
|
-
* Handles quotes, backslashes, and Unicode line terminators (U+2028 / U+2029).
|
|
27
|
-
*
|
|
28
|
-
* @see http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* ```ts
|
|
32
|
-
* jsStringEscape('say "hi"\nbye') // 'say \\"hi\\"\\nbye'
|
|
33
|
-
* ```
|
|
34
|
-
*/
|
|
35
|
-
function jsStringEscape(input) {
|
|
36
|
-
return `${input}`.replace(/["'\\\n\r\u2028\u2029]/g, (character) => {
|
|
37
|
-
switch (character) {
|
|
38
|
-
case "\"":
|
|
39
|
-
case "'":
|
|
40
|
-
case "\\": return `\\${character}`;
|
|
41
|
-
case "\n": return "\\n";
|
|
42
|
-
case "\r": return "\\r";
|
|
43
|
-
case "\u2028": return "\\u2028";
|
|
44
|
-
case "\u2029": return "\\u2029";
|
|
45
|
-
default: return "";
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
//#endregion
|
|
50
8
|
//#region src/utils.ts
|
|
51
9
|
/**
|
|
52
10
|
* Returns the `@faker-js/faker` named export for a locale code.
|
|
@@ -140,14 +98,14 @@ function buildResponseUnionSchema(node, resolver) {
|
|
|
140
98
|
if (responses.length === 1) {
|
|
141
99
|
const schema = responses[0].content?.[0]?.schema;
|
|
142
100
|
if (schema && shouldInlineSingleResponseSchema(schema)) return schema;
|
|
143
|
-
return ast.createSchema({
|
|
101
|
+
return ast.factory.createSchema({
|
|
144
102
|
type: "ref",
|
|
145
103
|
name: resolver.resolveResponseStatusName(node, responses[0].statusCode)
|
|
146
104
|
});
|
|
147
105
|
}
|
|
148
|
-
return ast.createSchema({
|
|
106
|
+
return ast.factory.createSchema({
|
|
149
107
|
type: "union",
|
|
150
|
-
members: responses.map((response) => ast.createSchema({
|
|
108
|
+
members: responses.map((response) => ast.factory.createSchema({
|
|
151
109
|
type: "ref",
|
|
152
110
|
name: resolver.resolveResponseStatusName(node, response.statusCode)
|
|
153
111
|
}))
|
|
@@ -263,12 +221,9 @@ function Faker({ node, description, name, typeName, printer, seed, canOverride }
|
|
|
263
221
|
const { dataType, returnType: resolvedReturnType } = resolveFakerTypeUsage(node, typeName, canOverride);
|
|
264
222
|
if (!useGenericOverride) {
|
|
265
223
|
const dataParamName = /\bdata\b/.test(fakerTextWithOverride) ? "data" : "_data";
|
|
266
|
-
const params = ast.createFunctionParameters({ params: [ast.createFunctionParameter({
|
|
224
|
+
const params = ast.factory.createFunctionParameters({ params: [ast.factory.createFunctionParameter({
|
|
267
225
|
name: dataParamName,
|
|
268
|
-
type:
|
|
269
|
-
variant: "reference",
|
|
270
|
-
name: dataType
|
|
271
|
-
}),
|
|
226
|
+
type: dataType,
|
|
272
227
|
optional: true
|
|
273
228
|
})] });
|
|
274
229
|
const paramsSignature = declarationPrinter.print(params) ?? "";
|
|
@@ -291,7 +246,7 @@ function Faker({ node, description, name, typeName, printer, seed, canOverride }
|
|
|
291
246
|
const functionSignature = `${description ? `/**\n * @description ${jsStringEscape(description)}\n */\n ` : ""}export function ${name}<TData extends Partial<${typeName}> = object>(data?: TData)`;
|
|
292
247
|
const seedCode = seed ? `faker.seed(${JSON.stringify(seed)})\n ` : "";
|
|
293
248
|
const { cyclicSchemas, schemaName } = printer.options;
|
|
294
|
-
const functionBody = node.type === "object" && !!cyclicSchemas && (node.properties ?? []).some((p) =>
|
|
249
|
+
const functionBody = node.type === "object" && !!cyclicSchemas && (node.properties ?? []).some((p) => containsCircularRef(p.schema, {
|
|
295
250
|
circularSchemas: cyclicSchemas,
|
|
296
251
|
excludeName: schemaName
|
|
297
252
|
})) ? `{
|
|
@@ -317,6 +272,6 @@ function Faker({ node, description, name, typeName, printer, seed, canOverride }
|
|
|
317
272
|
});
|
|
318
273
|
}
|
|
319
274
|
//#endregion
|
|
320
|
-
export { resolveParamNameByLocation as a, localeToFakerImport as i, buildResponseUnionSchema as n, resolveTypeReference as o, canOverrideSchema as r,
|
|
275
|
+
export { resolveParamNameByLocation as a, localeToFakerImport as i, buildResponseUnionSchema as n, resolveTypeReference as o, canOverrideSchema as r, Faker as t };
|
|
321
276
|
|
|
322
|
-
//# sourceMappingURL=Faker-
|
|
277
|
+
//# sourceMappingURL=Faker-DUx7jvCo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Faker-DUx7jvCo.js","names":["SCALAR_TYPES","ARRAY_TYPES"],"sources":["../src/utils.ts","../src/components/Faker.tsx"],"sourcesContent":["import { posix } from 'node:path'\nimport { ast } from '@kubb/core'\nimport type { ResolverFaker } from './types.ts'\n\n/**\n * Returns the `@faker-js/faker` named export for a locale code.\n *\n * Without a locale, returns `'faker'` for the default English instance.\n * With a locale, the language code is converted to upper case and joined with any region suffix.\n *\n * @example Default\n * `localeToFakerImport() // 'faker'`\n *\n * @example Simple locale\n * `localeToFakerImport('de') // 'fakerDE'`\n *\n * @example Compound locale\n * `localeToFakerImport('de_AT') // 'fakerDE_AT'`\n */\nexport function localeToFakerImport(locale?: string): string {\n if (!locale) {\n return 'faker'\n }\n\n const parts = locale.split('_')\n parts[0] = parts[0]!.toUpperCase()\n return `faker${parts.join('_')}`\n}\n\n/**\n * Determines if a schema node can be overridden during faker generation.\n */\nexport function canOverrideSchema(node: ast.SchemaNode): boolean {\n return new Set<ast.SchemaNode['type']>([\n 'array',\n 'tuple',\n 'object',\n 'intersection',\n 'union',\n 'enum',\n 'ref',\n 'string',\n 'email',\n 'url',\n 'uuid',\n 'number',\n 'integer',\n 'bigint',\n 'boolean',\n 'date',\n 'time',\n 'datetime',\n 'blob',\n ]).has(node.type)\n}\n\n/**\n * Resolves a parameter name based on its location (path, query, header, etc.) using the provided resolver.\n */\nexport function resolveParamNameByLocation(\n resolver: Pick<ResolverFaker, 'resolvePathParamsName' | 'resolveQueryParamsName' | 'resolveHeaderParamsName' | 'resolveParamName'>,\n node: ast.OperationNode,\n param: ast.ParameterNode,\n): string {\n switch (param.in) {\n case 'path':\n return resolver.resolvePathParamsName(node, param)\n case 'query':\n return resolver.resolveQueryParamsName(node, param)\n case 'header':\n return resolver.resolveHeaderParamsName(node, param)\n default:\n return resolver.resolveParamName(node, param)\n }\n}\n\nfunction shouldInlineSingleResponseSchema(schema: ast.SchemaNode): boolean {\n return new Set<ast.SchemaNode['type']>([\n 'any',\n 'unknown',\n 'void',\n 'null',\n 'array',\n 'tuple',\n 'string',\n 'email',\n 'url',\n 'uuid',\n 'number',\n 'integer',\n 'bigint',\n 'boolean',\n 'date',\n 'time',\n 'datetime',\n 'blob',\n 'enum',\n 'union',\n ]).has(schema.type)\n}\n\n/**\n * Builds a response schema as a union of all response statuses.\n * Returns null if no responses are provided, or embeds single simple responses inline.\n */\nexport function buildResponseUnionSchema(node: ast.OperationNode, resolver: ResolverFaker): ast.SchemaNode | null {\n const responses = node.responses.filter((response) => response.content?.[0]?.schema)\n\n if (!responses.length) {\n return null\n }\n\n if (responses.length === 1) {\n const schema = responses[0]!.content?.[0]?.schema\n if (schema && shouldInlineSingleResponseSchema(schema)) {\n return schema\n }\n\n return ast.factory.createSchema({ type: 'ref', name: resolver.resolveResponseStatusName(node, responses[0]!.statusCode) })\n }\n\n return ast.factory.createSchema({\n type: 'union',\n members: responses.map((response) => ast.factory.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 */\nfunction getScalarType(node: ast.SchemaNode, typeName: string): string {\n switch (node.type) {\n case 'string':\n case 'email':\n case 'url':\n case 'uuid':\n return 'string'\n case 'number':\n case 'integer':\n return 'number'\n case 'bigint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'date':\n case 'time':\n return node.representation === 'date' ? 'Date' : 'string'\n case 'datetime':\n return 'string'\n case 'blob':\n return 'Blob'\n case 'enum':\n return typeName\n default:\n return typeName\n }\n}\n\n/**\n * Resolves faker type usage information for a schema.\n * Determines the data type, return type, and whether it uses the type name.\n */\nexport function resolveFakerTypeUsage(\n node: ast.SchemaNode,\n typeName: string,\n canOverride: boolean,\n): {\n dataType: string\n returnType: string | null\n usesTypeName: boolean\n} {\n const isArray = ARRAY_TYPES.has(node.type)\n const isTuple = node.type === 'tuple'\n const isScalar = SCALAR_TYPES.has(node.type)\n\n let dataType = `Partial<${typeName}>`\n\n if (isArray || isTuple || node.type === 'union' || node.type === 'enum') {\n dataType = typeName\n }\n\n if (isScalar) {\n dataType = getScalarType(node, typeName)\n }\n\n let returnType = canOverride ? typeName : null\n\n if (isScalar) {\n returnType = getScalarType(node, typeName)\n }\n\n return {\n dataType,\n returnType,\n usesTypeName: dataType.includes(typeName) || Boolean(returnType?.includes(typeName)),\n }\n}\n","import { jsStringEscape } from '@kubb/ast/utils'\nimport { ast } from '@kubb/core'\nimport { containsCircularRef } from '@kubb/ast/utils'\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.factory.createFunctionParameters({\n params: [\n ast.factory.createFunctionParameter({\n name: dataParamName,\n type: dataType,\n optional: true,\n }),\n ],\n })\n const paramsSignature = declarationPrinter.print(params) ?? ''\n const returnType = resolvedReturnType\n\n // A `ref` wrapper delegates to another faker. Object fakers are now generic and\n // widen to `Partial<T>` when called with a `Partial<T>`-typed argument, so cast\n // back to the wrapper's declared return type to keep it assignable.\n const returnExpression = node.type === 'ref' && canOverride && returnType ? `${fakerTextWithOverride} as ${returnType}` : fakerTextWithOverride\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function\n export\n name={name}\n JSDoc={{ comments: description ? [`@description ${jsStringEscape(description)}`] : [] }}\n params={canOverride ? paramsSignature : undefined}\n returnType={returnType ?? undefined}\n >\n {seed ? (\n <>\n {`faker.seed(${JSON.stringify(seed)})`}\n <br />\n </>\n ) : undefined}\n {`return ${returnExpression}`}\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}<TData extends Partial<${typeName}> = object>(data?: TData)`\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) => 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 Omit<typeof defaultFakeData, keyof TData> & TData\n}`\n : `{\n ${seedCode}const defaultFakeData = ${fakerText}\n return {\n ...defaultFakeData,\n ...(data || {}),\n } as Omit<typeof defaultFakeData, keyof TData> & TData\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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"}
|
|
@@ -24,54 +24,12 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
24
24
|
enumerable: true
|
|
25
25
|
}) : target, mod));
|
|
26
26
|
//#endregion
|
|
27
|
-
let
|
|
27
|
+
let _kubb_ast_utils = require("@kubb/ast/utils");
|
|
28
28
|
let _kubb_core = require("@kubb/core");
|
|
29
29
|
let _kubb_plugin_ts = require("@kubb/plugin-ts");
|
|
30
30
|
let _kubb_renderer_jsx = require("@kubb/renderer-jsx");
|
|
31
|
+
let node_path = require("node:path");
|
|
31
32
|
let _kubb_renderer_jsx_jsx_runtime = require("@kubb/renderer-jsx/jsx-runtime");
|
|
32
|
-
//#region ../../internals/utils/src/string.ts
|
|
33
|
-
/**
|
|
34
|
-
* Strips a single matching pair of `"..."`, `'...'`, or `` `...` `` from both ends of `text`.
|
|
35
|
-
* Returns the string unchanged when no balanced quote pair is found.
|
|
36
|
-
*
|
|
37
|
-
* @example
|
|
38
|
-
* trimQuotes('"hello"') // 'hello'
|
|
39
|
-
* trimQuotes('hello') // 'hello'
|
|
40
|
-
*/
|
|
41
|
-
function trimQuotes(text) {
|
|
42
|
-
if (text.length >= 2) {
|
|
43
|
-
const first = text[0];
|
|
44
|
-
const last = text[text.length - 1];
|
|
45
|
-
if (first === "\"" && last === "\"" || first === "'" && last === "'" || first === "`" && last === "`") return text.slice(1, -1);
|
|
46
|
-
}
|
|
47
|
-
return text;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Escapes characters that are not allowed inside JS string literals.
|
|
51
|
-
* Handles quotes, backslashes, and Unicode line terminators (U+2028 / U+2029).
|
|
52
|
-
*
|
|
53
|
-
* @see http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
* ```ts
|
|
57
|
-
* jsStringEscape('say "hi"\nbye') // 'say \\"hi\\"\\nbye'
|
|
58
|
-
* ```
|
|
59
|
-
*/
|
|
60
|
-
function jsStringEscape(input) {
|
|
61
|
-
return `${input}`.replace(/["'\\\n\r\u2028\u2029]/g, (character) => {
|
|
62
|
-
switch (character) {
|
|
63
|
-
case "\"":
|
|
64
|
-
case "'":
|
|
65
|
-
case "\\": return `\\${character}`;
|
|
66
|
-
case "\n": return "\\n";
|
|
67
|
-
case "\r": return "\\r";
|
|
68
|
-
case "\u2028": return "\\u2028";
|
|
69
|
-
case "\u2029": return "\\u2029";
|
|
70
|
-
default: return "";
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
//#endregion
|
|
75
33
|
//#region src/utils.ts
|
|
76
34
|
/**
|
|
77
35
|
* Returns the `@faker-js/faker` named export for a locale code.
|
|
@@ -165,14 +123,14 @@ function buildResponseUnionSchema(node, resolver) {
|
|
|
165
123
|
if (responses.length === 1) {
|
|
166
124
|
const schema = responses[0].content?.[0]?.schema;
|
|
167
125
|
if (schema && shouldInlineSingleResponseSchema(schema)) return schema;
|
|
168
|
-
return _kubb_core.ast.createSchema({
|
|
126
|
+
return _kubb_core.ast.factory.createSchema({
|
|
169
127
|
type: "ref",
|
|
170
128
|
name: resolver.resolveResponseStatusName(node, responses[0].statusCode)
|
|
171
129
|
});
|
|
172
130
|
}
|
|
173
|
-
return _kubb_core.ast.createSchema({
|
|
131
|
+
return _kubb_core.ast.factory.createSchema({
|
|
174
132
|
type: "union",
|
|
175
|
-
members: responses.map((response) => _kubb_core.ast.createSchema({
|
|
133
|
+
members: responses.map((response) => _kubb_core.ast.factory.createSchema({
|
|
176
134
|
type: "ref",
|
|
177
135
|
name: resolver.resolveResponseStatusName(node, response.statusCode)
|
|
178
136
|
}))
|
|
@@ -288,12 +246,9 @@ function Faker({ node, description, name, typeName, printer, seed, canOverride }
|
|
|
288
246
|
const { dataType, returnType: resolvedReturnType } = resolveFakerTypeUsage(node, typeName, canOverride);
|
|
289
247
|
if (!useGenericOverride) {
|
|
290
248
|
const dataParamName = /\bdata\b/.test(fakerTextWithOverride) ? "data" : "_data";
|
|
291
|
-
const params = _kubb_core.ast.createFunctionParameters({ params: [_kubb_core.ast.createFunctionParameter({
|
|
249
|
+
const params = _kubb_core.ast.factory.createFunctionParameters({ params: [_kubb_core.ast.factory.createFunctionParameter({
|
|
292
250
|
name: dataParamName,
|
|
293
|
-
type:
|
|
294
|
-
variant: "reference",
|
|
295
|
-
name: dataType
|
|
296
|
-
}),
|
|
251
|
+
type: dataType,
|
|
297
252
|
optional: true
|
|
298
253
|
})] });
|
|
299
254
|
const paramsSignature = declarationPrinter.print(params) ?? "";
|
|
@@ -306,17 +261,17 @@ function Faker({ node, description, name, typeName, printer, seed, canOverride }
|
|
|
306
261
|
children: /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.Function, {
|
|
307
262
|
export: true,
|
|
308
263
|
name,
|
|
309
|
-
JSDoc: { comments: description ? [`@description ${jsStringEscape(description)}`] : [] },
|
|
264
|
+
JSDoc: { comments: description ? [`@description ${(0, _kubb_ast_utils.jsStringEscape)(description)}`] : [] },
|
|
310
265
|
params: canOverride ? paramsSignature : void 0,
|
|
311
266
|
returnType: returnType ?? void 0,
|
|
312
267
|
children: [seed ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [`faker.seed(${JSON.stringify(seed)})`, /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)("br", {})] }) : void 0, `return ${returnExpression}`]
|
|
313
268
|
})
|
|
314
269
|
});
|
|
315
270
|
}
|
|
316
|
-
const functionSignature = `${description ? `/**\n * @description ${jsStringEscape(description)}\n */\n ` : ""}export function ${name}<TData extends Partial<${typeName}> = object>(data?: TData)`;
|
|
271
|
+
const functionSignature = `${description ? `/**\n * @description ${(0, _kubb_ast_utils.jsStringEscape)(description)}\n */\n ` : ""}export function ${name}<TData extends Partial<${typeName}> = object>(data?: TData)`;
|
|
317
272
|
const seedCode = seed ? `faker.seed(${JSON.stringify(seed)})\n ` : "";
|
|
318
273
|
const { cyclicSchemas, schemaName } = printer.options;
|
|
319
|
-
const functionBody = node.type === "object" && !!cyclicSchemas && (node.properties ?? []).some((p) =>
|
|
274
|
+
const functionBody = node.type === "object" && !!cyclicSchemas && (node.properties ?? []).some((p) => (0, _kubb_ast_utils.containsCircularRef)(p.schema, {
|
|
320
275
|
circularSchemas: cyclicSchemas,
|
|
321
276
|
excludeName: schemaName
|
|
322
277
|
})) ? `{
|
|
@@ -390,11 +345,5 @@ Object.defineProperty(exports, "resolveTypeReference", {
|
|
|
390
345
|
return resolveTypeReference;
|
|
391
346
|
}
|
|
392
347
|
});
|
|
393
|
-
Object.defineProperty(exports, "trimQuotes", {
|
|
394
|
-
enumerable: true,
|
|
395
|
-
get: function() {
|
|
396
|
-
return trimQuotes;
|
|
397
|
-
}
|
|
398
|
-
});
|
|
399
348
|
|
|
400
|
-
//# sourceMappingURL=Faker-
|
|
349
|
+
//# sourceMappingURL=Faker-Ds2xP2-k.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Faker-Ds2xP2-k.cjs","names":["ast","SCALAR_TYPES","ARRAY_TYPES","posix","ast","File","Function"],"sources":["../src/utils.ts","../src/components/Faker.tsx"],"sourcesContent":["import { posix } from 'node:path'\nimport { ast } from '@kubb/core'\nimport type { ResolverFaker } from './types.ts'\n\n/**\n * Returns the `@faker-js/faker` named export for a locale code.\n *\n * Without a locale, returns `'faker'` for the default English instance.\n * With a locale, the language code is converted to upper case and joined with any region suffix.\n *\n * @example Default\n * `localeToFakerImport() // 'faker'`\n *\n * @example Simple locale\n * `localeToFakerImport('de') // 'fakerDE'`\n *\n * @example Compound locale\n * `localeToFakerImport('de_AT') // 'fakerDE_AT'`\n */\nexport function localeToFakerImport(locale?: string): string {\n if (!locale) {\n return 'faker'\n }\n\n const parts = locale.split('_')\n parts[0] = parts[0]!.toUpperCase()\n return `faker${parts.join('_')}`\n}\n\n/**\n * Determines if a schema node can be overridden during faker generation.\n */\nexport function canOverrideSchema(node: ast.SchemaNode): boolean {\n return new Set<ast.SchemaNode['type']>([\n 'array',\n 'tuple',\n 'object',\n 'intersection',\n 'union',\n 'enum',\n 'ref',\n 'string',\n 'email',\n 'url',\n 'uuid',\n 'number',\n 'integer',\n 'bigint',\n 'boolean',\n 'date',\n 'time',\n 'datetime',\n 'blob',\n ]).has(node.type)\n}\n\n/**\n * Resolves a parameter name based on its location (path, query, header, etc.) using the provided resolver.\n */\nexport function resolveParamNameByLocation(\n resolver: Pick<ResolverFaker, 'resolvePathParamsName' | 'resolveQueryParamsName' | 'resolveHeaderParamsName' | 'resolveParamName'>,\n node: ast.OperationNode,\n param: ast.ParameterNode,\n): string {\n switch (param.in) {\n case 'path':\n return resolver.resolvePathParamsName(node, param)\n case 'query':\n return resolver.resolveQueryParamsName(node, param)\n case 'header':\n return resolver.resolveHeaderParamsName(node, param)\n default:\n return resolver.resolveParamName(node, param)\n }\n}\n\nfunction shouldInlineSingleResponseSchema(schema: ast.SchemaNode): boolean {\n return new Set<ast.SchemaNode['type']>([\n 'any',\n 'unknown',\n 'void',\n 'null',\n 'array',\n 'tuple',\n 'string',\n 'email',\n 'url',\n 'uuid',\n 'number',\n 'integer',\n 'bigint',\n 'boolean',\n 'date',\n 'time',\n 'datetime',\n 'blob',\n 'enum',\n 'union',\n ]).has(schema.type)\n}\n\n/**\n * Builds a response schema as a union of all response statuses.\n * Returns null if no responses are provided, or embeds single simple responses inline.\n */\nexport function buildResponseUnionSchema(node: ast.OperationNode, resolver: ResolverFaker): ast.SchemaNode | null {\n const responses = node.responses.filter((response) => response.content?.[0]?.schema)\n\n if (!responses.length) {\n return null\n }\n\n if (responses.length === 1) {\n const schema = responses[0]!.content?.[0]?.schema\n if (schema && shouldInlineSingleResponseSchema(schema)) {\n return schema\n }\n\n return ast.factory.createSchema({ type: 'ref', name: resolver.resolveResponseStatusName(node, responses[0]!.statusCode) })\n }\n\n return ast.factory.createSchema({\n type: 'union',\n members: responses.map((response) => ast.factory.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 */\nfunction getScalarType(node: ast.SchemaNode, typeName: string): string {\n switch (node.type) {\n case 'string':\n case 'email':\n case 'url':\n case 'uuid':\n return 'string'\n case 'number':\n case 'integer':\n return 'number'\n case 'bigint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'date':\n case 'time':\n return node.representation === 'date' ? 'Date' : 'string'\n case 'datetime':\n return 'string'\n case 'blob':\n return 'Blob'\n case 'enum':\n return typeName\n default:\n return typeName\n }\n}\n\n/**\n * Resolves faker type usage information for a schema.\n * Determines the data type, return type, and whether it uses the type name.\n */\nexport function resolveFakerTypeUsage(\n node: ast.SchemaNode,\n typeName: string,\n canOverride: boolean,\n): {\n dataType: string\n returnType: string | null\n usesTypeName: boolean\n} {\n const isArray = ARRAY_TYPES.has(node.type)\n const isTuple = node.type === 'tuple'\n const isScalar = SCALAR_TYPES.has(node.type)\n\n let dataType = `Partial<${typeName}>`\n\n if (isArray || isTuple || node.type === 'union' || node.type === 'enum') {\n dataType = typeName\n }\n\n if (isScalar) {\n dataType = getScalarType(node, typeName)\n }\n\n let returnType = canOverride ? typeName : null\n\n if (isScalar) {\n returnType = getScalarType(node, typeName)\n }\n\n return {\n dataType,\n returnType,\n usesTypeName: dataType.includes(typeName) || Boolean(returnType?.includes(typeName)),\n }\n}\n","import { jsStringEscape } from '@kubb/ast/utils'\nimport { ast } from '@kubb/core'\nimport { containsCircularRef } from '@kubb/ast/utils'\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.factory.createFunctionParameters({\n params: [\n ast.factory.createFunctionParameter({\n name: dataParamName,\n type: dataType,\n optional: true,\n }),\n ],\n })\n const paramsSignature = declarationPrinter.print(params) ?? ''\n const returnType = resolvedReturnType\n\n // A `ref` wrapper delegates to another faker. Object fakers are now generic and\n // widen to `Partial<T>` when called with a `Partial<T>`-typed argument, so cast\n // back to the wrapper's declared return type to keep it assignable.\n const returnExpression = node.type === 'ref' && canOverride && returnType ? `${fakerTextWithOverride} as ${returnType}` : fakerTextWithOverride\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function\n export\n name={name}\n JSDoc={{ comments: description ? [`@description ${jsStringEscape(description)}`] : [] }}\n params={canOverride ? paramsSignature : undefined}\n returnType={returnType ?? undefined}\n >\n {seed ? (\n <>\n {`faker.seed(${JSON.stringify(seed)})`}\n <br />\n </>\n ) : undefined}\n {`return ${returnExpression}`}\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}<TData extends Partial<${typeName}> = object>(data?: TData)`\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) => 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 Omit<typeof defaultFakeData, keyof TData> & TData\n}`\n : `{\n ${seedCode}const defaultFakeData = ${fakerText}\n return {\n ...defaultFakeData,\n ...(data || {}),\n } as Omit<typeof defaultFakeData, keyof TData> & TData\n}`\n\n return (\n <File.Source name={name} isExportable isIndexable>\n {functionSignature}\n {functionBody}\n </File.Source>\n )\n}\n"],"mappings":"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"}
|
package/dist/components.cjs
CHANGED
package/dist/components.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as Faker } from "./Faker-
|
|
1
|
+
import { t as Faker } from "./Faker-BA4l8DTe.js";
|
|
2
2
|
export { Faker };
|
package/dist/components.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as Faker } from "./Faker-
|
|
1
|
+
import { t as Faker } from "./Faker-DUx7jvCo.js";
|
|
2
2
|
export { Faker };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __name } from "./chunk-C0LytTxp.js";
|
|
2
|
-
import { o as PluginFaker } from "./printerFaker-
|
|
2
|
+
import { o as PluginFaker } from "./printerFaker-BzEB43Jz.js";
|
|
3
3
|
|
|
4
4
|
//#region src/generators/fakerGenerator.d.ts
|
|
5
5
|
/**
|
|
@@ -11,4 +11,4 @@ import { o as PluginFaker } from "./printerFaker-DXS861Q0.js";
|
|
|
11
11
|
declare const fakerGenerator: import("@kubb/core").Generator<PluginFaker, unknown>;
|
|
12
12
|
//#endregion
|
|
13
13
|
export { fakerGenerator as t };
|
|
14
|
-
//# sourceMappingURL=fakerGenerator-
|
|
14
|
+
//# sourceMappingURL=fakerGenerator-BNysC6rh.d.ts.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
const require_Faker = require("./Faker-
|
|
1
|
+
const require_Faker = require("./Faker-Ds2xP2-k.cjs");
|
|
2
|
+
let _kubb_ast_utils = require("@kubb/ast/utils");
|
|
2
3
|
let _kubb_core = require("@kubb/core");
|
|
3
4
|
let _kubb_plugin_ts = require("@kubb/plugin-ts");
|
|
4
5
|
let _kubb_renderer_jsx = require("@kubb/renderer-jsx");
|
|
@@ -48,40 +49,6 @@ function rewriteAliasedImports(text, aliases) {
|
|
|
48
49
|
return Array.from(aliases).reduce((acc, [name, alias]) => acc.replace(new RegExp(`\\b${escapeRegExp(name)}\\b`, "g"), alias), text);
|
|
49
50
|
}
|
|
50
51
|
//#endregion
|
|
51
|
-
//#region ../../internals/utils/src/object.ts
|
|
52
|
-
/**
|
|
53
|
-
* Serializes a primitive value to a JSON string literal, stripping any surrounding quote characters first.
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
* stringify('hello') // '"hello"'
|
|
57
|
-
* stringify('"hello"') // '"hello"'
|
|
58
|
-
*/
|
|
59
|
-
function stringify(value) {
|
|
60
|
-
if (value === void 0 || value === null) return "\"\"";
|
|
61
|
-
return JSON.stringify(require_Faker.trimQuotes(value.toString()));
|
|
62
|
-
}
|
|
63
|
-
//#endregion
|
|
64
|
-
//#region ../../internals/utils/src/regexp.ts
|
|
65
|
-
/**
|
|
66
|
-
* Converts a pattern string into a `new RegExp(...)` constructor call or a regex literal string.
|
|
67
|
-
* Inline flags expressed as `^(?im)` prefixes are extracted and applied to the resulting expression.
|
|
68
|
-
* Pass `null` as the second argument to emit a `/pattern/flags` literal instead.
|
|
69
|
-
*
|
|
70
|
-
* @example
|
|
71
|
-
* toRegExpString('^(?im)foo') // → 'new RegExp("foo", "im")'
|
|
72
|
-
* toRegExpString('^(?im)foo', null) // → '/foo/im'
|
|
73
|
-
*/
|
|
74
|
-
function toRegExpString(text, func = "RegExp") {
|
|
75
|
-
const raw = require_Faker.trimQuotes(text);
|
|
76
|
-
const match = raw.match(/^\^(\(\?([igmsuy]+)\))/i);
|
|
77
|
-
const replacementTarget = match?.[1] ?? "";
|
|
78
|
-
const matchedFlags = match?.[2];
|
|
79
|
-
const cleaned = raw.replace(/^\\?\//, "").replace(/\\?\/$/, "").replace(replacementTarget, "");
|
|
80
|
-
const { source, flags } = new RegExp(cleaned, matchedFlags);
|
|
81
|
-
if (func === null) return `/${source}/${flags}`;
|
|
82
|
-
return `new ${func}(${JSON.stringify(source)}${flags ? `, ${JSON.stringify(flags)}` : ""})`;
|
|
83
|
-
}
|
|
84
|
-
//#endregion
|
|
85
52
|
//#region ../../internals/shared/src/operation.ts
|
|
86
53
|
/**
|
|
87
54
|
* Maps a content type to the PascalCase suffix used to name per-content-type variants
|
|
@@ -194,7 +161,7 @@ const fakerKeywordMapper = {
|
|
|
194
161
|
return `{...${items.join(", ...")}}`;
|
|
195
162
|
},
|
|
196
163
|
matches: (value = "", regexGenerator = "faker") => {
|
|
197
|
-
if (regexGenerator === "randexp") return `${toRegExpString(value, "RandExp")}.gen()`;
|
|
164
|
+
if (regexGenerator === "randexp") return `${(0, _kubb_ast_utils.toRegExpString)(value, "RandExp")}.gen()`;
|
|
198
165
|
return `faker.helpers.fromRegExp("${value}")`;
|
|
199
166
|
},
|
|
200
167
|
email: () => "faker.internet.email()",
|
|
@@ -205,7 +172,7 @@ function getEnumValues(node) {
|
|
|
205
172
|
return node.enumValues ?? [];
|
|
206
173
|
}
|
|
207
174
|
function parseEnumValue(value) {
|
|
208
|
-
if (typeof value === "string") return stringify(value);
|
|
175
|
+
if (typeof value === "string") return (0, _kubb_ast_utils.stringify)(value);
|
|
209
176
|
return value;
|
|
210
177
|
}
|
|
211
178
|
/** Reads the discriminator literal off a variant, or `undefined` when it can't be determined. */
|
|
@@ -268,7 +235,7 @@ const printerFaker = _kubb_core.ast.definePrinter((options) => {
|
|
|
268
235
|
return fakerKeywordMapper.time(node.representation ?? "string", this.options.dateParser);
|
|
269
236
|
},
|
|
270
237
|
ref(node) {
|
|
271
|
-
const refName = node.ref ?
|
|
238
|
+
const refName = node.ref ? (0, _kubb_ast_utils.extractRefName)(node.ref) ?? node.name ?? node.schema?.name : node.name ?? node.schema?.name;
|
|
272
239
|
if (!refName) throw new Error("Name not defined for ref node");
|
|
273
240
|
if (this.options.schemaName && refName === this.options.schemaName) return "undefined as any";
|
|
274
241
|
const resolvedName = node.ref ? this.options.resolver.resolveName(refName) : refName;
|
|
@@ -281,7 +248,7 @@ const printerFaker = _kubb_core.ast.definePrinter((options) => {
|
|
|
281
248
|
union(node) {
|
|
282
249
|
const { discriminatorPropertyName } = node;
|
|
283
250
|
const baseTypeName = this.options.typeName;
|
|
284
|
-
const items = (
|
|
251
|
+
const items = (0, _kubb_ast_utils.mapSchemaMembers)(node, (member) => {
|
|
285
252
|
const value = discriminatorPropertyName ? getDiscriminatorValue(member, discriminatorPropertyName) : void 0;
|
|
286
253
|
if (baseTypeName && value !== void 0) return printNested(member, {
|
|
287
254
|
typeName: `Extract<NonNullable<${baseTypeName}>, { ${JSON.stringify(discriminatorPropertyName)}: ${parseEnumValue(value)} }>`,
|
|
@@ -292,18 +259,18 @@ const printerFaker = _kubb_core.ast.definePrinter((options) => {
|
|
|
292
259
|
nestedInObject: true,
|
|
293
260
|
nestedInUnion: true
|
|
294
261
|
});
|
|
295
|
-
}).filter((item) => Boolean(item));
|
|
262
|
+
}).map(({ output }) => output).filter((item) => Boolean(item));
|
|
296
263
|
return fakerKeywordMapper.union(items);
|
|
297
264
|
},
|
|
298
265
|
intersection(node) {
|
|
299
|
-
const items = (
|
|
266
|
+
const items = (0, _kubb_ast_utils.mapSchemaMembers)(node, (member) => printNested(member, { nestedInObject: true })).map(({ output }) => output).filter((item) => Boolean(item));
|
|
300
267
|
return fakerKeywordMapper.and(items);
|
|
301
268
|
},
|
|
302
269
|
array(node) {
|
|
303
|
-
const items = (
|
|
270
|
+
const items = (0, _kubb_ast_utils.mapSchemaItems)(node, (member) => printNested(member, {
|
|
304
271
|
typeName: this.options.typeName ? `NonNullable<${this.options.typeName}>[number]` : void 0,
|
|
305
272
|
nestedInObject: true
|
|
306
|
-
})).filter((item) => Boolean(item));
|
|
273
|
+
})).map(({ output }) => output).filter((item) => Boolean(item));
|
|
307
274
|
return fakerKeywordMapper.array(items, node.min, node.max);
|
|
308
275
|
},
|
|
309
276
|
tuple(node) {
|
|
@@ -315,18 +282,18 @@ const printerFaker = _kubb_core.ast.definePrinter((options) => {
|
|
|
315
282
|
},
|
|
316
283
|
object(node) {
|
|
317
284
|
const cyclicSchemas = this.options.cyclicSchemas;
|
|
318
|
-
return
|
|
319
|
-
if (this.options.mapper && Object.hasOwn(this.options.mapper, property.name)) return
|
|
285
|
+
return (0, _kubb_ast_utils.buildObject)((node.properties ?? []).map((property) => {
|
|
286
|
+
if (this.options.mapper && Object.hasOwn(this.options.mapper, property.name)) return `${(0, _kubb_ast_utils.objectKey)(property.name)}: ${this.options.mapper[property.name]}`;
|
|
320
287
|
const value = printNested(property.schema, {
|
|
321
288
|
typeName: this.options.typeName ? indexedTypeName(this.options.typeName, property.name, this.options.nestedInUnion) : void 0,
|
|
322
289
|
nestedInObject: true
|
|
323
290
|
}) ?? "undefined";
|
|
324
|
-
if (cyclicSchemas &&
|
|
291
|
+
if (cyclicSchemas && (0, _kubb_ast_utils.containsCircularRef)(property.schema, {
|
|
325
292
|
circularSchemas: cyclicSchemas,
|
|
326
293
|
excludeName: this.options.schemaName
|
|
327
|
-
})) return `get ${property.name}() { const _value = ${value}; Object.defineProperty(this, ${JSON.stringify(property.name)}, { value: _value, configurable: true, writable: true, enumerable: true }); return _value }`;
|
|
328
|
-
return
|
|
329
|
-
})
|
|
294
|
+
})) return `get ${(0, _kubb_ast_utils.objectKey)(property.name)}() { const _value = ${value}; Object.defineProperty(this, ${JSON.stringify(property.name)}, { value: _value, configurable: true, writable: true, enumerable: true }); return _value }`;
|
|
295
|
+
return `${(0, _kubb_ast_utils.objectKey)(property.name)}: ${value}`;
|
|
296
|
+
}));
|
|
330
297
|
},
|
|
331
298
|
...options.nodes
|
|
332
299
|
},
|
|
@@ -345,7 +312,7 @@ const printerFaker = _kubb_core.ast.definePrinter((options) => {
|
|
|
345
312
|
*/
|
|
346
313
|
const fakerGenerator = (0, _kubb_core.defineGenerator)({
|
|
347
314
|
name: "faker",
|
|
348
|
-
renderer: _kubb_renderer_jsx.
|
|
315
|
+
renderer: _kubb_renderer_jsx.jsxRenderer,
|
|
349
316
|
schema(node, ctx) {
|
|
350
317
|
const { adapter, config, resolver, root } = ctx;
|
|
351
318
|
const { output, group, dateParser, regexGenerator, mapper, seed, locale, printer } = ctx.options;
|
|
@@ -353,11 +320,10 @@ const fakerGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
353
320
|
if (!node.name || !pluginTs) return;
|
|
354
321
|
const tsResolver = ctx.driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
355
322
|
const schemaName = node.name;
|
|
356
|
-
const mode = ctx.getMode(output);
|
|
357
323
|
const isEnumSchema = !!_kubb_core.ast.narrowSchema(node, _kubb_core.ast.schemaTypes.enum);
|
|
358
|
-
const tsEnumType = pluginTs.options?.
|
|
359
|
-
const tsEnumTypeSuffix = pluginTs.options?.
|
|
360
|
-
const schemaTypeName = isEnumSchema &&
|
|
324
|
+
const tsEnumType = pluginTs.options?.enum?.type;
|
|
325
|
+
const tsEnumTypeSuffix = pluginTs.options?.enum?.typeSuffix ?? "Key";
|
|
326
|
+
const schemaTypeName = isEnumSchema && tsEnumType === "asConst" ? tsResolver.resolveEnumKeyName({ name: schemaName }, tsEnumTypeSuffix) : tsResolver.resolveTypeName(schemaName);
|
|
361
327
|
const meta = {
|
|
362
328
|
name: resolver.resolveName(schemaName),
|
|
363
329
|
file: resolver.resolveFile({
|
|
@@ -409,7 +375,7 @@ const fakerGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
409
375
|
output,
|
|
410
376
|
group: group ?? void 0
|
|
411
377
|
}).path
|
|
412
|
-
}))
|
|
378
|
+
})), fakerText);
|
|
413
379
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
414
380
|
baseName: meta.file.baseName,
|
|
415
381
|
path: meta.file.path,
|
|
@@ -452,7 +418,7 @@ const fakerGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
452
418
|
path: typeReference.importPath,
|
|
453
419
|
name: [meta.typeName]
|
|
454
420
|
}),
|
|
455
|
-
|
|
421
|
+
usedImports.map((imp) => /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
456
422
|
root: meta.file.path,
|
|
457
423
|
path: imp.path,
|
|
458
424
|
name: imp.name
|
|
@@ -479,7 +445,7 @@ const fakerGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
479
445
|
const pluginTs = ctx.driver.getPlugin(_kubb_plugin_ts.pluginTsName);
|
|
480
446
|
if (!pluginTs) return;
|
|
481
447
|
const tsResolver = ctx.driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
482
|
-
const paramEntries =
|
|
448
|
+
const paramEntries = (0, _kubb_ast_utils.caseParams)(node.parameters, paramsCasing).map((param) => ({
|
|
483
449
|
param,
|
|
484
450
|
name: require_Faker.resolveParamNameByLocation(resolver, node, param),
|
|
485
451
|
typeName: require_Faker.resolveParamNameByLocation(tsResolver, node, param)
|
|
@@ -498,9 +464,9 @@ const fakerGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
498
464
|
}];
|
|
499
465
|
}
|
|
500
466
|
const variants = resolveContentTypeVariants(entries, baseName);
|
|
501
|
-
const unionSchema = _kubb_core.ast.createSchema({
|
|
467
|
+
const unionSchema = _kubb_core.ast.factory.createSchema({
|
|
502
468
|
type: "union",
|
|
503
|
-
members: variants.map((variant) => _kubb_core.ast.createSchema({
|
|
469
|
+
members: variants.map((variant) => _kubb_core.ast.factory.createSchema({
|
|
504
470
|
type: "ref",
|
|
505
471
|
name: variant.name
|
|
506
472
|
}))
|
|
@@ -700,4 +666,4 @@ Object.defineProperty(exports, "printerFaker", {
|
|
|
700
666
|
}
|
|
701
667
|
});
|
|
702
668
|
|
|
703
|
-
//# sourceMappingURL=fakerGenerator-
|
|
669
|
+
//# sourceMappingURL=fakerGenerator-BeKRKYuy.cjs.map
|