@kubb/plugin-ts 5.0.0-alpha.26 → 5.0.0-alpha.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -556,6 +556,42 @@ function Enum({ node, enumType, enumTypeSuffix, enumKeyCasing, resolver }) {
556
556
  })] });
557
557
  }
558
558
  //#endregion
559
+ //#region src/components/Type.tsx
560
+ function Type({ name, node, printer, enumType, enumTypeSuffix, enumKeyCasing, resolver }) {
561
+ const enumSchemaNodes = (0, _kubb_ast.collect)(node, { schema(n) {
562
+ const enumNode = (0, _kubb_ast.narrowSchema)(n, _kubb_ast.schemaTypes.enum);
563
+ if (enumNode?.name) return enumNode;
564
+ } });
565
+ const output = printer.print(node);
566
+ if (!output) return;
567
+ const enums = [...new Map(enumSchemaNodes.map((n) => [n.name, n])).values()].map((node) => {
568
+ return {
569
+ node,
570
+ ...getEnumNames({
571
+ node,
572
+ enumType,
573
+ enumTypeSuffix,
574
+ resolver
575
+ })
576
+ };
577
+ });
578
+ const shouldExportEnums = enumType !== "inlineLiteral";
579
+ const shouldExportType = enumType === "inlineLiteral" || enums.every((item) => item.typeName !== name);
580
+ return /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [shouldExportEnums && enums.map(({ node }) => /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(Enum, {
581
+ node,
582
+ enumType,
583
+ enumTypeSuffix,
584
+ enumKeyCasing,
585
+ resolver
586
+ })), shouldExportType && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Source, {
587
+ name,
588
+ isTypeOnly: true,
589
+ isExportable: true,
590
+ isIndexable: true,
591
+ children: output
592
+ })] });
593
+ }
594
+ //#endregion
559
595
  //#region src/utils.ts
