@kubb/plugin-ts 5.0.0-alpha.6 → 5.0.0-alpha.8
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/generators.cjs +1 -1
- package/dist/generators.d.ts +3 -3
- package/dist/generators.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/{plugin-BcK4SBA0.js → plugin-D5NGPj0v.js} +34 -34
- package/dist/plugin-D5NGPj0v.js.map +1 -0
- package/dist/{plugin-BrQcApyO.cjs → plugin-MLTxoa8p.cjs} +32 -32
- package/dist/plugin-MLTxoa8p.cjs.map +1 -0
- package/package.json +5 -5
- package/src/components/v2/Type.tsx +1 -12
- package/src/constants.ts +3 -3
- package/src/generators/typeGenerator.tsx +28 -28
- package/src/generators/v2/typeGenerator.tsx +2 -2
- package/src/plugin.ts +7 -7
- package/dist/plugin-BcK4SBA0.js.map +0 -1
- package/dist/plugin-BrQcApyO.cjs.map +0 -1
package/dist/generators.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_plugin = require("./plugin-
|
|
2
|
+
const require_plugin = require("./plugin-MLTxoa8p.cjs");
|
|
3
3
|
exports.typeGenerator = require_plugin.typeGenerator$1;
|
|
4
4
|
exports.typeGeneratorV2 = require_plugin.typeGenerator;
|
package/dist/generators.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as __name } from "./chunk--u3MIqq1.js";
|
|
2
2
|
import { n as PluginTs } from "./types-CsvB6X5Y.js";
|
|
3
3
|
import * as _kubb_core0 from "@kubb/core";
|
|
4
|
-
import { AsyncEventEmitter, Config, FileMetaBase, Generator, Group, KubbEvents, Output, Plugin,
|
|
4
|
+
import { AsyncEventEmitter, Config, FileMetaBase, Generator, Group, KubbEvents, Output, Plugin, PluginDriver, PluginFactoryOptions, ResolveNameParams } from "@kubb/core";
|
|
5
5
|
import { HttpMethod, Oas, Operation, SchemaObject, contentType } from "@kubb/oas";
|
|
6
6
|
import { FabricReactNode } from "@kubb/react-fabric/types";
|
|
7
7
|
import { Fabric, KubbFile } from "@kubb/fabric-core/types";
|
|
@@ -106,7 +106,7 @@ type Context$1<TOptions, TPluginOptions extends PluginFactoryOptions> = {
|
|
|
106
106
|
include: Array<Include> | undefined;
|
|
107
107
|
override: Array<Override<TOptions>> | undefined;
|
|
108
108
|
contentType: contentType | undefined;
|
|
109
|
-
|
|
109
|
+
driver: PluginDriver;
|
|
110
110
|
events?: AsyncEventEmitter<KubbEvents>;
|
|
111
111
|
/**
|
|
112
112
|
* Current plugin
|
|
@@ -360,7 +360,7 @@ type Schema = {
|
|
|
360
360
|
type Context<TOptions, TPluginOptions extends PluginFactoryOptions> = {
|
|
361
361
|
fabric: Fabric;
|
|
362
362
|
oas: Oas;
|
|
363
|
-
|
|
363
|
+
driver: PluginDriver;
|
|
364
364
|
events?: AsyncEventEmitter<KubbEvents>;
|
|
365
365
|
/**
|
|
366
366
|
* Current plugin
|
package/dist/generators.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as typeGenerator, r as typeGenerator$1 } from "./plugin-
|
|
1
|
+
import { i as typeGenerator, r as typeGenerator$1 } from "./plugin-D5NGPj0v.js";
|
|
2
2
|
export { typeGenerator, typeGenerator$1 as typeGeneratorV2 };
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_plugin = require("./plugin-
|
|
2
|
+
const require_plugin = require("./plugin-MLTxoa8p.cjs");
|
|
3
3
|
exports.pluginTs = require_plugin.pluginTs;
|
|
4
4
|
exports.pluginTsName = require_plugin.pluginTsName;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as pluginTsName, t as pluginTs } from "./plugin-
|
|
1
|
+
import { n as pluginTsName, t as pluginTs } from "./plugin-D5NGPj0v.js";
|
|
2
2
|
export { pluginTs, pluginTsName };
|
|
@@ -2,9 +2,9 @@ import "./chunk--u3MIqq1.js";
|
|
|
2
2
|
import { A as keywordTypeNodes, C as createTypeDeclaration, D as createUnionDeclaration, E as createTypeReferenceNode, F as camelCase, I as pascalCase, M as syntaxKind, N as jsStringEscape, O as createUrlTemplateType, P as trimQuotes, S as createTypeAliasDeclaration, T as createTypeOperatorNode, _ as createPropertySignature, a as createArrayTypeNode, b as createTrue, c as createIdentifier, d as createIntersectionDeclaration, f as createLiteralTypeNode, g as createPrefixUnaryExpression, h as createOptionalTypeNode, i as createArrayDeclaration, j as modifiers, k as getUnknownType, l as createIndexSignature, m as createOmitDeclaration, n as SyntaxKind, o as createEnumDeclaration, p as createNumericLiteral, r as appendJSDocToNode, s as createFalse, t as Type$1, u as createIndexedAccessTypeNode, v as createRestTypeNode, w as createTypeLiteralNode, x as createTupleTypeNode, y as createStringLiteral } from "./components-CRu8IKY3.js";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { applyParamsCasing, collect, createProperty, createSchema, isPlainStringType, walk } from "@kubb/ast";
|
|
5
|
-
import {
|
|
5
|
+
import { createGenerator, createPlugin, definePrinter, getBarrelFiles, getMode, resolveOptions } from "@kubb/core";
|
|
6
6
|
import { OperationGenerator, SchemaGenerator, buildOperation, buildSchema, isKeyword, pluginOasName, schemaKeywords } from "@kubb/plugin-oas";
|
|
7
|
-
import { useKubb, useMode,
|
|
7
|
+
import { useKubb, useMode, usePluginDriver } from "@kubb/core/hooks";
|
|
8
8
|
import { safePrint } from "@kubb/fabric-core/parsers/typescript";
|
|
9
9
|
import { createReactGenerator } from "@kubb/plugin-oas/generators";
|
|
10
10
|
import { useOas, useOperationManager, useSchemaManager } from "@kubb/plugin-oas/hooks";
|
|
@@ -26,37 +26,37 @@ function stringify(value) {
|
|
|
26
26
|
}
|
|
27
27
|
//#endregion
|
|
28
28
|
//#region src/generators/typeGenerator.tsx
|
|
29
|
-
function printCombinedSchema({ name, schemas,
|
|
29
|
+
function printCombinedSchema({ name, schemas, driver }) {
|
|
30
30
|
const properties = {};
|
|
31
31
|
if (schemas.response) properties["response"] = createUnionDeclaration({ nodes: schemas.responses.map((res) => {
|
|
32
|
-
return createTypeReferenceNode(createIdentifier(
|
|
32
|
+
return createTypeReferenceNode(createIdentifier(driver.resolveName({
|
|
33
33
|
name: res.name,
|
|
34
34
|
pluginName: pluginTsName,
|
|
35
35
|
type: "function"
|
|
36
36
|
})), void 0);
|
|
37
37
|
}) });
|
|
38
|
-
if (schemas.request) properties["request"] = createTypeReferenceNode(createIdentifier(
|
|
38
|
+
if (schemas.request) properties["request"] = createTypeReferenceNode(createIdentifier(driver.resolveName({
|
|
39
39
|
name: schemas.request.name,
|
|
40
40
|
pluginName: pluginTsName,
|
|
41
41
|
type: "function"
|
|
42
42
|
})), void 0);
|
|
43
|
-
if (schemas.pathParams) properties["pathParams"] = createTypeReferenceNode(createIdentifier(
|
|
43
|
+
if (schemas.pathParams) properties["pathParams"] = createTypeReferenceNode(createIdentifier(driver.resolveName({
|
|
44
44
|
name: schemas.pathParams.name,
|
|
45
45
|
pluginName: pluginTsName,
|
|
46
46
|
type: "function"
|
|
47
47
|
})), void 0);
|
|
48
|
-
if (schemas.queryParams) properties["queryParams"] = createTypeReferenceNode(createIdentifier(
|
|
48
|
+
if (schemas.queryParams) properties["queryParams"] = createTypeReferenceNode(createIdentifier(driver.resolveName({
|
|
49
49
|
name: schemas.queryParams.name,
|
|
50
50
|
pluginName: pluginTsName,
|
|
51
51
|
type: "function"
|
|
52
52
|
})), void 0);
|
|
53
|
-
if (schemas.headerParams) properties["headerParams"] = createTypeReferenceNode(createIdentifier(
|
|
53
|
+
if (schemas.headerParams) properties["headerParams"] = createTypeReferenceNode(createIdentifier(driver.resolveName({
|
|
54
54
|
name: schemas.headerParams.name,
|
|
55
55
|
pluginName: pluginTsName,
|
|
56
56
|
type: "function"
|
|
57
57
|
})), void 0);
|
|
58
58
|
if (schemas.errors) properties["errors"] = createUnionDeclaration({ nodes: schemas.errors.map((error) => {
|
|
59
|
-
return createTypeReferenceNode(createIdentifier(
|
|
59
|
+
return createTypeReferenceNode(createIdentifier(driver.resolveName({
|
|
60
60
|
name: error.name,
|
|
61
61
|
pluginName: pluginTsName,
|
|
62
62
|
type: "function"
|
|
@@ -75,8 +75,8 @@ function printCombinedSchema({ name, schemas, pluginManager }) {
|
|
|
75
75
|
modifiers: [modifiers.export]
|
|
76
76
|
}));
|
|
77
77
|
}
|
|
78
|
-
function printRequestSchema({ baseName, operation, schemas,
|
|
79
|
-
const name =
|
|
78
|
+
function printRequestSchema({ baseName, operation, schemas, driver }) {
|
|
79
|
+
const name = driver.resolveName({
|
|
80
80
|
name: `${baseName} Request`,
|
|
81
81
|
pluginName: pluginTsName,
|
|
82
82
|
type: "type"
|
|
@@ -84,7 +84,7 @@ function printRequestSchema({ baseName, operation, schemas, pluginManager }) {
|
|
|
84
84
|
const results = [];
|
|
85
85
|
const dataRequestProperties = [];
|
|
86
86
|
if (schemas.request) {
|
|
87
|
-
const identifier =
|
|
87
|
+
const identifier = driver.resolveName({
|
|
88
88
|
name: schemas.request.name,
|
|
89
89
|
pluginName: pluginTsName,
|
|
90
90
|
type: "type"
|
|
@@ -100,7 +100,7 @@ function printRequestSchema({ baseName, operation, schemas, pluginManager }) {
|
|
|
100
100
|
type: keywordTypeNodes.never
|
|
101
101
|
}));
|
|
102
102
|
if (schemas.pathParams) {
|
|
103
|
-
const identifier =
|
|
103
|
+
const identifier = driver.resolveName({
|
|
104
104
|
name: schemas.pathParams.name,
|
|
105
105
|
pluginName: pluginTsName,
|
|
106
106
|
type: "type"
|
|
@@ -115,7 +115,7 @@ function printRequestSchema({ baseName, operation, schemas, pluginManager }) {
|
|
|
115
115
|
type: keywordTypeNodes.never
|
|
116
116
|
}));
|
|
117
117
|
if (schemas.queryParams) {
|
|
118
|
-
const identifier =
|
|
118
|
+
const identifier = driver.resolveName({
|
|
119
119
|
name: schemas.queryParams.name,
|
|
120
120
|
pluginName: pluginTsName,
|
|
121
121
|
type: "type"
|
|
@@ -131,7 +131,7 @@ function printRequestSchema({ baseName, operation, schemas, pluginManager }) {
|
|
|
131
131
|
type: keywordTypeNodes.never
|
|
132
132
|
}));
|
|
133
133
|
if (schemas.headerParams) {
|
|
134
|
-
const identifier =
|
|
134
|
+
const identifier = driver.resolveName({
|
|
135
135
|
name: schemas.headerParams.name,
|
|
136
136
|
pluginName: pluginTsName,
|
|
137
137
|
type: "type"
|
|
@@ -158,16 +158,16 @@ function printRequestSchema({ baseName, operation, schemas, pluginManager }) {
|
|
|
158
158
|
results.push(safePrint(dataRequestNode));
|
|
159
159
|
return results.join("\n\n");
|
|
160
160
|
}
|
|
161
|
-
function printResponseSchema({ baseName, schemas,
|
|
161
|
+
function printResponseSchema({ baseName, schemas, driver, unknownType }) {
|
|
162
162
|
const results = [];
|
|
163
|
-
const name =
|
|
163
|
+
const name = driver.resolveName({
|
|
164
164
|
name: `${baseName} ResponseData`,
|
|
165
165
|
pluginName: pluginTsName,
|
|
166
166
|
type: "type"
|
|
167
167
|
});
|
|
168
168
|
if (schemas.responses && schemas.responses.length > 0) {
|
|
169
169
|
const responsesProperties = schemas.responses.map((res) => {
|
|
170
|
-
const identifier =
|
|
170
|
+
const identifier = driver.resolveName({
|
|
171
171
|
name: res.name,
|
|
172
172
|
pluginName: pluginTsName,
|
|
173
173
|
type: "type"
|
|
@@ -204,7 +204,7 @@ const typeGenerator$1 = createReactGenerator({
|
|
|
204
204
|
Operation({ operation, generator, plugin }) {
|
|
205
205
|
const { options, options: { enumType, enumKeyCasing, syntaxType, optionalType, arrayType, unknownType, paramsCasing } } = plugin;
|
|
206
206
|
const mode = useMode();
|
|
207
|
-
const
|
|
207
|
+
const driver = usePluginDriver();
|
|
208
208
|
const oas = useOas();
|
|
209
209
|
const { getSchemas, getFile, getName, getGroup } = useOperationManager(generator);
|
|
210
210
|
const schemaManager = useSchemaManager();
|
|
@@ -219,7 +219,7 @@ const typeGenerator$1 = createReactGenerator({
|
|
|
219
219
|
oas,
|
|
220
220
|
events: generator.context.events,
|
|
221
221
|
plugin,
|
|
222
|
-
|
|
222
|
+
driver,
|
|
223
223
|
mode,
|
|
224
224
|
override: options.override
|
|
225
225
|
});
|
|
@@ -278,7 +278,7 @@ const typeGenerator$1 = createReactGenerator({
|
|
|
278
278
|
banner: getBanner({
|
|
279
279
|
oas,
|
|
280
280
|
output: plugin.options.output,
|
|
281
|
-
config:
|
|
281
|
+
config: driver.config
|
|
282
282
|
}),
|
|
283
283
|
footer: getFooter({
|
|
284
284
|
oas,
|
|
@@ -293,7 +293,7 @@ const typeGenerator$1 = createReactGenerator({
|
|
|
293
293
|
baseName: name,
|
|
294
294
|
operation,
|
|
295
295
|
schemas,
|
|
296
|
-
|
|
296
|
+
driver
|
|
297
297
|
})
|
|
298
298
|
}), /* @__PURE__ */ jsx(File.Source, {
|
|
299
299
|
name: responseName,
|
|
@@ -303,7 +303,7 @@ const typeGenerator$1 = createReactGenerator({
|
|
|
303
303
|
children: printResponseSchema({
|
|
304
304
|
baseName: name,
|
|
305
305
|
schemas,
|
|
306
|
-
|
|
306
|
+
driver,
|
|
307
307
|
unknownType
|
|
308
308
|
})
|
|
309
309
|
})] }) : /* @__PURE__ */ jsx(File.Source, {
|
|
@@ -314,7 +314,7 @@ const typeGenerator$1 = createReactGenerator({
|
|
|
314
314
|
children: printCombinedSchema({
|
|
315
315
|
name: combinedSchemaName,
|
|
316
316
|
schemas,
|
|
317
|
-
|
|
317
|
+
driver
|
|
318
318
|
})
|
|
319
319
|
})]
|
|
320
320
|
});
|
|
@@ -323,7 +323,7 @@ const typeGenerator$1 = createReactGenerator({
|
|
|
323
323
|
const { options: { enumType, enumKeyCasing, syntaxType, optionalType, arrayType, output } } = plugin;
|
|
324
324
|
const mode = useMode();
|
|
325
325
|
const oas = useOas();
|
|
326
|
-
const
|
|
326
|
+
const driver = usePluginDriver();
|
|
327
327
|
const { getName, getFile } = useSchemaManager();
|
|
328
328
|
const imports = getImports(schema.tree);
|
|
329
329
|
const schemaFromTree = schema.tree.find((item) => item.keyword === schemaKeywords.schema);
|
|
@@ -341,7 +341,7 @@ const typeGenerator$1 = createReactGenerator({
|
|
|
341
341
|
banner: getBanner({
|
|
342
342
|
oas,
|
|
343
343
|
output,
|
|
344
|
-
config:
|
|
344
|
+
config: driver.config
|
|
345
345
|
}),
|
|
346
346
|
footer: getFooter({
|
|
347
347
|
oas,
|
|
@@ -869,7 +869,7 @@ function buildResponseUnionSchemaNode({ node, resolveName }) {
|
|
|
869
869
|
}
|
|
870
870
|
//#endregion
|
|
871
871
|
//#region src/generators/v2/typeGenerator.tsx
|
|
872
|
-
const typeGenerator =
|
|
872
|
+
const typeGenerator = createGenerator({
|
|
873
873
|
name: "typescript",
|
|
874
874
|
type: "react",
|
|
875
875
|
Operation({ node, adapter, options }) {
|
|
@@ -1073,7 +1073,7 @@ const typeGenerator = defineGenerator({
|
|
|
1073
1073
|
//#endregion
|
|
1074
1074
|
//#region src/plugin.ts
|
|
1075
1075
|
const pluginTsName = "plugin-ts";
|
|
1076
|
-
const pluginTs =
|
|
1076
|
+
const pluginTs = createPlugin((options) => {
|
|
1077
1077
|
const { output = {
|
|
1078
1078
|
path: "types",
|
|
1079
1079
|
barrelType: "named"
|
|
@@ -1122,7 +1122,7 @@ const pluginTs = definePlugin((options) => {
|
|
|
1122
1122
|
return resolvedName;
|
|
1123
1123
|
},
|
|
1124
1124
|
async install() {
|
|
1125
|
-
const { config, fabric, plugin, adapter, rootNode,
|
|
1125
|
+
const { config, fabric, plugin, adapter, rootNode, driver, openInStudio } = this;
|
|
1126
1126
|
const root = path.resolve(config.root, config.output.path);
|
|
1127
1127
|
const mode = getMode(path.resolve(root, output.path));
|
|
1128
1128
|
if (adapter) {
|
|
@@ -1145,7 +1145,7 @@ const pluginTs = definePlugin((options) => {
|
|
|
1145
1145
|
fabric,
|
|
1146
1146
|
Component: generator.Schema,
|
|
1147
1147
|
plugin,
|
|
1148
|
-
|
|
1148
|
+
driver,
|
|
1149
1149
|
mode,
|
|
1150
1150
|
version: generator.version
|
|
1151
1151
|
});
|
|
@@ -1170,7 +1170,7 @@ const pluginTs = definePlugin((options) => {
|
|
|
1170
1170
|
fabric,
|
|
1171
1171
|
Component: generator.Operation,
|
|
1172
1172
|
plugin,
|
|
1173
|
-
|
|
1173
|
+
driver,
|
|
1174
1174
|
mode,
|
|
1175
1175
|
version: generator.version
|
|
1176
1176
|
});
|
|
@@ -1192,7 +1192,7 @@ const pluginTs = definePlugin((options) => {
|
|
|
1192
1192
|
const schemaFiles = await new SchemaGenerator(this.plugin.options, {
|
|
1193
1193
|
fabric: this.fabric,
|
|
1194
1194
|
oas,
|
|
1195
|
-
|
|
1195
|
+
driver: this.driver,
|
|
1196
1196
|
events: this.events,
|
|
1197
1197
|
plugin: this.plugin,
|
|
1198
1198
|
contentType,
|
|
@@ -1205,7 +1205,7 @@ const pluginTs = definePlugin((options) => {
|
|
|
1205
1205
|
const operationFiles = await new OperationGenerator(this.plugin.options, {
|
|
1206
1206
|
fabric: this.fabric,
|
|
1207
1207
|
oas,
|
|
1208
|
-
|
|
1208
|
+
driver: this.driver,
|
|
1209
1209
|
events: this.events,
|
|
1210
1210
|
plugin: this.plugin,
|
|
1211
1211
|
contentType,
|
|
@@ -1229,4 +1229,4 @@ const pluginTs = definePlugin((options) => {
|
|
|
1229
1229
|
//#endregion
|
|
1230
1230
|
export { typeGenerator$1 as i, pluginTsName as n, typeGenerator as r, pluginTs as t };
|
|
1231
1231
|
|
|
1232
|
-
//# sourceMappingURL=plugin-
|
|
1232
|
+
//# sourceMappingURL=plugin-D5NGPj0v.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-D5NGPj0v.js","names":["factory.createUnionDeclaration","factory.createTypeReferenceNode","factory.createIdentifier","factory.createTypeAliasDeclaration","factory.createTypeLiteralNode","factory.createPropertySignature","factory.createIndexedAccessTypeNode","factory.createTypeOperatorNode","typeGenerator","applyParamsCasing","Type","factory.createLiteralTypeNode","factory.createTrue","factory.createFalse","factory.createPrefixUnaryExpression","factory.createNumericLiteral","factory.createStringLiteral","factory.createTypeReferenceNode","factory.createIdentifier","factory.createOptionalTypeNode","factory.createRestTypeNode","factory.createArrayTypeNode","factory.createTupleTypeNode","factory.createUnionDeclaration","factory.createIndexSignature","factory.createUrlTemplateType","factory.createIntersectionDeclaration","factory.createTypeLiteralNode","factory.createArrayDeclaration","factory.createPropertySignature","factory.appendJSDocToNode","factory.createTypeDeclaration","factory.createOmitDeclaration","factory.createEnumDeclaration","typeGenerator","typeGeneratorV2"],"sources":["../../../internals/utils/src/object.ts","../src/generators/typeGenerator.tsx","../src/constants.ts","../src/printer.ts","../src/components/v2/Enum.tsx","../src/components/v2/Type.tsx","../src/generators/v2/utils.ts","../src/generators/v2/typeGenerator.tsx","../src/plugin.ts"],"sourcesContent":["import { trimQuotes } from './string.ts'\n\n/**\n * Serializes a primitive value to a JSON string literal, stripping any surrounding quote characters first.\n *\n * @example\n * stringify('hello') // '\"hello\"'\n * stringify('\"hello\"') // '\"hello\"'\n */\nexport function stringify(value: string | number | boolean | undefined): string {\n if (value === undefined || value === null) return '\"\"'\n return JSON.stringify(trimQuotes(value.toString()))\n}\n\n/**\n * Converts a plain object into a multiline key-value string suitable for embedding in generated code.\n * Nested objects are recursively stringified with indentation.\n *\n * @example\n * stringifyObject({ foo: 'bar', nested: { a: 1 } })\n * // 'foo: bar,\\nnested: {\\n a: 1\\n }'\n */\nexport function stringifyObject(value: Record<string, unknown>): string {\n const items = Object.entries(value)\n .map(([key, val]) => {\n if (val !== null && typeof val === 'object') {\n return `${key}: {\\n ${stringifyObject(val as Record<string, unknown>)}\\n }`\n }\n return `${key}: ${val}`\n })\n .filter(Boolean)\n return items.join(',\\n')\n}\n\n/**\n * Serializes plugin options for safe JSON transport.\n * Strips functions, symbols, and `undefined` values recursively.\n */\nexport function serializePluginOptions<TOptions extends object>(options: TOptions): TOptions {\n if (options === null || options === undefined) return {} as TOptions\n if (typeof options !== 'object') return options\n if (Array.isArray(options)) return options.map(serializePluginOptions) as unknown as TOptions\n\n const serialized: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(options)) {\n if (typeof value === 'function' || typeof value === 'symbol' || value === undefined) continue\n serialized[key] = value !== null && typeof value === 'object' ? serializePluginOptions(value as object) : value\n }\n return serialized as TOptions\n}\n\n/**\n * Converts a dot-notation path or string array into an optional-chaining accessor expression.\n *\n * @example\n * getNestedAccessor('pagination.next.id', 'lastPage')\n * // → \"lastPage?.['pagination']?.['next']?.['id']\"\n */\nexport function getNestedAccessor(param: string | string[], accessor: string): string | undefined {\n const parts = Array.isArray(param) ? param : param.split('.')\n if (parts.length === 0 || (parts.length === 1 && parts[0] === '')) return undefined\n return `${accessor}?.['${`${parts.join(\"']?.['\")}']`}`\n}\n","import { pascalCase } from '@internals/utils'\nimport type { PluginDriver } from '@kubb/core'\nimport { useMode, usePluginDriver } from '@kubb/core/hooks'\nimport { safePrint } from '@kubb/fabric-core/parsers/typescript'\nimport type { Operation } from '@kubb/oas'\nimport { isKeyword, type OperationSchemas, type OperationSchema as OperationSchemaType, SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'\nimport { createReactGenerator } from '@kubb/plugin-oas/generators'\nimport { useOas, useOperationManager, useSchemaManager } from '@kubb/plugin-oas/hooks'\nimport { applyParamsCasing, getBanner, getFooter, getImports, isParameterSchema } from '@kubb/plugin-oas/utils'\nimport { File } from '@kubb/react-fabric'\nimport ts from 'typescript'\nimport { Type } from '../components'\nimport * as factory from '../factory.ts'\nimport { createUrlTemplateType, getUnknownType, keywordTypeNodes } from '../factory.ts'\nimport { pluginTsName } from '../plugin.ts'\nimport type { PluginTs } from '../types'\n\nfunction printCombinedSchema({ name, schemas, driver }: { name: string; schemas: OperationSchemas; driver: PluginDriver }): string {\n const properties: Record<string, ts.TypeNode> = {}\n\n if (schemas.response) {\n properties['response'] = factory.createUnionDeclaration({\n nodes: schemas.responses.map((res) => {\n const identifier = driver.resolveName({\n name: res.name,\n pluginName: pluginTsName,\n type: 'function',\n })\n\n return factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }),\n })!\n }\n\n if (schemas.request) {\n const identifier = driver.resolveName({\n name: schemas.request.name,\n pluginName: pluginTsName,\n type: 'function',\n })\n properties['request'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.pathParams) {\n const identifier = driver.resolveName({\n name: schemas.pathParams.name,\n pluginName: pluginTsName,\n type: 'function',\n })\n properties['pathParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.queryParams) {\n const identifier = driver.resolveName({\n name: schemas.queryParams.name,\n pluginName: pluginTsName,\n type: 'function',\n })\n properties['queryParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.headerParams) {\n const identifier = driver.resolveName({\n name: schemas.headerParams.name,\n pluginName: pluginTsName,\n type: 'function',\n })\n properties['headerParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.errors) {\n properties['errors'] = factory.createUnionDeclaration({\n nodes: schemas.errors.map((error) => {\n const identifier = driver.resolveName({\n name: error.name,\n pluginName: pluginTsName,\n type: 'function',\n })\n\n return factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }),\n })!\n }\n\n const namespaceNode = factory.createTypeAliasDeclaration({\n name,\n type: factory.createTypeLiteralNode(\n Object.keys(properties)\n .map((key) => {\n const type = properties[key]\n if (!type) {\n return undefined\n }\n\n return factory.createPropertySignature({\n name: pascalCase(key),\n type,\n })\n })\n .filter(Boolean),\n ),\n modifiers: [factory.modifiers.export],\n })\n\n return safePrint(namespaceNode)\n}\n\nfunction printRequestSchema({\n baseName,\n operation,\n schemas,\n driver,\n}: {\n baseName: string\n operation: Operation\n schemas: OperationSchemas\n driver: PluginDriver\n}): string {\n const name = driver.resolveName({\n name: `${baseName} Request`,\n pluginName: pluginTsName,\n type: 'type',\n })\n\n const results: string[] = []\n\n // Generate DataRequest type\n const dataRequestProperties: ts.PropertySignature[] = []\n\n if (schemas.request) {\n const identifier = driver.resolveName({\n name: schemas.request.name,\n pluginName: pluginTsName,\n type: 'type',\n })\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'data',\n questionToken: true,\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n }),\n )\n } else {\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'data',\n questionToken: true,\n type: keywordTypeNodes.never,\n }),\n )\n }\n\n // Add pathParams property\n if (schemas.pathParams) {\n const identifier = driver.resolveName({\n name: schemas.pathParams.name,\n pluginName: pluginTsName,\n type: 'type',\n })\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'pathParams',\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n }),\n )\n } else {\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'pathParams',\n questionToken: true,\n type: keywordTypeNodes.never,\n }),\n )\n }\n\n // Add queryParams property\n if (schemas.queryParams) {\n const identifier = driver.resolveName({\n name: schemas.queryParams.name,\n pluginName: pluginTsName,\n type: 'type',\n })\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'queryParams',\n questionToken: true,\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n }),\n )\n } else {\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'queryParams',\n questionToken: true,\n type: keywordTypeNodes.never,\n }),\n )\n }\n\n // Add headerParams property\n if (schemas.headerParams) {\n const identifier = driver.resolveName({\n name: schemas.headerParams.name,\n pluginName: pluginTsName,\n type: 'type',\n })\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'headerParams',\n questionToken: true,\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n }),\n )\n } else {\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'headerParams',\n questionToken: true,\n type: keywordTypeNodes.never,\n }),\n )\n }\n\n // Add url property with template literal type\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'url',\n type: createUrlTemplateType(operation.path),\n }),\n )\n\n const dataRequestNode = factory.createTypeAliasDeclaration({\n name,\n type: factory.createTypeLiteralNode(dataRequestProperties),\n modifiers: [factory.modifiers.export],\n })\n\n results.push(safePrint(dataRequestNode))\n\n return results.join('\\n\\n')\n}\n\nfunction printResponseSchema({\n baseName,\n schemas,\n driver,\n unknownType,\n}: {\n baseName: string\n schemas: OperationSchemas\n driver: PluginDriver\n unknownType: PluginTs['resolvedOptions']['unknownType']\n}): string {\n const results: string[] = []\n\n const name = driver.resolveName({\n name: `${baseName} ResponseData`,\n pluginName: pluginTsName,\n type: 'type',\n })\n\n // Generate Responses type (mapping status codes to response types)\n if (schemas.responses && schemas.responses.length > 0) {\n const responsesProperties: ts.PropertySignature[] = schemas.responses.map((res) => {\n const identifier = driver.resolveName({\n name: res.name,\n pluginName: pluginTsName,\n type: 'type',\n })\n\n return factory.createPropertySignature({\n name: res.statusCode?.toString() ?? 'default',\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n })\n })\n\n const responsesNode = factory.createTypeAliasDeclaration({\n name: `${baseName}Responses`,\n type: factory.createTypeLiteralNode(responsesProperties),\n modifiers: [factory.modifiers.export],\n })\n\n results.push(safePrint(responsesNode))\n\n // Generate Response type (union via indexed access)\n const responseNode = factory.createTypeAliasDeclaration({\n name,\n type: factory.createIndexedAccessTypeNode(\n factory.createTypeReferenceNode(factory.createIdentifier(`${baseName}Responses`), undefined),\n factory.createTypeOperatorNode(\n ts.SyntaxKind.KeyOfKeyword,\n factory.createTypeReferenceNode(factory.createIdentifier(`${baseName}Responses`), undefined),\n ),\n ),\n modifiers: [factory.modifiers.export],\n })\n\n results.push(safePrint(responseNode))\n } else {\n const responseNode = factory.createTypeAliasDeclaration({\n name,\n modifiers: [factory.modifiers.export],\n type: getUnknownType(unknownType),\n })\n\n results.push(safePrint(responseNode))\n }\n\n return results.join('\\n\\n')\n}\n\nexport const typeGenerator = createReactGenerator<PluginTs>({\n name: 'typescript',\n Operation({ operation, generator, plugin }) {\n const {\n options,\n options: { enumType, enumKeyCasing, syntaxType, optionalType, arrayType, unknownType, paramsCasing },\n } = plugin\n\n const mode = useMode()\n const driver = usePluginDriver()\n\n const oas = useOas()\n const { getSchemas, getFile, getName, getGroup } = useOperationManager(generator)\n const schemaManager = useSchemaManager()\n\n const name = getName(operation, { type: 'type', pluginName: pluginTsName })\n\n const file = getFile(operation)\n const schemas = getSchemas(operation)\n const schemaGenerator = new SchemaGenerator(options, {\n fabric: generator.context.fabric,\n oas,\n events: generator.context.events,\n plugin,\n driver,\n mode,\n override: options.override,\n })\n\n const operationSchemas = [schemas.pathParams, schemas.queryParams, schemas.headerParams, schemas.statusCodes, schemas.request, schemas.response]\n .flat()\n .filter(Boolean)\n\n const mapOperationSchema = ({ name, schema, description, keysToOmit, ...options }: OperationSchemaType) => {\n // Apply paramsCasing transformation to pathParams, queryParams, and headerParams (not response)\n const shouldTransform = paramsCasing && isParameterSchema(name)\n const transformedSchema = shouldTransform ? applyParamsCasing(schema, paramsCasing) : schema\n\n const tree = schemaGenerator.parse({ schema: transformedSchema, name, parentName: null })\n const imports = getImports(tree)\n const group = options.operation ? getGroup(options.operation) : undefined\n\n const type = {\n name: schemaManager.getName(name, { type: 'type' }),\n typedName: schemaManager.getName(name, { type: 'type' }),\n file: schemaManager.getFile(options.operationName || name, { group }),\n }\n\n return (\n <>\n {mode === 'split' &&\n imports.map((imp) => (\n <File.Import key={[name, imp.name, imp.path, imp.isTypeOnly].join('-')} root={file.path} path={imp.path} name={imp.name} isTypeOnly />\n ))}\n <Type\n name={type.name}\n typedName={type.typedName}\n description={description}\n tree={tree}\n schema={transformedSchema}\n enumType={enumType}\n enumKeyCasing={enumKeyCasing}\n optionalType={optionalType}\n arrayType={arrayType}\n keysToOmit={keysToOmit}\n syntaxType={syntaxType}\n />\n </>\n )\n }\n\n const responseName = schemaManager.getName(schemas.response.name, {\n type: 'type',\n })\n\n const combinedSchemaName = operation.method === 'get' ? `${name}Query` : `${name}Mutation`\n\n return (\n <File\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={getBanner({ oas, output: plugin.options.output, config: driver.config })}\n footer={getFooter({ oas, output: plugin.options.output })}\n >\n {operationSchemas.map(mapOperationSchema)}\n\n {generator.context.UNSTABLE_NAMING ? (\n <>\n <File.Source name={`${name}Request`} isExportable isIndexable isTypeOnly>\n {printRequestSchema({ baseName: name, operation, schemas, driver })}\n </File.Source>\n <File.Source name={responseName} isExportable isIndexable isTypeOnly>\n {printResponseSchema({ baseName: name, schemas, driver, unknownType })}\n </File.Source>\n </>\n ) : (\n <File.Source name={combinedSchemaName} isExportable isIndexable isTypeOnly>\n {printCombinedSchema({ name: combinedSchemaName, schemas, driver })}\n </File.Source>\n )}\n </File>\n )\n },\n Schema({ schema, plugin }) {\n const {\n options: { enumType, enumKeyCasing, syntaxType, optionalType, arrayType, output },\n } = plugin\n const mode = useMode()\n\n const oas = useOas()\n const driver = usePluginDriver()\n\n const { getName, getFile } = useSchemaManager()\n const imports = getImports(schema.tree)\n const schemaFromTree = schema.tree.find((item) => item.keyword === schemaKeywords.schema)\n\n let typedName = getName(schema.name, { type: 'type' })\n\n if (['asConst', 'asPascalConst'].includes(enumType) && schemaFromTree && isKeyword(schemaFromTree, schemaKeywords.enum)) {\n typedName = typedName += 'Key' //Suffix for avoiding collisions (https://github.com/kubb-labs/kubb/issues/1873)\n }\n\n const type = {\n name: getName(schema.name, { type: 'function' }),\n typedName,\n file: getFile(schema.name),\n }\n\n return (\n <File\n baseName={type.file.baseName}\n path={type.file.path}\n meta={type.file.meta}\n banner={getBanner({ oas, output, config: driver.config })}\n footer={getFooter({ oas, output })}\n >\n {mode === 'split' &&\n imports.map((imp) => (\n <File.Import key={[schema.name, imp.path, imp.isTypeOnly].join('-')} root={type.file.path} path={imp.path} name={imp.name} isTypeOnly />\n ))}\n <Type\n name={type.name}\n typedName={type.typedName}\n description={schema.value.description}\n tree={schema.tree}\n schema={schema.value}\n enumType={enumType}\n enumKeyCasing={enumKeyCasing}\n optionalType={optionalType}\n arrayType={arrayType}\n syntaxType={syntaxType}\n />\n </File>\n )\n },\n})\n","import type { PluginTs } from './types.ts'\n\ntype OptionalType = PluginTs['resolvedOptions']['optionalType']\ntype EnumType = PluginTs['resolvedOptions']['enumType']\n\n/**\n * `optionalType` values that cause a property's type to include `| undefined`.\n */\nexport const OPTIONAL_ADDS_UNDEFINED = new Set<OptionalType>(['undefined', 'questionTokenAndUndefined'])\n\n/**\n * `optionalType` values that render the property key with a `?` token.\n */\nexport const OPTIONAL_ADDS_QUESTION_TOKEN = new Set<OptionalType>(['questionToken', 'questionTokenAndUndefined'])\n\n/**\n * `enumType` values that append a `Key` suffix to the generated enum type alias.\n */\nexport const ENUM_TYPES_WITH_KEY_SUFFIX = new Set<EnumType>(['asConst', 'asPascalConst'])\n\n/**\n * `enumType` values that require a runtime value declaration (object, enum, or literal).\n */\nexport const ENUM_TYPES_WITH_RUNTIME_VALUE = new Set<EnumType | undefined>(['enum', 'asConst', 'asPascalConst', 'constEnum', 'literal', undefined])\n\n/**\n * `enumType` values whose type declaration is type-only (no runtime value emitted for the type alias).\n */\nexport const ENUM_TYPES_WITH_TYPE_ONLY = new Set<EnumType | undefined>(['asConst', 'asPascalConst', 'literal', undefined])\n","import { jsStringEscape, pascalCase, stringify } from '@internals/utils'\nimport { isPlainStringType } from '@kubb/ast'\nimport type { ArraySchemaNode, SchemaNode } from '@kubb/ast/types'\nimport type { PrinterFactoryOptions } from '@kubb/core'\nimport { definePrinter } from '@kubb/core'\nimport type ts from 'typescript'\nimport { ENUM_TYPES_WITH_KEY_SUFFIX, OPTIONAL_ADDS_QUESTION_TOKEN, OPTIONAL_ADDS_UNDEFINED } from './constants.ts'\nimport * as factory from './factory.ts'\nimport type { PluginTs } from './types.ts'\n\ntype TsOptions = {\n /**\n * @default `'questionToken'`\n */\n optionalType: PluginTs['resolvedOptions']['optionalType']\n /**\n * @default `'array'`\n */\n arrayType: PluginTs['resolvedOptions']['arrayType']\n /**\n * @default `'inlineLiteral'`\n */\n enumType: PluginTs['resolvedOptions']['enumType']\n /**\n * Controls whether a `type` alias or `interface` declaration is emitted.\n * @default `'type'`\n */\n syntaxType?: PluginTs['resolvedOptions']['syntaxType']\n /**\n * When set, `printer.print(node)` produces a full `type Name = …` declaration.\n * When omitted, `printer.print(node)` returns the raw type node.\n */\n typeName?: string\n\n /**\n * JSDoc `@description` comment added to the generated type or interface declaration.\n */\n description?: string\n /**\n * Property keys to exclude from the generated type via `Omit<Type, Keys>`.\n * Forces type-alias syntax even when `syntaxType` is `'interface'`.\n */\n keysToOmit?: Array<string>\n}\n\n/**\n * TypeScript printer factory options: maps `SchemaNode` → `ts.TypeNode` (raw) or `ts.Node` (full declaration).\n */\ntype TsPrinter = PrinterFactoryOptions<'typescript', TsOptions, ts.TypeNode, ts.Node>\n\n/**\n * Converts a primitive const value to a TypeScript literal type node.\n * Handles negative numbers via a prefix unary expression.\n */\nfunction constToTypeNode(value: string | number | boolean, format: 'string' | 'number' | 'boolean'): ts.TypeNode | undefined {\n if (format === 'boolean') {\n return factory.createLiteralTypeNode(value === true ? factory.createTrue() : factory.createFalse())\n }\n if (format === 'number' && typeof value === 'number') {\n if (value < 0) {\n return factory.createLiteralTypeNode(factory.createPrefixUnaryExpression(factory.SyntaxKind.MinusToken, factory.createNumericLiteral(Math.abs(value))))\n }\n return factory.createLiteralTypeNode(factory.createNumericLiteral(value))\n }\n return factory.createLiteralTypeNode(factory.createStringLiteral(String(value)))\n}\n\n/**\n * Returns a `Date` reference type node when `representation` is `'date'`, otherwise falls back to `string`.\n */\nfunction dateOrStringNode(node: { representation?: string }): ts.TypeNode {\n return node.representation === 'date' ? factory.createTypeReferenceNode(factory.createIdentifier('Date')) : factory.keywordTypeNodes.string\n}\n\n/**\n * Maps an array of `SchemaNode`s through the printer, filtering out `null` and `undefined` results.\n */\nfunction buildMemberNodes(members: Array<SchemaNode> | undefined, print: (node: SchemaNode) => ts.TypeNode | null | undefined): Array<ts.TypeNode> {\n return (members ?? []).map(print).filter(Boolean)\n}\n\n/**\n * Builds a TypeScript tuple type node from an array schema's `items`,\n * applying min/max slice and optional/rest element rules.\n */\nfunction buildTupleNode(node: ArraySchemaNode, print: (node: SchemaNode) => ts.TypeNode | null | undefined): ts.TypeNode | undefined {\n let items = (node.items ?? []).map(print).filter(Boolean)\n\n const restNode = node.rest ? (print(node.rest) ?? undefined) : undefined\n const { min, max } = node\n\n if (max !== undefined) {\n items = items.slice(0, max)\n if (items.length < max && restNode) {\n items = [...items, ...Array(max - items.length).fill(restNode)]\n }\n }\n\n if (min !== undefined) {\n items = items.map((item, i) => (i >= min ? factory.createOptionalTypeNode(item) : item))\n }\n\n if (max === undefined && restNode) {\n items.push(factory.createRestTypeNode(factory.createArrayTypeNode(restNode)))\n }\n\n return factory.createTupleTypeNode(items)\n}\n\n/**\n * Applies `nullable` and optional/nullish `| undefined` union modifiers to a property's resolved base type.\n */\nfunction buildPropertyType(schema: SchemaNode, baseType: ts.TypeNode, optionalType: TsOptions['optionalType']): ts.TypeNode {\n const addsUndefined = OPTIONAL_ADDS_UNDEFINED.has(optionalType)\n\n let type = baseType\n\n if (schema.nullable) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.null] })\n }\n\n if ((schema.nullish || schema.optional) && addsUndefined) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] })\n }\n\n return type\n}\n\n/**\n * Collects JSDoc annotation strings (description, deprecated, min/max, pattern, default, example, type) for a schema node.\n */\nfunction buildPropertyJSDocComments(schema: SchemaNode): Array<string | undefined> {\n return [\n 'description' in schema && schema.description ? `@description ${jsStringEscape(schema.description)}` : undefined,\n 'deprecated' in schema && schema.deprecated ? '@deprecated' : undefined,\n 'min' in schema && schema.min !== undefined ? `@minLength ${schema.min}` : undefined,\n 'max' in schema && schema.max !== undefined ? `@maxLength ${schema.max}` : undefined,\n 'pattern' in schema && schema.pattern ? `@pattern ${schema.pattern}` : undefined,\n 'default' in schema && schema.default !== undefined\n ? `@default ${'primitive' in schema && schema.primitive === 'string' ? stringify(schema.default as string) : schema.default}`\n : undefined,\n 'example' in schema && schema.example !== undefined ? `@example ${schema.example}` : undefined,\n 'primitive' in schema && schema.primitive\n ? [`@type ${schema.primitive || 'unknown'}`, 'optional' in schema && schema.optional ? ' | undefined' : undefined].filter(Boolean).join('')\n : undefined,\n ]\n}\n\n/**\n * Creates TypeScript index signatures for `additionalProperties` and `patternProperties` on an object schema node.\n */\nfunction buildIndexSignatures(\n node: { additionalProperties?: SchemaNode | boolean; patternProperties?: Record<string, SchemaNode> },\n propertyCount: number,\n print: (node: SchemaNode) => ts.TypeNode | null | undefined,\n): Array<ts.TypeElement> {\n const elements: Array<ts.TypeElement> = []\n\n if (node.additionalProperties && node.additionalProperties !== true) {\n const additionalType = print(node.additionalProperties) ?? factory.keywordTypeNodes.unknown\n\n elements.push(factory.createIndexSignature(propertyCount > 0 ? factory.keywordTypeNodes.unknown : additionalType))\n } else if (node.additionalProperties === true) {\n elements.push(factory.createIndexSignature(factory.keywordTypeNodes.unknown))\n }\n\n if (node.patternProperties) {\n const first = Object.values(node.patternProperties)[0]\n if (first) {\n let patternType = print(first) ?? factory.keywordTypeNodes.unknown\n\n if (first.nullable) {\n patternType = factory.createUnionDeclaration({ nodes: [patternType, factory.keywordTypeNodes.null] })\n }\n elements.push(factory.createIndexSignature(patternType))\n }\n }\n\n return elements\n}\n\n/**\n * TypeScript type printer built with `definePrinter`.\n *\n * Converts a `SchemaNode` AST node into a TypeScript AST node:\n * - **`printer.print(node)`** — when `options.typeName` is set, returns a full\n * `type Name = …` or `interface Name { … }` declaration (`ts.Node`).\n * Without `typeName`, returns the raw `ts.TypeNode` for the schema.\n *\n * Dispatches on `node.type` to the appropriate handler in `nodes`. Options are closed\n * over per printer instance, so each call to `printerTs(options)` produces an independent printer.\n *\n * @example Raw type node (no `typeName`)\n * ```ts\n * const printer = printerTs({ optionalType: 'questionToken', arrayType: 'array', enumType: 'inlineLiteral' })\n * const typeNode = printer.print(schemaNode) // ts.TypeNode\n * ```\n *\n * @example Full declaration (with `typeName`)\n * ```ts\n * const printer = printerTs({ optionalType: 'questionToken', arrayType: 'array', enumType: 'inlineLiteral', typeName: 'MyType' })\n * const declaration = printer.print(schemaNode) // ts.TypeAliasDeclaration | ts.InterfaceDeclaration\n * ```\n */\nexport const printerTs = definePrinter<TsPrinter>((options) => {\n const addsUndefined = OPTIONAL_ADDS_UNDEFINED.has(options.optionalType)\n\n return {\n name: 'typescript',\n options,\n nodes: {\n any: () => factory.keywordTypeNodes.any,\n unknown: () => factory.keywordTypeNodes.unknown,\n void: () => factory.keywordTypeNodes.void,\n never: () => factory.keywordTypeNodes.never,\n boolean: () => factory.keywordTypeNodes.boolean,\n null: () => factory.keywordTypeNodes.null,\n blob: () => factory.createTypeReferenceNode('Blob', []),\n string: () => factory.keywordTypeNodes.string,\n uuid: () => factory.keywordTypeNodes.string,\n email: () => factory.keywordTypeNodes.string,\n url: (node) => {\n if (node.path) {\n return factory.createUrlTemplateType(node.path)\n }\n return factory.keywordTypeNodes.string\n },\n datetime: () => factory.keywordTypeNodes.string,\n number: () => factory.keywordTypeNodes.number,\n integer: () => factory.keywordTypeNodes.number,\n bigint: () => factory.keywordTypeNodes.bigint,\n date: dateOrStringNode,\n time: dateOrStringNode,\n ref(node) {\n if (!node.name) {\n return undefined\n }\n return factory.createTypeReferenceNode(node.name, undefined)\n },\n enum(node) {\n const values = node.namedEnumValues?.map((v) => v.value) ?? node.enumValues ?? []\n\n if (this.options.enumType === 'inlineLiteral' || !node.name) {\n const literalNodes = values\n .filter((v): v is string | number | boolean => v !== null)\n .map((value) => constToTypeNode(value, typeof value as 'string' | 'number' | 'boolean'))\n .filter(Boolean)\n\n return factory.createUnionDeclaration({ withParentheses: true, nodes: literalNodes }) ?? undefined\n }\n\n const resolvedName = pascalCase(node.name)\n const typeName = ENUM_TYPES_WITH_KEY_SUFFIX.has(this.options.enumType) ? `${resolvedName}Key` : resolvedName\n\n return factory.createTypeReferenceNode(typeName, undefined)\n },\n union(node) {\n const members = node.members ?? []\n\n const hasStringLiteral = members.some((m) => m.type === 'enum' && m.enumType === 'string')\n const hasPlainString = members.some((m) => isPlainStringType(m))\n\n if (hasStringLiteral && hasPlainString) {\n const memberNodes = members\n .map((m) => {\n if (isPlainStringType(m)) {\n return factory.createIntersectionDeclaration({\n nodes: [factory.keywordTypeNodes.string, factory.createTypeLiteralNode([])],\n withParentheses: true,\n })\n }\n\n return this.print(m)\n })\n .filter(Boolean)\n\n return factory.createUnionDeclaration({ withParentheses: true, nodes: memberNodes }) ?? undefined\n }\n\n return factory.createUnionDeclaration({ withParentheses: true, nodes: buildMemberNodes(members, this.print) }) ?? undefined\n },\n intersection(node) {\n return factory.createIntersectionDeclaration({ withParentheses: true, nodes: buildMemberNodes(node.members, this.print) }) ?? undefined\n },\n array(node) {\n const itemNodes = (node.items ?? []).map((item) => this.print(item)).filter(Boolean)\n\n return factory.createArrayDeclaration({ nodes: itemNodes, arrayType: this.options.arrayType }) ?? undefined\n },\n tuple(node) {\n return buildTupleNode(node, this.print)\n },\n object(node) {\n const { print, options } = this\n const addsQuestionToken = OPTIONAL_ADDS_QUESTION_TOKEN.has(options.optionalType)\n\n const propertyNodes: Array<ts.TypeElement> = node.properties.map((prop) => {\n const baseType = print(prop.schema) ?? factory.keywordTypeNodes.unknown\n const type = buildPropertyType(prop.schema, baseType, options.optionalType)\n\n const propertyNode = factory.createPropertySignature({\n questionToken: prop.schema.optional || prop.schema.nullish ? addsQuestionToken : false,\n name: prop.name,\n type,\n readOnly: prop.schema.readOnly,\n })\n\n return factory.appendJSDocToNode({ node: propertyNode, comments: buildPropertyJSDocComments(prop.schema) })\n })\n\n const allElements = [...propertyNodes, ...buildIndexSignatures(node, propertyNodes.length, print)]\n\n if (!allElements.length) {\n return factory.keywordTypeNodes.object\n }\n\n return factory.createTypeLiteralNode(allElements)\n },\n },\n print(node) {\n let type = this.print(node)\n\n if (!type) {\n return undefined\n }\n\n // Apply top-level nullable / optional union modifiers.\n if (node.nullable) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.null] })\n }\n\n if ((node.nullish || node.optional) && addsUndefined) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] })\n }\n\n // Without typeName, return the type node as-is (no declaration wrapping).\n const { typeName, syntaxType = 'type', description, keysToOmit } = this.options\n if (!typeName) {\n return type\n }\n\n const useTypeGeneration = syntaxType === 'type' || type.kind === factory.syntaxKind.union || !!keysToOmit?.length\n\n return factory.createTypeDeclaration({\n name: typeName,\n isExportable: true,\n type: keysToOmit?.length\n ? factory.createOmitDeclaration({\n keys: keysToOmit,\n type,\n nonNullable: true,\n })\n : type,\n syntax: useTypeGeneration ? 'type' : 'interface',\n comments: [\n node?.title ? jsStringEscape(node.title) : undefined,\n description ? `@description ${jsStringEscape(description)}` : undefined,\n node?.deprecated ? '@deprecated' : undefined,\n node && 'min' in node && node.min !== undefined ? `@minLength ${node.min}` : undefined,\n node && 'max' in node && node.max !== undefined ? `@maxLength ${node.max}` : undefined,\n node && 'pattern' in node && node.pattern ? `@pattern ${node.pattern}` : undefined,\n node?.default ? `@default ${node.default}` : undefined,\n node?.example ? `@example ${node.example}` : undefined,\n ],\n })\n },\n }\n})\n","import { camelCase, pascalCase, trimQuotes } from '@internals/utils'\nimport type { EnumSchemaNode } from '@kubb/ast/types'\nimport { safePrint } from '@kubb/fabric-core/parsers/typescript'\nimport { File } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\nimport { ENUM_TYPES_WITH_KEY_SUFFIX, ENUM_TYPES_WITH_RUNTIME_VALUE, ENUM_TYPES_WITH_TYPE_ONLY } from '../../constants.ts'\nimport * as factory from '../../factory.ts'\nimport type { PluginTs } from '../../types.ts'\n\ntype Props = {\n node: EnumSchemaNode\n enumType: PluginTs['resolvedOptions']['enumType']\n enumKeyCasing: PluginTs['resolvedOptions']['enumKeyCasing']\n}\n\n/**\n * Resolves the runtime identifier name and the TypeScript type name for an enum schema node.\n *\n * The raw `node.name` may be a YAML key such as `\"enumNames.Type\"` which is not a\n * valid TypeScript identifier. `pascalCase` normalizes it unconditionally; for inline enum\n * properties the adapter already emits a PascalCase+suffix name so `pascalCase` is a no-op.\n */\nexport function getEnumNames(node: EnumSchemaNode, enumType: PluginTs['resolvedOptions']['enumType']): { enumName: string; typeName: string } {\n const resolved = pascalCase(node.name!)\n const enumName = enumType === 'asPascalConst' ? resolved : camelCase(node.name!)\n const typeName = ENUM_TYPES_WITH_KEY_SUFFIX.has(enumType) ? `${resolved}Key` : resolved\n\n return { enumName, typeName }\n}\n\n/**\n * Renders the enum declaration(s) for a single named `EnumSchemaNode`.\n *\n * Depending on `enumType` this may emit:\n * - A runtime object (`asConst` / `asPascalConst`) plus a `typeof` type alias\n * - A `const enum` or plain `enum` declaration (`constEnum` / `enum`)\n * - A union literal type alias (`literal`)\n *\n * The emitted `File.Source` nodes carry the resolved names so that the barrel\n * index picks up the correct export identifiers.\n */\nexport function Enum({ node, enumType, enumKeyCasing }: Props): FabricReactNode {\n const { enumName, typeName } = getEnumNames(node, enumType)\n\n const [nameNode, typeNode] = factory.createEnumDeclaration({\n name: enumName,\n typeName,\n enums: (node.namedEnumValues?.map((v) => [trimQuotes(v.name.toString()), v.value]) ??\n node.enumValues?.filter((v): v is NonNullable<typeof v> => v !== null && v !== undefined).map((v) => [trimQuotes(v.toString()), v]) ??\n []) as unknown as Array<[string, string]>,\n type: enumType,\n enumKeyCasing,\n })\n\n return (\n <>\n {nameNode && (\n <File.Source name={enumName} isExportable isIndexable isTypeOnly={false}>\n {safePrint(nameNode)}\n </File.Source>\n )}\n <File.Source name={typeName} isIndexable isExportable={ENUM_TYPES_WITH_RUNTIME_VALUE.has(enumType)} isTypeOnly={ENUM_TYPES_WITH_TYPE_ONLY.has(enumType)}>\n {safePrint(typeNode)}\n </File.Source>\n </>\n )\n}\n","import { collect } from '@kubb/ast'\nimport type { EnumSchemaNode, SchemaNode } from '@kubb/ast/types'\nimport { safePrint } from '@kubb/fabric-core/parsers/typescript'\nimport { File } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\nimport { printerTs } from '../../printer.ts'\nimport type { PluginTs } from '../../types.ts'\nimport { Enum, getEnumNames } from './Enum.tsx'\n\ntype Props = {\n name: string\n typedName: string\n node: SchemaNode\n optionalType: PluginTs['resolvedOptions']['optionalType']\n arrayType: PluginTs['resolvedOptions']['arrayType']\n enumType: PluginTs['resolvedOptions']['enumType']\n enumKeyCasing: PluginTs['resolvedOptions']['enumKeyCasing']\n syntaxType: PluginTs['resolvedOptions']['syntaxType']\n description?: string\n keysToOmit?: string[]\n}\n\nexport function Type({ name, typedName, node, keysToOmit, optionalType, arrayType, syntaxType, enumType, enumKeyCasing, description }: Props): FabricReactNode {\n const resolvedDescription = description || node?.description\n const enumSchemaNodes = collect<EnumSchemaNode>(node, {\n schema(n): EnumSchemaNode | undefined {\n if (n.type === 'enum' && n.name) return n as EnumSchemaNode\n },\n })\n\n const printer = printerTs({ optionalType, arrayType, enumType, typeName: name, syntaxType, description: resolvedDescription, keysToOmit })\n const typeNode = printer.print(node)\n\n if (!typeNode) {\n return\n }\n\n const enums = [...new Map(enumSchemaNodes.map((n) => [n.name, n])).values()].map((node) => {\n return {\n node,\n ...getEnumNames(node, enumType),\n }\n })\n\n // Skip enum exports when using inlineLiteral\n const shouldExportEnums = enumType !== 'inlineLiteral'\n const shouldExportType = enumType === 'inlineLiteral' || enums.every((item) => item.typeName !== name)\n\n return (\n <>\n {shouldExportEnums && enums.map(({ node }) => <Enum node={node} enumType={enumType} enumKeyCasing={enumKeyCasing} />)}\n {shouldExportType && (\n <File.Source name={typedName} isTypeOnly isExportable isIndexable>\n {safePrint(typeNode)}\n </File.Source>\n )}\n </>\n )\n}\n","import { pascalCase } from '@internals/utils'\nimport { createProperty, createSchema } from '@kubb/ast'\nimport type { OperationNode, ParameterNode, SchemaNode } from '@kubb/ast/types'\n\ntype ResolveName = (opts: { name: string; type: 'type' | 'function' }) => string\n\ntype BuildParamsSchemaOptions = {\n params: Array<ParameterNode>\n operationId: string\n resolveName: ResolveName\n}\n\n/**\n * Builds an `ObjectSchemaNode` for a group of parameters (path/query/header).\n * Each property is a `ref` schema pointing to the individually-resolved parameter type.\n * The ref name includes the parameter location so generated type names follow\n * the `<OperationId><Location><ParamName>` convention.\n */\nexport function buildParamsSchema({ params, operationId, resolveName }: BuildParamsSchemaOptions): SchemaNode {\n return createSchema({\n type: 'object',\n properties: params.map((param) =>\n createProperty({\n name: param.name,\n schema: createSchema({\n type: 'ref',\n name: resolveName({ name: `${operationId} ${pascalCase(param.in)} ${param.name}`, type: 'function' }),\n optional: !param.required,\n }),\n }),\n ),\n })\n}\n\ntype BuildOperationSchemaOptions = {\n node: OperationNode\n resolveName: ResolveName\n}\n\n/**\n * Builds an `ObjectSchemaNode` representing the `<OperationId>RequestConfig` type:\n * - `data` → request body ref (optional) or `never`\n * - `pathParams` → inline object of path param refs, or `never`\n * - `queryParams` → inline object of query param refs (optional), or `never`\n * - `headerParams` → inline object of header param refs (optional), or `never`\n * - `url` → Express-style template literal (plugin-ts extension, handled by printer)\n */\nexport function buildDataSchemaNode({ node, resolveName }: BuildOperationSchemaOptions): SchemaNode {\n const pathParams = node.parameters.filter((p) => p.in === 'path')\n const queryParams = node.parameters.filter((p) => p.in === 'query')\n const headerParams = node.parameters.filter((p) => p.in === 'header')\n\n return createSchema({\n type: 'object',\n properties: [\n createProperty({\n name: 'data',\n schema: node.requestBody\n ? createSchema({\n type: 'ref',\n name: resolveName({ name: `${node.operationId} Data`, type: 'function' }),\n optional: true,\n })\n : createSchema({ type: 'never', optional: true }),\n }),\n createProperty({\n name: 'pathParams',\n schema:\n pathParams.length > 0\n ? buildParamsSchema({ params: pathParams, operationId: node.operationId, resolveName })\n : createSchema({ type: 'never', optional: true }),\n }),\n createProperty({\n name: 'queryParams',\n schema:\n queryParams.length > 0\n ? createSchema({ ...buildParamsSchema({ params: queryParams, operationId: node.operationId, resolveName }), optional: true })\n : createSchema({ type: 'never', optional: true }),\n }),\n createProperty({\n name: 'headerParams',\n schema:\n headerParams.length > 0\n ? createSchema({ ...buildParamsSchema({ params: headerParams, operationId: node.operationId, resolveName }), optional: true })\n : createSchema({ type: 'never', optional: true }),\n }),\n createProperty({\n name: 'url',\n schema: createSchema({ type: 'url', path: node.path }),\n }),\n ],\n })\n}\n\n/**\n * Builds an `ObjectSchemaNode` representing `<OperationId>Responses` — keyed by HTTP status code.\n * Numeric status codes produce unquoted numeric keys (e.g. `200:`).\n */\nexport function buildResponsesSchemaNode({ node, resolveName }: BuildOperationSchemaOptions): SchemaNode | null {\n const responsesWithSchema = node.responses.filter((res) => res.schema)\n\n if (responsesWithSchema.length === 0) {\n return null\n }\n\n return createSchema({\n type: 'object',\n properties: responsesWithSchema.map((res) =>\n createProperty({\n name: String(res.statusCode),\n schema: createSchema({\n type: 'ref',\n name: resolveName({ name: `${node.operationId} Status ${res.statusCode}`, type: 'function' }),\n }),\n }),\n ),\n })\n}\n\n/**\n * Builds a `UnionSchemaNode` representing `<OperationId>Response` — all response types in union format.\n * Returns `null` when the operation has no responses with schemas.\n */\nexport function buildResponseUnionSchemaNode({ node, resolveName }: BuildOperationSchemaOptions): SchemaNode | null {\n const responsesWithSchema = node.responses.filter((res) => res.schema)\n\n if (responsesWithSchema.length === 0) {\n return null\n }\n\n return createSchema({\n type: 'union',\n members: responsesWithSchema.map((res) =>\n createSchema({\n type: 'ref',\n name: resolveName({ name: `${node.operationId} Status ${res.statusCode}`, type: 'function' }),\n }),\n ),\n })\n}\n","import { pascalCase } from '@internals/utils'\nimport { applyParamsCasing } from '@kubb/ast'\nimport type { SchemaNode } from '@kubb/ast/types'\nimport { createGenerator } from '@kubb/core'\nimport { useKubb } from '@kubb/core/hooks'\nimport { File } from '@kubb/react-fabric'\nimport { Type } from '../../components/v2/Type.tsx'\nimport { ENUM_TYPES_WITH_KEY_SUFFIX } from '../../constants.ts'\nimport type { PluginTs } from '../../types'\nimport { buildDataSchemaNode, buildResponsesSchemaNode, buildResponseUnionSchemaNode } from './utils.ts'\n\nexport const typeGenerator = createGenerator<PluginTs>({\n name: 'typescript',\n type: 'react',\n Operation({ node, adapter, options }) {\n const { enumType, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group } = options\n const { mode, getFile, resolveName } = useKubb<PluginTs>()\n\n const file = getFile({\n name: node.operationId,\n extname: '.ts',\n mode,\n options: {\n group: group ? (group.type === 'tag' ? { tag: node.tags[0] } : { path: node.path }) : undefined,\n },\n })\n const params = applyParamsCasing(node.parameters, paramsCasing)\n\n function renderSchemaType({\n node: schemaNode,\n name,\n typedName,\n description,\n }: {\n node: SchemaNode | null\n name: string\n typedName: string\n description?: string\n }) {\n if (!schemaNode) {\n return null\n }\n\n const imports = adapter.getImports(schemaNode, (schemaName) => ({\n name: resolveName({ name: schemaName, type: 'type' }),\n path: getFile({ name: schemaName, extname: '.ts', mode }).path,\n }))\n\n return (\n <>\n {mode === 'split' &&\n imports.map((imp) => <File.Import key={[name, imp.path, imp.isTypeOnly].join('-')} root={file.path} path={imp.path} name={imp.name} isTypeOnly />)}\n <Type\n name={name}\n typedName={typedName}\n node={schemaNode}\n description={description}\n enumType={enumType}\n enumKeyCasing={enumKeyCasing}\n optionalType={optionalType}\n arrayType={arrayType}\n syntaxType={syntaxType}\n />\n </>\n )\n }\n\n const paramTypes = params.map((param) =>\n renderSchemaType({\n node: param.schema,\n name: resolveName({ name: `${node.operationId} ${pascalCase(param.in)} ${param.name}`, type: 'function' }),\n typedName: resolveName({ name: `${node.operationId} ${pascalCase(param.in)} ${param.name}`, type: 'type' }),\n }),\n )\n\n const responseTypes = node.responses\n .filter((res) => res.schema)\n .map((res) =>\n renderSchemaType({\n node: res.schema!,\n name: resolveName({ name: `${node.operationId} Status ${res.statusCode}`, type: 'function' }),\n typedName: resolveName({ name: `${node.operationId} Status ${res.statusCode}`, type: 'type' }),\n description: res.description,\n }),\n )\n\n const requestType = node.requestBody\n ? renderSchemaType({\n node: node.requestBody,\n name: resolveName({ name: `${node.operationId} Data`, type: 'function' }),\n typedName: resolveName({ name: `${node.operationId} Data`, type: 'type' }),\n description: node.requestBody.description,\n })\n : null\n\n const dataType = renderSchemaType({\n node: buildDataSchemaNode({ node: { ...node, parameters: params }, resolveName }),\n name: resolveName({ name: `${node.operationId} RequestConfig`, type: 'function' }),\n typedName: resolveName({ name: `${node.operationId} RequestConfig`, type: 'type' }),\n })\n\n const responsesType = renderSchemaType({\n node: buildResponsesSchemaNode({ node, resolveName }),\n name: resolveName({ name: `${node.operationId} Responses`, type: 'function' }),\n typedName: resolveName({ name: `${node.operationId} Responses`, type: 'type' }),\n })\n\n const responseType = renderSchemaType({\n node: buildResponseUnionSchemaNode({ node, resolveName }),\n name: resolveName({ name: `${node.operationId} Response`, type: 'function' }),\n typedName: resolveName({ name: `${node.operationId} Response`, type: 'type' }),\n description: 'Union of all possible responses',\n })\n\n return (\n <File baseName={file.baseName} path={file.path} meta={file.meta}>\n {paramTypes}\n {responseTypes}\n {requestType}\n {dataType}\n {responsesType}\n {responseType}\n </File>\n )\n },\n Schema({ node, adapter, options }) {\n const { enumType, enumKeyCasing, syntaxType, optionalType, arrayType } = options\n const { mode, resolveName, getFile } = useKubb<PluginTs>()\n\n if (!node.name) {\n return\n }\n\n const imports = adapter.getImports(node, (schemaName) => ({\n name: resolveName({ name: schemaName, type: 'type' }),\n path: getFile({ name: schemaName, extname: '.ts', mode }).path,\n }))\n\n const isEnumSchema = node.type === 'enum'\n\n let typedName = resolveName({ name: node.name, type: 'type' })\n if (ENUM_TYPES_WITH_KEY_SUFFIX.has(enumType) && isEnumSchema) {\n typedName += 'Key'\n }\n\n const type = {\n name: resolveName({ name: node.name, type: 'function' }),\n typedName,\n file: getFile({ name: node.name, extname: '.ts', mode }),\n } as const\n\n return (\n <File baseName={type.file.baseName} path={type.file.path} meta={type.file.meta}>\n {mode === 'split' &&\n imports.map((imp) => (\n <File.Import key={[node.name, imp.path, imp.isTypeOnly].join('-')} root={type.file.path} path={imp.path} name={imp.name} isTypeOnly />\n ))}\n <Type\n name={type.name}\n typedName={type.typedName}\n node={node}\n enumType={enumType}\n enumKeyCasing={enumKeyCasing}\n optionalType={optionalType}\n arrayType={arrayType}\n syntaxType={syntaxType}\n />\n </File>\n )\n },\n})\n","import path from 'node:path'\nimport { camelCase, pascalCase } from '@internals/utils'\nimport { walk } from '@kubb/ast'\nimport { createPlugin, type Group, getBarrelFiles, getMode, resolveOptions } from '@kubb/core'\nimport { buildOperation, buildSchema, OperationGenerator, pluginOasName, SchemaGenerator } from '@kubb/plugin-oas'\nimport { typeGenerator, typeGeneratorV2 } from './generators'\nimport type { PluginTs } from './types.ts'\n\nexport const pluginTsName = 'plugin-ts' satisfies PluginTs['name']\n\nexport const pluginTs = createPlugin<PluginTs>((options) => {\n const {\n output = { path: 'types', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n enumType = 'asConst',\n enumKeyCasing = 'none',\n enumSuffix = 'enum',\n dateType = 'string',\n integerType = 'number',\n unknownType = 'any',\n optionalType = 'questionToken',\n arrayType = 'array',\n emptySchemaType = unknownType,\n syntaxType = 'type',\n transformers = {},\n paramsCasing,\n generators = [typeGenerator, typeGeneratorV2].filter(Boolean),\n contentType,\n UNSTABLE_NAMING,\n } = options\n\n // @deprecated Will be removed in v5 when collisionDetection defaults to true\n const usedEnumNames = {}\n\n return {\n name: pluginTsName,\n options: {\n output,\n transformers,\n dateType,\n integerType,\n optionalType,\n arrayType,\n enumType,\n enumKeyCasing,\n enumSuffix,\n unknownType,\n emptySchemaType,\n syntaxType,\n group,\n override,\n paramsCasing,\n usedEnumNames,\n },\n pre: [pluginOasName],\n resolvePath(baseName, pathMode, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = pathMode ?? getMode(path.resolve(root, output.path))\n\n if (mode === 'single') {\n /**\n * when output is a file then we will always append to the same file(output file), see fileManager.addOrAppend\n * Other plugins then need to call addOrAppend instead of just add from the fileManager class\n */\n return path.resolve(root, output.path)\n }\n\n if (group && (options?.group?.path || options?.group?.tag)) {\n const groupName: Group['name'] = group?.name\n ? group.name\n : (ctx) => {\n if (group?.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n }\n\n return path.resolve(\n root,\n output.path,\n groupName({\n group: group.type === 'path' ? options.group.path! : options.group.tag!,\n }),\n baseName,\n )\n }\n\n return path.resolve(root, output.path, baseName)\n },\n resolveName(name, type) {\n const resolvedName = pascalCase(name, { isFile: type === 'file' })\n\n if (type) {\n return transformers?.name?.(resolvedName, type) || resolvedName\n }\n\n return resolvedName\n },\n async install() {\n const { config, fabric, plugin, adapter, rootNode, driver, openInStudio } = this\n\n const root = path.resolve(config.root, config.output.path)\n const mode = getMode(path.resolve(root, output.path))\n\n if (adapter) {\n await openInStudio({ ast: true })\n\n await walk(\n rootNode,\n {\n async schema(schemaNode) {\n const writeTasks = generators.map(async (generator) => {\n if (generator.type === 'react' && generator.version === '2') {\n const options = resolveOptions(schemaNode, { options: plugin.options, exclude, include, override })\n\n if (options === null) {\n return\n }\n\n await buildSchema(schemaNode, {\n options,\n adapter,\n config,\n fabric,\n Component: generator.Schema,\n plugin,\n driver,\n mode,\n version: generator.version,\n })\n }\n })\n\n await Promise.all(writeTasks)\n },\n async operation(operationNode) {\n const writeTasks = generators.map(async (generator) => {\n if (generator.type === 'react' && generator.version === '2') {\n const options = resolveOptions(operationNode, { options: plugin.options, exclude, include, override })\n\n if (options === null) {\n return\n }\n\n await buildOperation(operationNode, {\n options,\n adapter,\n config,\n fabric,\n Component: generator.Operation,\n plugin,\n driver,\n mode,\n version: generator.version,\n })\n }\n })\n\n await Promise.all(writeTasks)\n },\n },\n { depth: 'shallow' },\n )\n\n const barrelFiles = await getBarrelFiles(this.fabric.files, {\n type: output.barrelType ?? 'named',\n root,\n output,\n meta: {\n pluginName: this.plugin.name,\n },\n })\n\n await this.upsertFile(...barrelFiles)\n\n return\n }\n\n // v1 flow\n\n const oas = await this.getOas()\n\n const schemaGenerator = new SchemaGenerator(this.plugin.options, {\n fabric: this.fabric,\n oas,\n driver: this.driver,\n events: this.events,\n plugin: this.plugin,\n contentType,\n include: undefined,\n override,\n mode,\n output: output.path,\n })\n\n const schemaFiles = await schemaGenerator.build(...generators)\n await this.upsertFile(...schemaFiles)\n\n const operationGenerator = new OperationGenerator(this.plugin.options, {\n fabric: this.fabric,\n oas,\n driver: this.driver,\n events: this.events,\n plugin: this.plugin,\n contentType,\n exclude,\n include,\n override,\n mode,\n UNSTABLE_NAMING,\n })\n\n const operationFiles = await operationGenerator.build(...generators)\n await this.upsertFile(...operationFiles)\n\n const barrelFiles = await getBarrelFiles(this.fabric.files, {\n type: output.barrelType ?? 'named',\n root,\n output,\n meta: {\n pluginName: this.plugin.name,\n },\n })\n\n await this.upsertFile(...barrelFiles)\n },\n }\n})\n"],"mappings":"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"}
|