@kubb/plugin-faker
Version:
Faker.js data generator plugin for Kubb, creating realistic mock data from OpenAPI specifications for development and testing.
197 lines (195 loc) • 5.9 kB
JavaScript
import { t as Faker } from "./components-DUQvu8JV.js";
import { SchemaGenerator, schemaKeywords } from "@kubb/plugin-oas";
import { pluginTsName } from "@kubb/plugin-ts";
import { useMode, usePluginManager } from "@kubb/core/hooks";
import { createReactGenerator } from "@kubb/plugin-oas/generators";
import { useOas, useOperationManager, useSchemaManager } from "@kubb/plugin-oas/hooks";
import { getBanner, getFooter } from "@kubb/plugin-oas/utils";
import { File, Fragment } from "@kubb/react-fabric";
import { jsx, jsxs } from "@kubb/react-fabric/jsx-runtime";
//#region src/generators/fakerGenerator.tsx
const fakerGenerator = createReactGenerator({
name: "faker",
Operation({ operation, generator, plugin }) {
const { options, options: { dateParser, regexGenerator, seed, mapper } } = plugin;
const mode = useMode();
const pluginManager = usePluginManager();
const oas = useOas();
const { getSchemas, getFile, getGroup } = useOperationManager(generator);
const schemaManager = useSchemaManager();
const file = getFile(operation);
const schemas = getSchemas(operation);
const schemaGenerator = new SchemaGenerator(options, {
fabric: generator.context.fabric,
oas,
plugin,
pluginManager,
mode,
override: options.override
});
const operationSchemas = [
schemas.pathParams,
schemas.queryParams,
schemas.headerParams,
schemas.statusCodes,
schemas.request,
schemas.response
].flat().filter(Boolean);
const mapOperationSchema = ({ name, schema: schemaObject, description, ...options$1 }) => {
const tree = schemaGenerator.parse({
schemaObject,
name
});
const imports = schemaManager.getImports(tree);
const group = options$1.operation ? getGroup(options$1.operation) : void 0;
const faker = {
name: schemaManager.getName(name, { type: "function" }),
file: schemaManager.getFile(name)
};
const type = {
name: schemaManager.getName(name, {
type: "type",
pluginKey: [pluginTsName]
}),
file: schemaManager.getFile(options$1.operationName || name, {
pluginKey: [pluginTsName],
group
})
};
const canOverride = tree.some(({ keyword }) => keyword === schemaKeywords.array || keyword === schemaKeywords.and || keyword === schemaKeywords.object || keyword === schemaKeywords.union || keyword === schemaKeywords.tuple);
return /* @__PURE__ */ jsxs(Fragment, { children: [
canOverride && /* @__PURE__ */ jsx(File.Import, {
isTypeOnly: true,
root: file.path,
path: type.file.path,
name: [type.name]
}),
imports.map((imp) => /* @__PURE__ */ jsx(File.Import, {
root: file.path,
path: imp.path,
name: imp.name
}, [
imp.path,
imp.name,
imp.isTypeOnly
].join("-"))),
/* @__PURE__ */ jsx(Faker, {
name: faker.name,
typeName: type.name,
description,
tree,
regexGenerator,
dateParser,
mapper,
seed,
canOverride
})
] });
};
return /* @__PURE__ */ jsxs(File, {
baseName: file.baseName,
path: file.path,
meta: file.meta,
banner: getBanner({
oas,
output: plugin.options.output,
config: pluginManager.config
}),
footer: getFooter({
oas,
output: plugin.options.output
}),
children: [
/* @__PURE__ */ jsx(File.Import, {
name: ["faker"],
path: "@faker-js/faker"
}),
regexGenerator === "randexp" && /* @__PURE__ */ jsx(File.Import, {
name: "RandExp",
path: "randexp"
}),
dateParser !== "faker" && /* @__PURE__ */ jsx(File.Import, {
path: dateParser,
name: dateParser
}),
operationSchemas.map(mapOperationSchema)
]
});
},
Schema({ schema, plugin }) {
const { getName, getFile, getImports } = useSchemaManager();
const { options: { output, dateParser, regexGenerator, seed, mapper } } = plugin;
const pluginManager = usePluginManager();
const oas = useOas();
const imports = getImports(schema.tree);
const faker = {
name: getName(schema.name, { type: "function" }),
file: getFile(schema.name)
};
const type = {
name: getName(schema.name, {
type: "type",
pluginKey: [pluginTsName]
}),
file: getFile(schema.name, { pluginKey: [pluginTsName] })
};
const canOverride = schema.tree.some(({ keyword }) => keyword === schemaKeywords.array || keyword === schemaKeywords.and || keyword === schemaKeywords.object || keyword === schemaKeywords.union || keyword === schemaKeywords.tuple || keyword === schemaKeywords.string || keyword === schemaKeywords.integer || keyword === schemaKeywords.number);
return /* @__PURE__ */ jsxs(File, {
baseName: faker.file.baseName,
path: faker.file.path,
meta: faker.file.meta,
banner: getBanner({
oas,
output,
config: pluginManager.config
}),
footer: getFooter({
oas,
output
}),
children: [
/* @__PURE__ */ jsx(File.Import, {
name: ["faker"],
path: "@faker-js/faker"
}),
regexGenerator === "randexp" && /* @__PURE__ */ jsx(File.Import, {
name: "RandExp",
path: "randexp"
}),
dateParser !== "faker" && /* @__PURE__ */ jsx(File.Import, {
path: dateParser,
name: dateParser
}),
/* @__PURE__ */ jsx(File.Import, {
isTypeOnly: true,
root: faker.file.path,
path: type.file.path,
name: [type.name]
}),
imports.map((imp) => /* @__PURE__ */ jsx(File.Import, {
root: faker.file.path,
path: imp.path,
name: imp.name
}, [
imp.path,
imp.name,
imp.isTypeOnly
].join("-"))),
/* @__PURE__ */ jsx(Faker, {
name: faker.name,
typeName: type.name,
description: schema.value.description,
tree: schema.tree,
regexGenerator,
dateParser,
mapper,
seed,
canOverride
})
]
});
}
});
//#endregion
export { fakerGenerator as t };
//# sourceMappingURL=fakerGenerator-CgXklxYJ.js.map