@kubb/plugin-react-query
Version:
React Query hooks generator plugin for Kubb, creating type-safe API client hooks from OpenAPI specifications for React applications.
1,144 lines (1,137 loc) • 46.2 kB
JavaScript
//#region rolldown:runtime
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
key = keys[i];
if (!__hasOwnProp.call(to, key) && key !== except) {
__defProp(to, key, {
get: ((k) => from[k]).bind(null, key),
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
}
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
value: mod,
enumerable: true
}) : target, mod));
//#endregion
const require_components = require('./components-CO636qn3.cjs');
let node_path = require("node:path");
node_path = __toESM(node_path);
let _kubb_plugin_client = require("@kubb/plugin-client");
let _kubb_plugin_ts = require("@kubb/plugin-ts");
let _kubb_plugin_zod = require("@kubb/plugin-zod");
let _kubb_plugin_oas_utils = require("@kubb/plugin-oas/utils");
let _kubb_react_fabric = require("@kubb/react-fabric");
let _kubb_react_fabric_jsx_runtime = require("@kubb/react-fabric/jsx-runtime");
let _kubb_plugin_client_components = require("@kubb/plugin-client/components");
let _kubb_core_hooks = require("@kubb/core/hooks");
let _kubb_plugin_oas_generators = require("@kubb/plugin-oas/generators");
let _kubb_plugin_oas_hooks = require("@kubb/plugin-oas/hooks");
let remeda = require("remeda");
//#region src/generators/infiniteQueryGenerator.tsx
const infiniteQueryGenerator = (0, _kubb_plugin_oas_generators.createReactGenerator)({
name: "react-infinite-query",
Operation({ config, operation, generator, plugin }) {
const { options, options: { output } } = plugin;
const pluginManager = (0, _kubb_core_hooks.usePluginManager)();
const oas = (0, _kubb_plugin_oas_hooks.useOas)();
const { getSchemas, getName, getFile } = (0, _kubb_plugin_oas_hooks.useOperationManager)(generator);
const isQuery = typeof options.query === "boolean" ? true : options.query?.methods.some((method) => operation.method === method);
const isMutation = (0, remeda.difference)(options.mutation ? options.mutation.methods : [], options.query ? options.query.methods : []).some((method) => operation.method === method);
const infiniteOptions = options.infinite && typeof options.infinite === "object" ? options.infinite : void 0;
const importPath = options.query ? options.query.importPath : "@tanstack/react-query";
const query = {
name: getName(operation, {
type: "function",
prefix: "use",
suffix: "infinite"
}),
typeName: getName(operation, { type: "type" }),
file: getFile(operation, {
prefix: "use",
suffix: "infinite"
})
};
const shouldUseClientPlugin = !!pluginManager.getPluginByKey([_kubb_plugin_client.pluginClientName]) && options.client.clientType !== "class";
const client = {
name: shouldUseClientPlugin ? getName(operation, {
type: "function",
pluginKey: [_kubb_plugin_client.pluginClientName]
}) : getName(operation, {
type: "function",
suffix: "infinite"
}),
file: getFile(operation, { pluginKey: [_kubb_plugin_client.pluginClientName] })
};
const queryOptions = { name: getName(operation, {
type: "function",
suffix: "InfiniteQueryOptions"
}) };
const queryKey = {
name: getName(operation, {
type: "const",
suffix: "InfiniteQueryKey"
}),
typeName: getName(operation, {
type: "type",
suffix: "InfiniteQueryKey"
})
};
const type = {
file: getFile(operation, { pluginKey: [_kubb_plugin_ts.pluginTsName] }),
schemas: getSchemas(operation, {
pluginKey: [_kubb_plugin_ts.pluginTsName],
type: "type"
})
};
const zod = {
file: getFile(operation, { pluginKey: [_kubb_plugin_zod.pluginZodName] }),
schemas: getSchemas(operation, {
pluginKey: [_kubb_plugin_zod.pluginZodName],
type: "function"
})
};
if (!isQuery || isMutation || !infiniteOptions) return null;
const normalizeKey = (key) => (key ?? "").replace(/\?$/, "");
const queryParam = infiniteOptions.queryParam;
const cursorParam = infiniteOptions.cursorParam;
const queryParamKeys = type.schemas.queryParams?.keys ?? [];
const responseKeys = [...type.schemas.responses?.flatMap((item) => item.keys ?? []) ?? [], ...type.schemas.response?.keys ?? []];
const hasQueryParam = queryParam ? queryParamKeys.some((key) => normalizeKey(key) === queryParam) : false;
const hasCursorParam = cursorParam ? responseKeys.some((key) => normalizeKey(key) === cursorParam) : true;
if (!hasQueryParam || !hasCursorParam) return null;
return /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric.File, {
baseName: query.file.baseName,
path: query.file.path,
meta: query.file.meta,
banner: (0, _kubb_plugin_oas_utils.getBanner)({
oas,
output,
config: pluginManager.config
}),
footer: (0, _kubb_plugin_oas_utils.getFooter)({
oas,
output
}),
children: [
options.parser === "zod" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [zod.schemas.response.name, zod.schemas.request?.name].filter(Boolean),
root: query.file.path,
path: zod.file.path
}),
options.client.importPath ? /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: "fetch",
path: options.client.importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["RequestConfig", "ResponseErrorConfig"],
path: options.client.importPath,
isTypeOnly: true
}),
options.client.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["ResponseConfig"],
path: options.client.importPath,
isTypeOnly: true
})
] }) : /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["fetch"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts")
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["RequestConfig", "ResponseErrorConfig"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts"),
isTypeOnly: true
}),
options.client.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["ResponseConfig"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts"),
isTypeOnly: true
})
] }),
shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [client.name],
root: query.file.path,
path: client.file.path
}),
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["buildFormData"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/config.ts")
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [
type.schemas.request?.name,
type.schemas.response.name,
type.schemas.pathParams?.name,
type.schemas.queryParams?.name,
type.schemas.headerParams?.name,
...type.schemas.statusCodes?.map((item) => item.name) || []
].filter(Boolean),
root: query.file.path,
path: type.file.path,
isTypeOnly: true
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.QueryKey, {
name: queryKey.name,
typeName: queryKey.typeName,
operation,
paramsCasing: options.paramsCasing,
pathParamsType: options.pathParamsType,
typeSchemas: type.schemas,
transformer: options.queryKey
}),
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_plugin_client_components.Client, {
name: client.name,
baseURL: options.client.baseURL,
operation,
typeSchemas: type.schemas,
zodSchemas: zod.schemas,
dataReturnType: options.client.dataReturnType || "data",
paramsCasing: options.paramsCasing,
paramsType: options.paramsType,
pathParamsType: options.pathParamsType,
parser: options.parser
}),
infiniteOptions && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["InfiniteData"],
isTypeOnly: true,
path: importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["infiniteQueryOptions"],
path: importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.InfiniteQueryOptions, {
name: queryOptions.name,
clientName: client.name,
queryKeyName: queryKey.name,
typeSchemas: type.schemas,
paramsCasing: options.paramsCasing,
paramsType: options.paramsType,
pathParamsType: options.pathParamsType,
dataReturnType: options.client.dataReturnType || "data",
cursorParam: infiniteOptions.cursorParam,
nextParam: infiniteOptions.nextParam,
previousParam: infiniteOptions.previousParam,
initialPageParam: infiniteOptions.initialPageParam,
queryParam: infiniteOptions.queryParam
})
] }),
infiniteOptions && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["useInfiniteQuery"],
path: importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [
"QueryKey",
"QueryClient",
"InfiniteQueryObserverOptions",
"UseInfiniteQueryResult"
],
path: importPath,
isTypeOnly: true
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.InfiniteQuery, {
name: query.name,
queryOptionsName: queryOptions.name,
typeSchemas: type.schemas,
paramsCasing: options.paramsCasing,
paramsType: options.paramsType,
pathParamsType: options.pathParamsType,
operation,
dataReturnType: options.client.dataReturnType || "data",
queryKeyName: queryKey.name,
queryKeyTypeName: queryKey.typeName,
initialPageParam: infiniteOptions.initialPageParam,
queryParam: infiniteOptions.queryParam
})
] })
]
});
}
});
//#endregion
//#region src/generators/mutationGenerator.tsx
const mutationGenerator = (0, _kubb_plugin_oas_generators.createReactGenerator)({
name: "react-query",
Operation({ config, plugin, operation, generator }) {
const { options, options: { output } } = plugin;
const pluginManager = (0, _kubb_core_hooks.usePluginManager)();
const oas = (0, _kubb_plugin_oas_hooks.useOas)();
const { getSchemas, getName, getFile } = (0, _kubb_plugin_oas_hooks.useOperationManager)(generator);
const isQuery = !!options.query && options.query?.methods.some((method) => operation.method === method);
const isMutation = options.mutation !== false && !isQuery && (0, remeda.difference)(options.mutation ? options.mutation.methods : [], options.query ? options.query.methods : []).some((method) => operation.method === method);
const importPath = options.mutation ? options.mutation.importPath : "@tanstack/react-query";
const mutation = {
name: getName(operation, {
type: "function",
prefix: "use"
}),
typeName: getName(operation, { type: "type" }),
file: getFile(operation, { prefix: "use" })
};
const type = {
file: getFile(operation, { pluginKey: [_kubb_plugin_ts.pluginTsName] }),
schemas: getSchemas(operation, {
pluginKey: [_kubb_plugin_ts.pluginTsName],
type: "type"
})
};
const zod = {
file: getFile(operation, { pluginKey: [_kubb_plugin_zod.pluginZodName] }),
schemas: getSchemas(operation, {
pluginKey: [_kubb_plugin_zod.pluginZodName],
type: "function"
})
};
const shouldUseClientPlugin = !!pluginManager.getPluginByKey([_kubb_plugin_client.pluginClientName]) && options.client.clientType !== "class";
const client = {
name: shouldUseClientPlugin ? getName(operation, {
type: "function",
pluginKey: [_kubb_plugin_client.pluginClientName]
}) : getName(operation, { type: "function" }),
file: getFile(operation, { pluginKey: [_kubb_plugin_client.pluginClientName] })
};
const mutationOptions = { name: getName(operation, {
type: "function",
suffix: "MutationOptions"
}) };
const mutationKey = {
name: getName(operation, {
type: "const",
suffix: "MutationKey"
}),
typeName: getName(operation, {
type: "type",
suffix: "MutationKey"
})
};
if (!isMutation) return null;
return /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric.File, {
baseName: mutation.file.baseName,
path: mutation.file.path,
meta: mutation.file.meta,
banner: (0, _kubb_plugin_oas_utils.getBanner)({
oas,
output,
config: pluginManager.config
}),
footer: (0, _kubb_plugin_oas_utils.getFooter)({
oas,
output
}),
children: [
options.parser === "zod" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [zod.schemas.response.name, zod.schemas.request?.name].filter(Boolean),
root: mutation.file.path,
path: zod.file.path
}),
options.client.importPath ? /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: "fetch",
path: options.client.importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["RequestConfig", "ResponseErrorConfig"],
path: options.client.importPath,
isTypeOnly: true
}),
options.client.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["ResponseConfig"],
path: options.client.importPath,
isTypeOnly: true
})
] }) : /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["fetch"],
root: mutation.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts")
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["RequestConfig", "ResponseErrorConfig"],
root: mutation.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts"),
isTypeOnly: true
}),
options.client.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["ResponseConfig"],
root: mutation.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts"),
isTypeOnly: true
})
] }),
shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [client.name],
root: mutation.file.path,
path: client.file.path
}),
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["buildFormData"],
root: mutation.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/config.ts")
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [
type.schemas.request?.name,
type.schemas.response.name,
type.schemas.pathParams?.name,
type.schemas.queryParams?.name,
type.schemas.headerParams?.name,
...type.schemas.statusCodes?.map((item) => item.name) || []
].filter(Boolean),
root: mutation.file.path,
path: type.file.path,
isTypeOnly: true
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.MutationKey, {
name: mutationKey.name,
typeName: mutationKey.typeName,
operation,
pathParamsType: options.pathParamsType,
typeSchemas: type.schemas,
paramsCasing: options.paramsCasing,
transformer: options.mutationKey
}),
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_plugin_client_components.Client, {
name: client.name,
baseURL: options.client.baseURL,
operation,
typeSchemas: type.schemas,
zodSchemas: zod.schemas,
dataReturnType: options.client.dataReturnType || "data",
paramsCasing: options.paramsCasing,
paramsType: options.paramsType,
pathParamsType: options.pathParamsType,
parser: options.parser
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["mutationOptions"],
path: importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.MutationOptions, {
name: mutationOptions.name,
clientName: client.name,
mutationKeyName: mutationKey.name,
typeSchemas: type.schemas,
paramsCasing: options.paramsCasing,
paramsType: options.paramsType,
pathParamsType: options.pathParamsType,
dataReturnType: options.client.dataReturnType || "data"
}),
options.mutation && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["useMutation"],
path: importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [
"UseMutationOptions",
"UseMutationResult",
"QueryClient"
],
path: importPath,
isTypeOnly: true
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.Mutation, {
name: mutation.name,
mutationOptionsName: mutationOptions.name,
typeName: mutation.typeName,
typeSchemas: type.schemas,
operation,
dataReturnType: options.client.dataReturnType || "data",
paramsCasing: options.paramsCasing,
pathParamsType: options.pathParamsType,
mutationKeyName: mutationKey.name
})
] })
]
});
}
});
//#endregion
//#region src/generators/queryGenerator.tsx
const queryGenerator = (0, _kubb_plugin_oas_generators.createReactGenerator)({
name: "react-query",
Operation({ config, plugin, operation, generator }) {
const { options, options: { output } } = plugin;
const pluginManager = (0, _kubb_core_hooks.usePluginManager)();
const oas = (0, _kubb_plugin_oas_hooks.useOas)();
const { getSchemas, getName, getFile } = (0, _kubb_plugin_oas_hooks.useOperationManager)(generator);
const isQuery = typeof options.query === "boolean" ? true : options.query?.methods.some((method) => operation.method === method);
const isMutation = (0, remeda.difference)(options.mutation ? options.mutation.methods : [], options.query ? options.query.methods : []).some((method) => operation.method === method);
const importPath = options.query ? options.query.importPath : "@tanstack/react-query";
const query = {
name: getName(operation, {
type: "function",
prefix: "use"
}),
typeName: getName(operation, { type: "type" }),
file: getFile(operation, { prefix: "use" })
};
const shouldUseClientPlugin = !!pluginManager.getPluginByKey([_kubb_plugin_client.pluginClientName]) && options.client.clientType !== "class";
const client = {
name: shouldUseClientPlugin ? getName(operation, {
type: "function",
pluginKey: [_kubb_plugin_client.pluginClientName]
}) : getName(operation, { type: "function" }),
file: getFile(operation, { pluginKey: [_kubb_plugin_client.pluginClientName] })
};
const queryOptions = { name: getName(operation, {
type: "function",
suffix: "QueryOptions"
}) };
const queryKey = {
name: getName(operation, {
type: "const",
suffix: "QueryKey"
}),
typeName: getName(operation, {
type: "type",
suffix: "QueryKey"
})
};
const type = {
file: getFile(operation, { pluginKey: [_kubb_plugin_ts.pluginTsName] }),
schemas: getSchemas(operation, {
pluginKey: [_kubb_plugin_ts.pluginTsName],
type: "type"
})
};
const zod = {
file: getFile(operation, { pluginKey: [_kubb_plugin_zod.pluginZodName] }),
schemas: getSchemas(operation, {
pluginKey: [_kubb_plugin_zod.pluginZodName],
type: "function"
})
};
if (!isQuery || isMutation) return null;
return /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric.File, {
baseName: query.file.baseName,
path: query.file.path,
meta: query.file.meta,
banner: (0, _kubb_plugin_oas_utils.getBanner)({
oas,
output,
config: pluginManager.config
}),
footer: (0, _kubb_plugin_oas_utils.getFooter)({
oas,
output
}),
children: [
options.parser === "zod" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [zod.schemas.response.name, zod.schemas.request?.name].filter(Boolean),
root: query.file.path,
path: zod.file.path
}),
options.client.importPath ? /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: "fetch",
path: options.client.importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["RequestConfig", "ResponseErrorConfig"],
path: options.client.importPath,
isTypeOnly: true
}),
options.client.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["ResponseConfig"],
path: options.client.importPath,
isTypeOnly: true
})
] }) : /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["fetch"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts")
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["RequestConfig", "ResponseErrorConfig"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts"),
isTypeOnly: true
}),
options.client.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["ResponseConfig"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts"),
isTypeOnly: true
})
] }),
shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [client.name],
root: query.file.path,
path: client.file.path
}),
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["buildFormData"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/config.ts")
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [
type.schemas.request?.name,
type.schemas.response.name,
type.schemas.pathParams?.name,
type.schemas.queryParams?.name,
type.schemas.headerParams?.name,
...type.schemas.statusCodes?.map((item) => item.name) || []
].filter(Boolean),
root: query.file.path,
path: type.file.path,
isTypeOnly: true
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.QueryKey, {
name: queryKey.name,
typeName: queryKey.typeName,
operation,
pathParamsType: options.pathParamsType,
typeSchemas: type.schemas,
paramsCasing: options.paramsCasing,
transformer: options.queryKey
}),
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_plugin_client_components.Client, {
name: client.name,
baseURL: options.client.baseURL,
operation,
typeSchemas: type.schemas,
zodSchemas: zod.schemas,
dataReturnType: options.client.dataReturnType || "data",
paramsType: options.paramsType,
paramsCasing: options.paramsCasing,
pathParamsType: options.pathParamsType,
parser: options.parser
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["queryOptions"],
path: importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.QueryOptions, {
name: queryOptions.name,
clientName: client.name,
queryKeyName: queryKey.name,
typeSchemas: type.schemas,
paramsCasing: options.paramsCasing,
paramsType: options.paramsType,
pathParamsType: options.pathParamsType,
dataReturnType: options.client.dataReturnType || "data"
}),
options.query && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["useQuery"],
path: importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [
"QueryKey",
"QueryClient",
"QueryObserverOptions",
"UseQueryResult",
"QueryClient"
],
path: importPath,
isTypeOnly: true
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.Query, {
name: query.name,
queryOptionsName: queryOptions.name,
typeSchemas: type.schemas,
paramsCasing: options.paramsCasing,
paramsType: options.paramsType,
pathParamsType: options.pathParamsType,
operation,
dataReturnType: options.client.dataReturnType || "data",
queryKeyName: queryKey.name,
queryKeyTypeName: queryKey.typeName
})
] })
]
});
}
});
//#endregion
//#region src/generators/suspenseInfiniteQueryGenerator.tsx
const suspenseInfiniteQueryGenerator = (0, _kubb_plugin_oas_generators.createReactGenerator)({
name: "react-suspense-infinite-query",
Operation({ config, operation, generator, plugin }) {
const { options, options: { output } } = plugin;
const pluginManager = (0, _kubb_core_hooks.usePluginManager)();
const oas = (0, _kubb_plugin_oas_hooks.useOas)();
const { getSchemas, getName, getFile } = (0, _kubb_plugin_oas_hooks.useOperationManager)(generator);
const isQuery = typeof options.query === "boolean" ? true : options.query?.methods.some((method) => operation.method === method);
const isMutation = (0, remeda.difference)(options.mutation ? options.mutation.methods : [], options.query ? options.query.methods : []).some((method) => operation.method === method);
const isSuspense = !!options.suspense;
const infiniteOptions = options.infinite && typeof options.infinite === "object" ? options.infinite : void 0;
const importPath = options.query ? options.query.importPath : "@tanstack/react-query";
const query = {
name: getName(operation, {
type: "function",
prefix: "use",
suffix: "suspenseInfinite"
}),
typeName: getName(operation, { type: "type" }),
file: getFile(operation, {
prefix: "use",
suffix: "suspenseInfinite"
})
};
const shouldUseClientPlugin = !!pluginManager.getPluginByKey([_kubb_plugin_client.pluginClientName]) && options.client.clientType !== "class";
const client = {
name: shouldUseClientPlugin ? getName(operation, {
type: "function",
pluginKey: [_kubb_plugin_client.pluginClientName]
}) : getName(operation, {
type: "function",
suffix: "suspenseInfinite"
}),
file: getFile(operation, { pluginKey: [_kubb_plugin_client.pluginClientName] })
};
const queryOptions = { name: getName(operation, {
type: "function",
suffix: "SuspenseInfiniteQueryOptions"
}) };
const queryKey = {
name: getName(operation, {
type: "const",
suffix: "SuspenseInfiniteQueryKey"
}),
typeName: getName(operation, {
type: "type",
suffix: "SuspenseInfiniteQueryKey"
})
};
const type = {
file: getFile(operation, { pluginKey: [_kubb_plugin_ts.pluginTsName] }),
schemas: getSchemas(operation, {
pluginKey: [_kubb_plugin_ts.pluginTsName],
type: "type"
})
};
const zod = {
file: getFile(operation, { pluginKey: [_kubb_plugin_zod.pluginZodName] }),
schemas: getSchemas(operation, {
pluginKey: [_kubb_plugin_zod.pluginZodName],
type: "function"
})
};
if (!isQuery || isMutation || !isSuspense || !infiniteOptions) return null;
return /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric.File, {
baseName: query.file.baseName,
path: query.file.path,
meta: query.file.meta,
banner: (0, _kubb_plugin_oas_utils.getBanner)({
oas,
output,
config: pluginManager.config
}),
footer: (0, _kubb_plugin_oas_utils.getFooter)({
oas,
output
}),
children: [
options.parser === "zod" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [zod.schemas.response.name, zod.schemas.request?.name].filter(Boolean),
root: query.file.path,
path: zod.file.path
}),
options.client.importPath ? /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: "fetch",
path: options.client.importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["RequestConfig", "ResponseErrorConfig"],
path: options.client.importPath,
isTypeOnly: true
}),
options.client.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["ResponseConfig"],
path: options.client.importPath,
isTypeOnly: true
})
] }) : /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["fetch"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts")
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["RequestConfig", "ResponseErrorConfig"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts"),
isTypeOnly: true
}),
options.client.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["ResponseConfig"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts"),
isTypeOnly: true
})
] }),
shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [client.name],
root: query.file.path,
path: client.file.path
}),
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["buildFormData"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/config.ts")
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [
type.schemas.request?.name,
type.schemas.response.name,
type.schemas.pathParams?.name,
type.schemas.queryParams?.name,
type.schemas.headerParams?.name,
...type.schemas.statusCodes?.map((item) => item.name) || []
].filter(Boolean),
root: query.file.path,
path: type.file.path,
isTypeOnly: true
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.QueryKey, {
name: queryKey.name,
typeName: queryKey.typeName,
operation,
paramsCasing: options.paramsCasing,
pathParamsType: options.pathParamsType,
typeSchemas: type.schemas,
transformer: options.queryKey
}),
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_plugin_client_components.Client, {
name: client.name,
baseURL: options.client.baseURL,
operation,
typeSchemas: type.schemas,
zodSchemas: zod.schemas,
dataReturnType: options.client.dataReturnType || "data",
paramsCasing: options.paramsCasing,
paramsType: options.paramsType,
pathParamsType: options.pathParamsType,
parser: options.parser
}),
infiniteOptions && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["InfiniteData"],
isTypeOnly: true,
path: importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["infiniteQueryOptions"],
path: importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.SuspenseInfiniteQueryOptions, {
name: queryOptions.name,
clientName: client.name,
queryKeyName: queryKey.name,
typeSchemas: type.schemas,
paramsCasing: options.paramsCasing,
paramsType: options.paramsType,
pathParamsType: options.pathParamsType,
dataReturnType: options.client.dataReturnType || "data",
cursorParam: infiniteOptions.cursorParam,
nextParam: infiniteOptions.nextParam,
previousParam: infiniteOptions.previousParam,
initialPageParam: infiniteOptions.initialPageParam,
queryParam: infiniteOptions.queryParam
})
] }),
infiniteOptions && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["useSuspenseInfiniteQuery"],
path: importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [
"QueryKey",
"QueryClient",
"UseSuspenseInfiniteQueryOptions",
"UseSuspenseInfiniteQueryResult"
],
path: importPath,
isTypeOnly: true
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.SuspenseInfiniteQuery, {
name: query.name,
queryOptionsName: queryOptions.name,
typeSchemas: type.schemas,
paramsCasing: options.paramsCasing,
paramsType: options.paramsType,
pathParamsType: options.pathParamsType,
operation,
dataReturnType: options.client.dataReturnType || "data",
queryKeyName: queryKey.name,
queryKeyTypeName: queryKey.typeName,
initialPageParam: infiniteOptions.initialPageParam,
queryParam: infiniteOptions.queryParam
})
] })
]
});
}
});
//#endregion
//#region src/generators/suspenseQueryGenerator.tsx
const suspenseQueryGenerator = (0, _kubb_plugin_oas_generators.createReactGenerator)({
name: "react-suspense-query",
Operation({ config, operation, generator, plugin }) {
const { options, options: { output } } = plugin;
const pluginManager = (0, _kubb_core_hooks.usePluginManager)();
const oas = (0, _kubb_plugin_oas_hooks.useOas)();
const { getSchemas, getName, getFile } = (0, _kubb_plugin_oas_hooks.useOperationManager)(generator);
const isQuery = typeof options.query === "boolean" ? true : options.query?.methods.some((method) => operation.method === method);
const isMutation = (0, remeda.difference)(options.mutation ? options.mutation.methods : [], options.query ? options.query.methods : []).some((method) => operation.method === method);
const isSuspense = !!options.suspense;
const importPath = options.query ? options.query.importPath : "@tanstack/react-query";
const query = {
name: getName(operation, {
type: "function",
prefix: "use",
suffix: "suspense"
}),
typeName: getName(operation, { type: "type" }),
file: getFile(operation, {
prefix: "use",
suffix: "suspense"
})
};
const shouldUseClientPlugin = !!pluginManager.getPluginByKey([_kubb_plugin_client.pluginClientName]) && options.client.clientType !== "class";
const client = {
name: shouldUseClientPlugin ? getName(operation, {
type: "function",
pluginKey: [_kubb_plugin_client.pluginClientName]
}) : getName(operation, {
type: "function",
suffix: "suspense"
}),
file: getFile(operation, { pluginKey: [_kubb_plugin_client.pluginClientName] })
};
const queryOptions = { name: getName(operation, {
type: "function",
suffix: "SuspenseQueryOptions"
}) };
const queryKey = {
name: getName(operation, {
type: "const",
suffix: "SuspenseQueryKey"
}),
typeName: getName(operation, {
type: "type",
suffix: "SuspenseQueryKey"
})
};
const type = {
file: getFile(operation, { pluginKey: [_kubb_plugin_ts.pluginTsName] }),
schemas: getSchemas(operation, {
pluginKey: [_kubb_plugin_ts.pluginTsName],
type: "type"
})
};
const zod = {
file: getFile(operation, { pluginKey: [_kubb_plugin_zod.pluginZodName] }),
schemas: getSchemas(operation, {
pluginKey: [_kubb_plugin_zod.pluginZodName],
type: "function"
})
};
if (!isQuery || isMutation || !isSuspense) return null;
return /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric.File, {
baseName: query.file.baseName,
path: query.file.path,
meta: query.file.meta,
banner: (0, _kubb_plugin_oas_utils.getBanner)({
oas,
output,
config: pluginManager.config
}),
footer: (0, _kubb_plugin_oas_utils.getFooter)({
oas,
output
}),
children: [
options.parser === "zod" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [zod.schemas.response.name, zod.schemas.request?.name].filter(Boolean),
root: query.file.path,
path: zod.file.path
}),
options.client.importPath ? /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: "fetch",
path: options.client.importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["RequestConfig", "ResponseErrorConfig"],
path: options.client.importPath,
isTypeOnly: true
}),
options.client.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["ResponseConfig"],
path: options.client.importPath,
isTypeOnly: true
})
] }) : /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["fetch"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts")
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["RequestConfig", "ResponseErrorConfig"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts"),
isTypeOnly: true
}),
options.client.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["ResponseConfig"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/fetch.ts"),
isTypeOnly: true
})
] }),
shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [client.name],
root: query.file.path,
path: client.file.path
}),
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["buildFormData"],
root: query.file.path,
path: node_path.default.resolve(config.root, config.output.path, ".kubb/config.ts")
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [
type.schemas.request?.name,
type.schemas.response.name,
type.schemas.pathParams?.name,
type.schemas.queryParams?.name,
type.schemas.headerParams?.name,
...type.schemas.statusCodes?.map((item) => item.name) || []
].filter(Boolean),
root: query.file.path,
path: type.file.path,
isTypeOnly: true
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.QueryKey, {
name: queryKey.name,
typeName: queryKey.typeName,
operation,
paramsCasing: options.paramsCasing,
pathParamsType: options.pathParamsType,
typeSchemas: type.schemas,
transformer: options.queryKey
}),
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_plugin_client_components.Client, {
name: client.name,
baseURL: options.client.baseURL,
operation,
typeSchemas: type.schemas,
zodSchemas: zod.schemas,
dataReturnType: options.client.dataReturnType || "data",
paramsCasing: options.paramsCasing,
paramsType: options.paramsType,
pathParamsType: options.pathParamsType,
parser: options.parser
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["queryOptions"],
path: importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.QueryOptions, {
name: queryOptions.name,
clientName: client.name,
queryKeyName: queryKey.name,
typeSchemas: type.schemas,
paramsCasing: options.paramsCasing,
paramsType: options.paramsType,
pathParamsType: options.pathParamsType,
dataReturnType: options.client.dataReturnType
}),
options.suspense && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: ["useSuspenseQuery"],
path: importPath
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
name: [
"QueryKey",
"QueryClient",
"UseSuspenseQueryOptions",
"UseSuspenseQueryResult"
],
path: importPath,
isTypeOnly: true
}),
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(require_components.SuspenseQuery, {
name: query.name,
queryOptionsName: queryOptions.name,
typeSchemas: type.schemas,
paramsType: options.paramsType,
paramsCasing: options.paramsCasing,
pathParamsType: options.pathParamsType,
operation,
dataReturnType: options.client.dataReturnType || "data",
queryKeyName: queryKey.name,
queryKeyTypeName: queryKey.typeName
})
] })
]
});
}
});
//#endregion
Object.defineProperty(exports, '__toESM', {
enumerable: true,
get: function () {
return __toESM;
}
});
Object.defineProperty(exports, 'infiniteQueryGenerator', {
enumerable: true,
get: function () {
return infiniteQueryGenerator;
}
});
Object.defineProperty(exports, 'mutationGenerator', {
enumerable: true,
get: function () {
return mutationGenerator;
}
});
Object.defineProperty(exports, 'queryGenerator', {
enumerable: true,
get: function () {
return queryGenerator;
}
});
Object.defineProperty(exports, 'suspenseInfiniteQueryGenerator', {
enumerable: true,
get: function () {
return suspenseInfiniteQueryGenerator;
}
});
Object.defineProperty(exports, 'suspenseQueryGenerator', {
enumerable: true,
get: function () {
return suspenseQueryGenerator;
}
});
//# sourceMappingURL=generators-BNtUetHy.cjs.map