[{"data":1,"prerenderedAt":1446},["ShallowReactive",2],{"page:\u002Fdocs\u002F5.x\u002Fhow-to\u002Fmigration":3},{"id":4,"title":5,"body":6,"description":1428,"extension":1429,"frontmatter":1430,"heading":5,"meta":1437,"navigation":1439,"order":1433,"path":1440,"seo":1441,"sitemap":1442,"source":1443,"stem":1444,"__hash__":1445},"docs\u002Fdocs\u002F5.x\u002Fhow-to\u002Fmigration.md","Upgrade from v4 to v5",{"type":7,"value":8,"toc":1404},"minimark",[9,13,18,32,53,57,205,208,212,326,348,353,373,401,449,453,460,517,524,544,558,562,645,652,757,771,775,791,882,930,934,966,988,1002,1017,1021,1031,1089,1096,1100,1118,1131,1160,1177,1181,1199,1203,1213,1251,1265,1269,1287,1291,1313,1317,1356,1360,1387,1391],[10,11,12],"p",{},"Update packages, migrate the config, regenerate, and fix generated-code imports. Kubb v5 separates specification parsing, code generation, source printing, and storage.",[14,15,17],"h2",{"id":16},"before-you-start","Before you start",[10,19,20,21,25,26,31],{},"Use Node.js 22.22 or higher in development, CI, and Docker. Update ",[22,23,24],"code",{},"kubb"," and the plugins you use to v5. Plugin package names remain unchanged, although their source now lives in ",[27,28,30],"a",{"href":29},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fplugins","kubb-labs\u002Fplugins",".",[33,34,36,37,40,41,44,45,48,49,52],"blockquote",{"as":35},"warning","Remove ",[22,38,39],{},"@kubb\u002Fplugin-solid-query"," and ",[22,42,43],{},"@kubb\u002Fplugin-svelte-query",". They have no v5 replacement. Replace ",[22,46,47],{},"@kubb\u002Fplugin-client"," with Axios or Fetch and ",[22,50,51],{},"@kubb\u002Fplugin-oas"," with the adapter, as described below.",[14,54,56],{"id":55},"defaults-that-changed","Defaults that changed",[58,59,60,76],"table",{},[61,62,63],"thead",{},[64,65,66,70,73],"tr",{},[67,68,69],"th",{},"Behavior",[67,71,72],{},"v4",[67,74,75],{},"v5",[77,78,79,97,113,127,142,159,172,191],"tbody",{},[64,80,81,87,92],{},[82,83,84],"td",{},[22,85,86],{},"output.format",[82,88,89],{},[22,90,91],{},"'prettier'",[82,93,94],{},[22,95,96],{},"false",[64,98,99,104,109],{},[82,100,101],{},[22,102,103],{},"output.lint",[82,105,106],{},[22,107,108],{},"'auto'",[82,110,111],{},[22,112,96],{},[64,114,115,118,123],{},[82,116,117],{},"Root barrel",[82,119,120],{},[22,121,122],{},"'named'",[82,124,125],{},[22,126,96],{},[64,128,129,132,137],{},[82,130,131],{},"Tag folder",[82,133,134],{},[22,135,136],{},"\u003Ctag>Controller",[82,138,139],{},[22,140,141],{},"\u003Ctag>",[64,143,144,150,155],{},[82,145,146,147],{},"React\u002FVue Query ",[22,148,149],{},"hooks",[82,151,152],{},[22,153,154],{},"true",[82,156,157],{},[22,158,96],{},[64,160,161,164,167],{},[82,162,163],{},"Client error handling",[82,165,166],{},"Errors returned",[82,168,169],{},[22,170,171],{},"throwOnError: true",[64,173,174,181,186],{},[82,175,176,177,180],{},"OpenAPI ",[22,178,179],{},"int64"," mapping",[82,182,183],{},[22,184,185],{},"number",[82,187,188],{},[22,189,190],{},"bigint",[64,192,193,196,199],{},[82,194,195],{},"SWR mutation arguments",[82,197,198],{},"Trigger shape opt-in",[82,200,201,202],{},"Passed through ",[22,203,204],{},"trigger()",[10,206,207],{},"Set these options explicitly where your application relies on the old behavior.",[14,209,211],{"id":210},"migrate-the-config","Migrate the config",[58,213,214,222],{},[61,215,216],{},[64,217,218,220],{},[67,219,72],{},[67,221,75],{},[77,223,224,241,259,276,294,304,316],{},[64,225,226,235],{},[82,227,228,231,232],{},[22,229,230],{},"defineConfig"," from ",[22,233,234],{},"@kubb\u002Fcore",[82,236,237,238,31],{},"Import from ",[22,239,240],{},"kubb\u002Fconfig",[64,242,243,252],{},[82,244,245,248,249],{},[22,246,247],{},"input: { path }"," or ",[22,250,251],{},"input: { data }",[82,253,254,255,258],{},"Set ",[22,256,257],{},"input"," directly to the path, URL, spec string, or parsed object.",[64,260,261,266],{},[82,262,263],{},[22,264,265],{},"output.storage",[82,267,268,269,272,273,31],{},"Move to top-level ",[22,270,271],{},"storage"," and import helpers from ",[22,274,275],{},"kubb\u002Fkit",[64,277,278,283],{},[82,279,280],{},[22,281,282],{},"hooks.done",[82,284,285,286,289,290,293],{},"Use an ",[22,287,288],{},"output.postGenerate"," array of strings or ",[22,291,292],{},"{ name, command }"," objects.",[64,295,296,301],{},[82,297,298],{},[22,299,300],{},"output.override",[82,302,303],{},"Remove it. Use a storage driver to control writes.",[64,305,306,311],{},[82,307,308],{},[22,309,310],{},"--debug",[82,312,313,31],{},[22,314,315],{},"--reporter file",[64,317,318,323],{},[82,319,320],{},[22,321,322],{},"--log-level debug",[82,324,325],{},"Use the supported log levels and reporters.",[10,327,328,329,332,333,336,337,340,341,344,345,31],{},"The old input wrapper fails with ",[22,330,331],{},"KUBB_LEGACY_INPUT",". The old hook failure code ",[22,334,335],{},"KUBB_HOOK_FAILED"," becomes ",[22,338,339],{},"KUBB_POST_GENERATE_FAILED",". Remove ",[22,342,343],{},"kubb:debug"," hooks and ",[22,346,347],{},"createDebugger",[349,350,352],"h3",{"id":351},"adapter-oas","OpenAPI adapter",[10,354,36,355,231,358,361,362,364,365,368,369,372],{},[22,356,357],{},"pluginOas()",[22,359,360],{},"plugins",". ",[22,363,230],{}," supplies ",[22,366,367],{},"adapterOas()",", the TypeScript\u002FTSX\u002FMarkdown parsers, and a barrel plugin. Set ",[22,370,371],{},"adapter"," only to override its options.",[10,374,375,376,379,380,379,383,379,386,379,389,392,393,396,397,400],{},"Move ",[22,377,378],{},"dateType",", ",[22,381,382],{},"integerType",[22,384,385],{},"unknownType",[22,387,388],{},"emptySchemaType",[22,390,391],{},"enumSuffix",", and ",[22,394,395],{},"contentType"," from plugin options to ",[22,398,399],{},"adapterOas",". Choose one value for each across the whole config.",[402,403,404,417,432,440],"ul",{},[405,406,407,40,410,413,414,31],"li",{},[22,408,409],{},"serverIndex",[22,411,412],{},"serverVariables"," become ",[22,415,416],{},"server: { index, variables }",[405,418,419,336,422,425,426,336,429,31],{},[22,420,421],{},"discriminator: 'strict'",[22,423,424],{},"'preserve'"," (the default). ",[22,427,428],{},"'inherit'",[22,430,431],{},"'propagate'",[405,433,434,437,438,31],{},[22,435,436],{},"validate"," still defaults to ",[22,439,154],{},[405,441,254,442,445,446,448],{},[22,443,444],{},"integerType: 'number'"," to retain the v4 ",[22,447,179],{}," mapping.",[349,450,452],{"id":451},"output-layout","Output layout",[10,454,455,456,459],{},"Replace ",[22,457,458],{},"output.barrelType"," at the root and on plugins:",[58,461,462,470],{},[61,463,464],{},[64,465,466,468],{},[67,467,72],{},[67,469,75],{},[77,471,472,483,495,507],{},[64,473,474,478],{},[82,475,476],{},[22,477,122],{},[82,479,480],{},[22,481,482],{},"{ type: 'named' }",[64,484,485,490],{},[82,486,487],{},[22,488,489],{},"'all'",[82,491,492],{},[22,493,494],{},"{ type: 'all' }",[64,496,497,502],{},[82,498,499,501],{},[22,500,431],{}," (plugin only)",[82,503,504],{},[22,505,506],{},"{ type: 'named', nested: true }",[64,508,509,513],{},[82,510,511],{},[22,512,96],{},[82,514,515],{},[22,516,96],{},[10,518,519,520,31],{},"Barrels, formatting, and linting now default to off. Automatic formatter\u002Flinter selection prefers the oxc tools. See the ",[27,521,523],{"href":522},"\u002Fdocs\u002F5.x\u002Freference\u002Fconfiguration","configuration reference",[10,525,526,529,530,533,534,537,538,540,541,31],{},[22,527,528],{},"output.mode"," remains a plugin-level option inferred from ",[22,531,532],{},"output.path",": an extension means one file, otherwise a directory. ",[22,535,536],{},"group"," works with inferred directory mode. Combining ",[22,539,536],{}," with file mode fails with ",[22,542,543],{},"KUBB_INVALID_PLUGIN_OPTIONS",[10,545,546,547,550,551,554,555,31],{},"Tag folders no longer add ",[22,548,549],{},"Controller"," (or ",[22,552,553],{},"Requests"," for Cypress\u002FMCP). To retain it, set ",[22,556,557],{},"group: { type: 'tag', name: ({ group }) => `${group}Controller` }",[14,559,561],{"id":560},"shared-plugin-options","Shared plugin options",[58,563,564,574],{},[61,565,566],{},[64,567,568,571],{},[67,569,570],{},"Removed or renamed",[67,572,573],{},"Replacement",[77,575,576,589,601,615,625],{},[64,577,578,583],{},[82,579,580],{},[22,581,582],{},"transformers.name",[82,584,585,588],{},[22,586,587],{},"resolver.name",". Call the exported preset to keep default casing.",[64,590,591,596],{},[82,592,593],{},[22,594,595],{},"transformers.schema",[82,597,598,31],{},[22,599,600],{},"macros",[64,602,603,608],{},[82,604,605],{},[22,606,607],{},"mapper",[82,609,610,611,614],{},"Schema macros or a ",[22,612,613],{},"printer.nodes"," override.",[64,616,617,622],{},[82,618,619],{},[22,620,621],{},"generators",[82,623,624],{},"A custom plugin.",[64,626,627,638],{},[82,628,629,379,632,379,635],{},[22,630,631],{},"paramsType",[22,633,634],{},"pathParamsType",[22,636,637],{},"paramsCasing",[82,639,640,641,644],{},"One grouped ",[22,642,643],{},"{ body, path, query, headers }"," object, with names from the spec.",[10,646,647,648,651],{},"Required parameters make their group required. Unused groups are typed ",[22,649,650],{},"never",". Update positional call sites:",[653,654,659],"pre",{"language":655,"filename":656,"code":657,"class":658},"typescript","src\u002Fapp.ts","useGetPet({ path: { petId } })\nuseFindPets({ query: { status: 'available' } })\nuseUpdatePet().mutate({ path: { petId }, body: pet })","highlights",[22,660,662,692,693,692,718],{"class":661},"language-typescript",[663,664,667,671,675,678,682,685,689],"span",{"class":665,"style":666},"line","display: inline",[663,668,670],{"style":669},"color:#6f42c1;--hls-dark:#b392f0","useGetPet",[663,672,674],{"style":673},"color:#005cc5;--hls-dark:#79b8ff","({ ",[663,676,677],{"style":673},"path",[663,679,681],{"style":680},"color:#d73a49;--hls-dark:#f97583",": ",[663,683,684],{"style":673},"{ ",[663,686,688],{"style":687},"color:#24292e;--hls-dark:#e1e4e8","petId ",[663,690,691],{"style":673},"} })","\n",[663,694,695,698,700,703,705,707,710,712,716],{"class":665,"style":666},[663,696,697],{"style":669},"useFindPets",[663,699,674],{"style":673},[663,701,702],{"style":673},"query",[663,704,681],{"style":680},[663,706,684],{"style":673},[663,708,709],{"style":673},"status",[663,711,681],{"style":680},[663,713,715],{"style":714},"color:#032f62;--hls-dark:#9ecbff","'available' ",[663,717,691],{"style":673},[663,719,720,723,726,728,731,733,735,737,739,741,744,746,749,751,754],{"class":665,"style":666},[663,721,722],{"style":669},"useUpdatePet",[663,724,725],{"style":673},"()",[663,727,31],{"style":680},[663,729,730],{"style":669},"mutate",[663,732,674],{"style":673},[663,734,677],{"style":673},[663,736,681],{"style":680},[663,738,684],{"style":673},[663,740,688],{"style":687},[663,742,743],{"style":673},"}",[663,745,379],{"style":680},[663,747,748],{"style":673},"body",[663,750,681],{"style":680},[663,752,753],{"style":687},"pet ",[663,755,756],{"style":673},"})",[10,758,759,760,379,764,392,767,31],{},"After moving a name transformer, check identifiers because resolver inputs may have different casing. See ",[27,761,763],{"href":762},"\u002Fdocs\u002F5.x\u002Fhow-to\u002Fresolvers","Resolvers",[27,765,600],{"href":766},"\u002Fdocs\u002F5.x\u002Fhow-to\u002Fmacros",[27,768,770],{"href":769},"\u002Fdocs\u002F5.x\u002Fhow-to\u002Fprinters","printers",[14,772,774],{"id":773},"plugin-client","HTTP clients",[10,776,455,777,780,781,784,785,780,788,31],{},[22,778,779],{},"pluginClient({ client: 'axios' })"," with ",[22,782,783],{},"pluginAxios()",", or ",[22,786,787],{},"client: 'fetch'",[22,789,790],{},"pluginFetch()",[402,792,793,819,837,853,860],{},[405,794,795,40,798,413,801,361,804,807,808,811,812,815,816,818],{},[22,796,797],{},"clientType",[22,799,800],{},"wrapper",[22,802,803],{},"sdk",[22,805,806],{},"sdk.mode: 'tag'"," is the default. ",[22,809,810],{},"sdk.name"," adds a root class. Use ",[22,813,814],{},"mode: 'flat'"," for one class. Leave ",[22,817,803],{}," unset for standalone functions used by query plugins.",[405,820,821,824,825,828,829,832,833,836],{},[22,822,823],{},"dataReturnType"," is removed. Clients return ",[22,826,827],{},"{ data, error, request, response }",". Read ",[22,830,831],{},"data"," for the body. Set ",[22,834,835],{},"throwOnError: false"," to inspect errors without throwing.",[405,838,839,336,842,845,846,849,850,852],{},[22,840,841],{},"parser: 'zod'",[22,843,844],{},"validator: 'zod'",". The old ",[22,847,848],{},"'client'"," parser becomes the default ",[22,851,96],{}," validator.",[405,854,855,856,859],{},"Authentication uses OpenAPI security schemes and the bundled client's ",[22,857,858],{},"auth"," resolver.",[405,861,36,862,379,865,379,868,379,871,392,874,877,878,881],{},[22,863,864],{},"operations",[22,866,867],{},"clientType: 'staticClass'",[22,869,870],{},"importPath",[22,872,873],{},"bundle",[22,875,876],{},"urlType",". The client is bundled into ",[22,879,880],{},".kubb\u002Fclient.ts",". URL-only helpers require a custom plugin.",[653,883,885],{"language":655,"filename":656,"code":884,"class":658},"const { data: pet } = await getPet({ path: { petId: 1 } })",[22,886,887],{"class":661},[663,888,889,892,894,896,898,900,903,906,909,912,914,916,918,920,923,925,928],{"class":665,"style":666},[663,890,891],{"style":680},"const ",[663,893,684],{"style":673},[663,895,831],{"style":673},[663,897,681],{"style":680},[663,899,753],{"style":687},[663,901,902],{"style":673},"} ",[663,904,905],{"style":680},"= ",[663,907,908],{"style":680},"await ",[663,910,911],{"style":669},"getPet",[663,913,674],{"style":673},[663,915,677],{"style":673},[663,917,681],{"style":680},[663,919,684],{"style":673},[663,921,922],{"style":673},"petId",[663,924,681],{"style":680},[663,926,927],{"style":673},"1 ",[663,929,691],{"style":673},[14,931,933],{"id":932},"plugin-ts","TypeScript",[10,935,375,936,379,939,392,942,945,946,949,950,379,953,392,956,959,960,780,963,31],{},[22,937,938],{},"enumType",[22,940,941],{},"enumTypeSuffix",[22,943,944],{},"enumKeyCasing"," under ",[22,947,948],{},"enum"," as ",[22,951,952],{},"type",[22,954,955],{},"typeSuffix",[22,957,958],{},"keyCasing",". Replace ",[22,961,962],{},"'asPascalConst'",[22,964,965],{},"{ type: 'asConst', constCasing: 'pascalCase' }",[10,967,968,969,780,972,379,974,379,976,392,978,981,982,40,985,31],{},"Generated request inputs use ",[22,970,971],{},"*Options",[22,973,748],{},[22,975,677],{},[22,977,702],{},[22,979,980],{},"headers",". Properties preserve OpenAPI names, including ",[22,983,984],{},"pet_id",[22,986,987],{},"X-Api-Key",[10,989,990,991,994,995,997,998,1001],{},"Default enums are const-asserted objects plus a ",[22,992,993],{},"*Key"," type union. Inline enum names are operation-scoped. Set ",[22,996,948],{}," to choose another representation. Open string unions retain suggestions with ",[22,999,1000],{},"(string & {})",". Shared fields in discriminated unions move into a common intersection.",[10,1003,1004,1005,1008,1009,1012,1013,31],{},"JSDoc drops the format suffix from ",[22,1006,1007],{},"@type",", includes specification examples, and adds ",[22,1010,1011],{},"@type object"," for objects. See ",[27,1014,1016],{"href":1015},"\u002Fextensions\u002Fkubb-labs\u002Fplugin-ts\u002Foptions","TypeScript options",[14,1018,1020],{"id":1019},"plugin-zod","Zod",[10,1022,1023,1024,1027,1028,31],{},"Upgrade ",[22,1025,1026],{},"zod"," to v4 and remove ",[22,1029,1030],{},"version",[402,1032,1033,1055,1065,1070,1082],{},[405,1034,455,1035,780,1038,1041,1042,1045,1046,681,1049,336,1052,31],{},[22,1036,1037],{},"typed: true",[22,1039,1040],{},"inferred: true"," for ",[22,1043,1044],{},"z.infer"," aliases. Their names now end in ",[22,1047,1048],{},"Type",[22,1050,1051],{},"PetSchema",[22,1053,1054],{},"PetSchemaType",[405,1056,455,1057,1060,1061,1064],{},[22,1058,1059],{},"wrapOutput"," with a printer override. ",[22,1062,1063],{},"this.base(node)"," preserves the default expression for decoration.",[405,1066,36,1067,1069],{},[22,1068,864],{},". Rebuilding its operation\u002Fpath maps requires a custom plugin.",[405,1071,1072,1073,681,1076,336,1079,31],{},"Response schemas gain ",[22,1074,1075],{},"Status\u003Ccode>",[22,1077,1078],{},"listPets200Schema",[22,1080,1081],{},"listPetsStatus200Schema",[405,1083,1084,1085,1088],{},"Output uses chained Zod 4 calls. Functional wrappers remain for ",[22,1086,1087],{},"mini: true",". Getters are used only for circular references.",[10,1090,1091,1092,31],{},"See ",[27,1093,1095],{"href":1094},"\u002Fextensions\u002Fkubb-labs\u002Fplugin-zod\u002Foptions","Zod options",[14,1097,1099],{"id":1098},"plugin-react-query","React Query",[10,1101,1102,1103,1106,1107,1110,1111,1114,1115,31],{},"Register an Axios or Fetch client plugin. ",[22,1104,1105],{},"client"," is now ",[22,1108,1109],{},"'axios' | 'fetch'",", auto-detected when exactly one client is registered. Move ",[22,1112,1113],{},"baseURL"," and validation to that client. Remove the query plugin's ",[22,1116,1117],{},"parser",[10,1119,254,1120,1123,1124,1127,1128,1130],{},[22,1121,1122],{},"hooks: true"," to keep ",[22,1125,1126],{},"use*"," hooks. The default ",[22,1129,96],{}," still emits keys and option factories.",[10,1132,1133,1134,1136,1137,379,1139,379,1141,379,1143,392,1145,361,1148,1151,1152,1155,1156,1159],{},"Queries and mutations use grouped ",[22,1135,971],{},". The trailing client config excludes ",[22,1138,677],{},[22,1140,702],{},[22,1142,748],{},[22,1144,980],{},[22,1146,1147],{},"url",[22,1149,1150],{},"TData"," now contains only 2xx responses. Errors use ",[22,1153,1154],{},"TError",". Remove imports of ",[22,1157,1158],{},"*MutationKey"," type aliases and use the runtime key helper.",[10,1161,1162,1163,1166,1167,248,1169,1172,1173,31],{},"The generated auto ",[22,1164,1165],{},"enabled"," guard is removed. Set TanStack Query's ",[22,1168,1165],{},[22,1170,1171],{},"skipToken"," when deferring a request. Suspense hooks always run. See ",[27,1174,1176],{"href":1175},"\u002Fextensions\u002Fkubb-labs\u002Fplugin-react-query\u002Foptions","React Query options",[14,1178,1180],{"id":1179},"plugin-vue-query","Vue Query",[10,1182,1183,1184,1187,1188,1191,1192,1194,1195,31],{},"Apply the React Query changes above. Each parameter group accepts ",[22,1185,1186],{},"MaybeRefOrGetter",", and generated client calls unwrap it with ",[22,1189,1190],{},"toValue()",". Set ",[22,1193,1122],{}," to retain composables. See ",[27,1196,1198],{"href":1197},"\u002Fextensions\u002Fkubb-labs\u002Fplugin-vue-query\u002Foptions","Vue Query options",[14,1200,1202],{"id":1201},"plugin-swr","SWR",[10,1204,1205,1206,1209,1210,1212],{},"Use the same client selector, grouped parameters, and client-level validation. Remove ",[22,1207,1208],{},"mutation.paramsToTrigger",". Mutation parameters always pass through ",[22,1211,204],{},":",[653,1214,1216],{"language":655,"filename":656,"code":1215,"class":658},"useUpdatePet().trigger({ path: { petId }, body: pet })",[22,1217,1218],{"class":661},[663,1219,1220,1222,1224,1226,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249],{"class":665,"style":666},[663,1221,722],{"style":669},[663,1223,725],{"style":673},[663,1225,31],{"style":680},[663,1227,1228],{"style":669},"trigger",[663,1230,674],{"style":673},[663,1232,677],{"style":673},[663,1234,681],{"style":680},[663,1236,684],{"style":673},[663,1238,688],{"style":687},[663,1240,743],{"style":673},[663,1242,379],{"style":680},[663,1244,748],{"style":673},[663,1246,681],{"style":680},[663,1248,753],{"style":687},[663,1250,756],{"style":673},[10,1252,1253,1254,1257,1258,1260,1261,31],{},"SWR drops the parameter-presence guard and keys requests off ",[22,1255,1256],{},"shouldFetch",". Set it to ",[22,1259,96],{}," to disable a request. See ",[27,1262,1264],{"href":1263},"\u002Fextensions\u002Fkubb-labs\u002Fplugin-swr\u002Foptions","SWR options",[14,1266,1268],{"id":1267},"plugin-faker","Faker",[10,1270,36,1271,40,1273,1275,1276,1279,1280,1282,1283,31],{},[22,1272,637],{},[22,1274,607],{},". Use macros or printers, keeping mock values compatible with the TypeScript output. ",[22,1277,1278],{},"createPet"," keeps its name but accepts generic ",[22,1281,1150],{},", preserving the types of override fields in its return value. See ",[27,1284,1286],{"href":1285},"\u002Fextensions\u002Fkubb-labs\u002Fplugin-faker\u002Foptions","Faker options",[14,1288,1290],{"id":1289},"plugin-msw","MSW",[10,1292,1293,1294,379,1296,392,1299,1301,1302,1305,1306,1308,1309,31],{},"The ",[22,1295,1117],{},[22,1297,1298],{},"handlers",[22,1300,1113],{}," options retain their v4 behavior. Generated handlers use ",[22,1303,1304],{},"HttpResponseResolver"," typed against request bodies and headers. Apply the shared resolver, adapter ",[22,1307,395],{},", and generator-option migrations. See ",[27,1310,1312],{"href":1311},"\u002Fextensions\u002Fkubb-labs\u002Fplugin-msw\u002Foptions","MSW options",[14,1314,1316],{"id":1315},"plugin-cypress","Cypress",[10,1318,1319,1320,1322,1323,340,1326,1328,1329,1332,1333,1335,1336,1339,1340,379,1342,379,1345,392,1348,1351,1352,31],{},"Request helpers take grouped ",[22,1321,971],{}," followed by the unchanged ",[22,1324,1325],{},"Partial\u003CCypress.RequestOptions>",[22,1327,823],{},". Helpers yield the body as ",[22,1330,1331],{},"Cypress.Chainable\u003CT>",". HTTP methods are uppercase and imports use ",[22,1334,971],{},"\u002F",[22,1337,1338],{},"*Response"," names. ",[22,1341,1113],{},[22,1343,1344],{},"exclude",[22,1346,1347],{},"include",[22,1349,1350],{},"override"," retain their shape. There is no validator option. See ",[27,1353,1355],{"href":1354},"\u002Fextensions\u002Fkubb-labs\u002Fplugin-cypress\u002Foptions","Cypress options",[14,1357,1359],{"id":1358},"plugin-mcp","MCP",[10,1361,1362,1363,1365,1366,1368,1369,1371,1372,1374,1375,1378,1379,1382,1383,31],{},"Register TypeScript, Zod, and an Axios or Fetch client. ",[22,1364,1105],{}," selects the registered client. Move ",[22,1367,1113],{}," there and remove ",[22,1370,637],{},". Handlers receive grouped ",[22,1373,971],{}," plus the MCP ",[22,1376,1377],{},"ServerContext",", delegate to generated client operations, and read ",[22,1380,1381],{},"res.data",". See ",[27,1384,1386],{"href":1385},"\u002Fextensions\u002Fkubb-labs\u002Fplugin-mcp\u002Foptions","MCP options",[14,1388,1390],{"id":1389},"verify-the-upgrade","Verify the upgrade",[10,1392,1393,1394,1397,1398,1400,1401,1403],{},"Run ",[22,1395,1396],{},"kubb generate",", review generated-file changes, and type-check your application. Update response imports for ",[22,1399,1075],{}," names, Zod inferred-type imports for ",[22,1402,1048],{},", and imports from renamed tag folders. Enable formatting, linting, and barrels explicitly if needed.",{"title":1405,"searchDepth":1406,"depth":1406,"links":1407},"",5,[1408,1410,1411,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427],{"id":16,"depth":1409,"text":17},2,{"id":55,"depth":1409,"text":56},{"id":210,"depth":1409,"text":211,"children":1412},[1413,1415],{"id":351,"depth":1414,"text":352},3,{"id":451,"depth":1414,"text":452},{"id":560,"depth":1409,"text":561},{"id":773,"depth":1409,"text":774},{"id":932,"depth":1409,"text":933},{"id":1019,"depth":1409,"text":1020},{"id":1098,"depth":1409,"text":1099},{"id":1179,"depth":1409,"text":1180},{"id":1201,"depth":1409,"text":1202},{"id":1267,"depth":1409,"text":1268},{"id":1289,"depth":1409,"text":1290},{"id":1315,"depth":1409,"text":1316},{"id":1358,"depth":1409,"text":1359},{"id":1389,"depth":1409,"text":1390},"Update Kubb v4 configuration, plugins, and generated-code imports for v5.","md",{"layout":1431,"title":5,"description":1428,"outline":1432,"order":1433,"navigation":1434},"doc",[1409,1414],9,{"title":1435,"icon":1436},"Upgrade to v5","i-iconoir-transition-up",{"layout":1431,"outline":1438},[1409,1414],{"title":1435,"icon":1436},"\u002Fdocs\u002F5.x\u002Fhow-to\u002Fmigration",{"title":5,"description":1428},{"loc":1440},"kubb-labs\u002Fkubb\u002Fdocs\u002F5.x\u002Fhow-to\u002Fmigration.md","docs\u002F5.x\u002Fhow-to\u002Fmigration","Q2wUHGd-VB4frEhBvDkopPOUcWz2w35bZAD0TZEsBAA",1792931640275]