@kubb/plugin-ts 4.13.1 → 4.14.1
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/{components-x14CeHxX.js → components-BE9rQGox.js} +74 -58
- package/dist/components-BE9rQGox.js.map +1 -0
- package/dist/{components-BkxV2jhh.cjs → components-CGcs8968.cjs} +103 -63
- package/dist/components-CGcs8968.cjs.map +1 -0
- package/dist/components.cjs +1 -2
- package/dist/components.d.cts +4 -17
- package/dist/components.d.ts +4 -17
- package/dist/components.js +2 -2
- package/dist/generators.cjs +1 -1
- package/dist/generators.d.cts +1 -1
- package/dist/generators.d.ts +1 -1
- package/dist/generators.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/{plugin-BM1VkXZS.cjs → plugin-B96TNDf4.cjs} +174 -21
- package/dist/plugin-B96TNDf4.cjs.map +1 -0
- package/dist/{plugin-BiVCDKei.js → plugin-DXyNbr_u.js} +175 -23
- package/dist/plugin-DXyNbr_u.js.map +1 -0
- package/dist/{types-WHo75HZq.d.cts → types-CKtzgWEC.d.cts} +22 -6
- package/dist/{types-De3dRAE2.d.ts → types-CnQREd_1.d.ts} +22 -6
- package/package.json +4 -4
- package/src/components/Type.tsx +33 -22
- package/src/components/index.ts +0 -1
- package/src/factory.ts +79 -5
- package/src/generators/__snapshots__/createPet.ts +1 -1
- package/src/generators/__snapshots__/createPetWithEmptySchemaTypeUnknown.ts +1 -1
- package/src/generators/__snapshots__/createPetWithEmptySchemaTypeVoid.ts +1 -1
- package/src/generators/__snapshots__/createPetWithUnknownTypeUnknown.ts +1 -1
- package/src/generators/__snapshots__/createPetWithUnknownTypeVoid.ts +1 -1
- package/src/generators/__snapshots__/deletePet.ts +1 -1
- package/src/generators/__snapshots__/enumNamesInlineLiteral.ts +6 -0
- package/src/generators/__snapshots__/getPets.ts +1 -1
- package/src/generators/__snapshots__/showPetById.ts +1 -1
- package/src/generators/__snapshots__/systemsWithExplodeForm.ts +1 -1
- package/src/generators/typeGenerator.tsx +232 -8
- package/src/parser.ts +28 -23
- package/src/plugin.ts +4 -0
- package/src/types.ts +16 -2
- package/dist/components-BkxV2jhh.cjs.map +0 -1
- package/dist/components-x14CeHxX.js.map +0 -1
- package/dist/plugin-BM1VkXZS.cjs.map +0 -1
- package/dist/plugin-BiVCDKei.js.map +0 -1
- package/src/components/OasType.tsx +0 -28
|
@@ -30,37 +30,12 @@ _kubb_core_transformers = __toESM(_kubb_core_transformers);
|
|
|
30
30
|
let _kubb_plugin_oas = require("@kubb/plugin-oas");
|
|
31
31
|
let _kubb_fabric_core_parsers_typescript = require("@kubb/fabric-core/parsers/typescript");
|
|
32
32
|
let _kubb_react_fabric = require("@kubb/react-fabric");
|
|
33
|
-
let _kubb_react_fabric_jsx_runtime = require("@kubb/react-fabric/jsx-runtime");
|
|
34
|
-
require("natural-orderby");
|
|
35
|
-
let remeda = require("remeda");
|
|
36
33
|
let typescript = require("typescript");
|
|
37
34
|
typescript = __toESM(typescript);
|
|
35
|
+
require("natural-orderby");
|
|
36
|
+
let remeda = require("remeda");
|
|
37
|
+
let _kubb_react_fabric_jsx_runtime = require("@kubb/react-fabric/jsx-runtime");
|
|
38
38
|
|
|
39
|
-
//#region src/components/OasType.tsx
|
|
40
|
-
function OasType({ name, typeName, api }) {
|
|
41
|
-
return /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [
|
|
42
|
-
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Source, {
|
|
43
|
-
name,
|
|
44
|
-
isExportable: true,
|
|
45
|
-
isIndexable: true,
|
|
46
|
-
children: `export const ${name} = ${JSON.stringify(api, void 0, 2)} as const`
|
|
47
|
-
}),
|
|
48
|
-
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)("br", {}),
|
|
49
|
-
/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Source, {
|
|
50
|
-
name: typeName,
|
|
51
|
-
isExportable: true,
|
|
52
|
-
isIndexable: true,
|
|
53
|
-
isTypeOnly: true,
|
|
54
|
-
children: /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.Type, {
|
|
55
|
-
name: typeName,
|
|
56
|
-
export: true,
|
|
57
|
-
children: `Infer<typeof ${name}>`
|
|
58
|
-
})
|
|
59
|
-
})
|
|
60
|
-
] });
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
//#endregion
|
|
64
39
|
//#region src/factory.ts
|
|
65
40
|
const { SyntaxKind, factory } = typescript.default;
|
|
66
41
|
const modifiers = {
|
|
@@ -70,6 +45,11 @@ const modifiers = {
|
|
|
70
45
|
static: factory.createModifier(typescript.default.SyntaxKind.StaticKeyword)
|
|
71
46
|
};
|
|
72
47
|
const syntaxKind = { union: SyntaxKind.UnionType };
|
|
48
|
+
function getUnknownType(unknownType) {
|
|
49
|
+
if (unknownType === "any") return keywordTypeNodes.any;
|
|
50
|
+
if (unknownType === "void") return keywordTypeNodes.void;
|
|
51
|
+
return keywordTypeNodes.unknown;
|
|
52
|
+
}
|
|
73
53
|
function isValidIdentifier(str) {
|
|
74
54
|
if (!str.length || str.trim() !== str) return false;
|
|
75
55
|
const node = typescript.default.parseIsolatedEntityName(str, typescript.default.ScriptTarget.Latest);
|
|
@@ -92,10 +72,17 @@ function createIntersectionDeclaration({ nodes, withParentheses }) {
|
|
|
92
72
|
if (withParentheses) return factory.createParenthesizedType(node);
|
|
93
73
|
return node;
|
|
94
74
|
}
|
|
95
|
-
function createArrayDeclaration({ nodes }) {
|
|
75
|
+
function createArrayDeclaration({ nodes, arrayType = "array" }) {
|
|
96
76
|
if (!nodes.length) return factory.createTupleTypeNode([]);
|
|
97
|
-
if (nodes.length === 1)
|
|
98
|
-
|
|
77
|
+
if (nodes.length === 1) {
|
|
78
|
+
const node = nodes[0];
|
|
79
|
+
if (!node) return null;
|
|
80
|
+
if (arrayType === "generic") return factory.createTypeReferenceNode(factory.createIdentifier("Array"), [node]);
|
|
81
|
+
return factory.createArrayTypeNode(node);
|
|
82
|
+
}
|
|
83
|
+
const unionType = factory.createUnionTypeNode(nodes);
|
|
84
|
+
if (arrayType === "generic") return factory.createTypeReferenceNode(factory.createIdentifier("Array"), [unionType]);
|
|
85
|
+
return factory.createArrayTypeNode(factory.createParenthesizedType(unionType));
|
|
99
86
|
}
|
|
100
87
|
/**
|
|
101
88
|
* Minimum nodes length of 2
|
|
@@ -155,7 +142,7 @@ function createTypeDeclaration({ syntax, isExportable, comments, name, type }) {
|
|
|
155
142
|
});
|
|
156
143
|
}
|
|
157
144
|
function createEnumDeclaration({ type = "enum", name, typeName, enums }) {
|
|
158
|
-
if (type === "literal") return [void 0, factory.createTypeAliasDeclaration([factory.createToken(typescript.default.SyntaxKind.ExportKeyword)], factory.createIdentifier(typeName), void 0, factory.createUnionTypeNode(enums.map(([_key, value]) => {
|
|
145
|
+
if (type === "literal" || type === "inlineLiteral") return [void 0, factory.createTypeAliasDeclaration([factory.createToken(typescript.default.SyntaxKind.ExportKeyword)], factory.createIdentifier(typeName), void 0, factory.createUnionTypeNode(enums.map(([_key, value]) => {
|
|
159
146
|
if ((0, remeda.isNumber)(value)) return factory.createLiteralTypeNode(factory.createNumericLiteral(value?.toString()));
|
|
160
147
|
if (typeof value === "boolean") return factory.createLiteralTypeNode(value ? factory.createTrue() : factory.createFalse());
|
|
161
148
|
if (value) return factory.createLiteralTypeNode(factory.createStringLiteral(value.toString()));
|
|
@@ -193,13 +180,40 @@ const keywordTypeNodes = {
|
|
|
193
180
|
string: factory.createKeywordTypeNode(typescript.default.SyntaxKind.StringKeyword),
|
|
194
181
|
boolean: factory.createKeywordTypeNode(typescript.default.SyntaxKind.BooleanKeyword),
|
|
195
182
|
undefined: factory.createKeywordTypeNode(typescript.default.SyntaxKind.UndefinedKeyword),
|
|
196
|
-
null: factory.createLiteralTypeNode(factory.createToken(typescript.default.SyntaxKind.NullKeyword))
|
|
183
|
+
null: factory.createLiteralTypeNode(factory.createToken(typescript.default.SyntaxKind.NullKeyword)),
|
|
184
|
+
never: factory.createKeywordTypeNode(typescript.default.SyntaxKind.NeverKeyword)
|
|
197
185
|
};
|
|
186
|
+
/**
|
|
187
|
+
* Converts a path like '/pet/{petId}/uploadImage' to a template literal type
|
|
188
|
+
* like `/pet/${string}/uploadImage`
|
|
189
|
+
*/
|
|
190
|
+
function createUrlTemplateType(path) {
|
|
191
|
+
if (!path.includes("{")) return factory.createLiteralTypeNode(factory.createStringLiteral(path));
|
|
192
|
+
const segments = path.split(/(\{[^}]+\})/);
|
|
193
|
+
const parts = [];
|
|
194
|
+
const parameterIndices = [];
|
|
195
|
+
segments.forEach((segment) => {
|
|
196
|
+
if (segment.startsWith("{") && segment.endsWith("}")) {
|
|
197
|
+
parameterIndices.push(parts.length);
|
|
198
|
+
parts.push(segment);
|
|
199
|
+
} else if (segment) parts.push(segment);
|
|
200
|
+
});
|
|
201
|
+
const head = typescript.default.factory.createTemplateHead(parts[0] || "");
|
|
202
|
+
const templateSpans = [];
|
|
203
|
+
parameterIndices.forEach((paramIndex, i) => {
|
|
204
|
+
const isLast = i === parameterIndices.length - 1;
|
|
205
|
+
const nextPart = parts[paramIndex + 1] || "";
|
|
206
|
+
const literal = isLast ? typescript.default.factory.createTemplateTail(nextPart) : typescript.default.factory.createTemplateMiddle(nextPart);
|
|
207
|
+
templateSpans.push(typescript.default.factory.createTemplateLiteralTypeSpan(keywordTypeNodes.string, literal));
|
|
208
|
+
});
|
|
209
|
+
return typescript.default.factory.createTemplateLiteralType(head, templateSpans);
|
|
210
|
+
}
|
|
198
211
|
const createTypeLiteralNode = factory.createTypeLiteralNode;
|
|
199
212
|
const createTypeReferenceNode = factory.createTypeReferenceNode;
|
|
200
213
|
const createNumericLiteral = factory.createNumericLiteral;
|
|
201
214
|
const createStringLiteral = factory.createStringLiteral;
|
|
202
215
|
const createArrayTypeNode = factory.createArrayTypeNode;
|
|
216
|
+
const createParenthesizedType = factory.createParenthesizedType;
|
|
203
217
|
const createLiteralTypeNode = factory.createLiteralTypeNode;
|
|
204
218
|
const createNull = factory.createNull;
|
|
205
219
|
const createIdentifier = factory.createIdentifier;
|
|
@@ -208,6 +222,8 @@ const createTupleTypeNode = factory.createTupleTypeNode;
|
|
|
208
222
|
const createRestTypeNode = factory.createRestTypeNode;
|
|
209
223
|
const createTrue = factory.createTrue;
|
|
210
224
|
const createFalse = factory.createFalse;
|
|
225
|
+
const createIndexedAccessTypeNode = factory.createIndexedAccessTypeNode;
|
|
226
|
+
const createTypeOperatorNode = factory.createTypeOperatorNode;
|
|
211
227
|
|
|
212
228
|
//#endregion
|
|
213
229
|
//#region src/parser.ts
|
|
@@ -227,9 +243,12 @@ const typeKeywordMapper = {
|
|
|
227
243
|
nullable: void 0,
|
|
228
244
|
null: () => keywordTypeNodes.null,
|
|
229
245
|
nullish: void 0,
|
|
230
|
-
array: (nodes) => {
|
|
246
|
+
array: (nodes, arrayType) => {
|
|
231
247
|
if (!nodes) return;
|
|
232
|
-
return createArrayDeclaration({
|
|
248
|
+
return createArrayDeclaration({
|
|
249
|
+
nodes,
|
|
250
|
+
arrayType
|
|
251
|
+
});
|
|
233
252
|
},
|
|
234
253
|
tuple: (nodes, rest, min, max) => {
|
|
235
254
|
if (!nodes) return;
|
|
@@ -316,7 +335,6 @@ const parse = (0, _kubb_plugin_oas.createParser)({
|
|
|
316
335
|
handlers: {
|
|
317
336
|
union(tree, options) {
|
|
318
337
|
const { current, schema, name } = tree;
|
|
319
|
-
if (!(0, _kubb_plugin_oas.isKeyword)(current, _kubb_plugin_oas.schemaKeywords.union)) return void 0;
|
|
320
338
|
return typeKeywordMapper.union(current.args.map((it) => this.parse({
|
|
321
339
|
schema,
|
|
322
340
|
parent: current,
|
|
@@ -327,7 +345,6 @@ const parse = (0, _kubb_plugin_oas.createParser)({
|
|
|
327
345
|
},
|
|
328
346
|
and(tree, options) {
|
|
329
347
|
const { current, schema, name } = tree;
|
|
330
|
-
if (!(0, _kubb_plugin_oas.isKeyword)(current, _kubb_plugin_oas.schemaKeywords.and)) return void 0;
|
|
331
348
|
return typeKeywordMapper.and(current.args.map((it) => this.parse({
|
|
332
349
|
schema,
|
|
333
350
|
parent: current,
|
|
@@ -338,33 +355,34 @@ const parse = (0, _kubb_plugin_oas.createParser)({
|
|
|
338
355
|
},
|
|
339
356
|
array(tree, options) {
|
|
340
357
|
const { current, schema, name } = tree;
|
|
341
|
-
if (!(0, _kubb_plugin_oas.isKeyword)(current, _kubb_plugin_oas.schemaKeywords.array)) return void 0;
|
|
342
358
|
return typeKeywordMapper.array(current.args.items.map((it) => this.parse({
|
|
343
359
|
schema,
|
|
344
360
|
parent: current,
|
|
345
361
|
name,
|
|
346
362
|
current: it,
|
|
347
363
|
siblings: []
|
|
348
|
-
}, options)).filter(Boolean));
|
|
364
|
+
}, options)).filter(Boolean), options.arrayType);
|
|
349
365
|
},
|
|
350
366
|
enum(tree, options) {
|
|
351
367
|
const { current } = tree;
|
|
352
|
-
if (
|
|
368
|
+
if (options.enumType === "inlineLiteral") {
|
|
369
|
+
const enumValues = current.args.items.map((item) => item.value).filter((value) => value !== void 0 && value !== null).map((value) => {
|
|
370
|
+
const format = typeof value === "number" ? "number" : typeof value === "boolean" ? "boolean" : "string";
|
|
371
|
+
return typeKeywordMapper.const(value, format);
|
|
372
|
+
}).filter(Boolean);
|
|
373
|
+
return typeKeywordMapper.union(enumValues);
|
|
374
|
+
}
|
|
353
375
|
return typeKeywordMapper.enum(options.enumType === "asConst" ? `${current.args.typeName}Key` : current.args.typeName);
|
|
354
376
|
},
|
|
355
377
|
ref(tree, _options) {
|
|
356
378
|
const { current } = tree;
|
|
357
|
-
if (!(0, _kubb_plugin_oas.isKeyword)(current, _kubb_plugin_oas.schemaKeywords.ref)) return void 0;
|
|
358
379
|
return typeKeywordMapper.ref(current.args.name);
|
|
359
380
|
},
|
|
360
|
-
blob(
|
|
361
|
-
const { current } = tree;
|
|
362
|
-
if (!(0, _kubb_plugin_oas.isKeyword)(current, _kubb_plugin_oas.schemaKeywords.blob)) return void 0;
|
|
381
|
+
blob() {
|
|
363
382
|
return typeKeywordMapper.blob();
|
|
364
383
|
},
|
|
365
384
|
tuple(tree, options) {
|
|
366
385
|
const { current, schema, name } = tree;
|
|
367
|
-
if (!(0, _kubb_plugin_oas.isKeyword)(current, _kubb_plugin_oas.schemaKeywords.tuple)) return void 0;
|
|
368
386
|
return typeKeywordMapper.tuple(current.args.items.map((it) => this.parse({
|
|
369
387
|
schema,
|
|
370
388
|
parent: current,
|
|
@@ -381,12 +399,10 @@ const parse = (0, _kubb_plugin_oas.createParser)({
|
|
|
381
399
|
},
|
|
382
400
|
const(tree, _options) {
|
|
383
401
|
const { current } = tree;
|
|
384
|
-
if (!(0, _kubb_plugin_oas.isKeyword)(current, _kubb_plugin_oas.schemaKeywords.const)) return void 0;
|
|
385
402
|
return typeKeywordMapper.const(current.args.name, current.args.format);
|
|
386
403
|
},
|
|
387
404
|
object(tree, options) {
|
|
388
405
|
const { current, schema, name } = tree;
|
|
389
|
-
if (!(0, _kubb_plugin_oas.isKeyword)(current, _kubb_plugin_oas.schemaKeywords.object)) return void 0;
|
|
390
406
|
const properties = Object.entries(current.args?.properties || {}).filter((item) => {
|
|
391
407
|
const schemas = item[1];
|
|
392
408
|
return schemas && typeof schemas.map === "function";
|
|
@@ -468,19 +484,15 @@ const parse = (0, _kubb_plugin_oas.createParser)({
|
|
|
468
484
|
patternProperties
|
|
469
485
|
].filter(Boolean));
|
|
470
486
|
},
|
|
471
|
-
datetime(
|
|
472
|
-
const { current } = tree;
|
|
473
|
-
if (!(0, _kubb_plugin_oas.isKeyword)(current, _kubb_plugin_oas.schemaKeywords.datetime)) return void 0;
|
|
487
|
+
datetime() {
|
|
474
488
|
return typeKeywordMapper.datetime();
|
|
475
489
|
},
|
|
476
490
|
date(tree) {
|
|
477
491
|
const { current } = tree;
|
|
478
|
-
if (!(0, _kubb_plugin_oas.isKeyword)(current, _kubb_plugin_oas.schemaKeywords.date)) return void 0;
|
|
479
492
|
return typeKeywordMapper.date(current.args.type);
|
|
480
493
|
},
|
|
481
494
|
time(tree) {
|
|
482
495
|
const { current } = tree;
|
|
483
|
-
if (!(0, _kubb_plugin_oas.isKeyword)(current, _kubb_plugin_oas.schemaKeywords.time)) return void 0;
|
|
484
496
|
return typeKeywordMapper.time(current.args.type);
|
|
485
497
|
}
|
|
486
498
|
}
|
|
@@ -488,7 +500,7 @@ const parse = (0, _kubb_plugin_oas.createParser)({
|
|
|
488
500
|
|
|
489
501
|
//#endregion
|
|
490
502
|
//#region src/components/Type.tsx
|
|
491
|
-
function Type({ name, typedName, tree, keysToOmit, schema, optionalType, syntaxType, enumType, mapper, description }) {
|
|
503
|
+
function Type({ name, typedName, tree, keysToOmit, schema, optionalType, arrayType, syntaxType, enumType, mapper, description }) {
|
|
492
504
|
const typeNodes = [];
|
|
493
505
|
if (!tree.length) return "";
|
|
494
506
|
const schemaFromTree = tree.find((item) => item.keyword === _kubb_plugin_oas.schemaKeywords.schema);
|
|
@@ -501,6 +513,7 @@ function Type({ name, typedName, tree, keysToOmit, schema, optionalType, syntaxT
|
|
|
501
513
|
siblings
|
|
502
514
|
}, {
|
|
503
515
|
optionalType,
|
|
516
|
+
arrayType,
|
|
504
517
|
enumType,
|
|
505
518
|
mapper
|
|
506
519
|
})).filter(Boolean).at(0) || typeKeywordMapper.undefined();
|
|
@@ -510,7 +523,8 @@ function Type({ name, typedName, tree, keysToOmit, schema, optionalType, syntaxT
|
|
|
510
523
|
if (isDirectEnum || isEnumOnly) {
|
|
511
524
|
const typeNameWithKey = `${enumSchemas[0].args.typeName}Key`;
|
|
512
525
|
type = createTypeReferenceNode(typeNameWithKey);
|
|
513
|
-
if (schema.type === "array") type =
|
|
526
|
+
if (schema.type === "array") if (arrayType === "generic") type = createTypeReferenceNode(createIdentifier("Array"), [type]);
|
|
527
|
+
else type = createArrayTypeNode(type);
|
|
514
528
|
}
|
|
515
529
|
}
|
|
516
530
|
if (schemaFromTree && (0, _kubb_plugin_oas.isKeyword)(schemaFromTree, _kubb_plugin_oas.schemaKeywords.schema)) {
|
|
@@ -557,7 +571,9 @@ function Type({ name, typedName, tree, keysToOmit, schema, optionalType, syntaxT
|
|
|
557
571
|
typeName
|
|
558
572
|
};
|
|
559
573
|
});
|
|
560
|
-
|
|
574
|
+
const shouldExportEnums = enumType !== "inlineLiteral";
|
|
575
|
+
const shouldExportType = enumType === "inlineLiteral" || enums.every((item) => item.typeName !== name);
|
|
576
|
+
return /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [shouldExportEnums && enums.map(({ name: name$1, nameNode, typeName, typeNode }) => /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsxs)(_kubb_react_fabric_jsx_runtime.Fragment, { children: [nameNode && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Source, {
|
|
561
577
|
name: name$1,
|
|
562
578
|
isExportable: true,
|
|
563
579
|
isIndexable: true,
|
|
@@ -578,7 +594,7 @@ function Type({ name, typedName, tree, keysToOmit, schema, optionalType, syntaxT
|
|
|
578
594
|
void 0
|
|
579
595
|
].includes(enumType),
|
|
580
596
|
children: (0, _kubb_fabric_core_parsers_typescript.safePrint)(typeNode)
|
|
581
|
-
})] })),
|
|
597
|
+
})] })), shouldExportType && /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.File.Source, {
|
|
582
598
|
name: typedName,
|
|
583
599
|
isTypeOnly: true,
|
|
584
600
|
isExportable: true,
|
|
@@ -588,12 +604,6 @@ function Type({ name, typedName, tree, keysToOmit, schema, optionalType, syntaxT
|
|
|
588
604
|
}
|
|
589
605
|
|
|
590
606
|
//#endregion
|
|
591
|
-
Object.defineProperty(exports, 'OasType', {
|
|
592
|
-
enumerable: true,
|
|
593
|
-
get: function () {
|
|
594
|
-
return OasType;
|
|
595
|
-
}
|
|
596
|
-
});
|
|
597
607
|
Object.defineProperty(exports, 'Type', {
|
|
598
608
|
enumerable: true,
|
|
599
609
|
get: function () {
|
|
@@ -612,6 +622,12 @@ Object.defineProperty(exports, 'createIdentifier', {
|
|
|
612
622
|
return createIdentifier;
|
|
613
623
|
}
|
|
614
624
|
});
|
|
625
|
+
Object.defineProperty(exports, 'createIndexedAccessTypeNode', {
|
|
626
|
+
enumerable: true,
|
|
627
|
+
get: function () {
|
|
628
|
+
return createIndexedAccessTypeNode;
|
|
629
|
+
}
|
|
630
|
+
});
|
|
615
631
|
Object.defineProperty(exports, 'createPropertySignature', {
|
|
616
632
|
enumerable: true,
|
|
617
633
|
get: function () {
|
|
@@ -630,6 +646,12 @@ Object.defineProperty(exports, 'createTypeLiteralNode', {
|
|
|
630
646
|
return createTypeLiteralNode;
|
|
631
647
|
}
|
|
632
648
|
});
|
|
649
|
+
Object.defineProperty(exports, 'createTypeOperatorNode', {
|
|
650
|
+
enumerable: true,
|
|
651
|
+
get: function () {
|
|
652
|
+
return createTypeOperatorNode;
|
|
653
|
+
}
|
|
654
|
+
});
|
|
633
655
|
Object.defineProperty(exports, 'createTypeReferenceNode', {
|
|
634
656
|
enumerable: true,
|
|
635
657
|
get: function () {
|
|
@@ -642,10 +664,28 @@ Object.defineProperty(exports, 'createUnionDeclaration', {
|
|
|
642
664
|
return createUnionDeclaration;
|
|
643
665
|
}
|
|
644
666
|
});
|
|
667
|
+
Object.defineProperty(exports, 'createUrlTemplateType', {
|
|
668
|
+
enumerable: true,
|
|
669
|
+
get: function () {
|
|
670
|
+
return createUrlTemplateType;
|
|
671
|
+
}
|
|
672
|
+
});
|
|
673
|
+
Object.defineProperty(exports, 'getUnknownType', {
|
|
674
|
+
enumerable: true,
|
|
675
|
+
get: function () {
|
|
676
|
+
return getUnknownType;
|
|
677
|
+
}
|
|
678
|
+
});
|
|
679
|
+
Object.defineProperty(exports, 'keywordTypeNodes', {
|
|
680
|
+
enumerable: true,
|
|
681
|
+
get: function () {
|
|
682
|
+
return keywordTypeNodes;
|
|
683
|
+
}
|
|
684
|
+
});
|
|
645
685
|
Object.defineProperty(exports, 'modifiers', {
|
|
646
686
|
enumerable: true,
|
|
647
687
|
get: function () {
|
|
648
688
|
return modifiers;
|
|
649
689
|
}
|
|
650
690
|
});
|
|
651
|
-
//# sourceMappingURL=components-
|
|
691
|
+
//# sourceMappingURL=components-CGcs8968.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-CGcs8968.cjs","names":["ts","modifiers","questionToken","initializer: ts.Expression","parts: string[]","parameterIndices: number[]","templateSpans: ts.TemplateLiteralTypeSpan[]","factory.createTypeLiteralNode","factory.createArrayDeclaration","factory.createOptionalTypeNode","factory.createRestTypeNode","factory.createArrayTypeNode","factory.createTupleTypeNode","factory.createTypeReferenceNode","factory.createUnionDeclaration","factory.createLiteralTypeNode","factory.createTrue","factory.createFalse","factory.createNumericLiteral","factory.createStringLiteral","factory.createIdentifier","factory.createIntersectionDeclaration","propertyName","name","schema","schemaKeywords","factory.createPropertySignature","factory.appendJSDocToNode","transformers","additionalProperties: any","factory.createIndexSignature","patternProperties: ts.TypeNode | ts.IndexSignatureDeclaration | undefined","typeNodes: ts.Node[]","schemaKeywords","SchemaGenerator","factory.createTypeReferenceNode","factory.createIdentifier","factory.createArrayTypeNode","factory.createUnionDeclaration","factory.createTypeDeclaration","factory.createOmitDeclaration","transformers","name","factory.createEnumDeclaration","File"],"sources":["../src/factory.ts","../src/parser.ts","../src/components/Type.tsx"],"sourcesContent":["import { orderBy } from 'natural-orderby'\nimport { isNumber } from 'remeda'\nimport ts from 'typescript'\n\nconst { SyntaxKind, factory } = ts\n\n// https://ts-ast-viewer.com/\n\nexport const modifiers = {\n async: factory.createModifier(ts.SyntaxKind.AsyncKeyword),\n export: factory.createModifier(ts.SyntaxKind.ExportKeyword),\n const: factory.createModifier(ts.SyntaxKind.ConstKeyword),\n static: factory.createModifier(ts.SyntaxKind.StaticKeyword),\n} as const\n\nexport const syntaxKind = {\n union: SyntaxKind.UnionType as 192,\n} as const\n\nexport function getUnknownType(unknownType: 'any' | 'unknown' | 'void' | undefined) {\n if (unknownType === 'any') {\n return keywordTypeNodes.any\n }\n if (unknownType === 'void') {\n return keywordTypeNodes.void\n }\n\n return keywordTypeNodes.unknown\n}\nfunction isValidIdentifier(str: string): boolean {\n if (!str.length || str.trim() !== str) {\n return false\n }\n const node = ts.parseIsolatedEntityName(str, ts.ScriptTarget.Latest)\n\n return !!node && node.kind === ts.SyntaxKind.Identifier && ts.identifierToKeywordKind(node.kind as unknown as ts.Identifier) === undefined\n}\n\nfunction propertyName(name: string | ts.PropertyName): ts.PropertyName {\n if (typeof name === 'string') {\n const isValid = isValidIdentifier(name)\n return isValid ? factory.createIdentifier(name) : factory.createStringLiteral(name)\n }\n return name\n}\n\nconst questionToken = factory.createToken(ts.SyntaxKind.QuestionToken)\n\nexport function createQuestionToken(token?: boolean | ts.QuestionToken) {\n if (!token) {\n return undefined\n }\n if (token === true) {\n return questionToken\n }\n return token\n}\n\nexport function createIntersectionDeclaration({ nodes, withParentheses }: { nodes: Array<ts.TypeNode>; withParentheses?: boolean }): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createIntersectionTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\n/**\n * Minimum nodes length of 2\n * @example `string & number`\n */\nexport function createTupleDeclaration({ nodes, withParentheses }: { nodes: Array<ts.TypeNode>; withParentheses?: boolean }): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createTupleTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\nexport function createArrayDeclaration({ nodes, arrayType = 'array' }: { nodes: Array<ts.TypeNode>; arrayType?: 'array' | 'generic' }): ts.TypeNode | null {\n if (!nodes.length) {\n return factory.createTupleTypeNode([])\n }\n\n if (nodes.length === 1) {\n const node = nodes[0]\n if (!node) {\n return null\n }\n if (arrayType === 'generic') {\n return factory.createTypeReferenceNode(factory.createIdentifier('Array'), [node])\n }\n return factory.createArrayTypeNode(node)\n }\n\n // For union types (multiple nodes), respect arrayType preference\n const unionType = factory.createUnionTypeNode(nodes)\n if (arrayType === 'generic') {\n return factory.createTypeReferenceNode(factory.createIdentifier('Array'), [unionType])\n }\n // For array syntax with unions, we need parentheses: (string | number)[]\n return factory.createArrayTypeNode(factory.createParenthesizedType(unionType))\n}\n\n/**\n * Minimum nodes length of 2\n * @example `string | number`\n */\nexport function createUnionDeclaration({ nodes, withParentheses }: { nodes: Array<ts.TypeNode>; withParentheses?: boolean }): ts.TypeNode {\n if (!nodes.length) {\n return keywordTypeNodes.any\n }\n\n if (nodes.length === 1) {\n return nodes[0] as ts.TypeNode\n }\n\n const node = factory.createUnionTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\nexport function createPropertySignature({\n readOnly,\n modifiers = [],\n name,\n questionToken,\n type,\n}: {\n readOnly?: boolean\n modifiers?: Array<ts.Modifier>\n name: ts.PropertyName | string\n questionToken?: ts.QuestionToken | boolean\n type?: ts.TypeNode\n}) {\n return factory.createPropertySignature(\n [...modifiers, readOnly ? factory.createToken(ts.SyntaxKind.ReadonlyKeyword) : undefined].filter(Boolean),\n propertyName(name),\n createQuestionToken(questionToken),\n type,\n )\n}\n\nexport function createParameterSignature(\n name: string | ts.BindingName,\n {\n modifiers,\n dotDotDotToken,\n questionToken,\n type,\n initializer,\n }: {\n decorators?: Array<ts.Decorator>\n modifiers?: Array<ts.Modifier>\n dotDotDotToken?: ts.DotDotDotToken\n questionToken?: ts.QuestionToken | boolean\n type?: ts.TypeNode\n initializer?: ts.Expression\n },\n): ts.ParameterDeclaration {\n return factory.createParameterDeclaration(modifiers, dotDotDotToken, name, createQuestionToken(questionToken), type, initializer)\n}\n\nexport function createJSDoc({ comments }: { comments: string[] }) {\n if (!comments.length) {\n return null\n }\n return factory.createJSDocComment(\n factory.createNodeArray(\n comments.map((comment, i) => {\n if (i === comments.length - 1) {\n return factory.createJSDocText(comment)\n }\n\n return factory.createJSDocText(`${comment}\\n`)\n }),\n ),\n )\n}\n\n/**\n * @link https://github.com/microsoft/TypeScript/issues/44151\n */\nexport function appendJSDocToNode<TNode extends ts.Node>({ node, comments }: { node: TNode; comments: Array<string | undefined> }) {\n const filteredComments = comments.filter(Boolean)\n\n if (!filteredComments.length) {\n return node\n }\n\n const text = filteredComments.reduce((acc = '', comment = '') => {\n return `${acc}\\n * ${comment.replaceAll('*/', '*\\\\/')}`\n }, '*')\n\n // Use the node directly instead of spreading to avoid creating Unknown nodes\n // TypeScript's addSyntheticLeadingComment accepts the node as-is\n return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, `${text || '*'}\\n`, true)\n}\n\nexport function createIndexSignature(\n type: ts.TypeNode,\n {\n modifiers,\n indexName = 'key',\n indexType = factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n }: {\n indexName?: string\n indexType?: ts.TypeNode\n decorators?: Array<ts.Decorator>\n modifiers?: Array<ts.Modifier>\n } = {},\n) {\n return factory.createIndexSignature(modifiers, [createParameterSignature(indexName, { type: indexType })], type)\n}\n\nexport function createTypeAliasDeclaration({\n modifiers,\n name,\n typeParameters,\n type,\n}: {\n modifiers?: Array<ts.Modifier>\n name: string | ts.Identifier\n typeParameters?: Array<ts.TypeParameterDeclaration>\n type: ts.TypeNode\n}) {\n return factory.createTypeAliasDeclaration(modifiers, name, typeParameters, type)\n}\n\nexport function createInterfaceDeclaration({\n modifiers,\n name,\n typeParameters,\n members,\n}: {\n modifiers?: Array<ts.Modifier>\n name: string | ts.Identifier\n typeParameters?: Array<ts.TypeParameterDeclaration>\n members: Array<ts.TypeElement>\n}) {\n return factory.createInterfaceDeclaration(modifiers, name, typeParameters, undefined, members)\n}\n\nexport function createTypeDeclaration({\n syntax,\n isExportable,\n comments,\n name,\n type,\n}: {\n syntax: 'type' | 'interface'\n comments: Array<string | undefined>\n isExportable?: boolean\n name: string | ts.Identifier\n type: ts.TypeNode\n}) {\n if (syntax === 'interface' && 'members' in type) {\n const node = createInterfaceDeclaration({\n members: type.members as Array<ts.TypeElement>,\n modifiers: isExportable ? [modifiers.export] : [],\n name,\n typeParameters: undefined,\n })\n\n return appendJSDocToNode({\n node,\n comments,\n })\n }\n\n const node = createTypeAliasDeclaration({\n type,\n modifiers: isExportable ? [modifiers.export] : [],\n name,\n typeParameters: undefined,\n })\n\n return appendJSDocToNode({\n node,\n comments,\n })\n}\n\nexport function createNamespaceDeclaration({ statements, name }: { name: string; statements: ts.Statement[] }) {\n return factory.createModuleDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(name),\n factory.createModuleBlock(statements),\n ts.NodeFlags.Namespace,\n )\n}\n\n/**\n * In { propertyName: string; name?: string } is `name` being used to make the type more unique when multiple same names are used.\n * @example `import { Pet as Cat } from './Pet'`\n */\nexport function createImportDeclaration({\n name,\n path,\n isTypeOnly = false,\n isNameSpace = false,\n}: {\n name: string | Array<string | { propertyName: string; name?: string }>\n path: string\n isTypeOnly?: boolean\n isNameSpace?: boolean\n}) {\n if (!Array.isArray(name)) {\n let importPropertyName: ts.Identifier | undefined = factory.createIdentifier(name)\n let importName: ts.NamedImportBindings | undefined\n\n if (isNameSpace) {\n importPropertyName = undefined\n importName = factory.createNamespaceImport(factory.createIdentifier(name))\n }\n\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(isTypeOnly, importPropertyName, importName),\n factory.createStringLiteral(path),\n undefined,\n )\n }\n\n // Sort the imports alphabetically for consistent output across platforms\n const sortedName = orderBy(name, [(item) => (typeof item === 'object' ? item.propertyName : item)])\n\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(\n isTypeOnly,\n undefined,\n factory.createNamedImports(\n sortedName.map((item) => {\n if (typeof item === 'object') {\n const obj = item as { propertyName: string; name?: string }\n if (obj.name) {\n return factory.createImportSpecifier(false, factory.createIdentifier(obj.propertyName), factory.createIdentifier(obj.name))\n }\n\n return factory.createImportSpecifier(false, undefined, factory.createIdentifier(obj.propertyName))\n }\n\n return factory.createImportSpecifier(false, undefined, factory.createIdentifier(item))\n }),\n ),\n ),\n factory.createStringLiteral(path),\n undefined,\n )\n}\n\nexport function createExportDeclaration({\n path,\n asAlias,\n isTypeOnly = false,\n name,\n}: {\n path: string\n asAlias?: boolean\n isTypeOnly?: boolean\n name?: string | Array<ts.Identifier | string>\n}) {\n if (name && !Array.isArray(name) && !asAlias) {\n console.warn(`When using name as string, asAlias should be true ${name}`)\n }\n\n if (!Array.isArray(name)) {\n const parsedName = name?.match(/^\\d/) ? `_${name?.slice(1)}` : name\n\n return factory.createExportDeclaration(\n undefined,\n isTypeOnly,\n asAlias && parsedName ? factory.createNamespaceExport(factory.createIdentifier(parsedName)) : undefined,\n factory.createStringLiteral(path),\n undefined,\n )\n }\n\n // Sort the exports alphabetically for consistent output across platforms\n const sortedName = orderBy(name, [(propertyName) => (typeof propertyName === 'string' ? propertyName : propertyName.text)])\n\n return factory.createExportDeclaration(\n undefined,\n isTypeOnly,\n factory.createNamedExports(\n sortedName.map((propertyName) => {\n return factory.createExportSpecifier(false, undefined, typeof propertyName === 'string' ? factory.createIdentifier(propertyName) : propertyName)\n }),\n ),\n factory.createStringLiteral(path),\n undefined,\n )\n}\n\nexport function createEnumDeclaration({\n type = 'enum',\n name,\n typeName,\n enums,\n}: {\n /**\n * Choose to use `enum`, `asConst`, `asPascalConst`, `constEnum`, or `literal` for enums.\n * - `enum`: TypeScript enum\n * - `asConst`: const with camelCase name (e.g., `petType`)\n * - `asPascalConst`: const with PascalCase name (e.g., `PetType`)\n * - `constEnum`: const enum\n * - `literal`: literal union type\n * @default `'enum'`\n */\n type?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal' | 'inlineLiteral'\n /**\n * Enum name in camelCase.\n */\n name: string\n /**\n * Enum name in PascalCase.\n */\n typeName: string\n enums: [key: string | number, value: string | number | boolean][]\n}): [name: ts.Node | undefined, type: ts.Node] {\n if (type === 'literal' || type === 'inlineLiteral') {\n return [\n undefined,\n factory.createTypeAliasDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(typeName),\n undefined,\n factory.createUnionTypeNode(\n enums\n .map(([_key, value]) => {\n if (isNumber(value)) {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(value?.toString()))\n }\n\n if (typeof value === 'boolean') {\n return factory.createLiteralTypeNode(value ? factory.createTrue() : factory.createFalse())\n }\n if (value) {\n return factory.createLiteralTypeNode(factory.createStringLiteral(value.toString()))\n }\n\n return undefined\n })\n .filter(Boolean),\n ),\n ),\n ]\n }\n\n if (type === 'enum' || type === 'constEnum') {\n return [\n undefined,\n factory.createEnumDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword), type === 'constEnum' ? factory.createToken(ts.SyntaxKind.ConstKeyword) : undefined].filter(Boolean),\n factory.createIdentifier(typeName),\n enums\n .map(([key, value]) => {\n let initializer: ts.Expression = factory.createStringLiteral(value?.toString())\n const isExactNumber = Number.parseInt(value.toString(), 10) === value\n\n if (isExactNumber && isNumber(Number.parseInt(value.toString(), 10))) {\n initializer = factory.createNumericLiteral(value as number)\n }\n\n if (typeof value === 'boolean') {\n initializer = value ? factory.createTrue() : factory.createFalse()\n }\n\n if (isNumber(Number.parseInt(key.toString(), 10))) {\n return factory.createEnumMember(factory.createStringLiteral(`${typeName}_${key}`), initializer)\n }\n\n if (key) {\n return factory.createEnumMember(factory.createStringLiteral(`${key}`), initializer)\n }\n\n return undefined\n })\n .filter(Boolean),\n ),\n ]\n }\n\n // used when using `as const` instead of an TypeScript enum.\n const identifierName = type === 'asPascalConst' ? typeName : name\n\n return [\n factory.createVariableStatement(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier(identifierName),\n undefined,\n undefined,\n factory.createAsExpression(\n factory.createObjectLiteralExpression(\n enums\n .map(([key, value]) => {\n let initializer: ts.Expression = factory.createStringLiteral(value?.toString())\n\n if (isNumber(value)) {\n // Error: Negative numbers should be created in combination with createPrefixUnaryExpression factory.\n // The method createNumericLiteral only accepts positive numbers\n // or those combined with createPrefixUnaryExpression.\n // Therefore, we need to ensure that the number is not negative.\n if (value < 0) {\n initializer = factory.createPrefixUnaryExpression(ts.SyntaxKind.MinusToken, factory.createNumericLiteral(Math.abs(value)))\n } else {\n initializer = factory.createNumericLiteral(value)\n }\n }\n\n if (typeof value === 'boolean') {\n initializer = value ? factory.createTrue() : factory.createFalse()\n }\n\n if (key) {\n return factory.createPropertyAssignment(factory.createStringLiteral(`${key}`), initializer)\n }\n\n return undefined\n })\n .filter(Boolean),\n true,\n ),\n factory.createTypeReferenceNode(factory.createIdentifier('const'), undefined),\n ),\n ),\n ],\n ts.NodeFlags.Const,\n ),\n ),\n factory.createTypeAliasDeclaration(\n type === 'asPascalConst' ? [] : [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(typeName),\n undefined,\n factory.createIndexedAccessTypeNode(\n factory.createParenthesizedType(factory.createTypeQueryNode(factory.createIdentifier(identifierName), undefined)),\n factory.createTypeOperatorNode(ts.SyntaxKind.KeyOfKeyword, factory.createTypeQueryNode(factory.createIdentifier(identifierName), undefined)),\n ),\n ),\n ]\n}\n\nexport function createOmitDeclaration({ keys, type, nonNullable }: { keys: Array<string> | string; type: ts.TypeNode; nonNullable?: boolean }) {\n const node = nonNullable ? factory.createTypeReferenceNode(factory.createIdentifier('NonNullable'), [type]) : type\n\n if (Array.isArray(keys)) {\n return factory.createTypeReferenceNode(factory.createIdentifier('Omit'), [\n node,\n factory.createUnionTypeNode(\n keys.map((key) => {\n return factory.createLiteralTypeNode(factory.createStringLiteral(key))\n }),\n ),\n ])\n }\n\n return factory.createTypeReferenceNode(factory.createIdentifier('Omit'), [node, factory.createLiteralTypeNode(factory.createStringLiteral(keys))])\n}\n\nexport const keywordTypeNodes = {\n any: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n unknown: factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),\n void: factory.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword),\n number: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n integer: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n object: factory.createKeywordTypeNode(ts.SyntaxKind.ObjectKeyword),\n string: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n boolean: factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword),\n undefined: factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword),\n null: factory.createLiteralTypeNode(factory.createToken(ts.SyntaxKind.NullKeyword)),\n never: factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword),\n} as const\n\n/**\n * Converts a path like '/pet/{petId}/uploadImage' to a template literal type\n * like `/pet/${string}/uploadImage`\n */\nexport function createUrlTemplateType(path: string): ts.TypeNode {\n // If no parameters, return literal string type\n if (!path.includes('{')) {\n return factory.createLiteralTypeNode(factory.createStringLiteral(path))\n }\n\n // Split path by parameter placeholders, e.g. '/pet/{petId}/upload' -> ['/pet/', 'petId', '/upload']\n const segments = path.split(/(\\{[^}]+\\})/)\n\n // Separate static parts from parameter placeholders\n const parts: string[] = []\n const parameterIndices: number[] = []\n\n segments.forEach((segment) => {\n if (segment.startsWith('{') && segment.endsWith('}')) {\n // This is a parameter placeholder\n parameterIndices.push(parts.length)\n parts.push(segment) // Will be replaced with ${string}\n } else if (segment) {\n // This is a static part\n parts.push(segment)\n }\n })\n\n // Build template literal type\n // Template literal structure: head + templateSpans[]\n // For '/pet/{petId}/upload': head = '/pet/', spans = [{ type: string, literal: '/upload' }]\n\n const head = ts.factory.createTemplateHead(parts[0] || '')\n const templateSpans: ts.TemplateLiteralTypeSpan[] = []\n\n parameterIndices.forEach((paramIndex, i) => {\n const isLast = i === parameterIndices.length - 1\n const nextPart = parts[paramIndex + 1] || ''\n\n const literal = isLast ? ts.factory.createTemplateTail(nextPart) : ts.factory.createTemplateMiddle(nextPart)\n\n templateSpans.push(ts.factory.createTemplateLiteralTypeSpan(keywordTypeNodes.string, literal))\n })\n\n return ts.factory.createTemplateLiteralType(head, templateSpans)\n}\n\nexport const createTypeLiteralNode = factory.createTypeLiteralNode\n\nexport const createTypeReferenceNode = factory.createTypeReferenceNode\nexport const createNumericLiteral = factory.createNumericLiteral\nexport const createStringLiteral = factory.createStringLiteral\n\nexport const createArrayTypeNode = factory.createArrayTypeNode\nexport const createParenthesizedType = factory.createParenthesizedType\n\nexport const createLiteralTypeNode = factory.createLiteralTypeNode\nexport const createNull = factory.createNull\nexport const createIdentifier = factory.createIdentifier\n\nexport const createOptionalTypeNode = factory.createOptionalTypeNode\nexport const createTupleTypeNode = factory.createTupleTypeNode\nexport const createRestTypeNode = factory.createRestTypeNode\nexport const createTrue = factory.createTrue\nexport const createFalse = factory.createFalse\nexport const createIndexedAccessTypeNode = factory.createIndexedAccessTypeNode\nexport const createTypeOperatorNode = factory.createTypeOperatorNode\n","import transformers from '@kubb/core/transformers'\nimport type { SchemaKeywordMapper, SchemaMapper } from '@kubb/plugin-oas'\nimport { createParser, isKeyword, schemaKeywords } from '@kubb/plugin-oas'\nimport type ts from 'typescript'\nimport * as factory from './factory.ts'\n\nexport const typeKeywordMapper = {\n any: () => factory.keywordTypeNodes.any,\n unknown: () => factory.keywordTypeNodes.unknown,\n void: () => factory.keywordTypeNodes.void,\n number: () => factory.keywordTypeNodes.number,\n integer: () => factory.keywordTypeNodes.number,\n object: (nodes?: ts.TypeElement[]) => {\n if (!nodes || !nodes.length) {\n return factory.keywordTypeNodes.object\n }\n\n return factory.createTypeLiteralNode(nodes)\n },\n string: () => factory.keywordTypeNodes.string,\n boolean: () => factory.keywordTypeNodes.boolean,\n undefined: () => factory.keywordTypeNodes.undefined,\n nullable: undefined,\n null: () => factory.keywordTypeNodes.null,\n nullish: undefined,\n array: (nodes?: ts.TypeNode[], arrayType?: 'array' | 'generic') => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createArrayDeclaration({ nodes, arrayType })\n },\n tuple: (nodes?: ts.TypeNode[], rest?: ts.TypeNode, min?: number, max?: number) => {\n if (!nodes) {\n return undefined\n }\n\n if (max) {\n nodes = nodes.slice(0, max)\n\n if (nodes.length < max && rest) {\n nodes = [...nodes, ...Array(max - nodes.length).fill(rest)]\n }\n }\n\n if (min) {\n nodes = nodes.map((node, index) => (index >= min ? factory.createOptionalTypeNode(node) : node))\n }\n\n if (typeof max === 'undefined' && rest) {\n nodes.push(factory.createRestTypeNode(factory.createArrayTypeNode(rest)))\n }\n\n return factory.createTupleTypeNode(nodes)\n },\n enum: (name?: string) => {\n if (!name) {\n return undefined\n }\n\n return factory.createTypeReferenceNode(name, undefined)\n },\n union: (nodes?: ts.TypeNode[]) => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createUnionDeclaration({\n withParentheses: true,\n nodes,\n })\n },\n const: (name?: string | number | boolean, format?: 'string' | 'number' | 'boolean') => {\n if (name === null || name === undefined || name === '') {\n return undefined\n }\n\n if (format === 'boolean') {\n if (name === true) {\n return factory.createLiteralTypeNode(factory.createTrue())\n }\n\n return factory.createLiteralTypeNode(factory.createFalse())\n }\n\n if (format === 'number' && typeof name === 'number') {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(name))\n }\n\n return factory.createLiteralTypeNode(factory.createStringLiteral(name.toString()))\n },\n datetime: () => factory.keywordTypeNodes.string,\n date: (type: 'date' | 'string' = 'string') =>\n type === 'string' ? factory.keywordTypeNodes.string : factory.createTypeReferenceNode(factory.createIdentifier('Date')),\n time: (type: 'date' | 'string' = 'string') =>\n type === 'string' ? factory.keywordTypeNodes.string : factory.createTypeReferenceNode(factory.createIdentifier('Date')),\n uuid: () => factory.keywordTypeNodes.string,\n url: () => factory.keywordTypeNodes.string,\n default: undefined,\n and: (nodes?: ts.TypeNode[]) => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createIntersectionDeclaration({\n withParentheses: true,\n nodes,\n })\n },\n describe: undefined,\n min: undefined,\n max: undefined,\n optional: undefined,\n matches: () => factory.keywordTypeNodes.string,\n email: () => factory.keywordTypeNodes.string,\n firstName: undefined,\n lastName: undefined,\n password: undefined,\n phone: undefined,\n readOnly: undefined,\n writeOnly: undefined,\n ref: (propertyName?: string) => {\n if (!propertyName) {\n return undefined\n }\n\n return factory.createTypeReferenceNode(propertyName, undefined)\n },\n blob: () => factory.createTypeReferenceNode('Blob', []),\n deprecated: undefined,\n example: undefined,\n schema: undefined,\n catchall: undefined,\n name: undefined,\n interface: undefined,\n exclusiveMaximum: undefined,\n exclusiveMinimum: undefined,\n} satisfies SchemaMapper<ts.TypeNode | null | undefined>\n\ntype ParserOptions = {\n /**\n * @default `'questionToken'`\n */\n optionalType: 'questionToken' | 'undefined' | 'questionTokenAndUndefined'\n /**\n * @default `'array'`\n */\n arrayType: 'array' | 'generic'\n /**\n * Choose to use `enum`, `asConst`, `asPascalConst`, `constEnum`, `literal`, or `inlineLiteral` for enums.\n * - `enum`: TypeScript enum\n * - `asConst`: const with camelCase name (e.g., `petType`)\n * - `asPascalConst`: const with PascalCase name (e.g., `PetType`)\n * - `constEnum`: const enum\n * - `literal`: literal union type\n * - `inlineLiteral`: inline enum values directly into the type (default in v5)\n * @default `'asConst'`\n * @note In Kubb v5, `inlineLiteral` will become the default.\n */\n enumType: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal' | 'inlineLiteral'\n mapper?: Record<string, ts.PropertySignature>\n}\n\n/**\n * Recursively parses a schema tree node into a corresponding TypeScript AST node.\n *\n * Maps OpenAPI schema keywords to TypeScript AST nodes using the `typeKeywordMapper`, handling complex types such as unions, intersections, arrays, tuples (with optional/rest elements and length constraints), enums, constants, references, and objects with property modifiers and documentation annotations.\n *\n * @param current - The schema node to parse.\n * @param siblings - Sibling schema nodes, used for context in certain mappings.\n * @param name - The name of the schema or property being parsed.\n * @param options - Parsing options controlling output style, property handling, and custom mappers.\n * @returns The generated TypeScript AST node, or `undefined` if the schema keyword is not mapped.\n */\nexport const parse = createParser<ts.Node | null, ParserOptions>({\n mapper: typeKeywordMapper,\n handlers: {\n union(tree, options) {\n const { current, schema, name } = tree\n\n return typeKeywordMapper.union(\n current.args.map((it) => this.parse({ schema, parent: current, name, current: it, siblings: [] }, options)).filter(Boolean) as ts.TypeNode[],\n )\n },\n and(tree, options) {\n const { current, schema, name } = tree\n\n return typeKeywordMapper.and(\n current.args.map((it) => this.parse({ schema, parent: current, name, current: it, siblings: [] }, options)).filter(Boolean) as ts.TypeNode[],\n )\n },\n array(tree, options) {\n const { current, schema, name } = tree\n\n return typeKeywordMapper.array(\n current.args.items.map((it) => this.parse({ schema, parent: current, name, current: it, siblings: [] }, options)).filter(Boolean) as ts.TypeNode[],\n options.arrayType,\n )\n },\n enum(tree, options) {\n const { current } = tree\n\n // If enumType is 'inlineLiteral', generate the literal union inline instead of a type reference\n if (options.enumType === 'inlineLiteral') {\n const enumValues = current.args.items\n .map((item) => item.value)\n .filter((value): value is string | number | boolean => value !== undefined && value !== null)\n .map((value) => {\n const format = typeof value === 'number' ? 'number' : typeof value === 'boolean' ? 'boolean' : 'string'\n return typeKeywordMapper.const(value, format)\n })\n .filter(Boolean) as ts.TypeNode[]\n\n return typeKeywordMapper.union(enumValues)\n }\n\n // Adding suffix to enum (see https://github.com/kubb-labs/kubb/issues/1873)\n return typeKeywordMapper.enum(options.enumType === 'asConst' ? `${current.args.typeName}Key` : current.args.typeName)\n },\n ref(tree, _options) {\n const { current } = tree\n\n return typeKeywordMapper.ref(current.args.name)\n },\n blob() {\n return typeKeywordMapper.blob()\n },\n tuple(tree, options) {\n const { current, schema, name } = tree\n\n return typeKeywordMapper.tuple(\n current.args.items.map((it) => this.parse({ schema, parent: current, name, current: it, siblings: [] }, options)).filter(Boolean) as ts.TypeNode[],\n current.args.rest &&\n ((this.parse({ schema, parent: current, name, current: current.args.rest, siblings: [] }, options) ?? undefined) as ts.TypeNode | undefined),\n current.args.min,\n current.args.max,\n )\n },\n const(tree, _options) {\n const { current } = tree\n\n return typeKeywordMapper.const(current.args.name, current.args.format)\n },\n object(tree, options) {\n const { current, schema, name } = tree\n\n const properties = Object.entries(current.args?.properties || {})\n .filter((item) => {\n const schemas = item[1]\n return schemas && typeof schemas.map === 'function'\n })\n .map(([name, schemas]) => {\n const nameSchema = schemas.find((schema) => schema.keyword === schemaKeywords.name) as SchemaKeywordMapper['name']\n const mappedName = nameSchema?.args || name\n\n // custom mapper(pluginOptions)\n // Use Object.hasOwn to avoid matching inherited properties like 'toString', 'valueOf', etc.\n if (options.mapper && Object.hasOwn(options.mapper, mappedName)) {\n return options.mapper[mappedName]\n }\n\n const isNullish = schemas.some((schema) => schema.keyword === schemaKeywords.nullish)\n const isNullable = schemas.some((schema) => schema.keyword === schemaKeywords.nullable)\n const isOptional = schemas.some((schema) => schema.keyword === schemaKeywords.optional)\n const isReadonly = schemas.some((schema) => schema.keyword === schemaKeywords.readOnly)\n const describeSchema = schemas.find((schema) => schema.keyword === schemaKeywords.describe) as SchemaKeywordMapper['describe'] | undefined\n const deprecatedSchema = schemas.find((schema) => schema.keyword === schemaKeywords.deprecated) as SchemaKeywordMapper['deprecated'] | undefined\n const defaultSchema = schemas.find((schema) => schema.keyword === schemaKeywords.default) as SchemaKeywordMapper['default'] | undefined\n const exampleSchema = schemas.find((schema) => schema.keyword === schemaKeywords.example) as SchemaKeywordMapper['example'] | undefined\n const schemaSchema = schemas.find((schema) => schema.keyword === schemaKeywords.schema) as SchemaKeywordMapper['schema'] | undefined\n const minSchema = schemas.find((schema) => schema.keyword === schemaKeywords.min) as SchemaKeywordMapper['min'] | undefined\n const maxSchema = schemas.find((schema) => schema.keyword === schemaKeywords.max) as SchemaKeywordMapper['max'] | undefined\n const matchesSchema = schemas.find((schema) => schema.keyword === schemaKeywords.matches) as SchemaKeywordMapper['matches'] | undefined\n\n let type = schemas\n .map((it) =>\n this.parse(\n {\n schema,\n parent: current,\n name,\n current: it,\n siblings: schemas,\n },\n options,\n ),\n )\n .filter(Boolean)[0] as ts.TypeNode\n\n if (isNullable) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.null],\n }) as ts.TypeNode\n }\n\n if (isNullish && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.undefined],\n }) as ts.TypeNode\n }\n\n if (isOptional && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.undefined],\n }) as ts.TypeNode\n }\n\n const propertyNode = factory.createPropertySignature({\n questionToken: isOptional || isNullish ? ['questionToken', 'questionTokenAndUndefined'].includes(options.optionalType as string) : false,\n name: mappedName,\n type,\n readOnly: isReadonly,\n })\n\n return factory.appendJSDocToNode({\n node: propertyNode,\n comments: [\n describeSchema ? `@description ${transformers.jsStringEscape(describeSchema.args)}` : undefined,\n deprecatedSchema ? '@deprecated' : undefined,\n minSchema ? `@minLength ${minSchema.args}` : undefined,\n maxSchema ? `@maxLength ${maxSchema.args}` : undefined,\n matchesSchema ? `@pattern ${matchesSchema.args}` : undefined,\n defaultSchema ? `@default ${defaultSchema.args}` : undefined,\n exampleSchema ? `@example ${exampleSchema.args}` : undefined,\n schemaSchema?.args?.type || schemaSchema?.args?.format\n ? [`@type ${schemaSchema?.args?.type || 'unknown'}${!isOptional ? '' : ' | undefined'}`, schemaSchema?.args?.format].filter(Boolean).join(', ')\n : undefined,\n ].filter(Boolean),\n })\n })\n\n let additionalProperties: any\n\n if (current.args?.additionalProperties?.length) {\n additionalProperties = current.args.additionalProperties\n .map((it) => this.parse({ schema, parent: current, name, current: it, siblings: [] }, options))\n .filter(Boolean)\n .at(0) as ts.TypeNode\n\n const isNullable = current.args?.additionalProperties.some((schema) => isKeyword(schema, schemaKeywords.nullable))\n if (isNullable) {\n additionalProperties = factory.createUnionDeclaration({\n nodes: [additionalProperties, factory.keywordTypeNodes.null],\n }) as ts.TypeNode\n }\n\n additionalProperties = factory.createIndexSignature(additionalProperties)\n }\n\n let patternProperties: ts.TypeNode | ts.IndexSignatureDeclaration | undefined\n\n if (current.args?.patternProperties) {\n const allPatternSchemas = Object.values(current.args.patternProperties).flat()\n\n if (allPatternSchemas.length > 0) {\n patternProperties = allPatternSchemas\n .map((it) => this.parse({ schema, parent: current, name, current: it, siblings: [] }, options))\n .filter(Boolean)\n .at(0) as ts.TypeNode\n\n const isNullable = allPatternSchemas.some((schema) => isKeyword(schema, schemaKeywords.nullable))\n if (isNullable) {\n patternProperties = factory.createUnionDeclaration({\n nodes: [patternProperties, factory.keywordTypeNodes.null],\n }) as ts.TypeNode\n }\n\n patternProperties = factory.createIndexSignature(patternProperties)\n }\n }\n\n return typeKeywordMapper.object([...properties, additionalProperties, patternProperties].filter(Boolean))\n },\n datetime() {\n return typeKeywordMapper.datetime()\n },\n date(tree) {\n const { current } = tree\n\n return typeKeywordMapper.date(current.args.type)\n },\n time(tree) {\n const { current } = tree\n\n return typeKeywordMapper.time(current.args.type)\n },\n },\n})\n","import transformers from '@kubb/core/transformers'\nimport { safePrint } from '@kubb/fabric-core/parsers/typescript'\nimport type { SchemaObject } from '@kubb/oas'\nimport { isKeyword, type Schema, SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'\nimport { File } from '@kubb/react-fabric'\nimport type { KubbNode } from '@kubb/react-fabric/types'\nimport type ts from 'typescript'\nimport * as factory from '../factory.ts'\nimport { parse, typeKeywordMapper } from '../parser.ts'\nimport type { PluginTs } from '../types.ts'\n\ntype Props = {\n name: string\n typedName: string\n schema: SchemaObject\n tree: Array<Schema>\n optionalType: PluginTs['resolvedOptions']['optionalType']\n arrayType: PluginTs['resolvedOptions']['arrayType']\n enumType: PluginTs['resolvedOptions']['enumType']\n mapper: PluginTs['resolvedOptions']['mapper']\n syntaxType: PluginTs['resolvedOptions']['syntaxType']\n description?: string\n keysToOmit?: string[]\n}\n\nexport function Type({ name, typedName, tree, keysToOmit, schema, optionalType, arrayType, syntaxType, enumType, mapper, description }: Props): KubbNode {\n const typeNodes: ts.Node[] = []\n\n if (!tree.length) {\n return ''\n }\n\n const schemaFromTree = tree.find((item) => item.keyword === schemaKeywords.schema)\n const enumSchemas = SchemaGenerator.deepSearch(tree, schemaKeywords.enum)\n\n let type =\n (tree\n .map((current, _index, siblings) =>\n parse(\n { name, schema, parent: undefined, current, siblings },\n {\n optionalType,\n arrayType,\n enumType,\n mapper,\n },\n ),\n )\n .filter(Boolean)\n .at(0) as ts.TypeNode) || typeKeywordMapper.undefined()\n\n // Add a \"Key\" suffix to avoid collisions where necessary\n if (enumType === 'asConst' && enumSchemas.length > 0) {\n const isDirectEnum = schema.type === 'array' && schema.items !== undefined\n const isEnumOnly = 'enum' in schema && schema.enum\n\n if (isDirectEnum || isEnumOnly) {\n const enumSchema = enumSchemas[0]!\n const typeNameWithKey = `${enumSchema.args.typeName}Key`\n\n type = factory.createTypeReferenceNode(typeNameWithKey)\n\n if (schema.type === 'array') {\n if (arrayType === 'generic') {\n type = factory.createTypeReferenceNode(factory.createIdentifier('Array'), [type])\n } else {\n type = factory.createArrayTypeNode(type)\n }\n }\n }\n }\n\n if (schemaFromTree && isKeyword(schemaFromTree, schemaKeywords.schema)) {\n const isNullish = tree.some((item) => item.keyword === schemaKeywords.nullish)\n const isNullable = tree.some((item) => item.keyword === schemaKeywords.nullable)\n const isOptional = tree.some((item) => item.keyword === schemaKeywords.optional)\n\n if (isNullable) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.null],\n }) as ts.TypeNode\n }\n\n if (isNullish && ['undefined', 'questionTokenAndUndefined'].includes(optionalType as string)) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.undefined],\n }) as ts.TypeNode\n }\n\n if (isOptional && ['undefined', 'questionTokenAndUndefined'].includes(optionalType as string)) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.undefined],\n }) as ts.TypeNode\n }\n }\n\n const useTypeGeneration = syntaxType === 'type' || [factory.syntaxKind.union].includes(type.kind as typeof factory.syntaxKind.union) || !!keysToOmit?.length\n\n typeNodes.push(\n factory.createTypeDeclaration({\n name,\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 description ? `@description ${transformers.jsStringEscape(description)}` : undefined,\n schema.deprecated ? '@deprecated' : undefined,\n schema.minLength ? `@minLength ${schema.minLength}` : undefined,\n schema.maxLength ? `@maxLength ${schema.maxLength}` : undefined,\n schema.pattern ? `@pattern ${schema.pattern}` : undefined,\n schema.default ? `@default ${schema.default}` : undefined,\n schema.example ? `@example ${schema.example}` : undefined,\n ],\n }),\n )\n\n const enums = [...new Set(enumSchemas)].map((enumSchema) => {\n const name = enumType === 'asPascalConst' ? transformers.pascalCase(enumSchema.args.name) : transformers.camelCase(enumSchema.args.name)\n const typeName = enumType === 'asConst' ? `${enumSchema.args.typeName}Key` : enumSchema.args.typeName\n\n const [nameNode, typeNode] = factory.createEnumDeclaration({\n name,\n typeName,\n enums: enumSchema.args.items\n .map((item) => (item.value === undefined ? undefined : [transformers.trimQuotes(item.name?.toString()), item.value]))\n .filter(Boolean) as unknown as Array<[string, string]>,\n type: enumType,\n })\n\n return {\n nameNode,\n typeNode,\n name,\n typeName,\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 &&\n enums.map(({ name, nameNode, typeName, typeNode }) => (\n <>\n {nameNode && (\n <File.Source name={name} isExportable isIndexable>\n {safePrint(nameNode)}\n </File.Source>\n )}\n {\n <File.Source\n name={typeName}\n isIndexable\n isExportable={['enum', 'asConst', 'constEnum', 'literal', undefined].includes(enumType)}\n isTypeOnly={['asConst', 'literal', undefined].includes(enumType)}\n >\n {safePrint(typeNode)}\n </File.Source>\n }\n </>\n ))}\n {shouldExportType && (\n <File.Source name={typedName} isTypeOnly isExportable isIndexable>\n {safePrint(...typeNodes)}\n </File.Source>\n )}\n </>\n )\n}\n"],"mappings":"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"}
|
package/dist/components.cjs
CHANGED
package/dist/components.d.cts
CHANGED
|
@@ -1,21 +1,6 @@
|
|
|
1
|
-
import { i as Schema, n as PluginTs, o as
|
|
1
|
+
import { i as Schema, n as PluginTs, o as SchemaObject } from "./types-CKtzgWEC.cjs";
|
|
2
2
|
import { KubbNode } from "@kubb/react-fabric/types";
|
|
3
3
|
|
|
4
|
-
//#region src/components/OasType.d.ts
|
|
5
|
-
type Props$1 = {
|
|
6
|
-
/**
|
|
7
|
-
* Name of the function
|
|
8
|
-
*/
|
|
9
|
-
name: string;
|
|
10
|
-
typeName: string;
|
|
11
|
-
api: OasTypes.OASDocument;
|
|
12
|
-
};
|
|
13
|
-
declare function OasType({
|
|
14
|
-
name,
|
|
15
|
-
typeName,
|
|
16
|
-
api
|
|
17
|
-
}: Props$1): KubbNode;
|
|
18
|
-
//#endregion
|
|
19
4
|
//#region src/components/Type.d.ts
|
|
20
5
|
type Props = {
|
|
21
6
|
name: string;
|
|
@@ -23,6 +8,7 @@ type Props = {
|
|
|
23
8
|
schema: SchemaObject;
|
|
24
9
|
tree: Array<Schema>;
|
|
25
10
|
optionalType: PluginTs['resolvedOptions']['optionalType'];
|
|
11
|
+
arrayType: PluginTs['resolvedOptions']['arrayType'];
|
|
26
12
|
enumType: PluginTs['resolvedOptions']['enumType'];
|
|
27
13
|
mapper: PluginTs['resolvedOptions']['mapper'];
|
|
28
14
|
syntaxType: PluginTs['resolvedOptions']['syntaxType'];
|
|
@@ -36,11 +22,12 @@ declare function Type({
|
|
|
36
22
|
keysToOmit,
|
|
37
23
|
schema,
|
|
38
24
|
optionalType,
|
|
25
|
+
arrayType,
|
|
39
26
|
syntaxType,
|
|
40
27
|
enumType,
|
|
41
28
|
mapper,
|
|
42
29
|
description
|
|
43
30
|
}: Props): KubbNode;
|
|
44
31
|
//#endregion
|
|
45
|
-
export {
|
|
32
|
+
export { Type };
|
|
46
33
|
//# sourceMappingURL=components.d.cts.map
|
package/dist/components.d.ts
CHANGED
|
@@ -1,21 +1,6 @@
|
|
|
1
|
-
import { i as Schema, n as PluginTs, o as
|
|
1
|
+
import { i as Schema, n as PluginTs, o as SchemaObject } from "./types-CnQREd_1.js";
|
|
2
2
|
import { KubbNode } from "@kubb/react-fabric/types";
|
|
3
3
|
|
|
4
|
-
//#region src/components/OasType.d.ts
|
|
5
|
-
type Props$1 = {
|
|
6
|
-
/**
|
|
7
|
-
* Name of the function
|
|
8
|
-
*/
|
|
9
|
-
name: string;
|
|
10
|
-
typeName: string;
|
|
11
|
-
api: OasTypes.OASDocument;
|
|
12
|
-
};
|
|
13
|
-
declare function OasType({
|
|
14
|
-
name,
|
|
15
|
-
typeName,
|
|
16
|
-
api
|
|
17
|
-
}: Props$1): KubbNode;
|
|
18
|
-
//#endregion
|
|
19
4
|
//#region src/components/Type.d.ts
|
|
20
5
|
type Props = {
|
|
21
6
|
name: string;
|
|
@@ -23,6 +8,7 @@ type Props = {
|
|
|
23
8
|
schema: SchemaObject;
|
|
24
9
|
tree: Array<Schema>;
|
|
25
10
|
optionalType: PluginTs['resolvedOptions']['optionalType'];
|
|
11
|
+
arrayType: PluginTs['resolvedOptions']['arrayType'];
|
|
26
12
|
enumType: PluginTs['resolvedOptions']['enumType'];
|
|
27
13
|
mapper: PluginTs['resolvedOptions']['mapper'];
|
|
28
14
|
syntaxType: PluginTs['resolvedOptions']['syntaxType'];
|
|
@@ -36,11 +22,12 @@ declare function Type({
|
|
|
36
22
|
keysToOmit,
|
|
37
23
|
schema,
|
|
38
24
|
optionalType,
|
|
25
|
+
arrayType,
|
|
39
26
|
syntaxType,
|
|
40
27
|
enumType,
|
|
41
28
|
mapper,
|
|
42
29
|
description
|
|
43
30
|
}: Props): KubbNode;
|
|
44
31
|
//#endregion
|
|
45
|
-
export {
|
|
32
|
+
export { Type };
|
|
46
33
|
//# sourceMappingURL=components.d.ts.map
|
package/dist/components.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { t as Type } from "./components-BE9rQGox.js";
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { Type };
|
package/dist/generators.cjs
CHANGED
package/dist/generators.d.cts
CHANGED
package/dist/generators.d.ts
CHANGED
package/dist/generators.js
CHANGED
package/dist/index.cjs
CHANGED
package/dist/index.d.cts
CHANGED