@kubb/plugin-faker 5.1.10 → 5.1.11
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/index.cjs +20 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +21 -22
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { posix } from "node:path";
|
|
2
|
-
import { Diagnostics, Resolver, addGenerator,
|
|
2
|
+
import { Diagnostics, Resolver, addGenerator, ast, containsCircularRef, createResolver, defineExtension, defineGenerator, setMacros, setResolver } from "kubb/kit";
|
|
3
3
|
import { File, Function, jsxRenderer } from "kubb/jsx";
|
|
4
4
|
import { Fragment, jsx, jsxs } from "kubb/jsx/jsx-runtime";
|
|
5
5
|
import { buildParams, enumTypeName, pluginTsName } from "@kubb/plugin-ts";
|
|
@@ -396,6 +396,12 @@ const NON_INLINABLE_RESPONSE_TYPES = /* @__PURE__ */ new Set([
|
|
|
396
396
|
function canOverrideSchema(node) {
|
|
397
397
|
return !NON_OVERRIDABLE_TYPES.has(node.type);
|
|
398
398
|
}
|
|
399
|
+
/**
|
|
400
|
+
* Follows a ref, including alias chains, to the schema it resolves to. Unresolved refs are returned as is.
|
|
401
|
+
*/
|
|
402
|
+
function resolveRefTarget(node) {
|
|
403
|
+
return node.type === "ref" && node.schema ? resolveRefTarget(node.schema) : node;
|
|
404
|
+
}
|
|
399
405
|
function shouldInlineSingleResponseSchema(schema) {
|
|
400
406
|
return !NON_INLINABLE_RESPONSE_TYPES.has(schema.type);
|
|
401
407
|
}
|
|
@@ -486,7 +492,7 @@ function resolveFakerTypeUsage(node, typeName, canOverride) {
|
|
|
486
492
|
return {
|
|
487
493
|
dataType,
|
|
488
494
|
returnType,
|
|
489
|
-
usesTypeName: dataType.includes(typeName) || Boolean(returnType?.includes(typeName))
|
|
495
|
+
usesTypeName: canOverride && dataType.includes(typeName) || Boolean(returnType?.includes(typeName))
|
|
490
496
|
};
|
|
491
497
|
}
|
|
492
498
|
//#endregion
|
|
@@ -890,18 +896,22 @@ function parseEnumValue(value) {
|
|
|
890
896
|
return value;
|
|
891
897
|
}
|
|
892
898
|
/**
|
|
893
|
-
* Reads the discriminator literal off a variant,
|
|
899
|
+
* Reads the discriminator literal off a variant, with whether its property is required, or
|
|
900
|
+
* `undefined` when it can't be determined.
|
|
894
901
|
*
|
|
895
902
|
* A variant carries exactly one discriminator value, so a property resolving to several literals
|
|
896
903
|
* (a `ref` to the enum shared by every branch, say) identifies no branch and narrows nothing.
|
|
897
904
|
*/
|
|
898
|
-
function
|
|
905
|
+
function getDiscriminator(member, discriminatorPropertyName) {
|
|
899
906
|
for (const property of ast.resolveSchemaProperties({
|
|
900
907
|
node: member,
|
|
901
908
|
propertyName: discriminatorPropertyName
|
|
902
909
|
})) {
|
|
903
910
|
const values = ast.getSchemaLiteralValues(property.schema);
|
|
904
|
-
if (values.length === 1) return
|
|
911
|
+
if (values.length === 1) return {
|
|
912
|
+
value: values[0],
|
|
913
|
+
required: property.required
|
|
914
|
+
};
|
|
905
915
|
}
|
|
906
916
|
}
|
|
907
917
|
/**
|
|
@@ -973,7 +983,7 @@ const printerFaker = ast.createPrinter((options) => {
|
|
|
973
983
|
});
|
|
974
984
|
if (this.options.schemaName && refName === this.options.schemaName) return this.options.typeName ? `undefined as unknown as ${this.options.typeName}` : "undefined as unknown";
|
|
975
985
|
const resolvedName = node.ref ? this.options.resolver.name(refName) : refName;
|
|
976
|
-
if (!this.options.nestedInObject) return `${resolvedName}(data)`;
|
|
986
|
+
if (!this.options.nestedInObject && canOverrideSchema(resolveRefTarget(node))) return `${resolvedName}(data)`;
|
|
977
987
|
return `${resolvedName}()`;
|
|
978
988
|
},
|
|
979
989
|
enum(node) {
|
|
@@ -984,9 +994,10 @@ const printerFaker = ast.createPrinter((options) => {
|
|
|
984
994
|
const { discriminatorPropertyName } = node;
|
|
985
995
|
const baseTypeName = this.options.typeName;
|
|
986
996
|
return `faker.helpers.arrayElement([${mapSchemaMembers(node, (member) => {
|
|
987
|
-
const
|
|
988
|
-
if (baseTypeName &&
|
|
989
|
-
const
|
|
997
|
+
const discriminator = discriminatorPropertyName ? getDiscriminator(member, discriminatorPropertyName) : void 0;
|
|
998
|
+
if (baseTypeName && discriminator) {
|
|
999
|
+
const key = `${JSON.stringify(discriminatorPropertyName)}${discriminator.required ? "" : "?"}`;
|
|
1000
|
+
const typeName = `Extract<NonNullable<${baseTypeName}>, { ${key}: ${parseEnumValue(discriminator.value)} }>`;
|
|
990
1001
|
return printNested(member, {
|
|
991
1002
|
typeName,
|
|
992
1003
|
nestedInObject: true,
|
|
@@ -1396,7 +1407,7 @@ var compatibility = {
|
|
|
1396
1407
|
};
|
|
1397
1408
|
//#endregion
|
|
1398
1409
|
//#region package.json
|
|
1399
|
-
var version = "5.1.
|
|
1410
|
+
var version = "5.1.11";
|
|
1400
1411
|
//#endregion
|
|
1401
1412
|
//#region src/resolvers/resolverFaker.ts
|
|
1402
1413
|
/**
|
|
@@ -1464,18 +1475,6 @@ const pluginFaker = defineExtension({
|
|
|
1464
1475
|
path: "mocks",
|
|
1465
1476
|
barrel: { type: "named" }
|
|
1466
1477
|
}, seed, locale = "en", group, exclude = [], include, override = [], typeMode = "inferred", dateParser = "faker", regexGenerator = "faker", printer, resolver: userResolver, macros: userMacros } = options;
|
|
1467
|
-
assertPluginOption({
|
|
1468
|
-
plugin: pluginFakerName,
|
|
1469
|
-
option: "typeMode",
|
|
1470
|
-
value: typeMode,
|
|
1471
|
-
allowed: ["inferred", "schema"]
|
|
1472
|
-
});
|
|
1473
|
-
assertPluginOption({
|
|
1474
|
-
plugin: pluginFakerName,
|
|
1475
|
-
option: "regexGenerator",
|
|
1476
|
-
value: regexGenerator,
|
|
1477
|
-
allowed: ["faker", "randexp"]
|
|
1478
|
-
});
|
|
1479
1478
|
setResolver(userResolver ? Resolver.merge(resolverFaker, userResolver) : resolverFaker);
|
|
1480
1479
|
if (userMacros?.length) setMacros(userMacros);
|
|
1481
1480
|
addGenerator(fakerGenerator);
|