560
596
  /**
561
597
  * Collects JSDoc annotation strings for a schema node.
@@ -808,7 +844,8 @@ const printerTs = (0, _kubb_core.definePrinter)((options) => {
808
844
  const allElements = [...propertyNodes, ...buildIndexSignatures(node, propertyNodes.length, transform)];
809
845
  if (!allElements.length) return keywordTypeNodes.object;
810
846
  return createTypeLiteralNode(allElements);
811
- }
847
+ },
848
+ ...options.nodes
812
849
  },
813
850
  print(node) {
814
851
  const { name, syntaxType = "type", description, keysToOmit } = this.options;
@@ -842,68 +879,20 @@ const printerTs = (0, _kubb_core.definePrinter)((options) => {
842
879
  };
843
880
  });
844
881
  //#endregion
845
- //#region src/components/Type.tsx
846
- function Type({ name, node, keysToOmit, optionalType, arrayType, syntaxType, enumType, enumTypeSuffix, enumKeyCasing, description, resolver, enumSchemaNames }) {
847
- const resolvedDescription = description || node?.description;
848
- const enumSchemaNodes = (0, _kubb_ast.collect)(node, { schema(n) {
849
- const enumNode = (0, _kubb_ast.narrowSchema)(n, _kubb_ast.schemaTypes.enum);
850
- if (enumNode?.name) return enumNode;
851
- } });
852
- const output = printerTs({
853
- optionalType,
854
- arrayType,
855
- enumType,
856
- enumTypeSuffix,
857
- name,
858
- syntaxType,
859
- description: resolvedDescription,
860
- keysToOmit,
861
- resolver,
862
- enumSchemaNames
863
- }).print(node);
864
- if (!output) return;
865
- const enums = [...new Map(enumSchemaNodes.map((n) => [n.name, n])).values()].map((node) => {
866
- return {
867
- node,
868
- ...getEnumNames({
869
- node,
870
- enumType,
871
- enumTypeSuffix,
872
- resolver
873
- })
874
- };
875
- });
876
- const shouldExportEnums = enumType !== "inlineLiteral";
877
- const shouldExportType = enumType === "inlineLiteral" || enums.every((item) => item.typeName !== name);
878
- return /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [shouldExportEnums && enums.map(({ node }) => /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(Enum, {
879
- node,
880
- enumType,
881
- enumTypeSuffix,
882
- enumKeyCasing,
883
- resolver
884
- })), shouldExportType && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Source, {
885
- name,
886
- isTypeOnly: true,
887
- isExportable: true,
888
- isIndexable: true,
889
- children: output
890
- })] });
891
- }
892
- //#endregion
893
882
  //#region src/generators/typeGenerator.tsx
894
883
  const typeGenerator = (0, _kubb_core.defineGenerator)({
895
884
  name: "typescript",
896
885
  type: "react",
897
- Schema({ node, adapter, options, config, resolver }) {
898
- const { enumType, enumTypeSuffix, enumKeyCasing, syntaxType, optionalType, arrayType, output, group, transformers = [] } = options;
899
- const transformedNode = (0, _kubb_ast.transform)(node, (0, _kubb_ast.composeTransformers)(...transformers));
886
+ Schema({ node, adapter, options, config, resolver, plugin }) {
887
+ const { enumType, enumTypeSuffix, enumKeyCasing, syntaxType, optionalType, arrayType, output, group, printer } = options;
888
+ const transformedNode = plugin.transformer ? (0, _kubb_ast.transform)(node, plugin.transformer) : node;
900
889
  if (!transformedNode.name) return;
901
890
  const root = node_path.default.resolve(config.root, config.output.path);
902
891
  const mode = (0, _kubb_core.getMode)(node_path.default.resolve(root, output.path));
903
892
  const enumSchemaNames = new Set((adapter.rootNode?.schemas ?? []).filter((s) => (0, _kubb_ast.narrowSchema)(s, _kubb_ast.schemaTypes.enum) && s.name).map((s) => s.name));
904
893
  function resolveImportName(schemaName) {
905
894
  if (ENUM_TYPES_WITH_KEY_SUFFIX.has(enumType) && enumTypeSuffix && enumSchemaNames.has(schemaName)) return resolver.resolveEnumKeyName({ name: schemaName }, enumTypeSuffix);
906
- return resolver.default(schemaName, "type");
895
+ return resolver.resolveTypeName(schemaName);
907
896
  }
908
897
  const imports = adapter.getImports(transformedNode, (schemaName) => ({
909
898
  name: resolveImportName(schemaName),
@@ -918,7 +907,7 @@ const typeGenerator = (0, _kubb_core.defineGenerator)({
918
907
  }));
919
908
  const isEnumSchema = !!(0, _kubb_ast.narrowSchema)(transformedNode, _kubb_ast.schemaTypes.enum);
920
909
  const meta = {
921
- name: ENUM_TYPES_WITH_KEY_SUFFIX.has(enumType) && isEnumSchema ? resolver.resolveEnumKeyName(transformedNode, enumTypeSuffix) : resolver.resolveName(transformedNode.name),
910
+ name: ENUM_TYPES_WITH_KEY_SUFFIX.has(enumType) && isEnumSchema ? resolver.resolveEnumKeyName(transformedNode, enumTypeSuffix) : resolver.resolveTypeName(transformedNode.name),
922
911
  file: resolver.resolveFile({
923
912
  name: transformedNode.name,
924
913
  extname: ".ts"
@@ -928,6 +917,18 @@ const typeGenerator = (0, _kubb_core.defineGenerator)({
928
917
  group
929
918
  })
930
919
  };
920
+ const schemaPrinter = printerTs({
921
+ optionalType,
922
+ arrayType,
923
+ enumType,
924
+ enumTypeSuffix,
925
+ name: meta.name,
926
+ syntaxType,
927
+ description: transformedNode.description,
928
+ resolver,
929
+ enumSchemaNames,
930
+ nodes: printer?.nodes
931
+ });
931
932
  return /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric.File, {
932
933
  baseName: meta.file.baseName,
933
934
  path: meta.file.path,
@@ -955,17 +956,14 @@ const typeGenerator = (0, _kubb_core.defineGenerator)({
955
956
  enumType,
956
957
  enumTypeSuffix,
957
958
  enumKeyCasing,
958
- optionalType,
959
- arrayType,
960
- syntaxType,
961
959
  resolver,
962
- enumSchemaNames
960
+ printer: schemaPrinter
963
961
  })]
964
962
  });
965
963
  },
966
- Operation({ node, adapter, options, config, resolver }) {
967
- const { enumType, enumTypeSuffix, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group, output, transformers = [] } = options;
968
- const transformedNode = (0, _kubb_ast.transform)(node, (0, _kubb_ast.composeTransformers)(...transformers));
964
+ Operation({ node, adapter, options, config, resolver, plugin }) {
965
+ const { enumType, enumTypeSuffix, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group, output, printer } = options;
966
+ const transformedNode = plugin.transformer ? (0, _kubb_ast.transform)(node, plugin.transformer) : node;
969
967
  const root = node_path.default.resolve(config.root, config.output.path);
970
968
  const mode = (0, _kubb_core.getMode)(node_path.default.resolve(root, output.path));
971
969
  const params = (0, _kubb_ast.caseParams)(transformedNode.parameters, paramsCasing);
@@ -982,7 +980,7 @@ const typeGenerator = (0, _kubb_core.defineGenerator)({
982
980
  const enumSchemaNames = new Set((adapter.rootNode?.schemas ?? []).filter((s) => (0, _kubb_ast.narrowSchema)(s, _kubb_ast.schemaTypes.enum) && s.name).map((s) => s.name));
983
981
  function resolveImportName(schemaName) {
984
982
  if (ENUM_TYPES_WITH_KEY_SUFFIX.has(enumType) && enumTypeSuffix && enumSchemaNames.has(schemaName)) return resolver.resolveEnumKeyName({ name: schemaName }, enumTypeSuffix);
985
- return resolver.default(schemaName, "type");
983
+ return resolver.resolveTypeName(schemaName);
986
984
  }
987
985
  function renderSchemaType({ schema, name, keysToOmit }) {
988
986
  if (!schema) return null;
@@ -997,6 +995,19 @@ const typeGenerator = (0, _kubb_core.defineGenerator)({
997
995
  group
998
996
  }).path
999
997
  }));
998
+ const schemaPrinter = printerTs({
999
+ optionalType,
1000
+ arrayType,
1001
+ enumType,
1002
+ enumTypeSuffix,
1003
+ name,
1004
+ syntaxType,
1005
+ description: schema.description,
1006
+ keysToOmit,
1007
+ resolver,
1008
+ enumSchemaNames,
1009
+ nodes: printer?.nodes
1010
+ });
1000
1011
  return /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [mode === "split" && imports.map((imp) => /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
1001
1012
  root: meta.file.path,
1002
1013
  path: imp.path,
@@ -1012,12 +1023,8 @@ const typeGenerator = (0, _kubb_core.defineGenerator)({
1012
1023
  enumType,
1013
1024
  enumTypeSuffix,
1014
1025
  enumKeyCasing,
1015
- optionalType,
1016
- arrayType,
1017
- syntaxType,
1018
1026
  resolver,
1019
- keysToOmit,
1020
- enumSchemaNames
1027
+ printer: schemaPrinter
1021
1028
  })] });
1022
1029
  }
1023
1030
  const paramTypes = params.map((param) => renderSchemaType({
@@ -1080,9 +1087,6 @@ const typeGenerator = (0, _kubb_core.defineGenerator)({
1080
1087
  });
1081
1088
  //#endregion
1082
1089
  //#region src/resolvers/resolverTs.ts
1083
- function toTypeName(name, type) {
1084
- return pascalCase(name, { isFile: type === "file" });
1085
- }
1086
1090
  /**
1087
1091
  * Resolver for `@kubb/plugin-ts` that provides the default naming and path-resolution
1088
1092
  * helpers used by the plugin. Import this in other plugins to resolve the exact names and
@@ -1105,34 +1109,34 @@ const resolverTs = (0, _kubb_core.defineResolver)(() => {
1105
1109
  name: "default",
1106
1110
  pluginName: "plugin-ts",
1107
1111
  default(name, type) {
1108
- return toTypeName(name, type);
1112
+ return pascalCase(name, { isFile: type === "file" });
1109
1113
  },
1110
- resolveName(name) {
1111
- return this.default(name, "function");
1114
+ resolveTypeName(name) {
1115
+ return pascalCase(name);
1112
1116
  },
1113
1117
  resolvePathName(name, type) {
1114
- return this.default(name, type);
1118
+ return pascalCase(name, { isFile: type === "file" });
1115
1119
  },
1116
1120
  resolveParamName(node, param) {
1117
- return this.resolveName(`${node.operationId} ${param.in} ${param.name}`);
1121
+ return this.resolveTypeName(`${node.operationId} ${param.in} ${param.name}`);
1118
1122
  },
1119
1123
  resolveResponseStatusName(node, statusCode) {
1120
- return this.resolveName(`${node.operationId} Status ${statusCode}`);
1124
+ return this.resolveTypeName(`${node.operationId} Status ${statusCode}`);
1121
1125
  },
1122
1126
  resolveDataName(node) {
1123
- return this.resolveName(`${node.operationId} Data`);
1127
+ return this.resolveTypeName(`${node.operationId} Data`);
1124
1128
  },
1125
1129
  resolveRequestConfigName(node) {
1126
- return this.resolveName(`${node.operationId} RequestConfig`);
1130
+ return this.resolveTypeName(`${node.operationId} RequestConfig`);
1127
1131
  },
1128
1132
  resolveResponsesName(node) {
1129
- return this.resolveName(`${node.operationId} Responses`);
1133
+ return this.resolveTypeName(`${node.operationId} Responses`);
1130
1134
  },
1131
1135
  resolveResponseName(node) {
1132
- return this.resolveName(`${node.operationId} Response`);
1136
+ return this.resolveTypeName(`${node.operationId} Response`);
1133
1137
  },
1134
1138
  resolveEnumKeyName(node, enumTypeSuffix = "key") {
1135
- return `${this.resolveName(node.name ?? "")}${enumTypeSuffix}`;
1139
+ return `${this.resolveTypeName(node.name ?? "")}${enumTypeSuffix}`;
1136
1140
  },
1137
1141
  resolvePathParamsName(node, param) {
1138
1142
  return this.resolveParamName(node, param);
@@ -1175,29 +1179,29 @@ const resolverTsLegacy = (0, _kubb_core.defineResolver)(() => {
1175
1179
  ...resolverTs,
1176
1180
  pluginName: "plugin-ts",
1177
1181
  resolveResponseStatusName(node, statusCode) {
1178
- if (statusCode === "default") return this.resolveName(`${node.operationId} Error`);
1179
- return this.resolveName(`${node.operationId} ${statusCode}`);
1182
+ if (statusCode === "default") return this.resolveTypeName(`${node.operationId} Error`);
1183
+ return this.resolveTypeName(`${node.operationId} ${statusCode}`);
1180
1184
  },
1181
1185
  resolveDataName(node) {
1182
1186
  const suffix = node.method === "GET" ? "QueryRequest" : "MutationRequest";
1183
- return this.resolveName(`${node.operationId} ${suffix}`);
1187
+ return this.resolveTypeName(`${node.operationId} ${suffix}`);
1184
1188
  },
1185
1189
  resolveResponsesName(node) {
1186
1190
  const suffix = node.method === "GET" ? "Query" : "Mutation";
1187
- return this.resolveName(`${node.operationId} ${suffix}`);
1191
+ return this.resolveTypeName(`${node.operationId} ${suffix}`);
1188
1192
  },
1189
1193
  resolveResponseName(node) {
1190
1194
  const suffix = node.method === "GET" ? "QueryResponse" : "MutationResponse";
1191
- return this.resolveName(`${node.operationId} ${suffix}`);
1195
+ return this.resolveTypeName(`${node.operationId} ${suffix}`);
1192
1196
  },
1193
1197
  resolvePathParamsName(node, _param) {
1194
- return this.resolveName(`${node.operationId} PathParams`);
1198
+ return this.resolveTypeName(`${node.operationId} PathParams`);
1195
1199
  },
1196
1200
  resolveQueryParamsName(node, _param) {
1197
- return this.resolveName(`${node.operationId} QueryParams`);
1201
+ return this.resolveTypeName(`${node.operationId} QueryParams`);
1198
1202
  },
1199
1203
  resolveHeaderParamsName(node, _param) {
1200
- return this.resolveName(`${node.operationId} HeaderParams`);
1204
+ return this.resolveTypeName(`${node.operationId} HeaderParams`);
1201
1205
  }
1202
1206
  };
1203
1207
  });
@@ -1356,14 +1360,14 @@ function nameUnnamedEnums(node, parentName) {
1356
1360
  const typeGeneratorLegacy = (0, _kubb_core.defineGenerator)({
1357
1361
  name: "typescript-legacy",
1358
1362
  type: "react",
1359
- Schema({ node, adapter, options, config, resolver }) {
1360
- const { enumType, enumTypeSuffix, enumKeyCasing, syntaxType, optionalType, arrayType, output, group, transformers = [] } = options;
1361
- const transformedNode = (0, _kubb_ast.transform)(node, (0, _kubb_ast.composeTransformers)(...transformers));
1363
+ Schema({ node, adapter, options, config, resolver, plugin }) {
1364
+ const { enumType, enumTypeSuffix, enumKeyCasing, syntaxType, optionalType, arrayType, output, group } = options;
1365
+ const transformedNode = plugin.transformer ? (0, _kubb_ast.transform)(node, plugin.transformer) : node;
1362
1366
  if (!transformedNode.name) return;
1363
1367
  const root = node_path.default.resolve(config.root, config.output.path);
1364
1368
  const mode = (0, _kubb_core.getMode)(node_path.default.resolve(root, output.path));
1365
1369
  const imports = adapter.getImports(transformedNode, (schemaName) => ({
1366
- name: resolver.default(schemaName, "type"),
1370
+ name: resolver.resolveTypeName(schemaName),
1367
1371
  path: resolver.resolveFile({
1368
1372
  name: schemaName,
1369
1373
  extname: ".ts"
@@ -1375,7 +1379,7 @@ const typeGeneratorLegacy = (0, _kubb_core.defineGenerator)({
1375
1379
  }));
1376
1380
  const isEnumSchema = !!(0, _kubb_ast.narrowSchema)(transformedNode, _kubb_ast.schemaTypes.enum);
1377
1381
  const meta = {
1378
- name: ENUM_TYPES_WITH_KEY_SUFFIX.has(enumType) && isEnumSchema ? resolver.resolveEnumKeyName(transformedNode, enumTypeSuffix) : resolver.resolveName(transformedNode.name),
1382
+ name: ENUM_TYPES_WITH_KEY_SUFFIX.has(enumType) && isEnumSchema ? resolver.resolveEnumKeyName(transformedNode, enumTypeSuffix) : resolver.resolveTypeName(transformedNode.name),
1379
1383
  file: resolver.resolveFile({
1380
1384
  name: transformedNode.name,
1381
1385
  extname: ".ts"
@@ -1385,6 +1389,16 @@ const typeGeneratorLegacy = (0, _kubb_core.defineGenerator)({
1385
1389
  group
1386
1390
  })
1387
1391
  };
1392
+ const schemaPrinter = printerTs({
1393
+ optionalType,
1394
+ arrayType,
1395
+ enumType,
1396
+ enumTypeSuffix,
1397
+ name: meta.name,
1398
+ syntaxType,
1399
+ description: transformedNode.description,
1400
+ resolver
1401
+ });
1388
1402
  return /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric.File, {
1389
1403
  baseName: meta.file.baseName,
1390
1404
  path: meta.file.path,
@@ -1412,16 +1426,14 @@ const typeGeneratorLegacy = (0, _kubb_core.defineGenerator)({
1412
1426
  enumType,
1413
1427
  enumTypeSuffix,
1414
1428
  enumKeyCasing,
1415
- optionalType,
1416
- arrayType,
1417
- syntaxType,
1418
- resolver
1429
+ resolver,
1430
+ printer: schemaPrinter
1419
1431
  })]
1420
1432
  });
1421
1433
  },
1422
- Operation({ node, adapter, options, config, resolver }) {
1423
- const { enumType, enumTypeSuffix, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group, output, transformers = [] } = options;
1424
- const transformedNode = (0, _kubb_ast.transform)(node, (0, _kubb_ast.composeTransformers)(...transformers));
1434
+ Operation({ node, adapter, options, config, resolver, plugin }) {
1435
+ const { enumType, enumTypeSuffix, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group, output } = options;
1436
+ const transformedNode = plugin.transformer ? (0, _kubb_ast.transform)(node, plugin.transformer) : node;
1425
1437
  const root = node_path.default.resolve(config.root, config.output.path);
1426
1438
  const mode = (0, _kubb_core.getMode)(node_path.default.resolve(root, output.path));
1427
1439
  const params = (0, _kubb_ast.caseParams)(node.parameters, paramsCasing);
@@ -1438,7 +1450,7 @@ const typeGeneratorLegacy = (0, _kubb_core.defineGenerator)({
1438
1450
  function renderSchemaType({ schema, name, description, keysToOmit }) {
1439
1451
  if (!schema) return null;
1440
1452
  const imports = adapter.getImports(schema, (schemaName) => ({
1441
- name: resolver.default(schemaName, "type"),
1453
+ name: resolver.resolveTypeName(schemaName),
1442
1454
  path: resolver.resolveFile({
1443
1455
  name: schemaName,
1444
1456
  extname: ".ts"
@@ -1448,6 +1460,17 @@ const typeGeneratorLegacy = (0, _kubb_core.defineGenerator)({
1448
1460
  group
1449
1461
  }).path
1450
1462
  }));
1463
+ const opPrinter = printerTs({
1464
+ optionalType,
1465
+ arrayType,
1466
+ enumType,
1467
+ enumTypeSuffix,
1468
+ name,
1469
+ syntaxType,
1470
+ description,
1471
+ keysToOmit,
1472
+ resolver
1473
+ });
1451
1474
  return /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [mode === "split" && imports.map((imp) => /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Import, {
1452
1475
  root: meta.file.path,
1453
1476
  path: imp.path,
@@ -1460,15 +1483,11 @@ const typeGeneratorLegacy = (0, _kubb_core.defineGenerator)({
1460
1483
  ].join("-"))), /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(Type, {
1461
1484
  name,
1462
1485
  node: schema,
1463
- description,
1464
1486
  enumType,
1465
1487
  enumTypeSuffix,
1466
1488
  enumKeyCasing,
1467
- optionalType,
1468
- arrayType,
1469
- syntaxType,
1470
1489
  resolver,
1471
- keysToOmit
1490
+ printer: opPrinter
1472
1491
  })] });
1473
1492
  }
1474
1493
  const pathParams = params.filter((p) => p.in === "path");
@@ -1554,13 +1573,15 @@ const typeGeneratorLegacy = (0, _kubb_core.defineGenerator)({
1554
1573
  const presets = (0, _kubb_core.definePresets)({
1555
1574
  default: {
1556
1575
  name: "default",
1557
- resolvers: [resolverTs],
1558
- generators: [typeGenerator]
1576
+ resolver: resolverTs,
1577
+ generators: [typeGenerator],
1578
+ printer: printerTs
1559
1579
  },
1560
1580
  kubbV4: {
1561
1581
  name: "kubbV4",
1562
- resolvers: [resolverTsLegacy],
1563
- generators: [typeGeneratorLegacy]
1582
+ resolver: resolverTsLegacy,
1583
+ generators: [typeGeneratorLegacy],
1584
+ printer: printerTs
1564
1585
  }
1565
1586
  });
1566
1587
  //#endregion
@@ -1589,12 +1610,12 @@ const pluginTs = (0, _kubb_core.createPlugin)((options) => {
1589
1610
  const { output = {
1590
1611
  path: "types",
1591
1612
  barrelType: "named"
1592
- }, group, exclude = [], include, override = [], enumType = "asConst", enumTypeSuffix = "Key", enumKeyCasing = "none", optionalType = "questionToken", arrayType = "array", syntaxType = "type", paramsCasing, compatibilityPreset = "default", resolvers: userResolvers = [], transformers: userTransformers = [], generators: userGenerators = [] } = options;
1613
+ }, group, exclude = [], include, override = [], enumType = "asConst", enumTypeSuffix = "Key", enumKeyCasing = "none", optionalType = "questionToken", arrayType = "array", syntaxType = "type", paramsCasing, printer, compatibilityPreset = "default", resolver: userResolver, transformer: userTransformer, generators: userGenerators = [] } = options;
1593
1614
  const preset = (0, _kubb_core.getPreset)({
1594
1615
  preset: compatibilityPreset,
1595
1616
  presets,
1596
- resolvers: userResolvers,
1597
- transformers: userTransformers,
1617
+ resolver: userResolver,
1618
+ transformer: userTransformer,
1598
1619
  generators: userGenerators
1599
1620
  });
1600
1621
  let resolveNameWarning = false;
@@ -1604,6 +1625,9 @@ const pluginTs = (0, _kubb_core.createPlugin)((options) => {
1604
1625
  get resolver() {
1605
1626
  return preset.resolver;
1606
1627
  },
1628
+ get transformer() {
1629
+ return preset.transformer;
1630
+ },
1607
1631
  get options() {
1608
1632
  return {
1609
1633
  output,
@@ -1621,7 +1645,7 @@ const pluginTs = (0, _kubb_core.createPlugin)((options) => {
1621
1645
  enumKeyCasing,
1622
1646
  syntaxType,
1623
1647
  paramsCasing,
1624
- transformers: preset.transformers
1648
+ printer
1625
1649
  };
1626
1650
  },
1627
1651
  resolvePath(baseName, pathMode, options) {
@@ -1747,7 +1771,8 @@ const functionPrinter = defineFunctionPrinter((options) => ({
1747
1771
  if (node.variant === "member") return `${node.base}['${node.key}']`;
1748
1772
  if (node.variant === "struct") return `{ ${node.properties.map((p) => {
1749
1773
  const typeStr = this.transform(p.type);
1750
- return p.optional ? `${p.name}?: ${typeStr}` : `${p.name}: ${typeStr}`;
1774
+ const key = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(p.name) ? p.name : JSON.stringify(p.name);
1775
+ return p.optional ? `${key}?: ${typeStr}` : `${key}: ${typeStr}`;
1751
1776
  }).join("; ")} }`;
1752
1777
  if (node.variant === "reference") return node.name;
1753
1778
  return null;