@kubb/ast 5.0.0-alpha.15 → 5.0.0-alpha.16
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 +88 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +27 -2
- package/dist/index.js +84 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/{visitor-UlWOe-In.d.ts → visitor-YMltBj6w.d.ts} +11 -2
- package/package.json +1 -1
- package/src/constants.ts +5 -0
- package/src/index.ts +3 -2
- package/src/refs.ts +8 -0
- package/src/transforms.ts +114 -0
package/dist/index.js
CHANGED
|
@@ -42,6 +42,16 @@ const schemaTypes = {
|
|
|
42
42
|
blob: "blob",
|
|
43
43
|
never: "never"
|
|
44
44
|
};
|
|
45
|
+
/**
|
|
46
|
+
* Scalar primitive schema types used for union member simplification.
|
|
47
|
+
*/
|
|
48
|
+
const SCALAR_PRIMITIVE_TYPES = new Set([
|
|
49
|
+
"string",
|
|
50
|
+
"number",
|
|
51
|
+
"integer",
|
|
52
|
+
"bigint",
|
|
53
|
+
"boolean"
|
|
54
|
+
]);
|
|
45
55
|
const httpMethods = {
|
|
46
56
|
get: "GET",
|
|
47
57
|
post: "POST",
|
|
@@ -488,6 +498,13 @@ const isFunctionParametersNode = isKind("FunctionParameters");
|
|
|
488
498
|
//#endregion
|
|
489
499
|
//#region src/refs.ts
|
|
490
500
|
/**
|
|
501
|
+
* Extracts the final segment from a reference string.
|
|
502
|
+
* Falls back to the original string when no slash exists.
|
|
503
|
+
*/
|
|
504
|
+
function extractRefName(ref) {
|
|
505
|
+
return ref.split("/").at(-1) ?? ref;
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
491
508
|
* Indexes named schemas from `root.schemas` by name. Unnamed schemas are skipped.
|
|
492
509
|
*/
|
|
493
510
|
function buildRefMap(root) {
|
|
@@ -508,6 +525,72 @@ function refMapToObject(refMap) {
|
|
|
508
525
|
return Object.fromEntries(refMap);
|
|
509
526
|
}
|
|
510
527
|
//#endregion
|
|
528
|
+
//#region src/transforms.ts
|
|
529
|
+
/**
|
|
530
|
+
* Replaces the discriminator property's schema inside an object node with
|
|
531
|
+
* an enum of the provided values.
|
|
532
|
+
*/
|
|
533
|
+
function applyDiscriminatorEnum({ node, propertyName, values, enumName }) {
|
|
534
|
+
const objectNode = narrowSchema(node, "object");
|
|
535
|
+
if (!objectNode?.properties?.length) return node;
|
|
536
|
+
if (!objectNode.properties.some((prop) => prop.name === propertyName)) return node;
|
|
537
|
+
return createSchema({
|
|
538
|
+
...objectNode,
|
|
539
|
+
properties: objectNode.properties.map((prop) => {
|
|
540
|
+
if (prop.name !== propertyName) return prop;
|
|
541
|
+
return createProperty({
|
|
542
|
+
...prop,
|
|
543
|
+
schema: createSchema({
|
|
544
|
+
type: "enum",
|
|
545
|
+
primitive: "string",
|
|
546
|
+
enumValues: values,
|
|
547
|
+
name: enumName,
|
|
548
|
+
readOnly: prop.schema.readOnly,
|
|
549
|
+
writeOnly: prop.schema.writeOnly
|
|
550
|
+
})
|
|
551
|
+
});
|
|
552
|
+
})
|
|
553
|
+
});
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Merges adjacent anonymous object members into a single anonymous object.
|
|
557
|
+
*/
|
|
558
|
+
function mergeAdjacentAnonymousObjects(members) {
|
|
559
|
+
return members.reduce((acc, member) => {
|
|
560
|
+
const objectMember = narrowSchema(member, "object");
|
|
561
|
+
if (objectMember && !objectMember.name) {
|
|
562
|
+
const previous = acc.at(-1);
|
|
563
|
+
const previousObject = previous ? narrowSchema(previous, "object") : void 0;
|
|
564
|
+
if (previousObject && !previousObject.name) {
|
|
565
|
+
acc[acc.length - 1] = createSchema({
|
|
566
|
+
...previousObject,
|
|
567
|
+
properties: [...previousObject.properties ?? [], ...objectMember.properties ?? []]
|
|
568
|
+
});
|
|
569
|
+
return acc;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
acc.push(member);
|
|
573
|
+
return acc;
|
|
574
|
+
}, []);
|
|
575
|
+
}
|
|
576
|
+
/**
|
|
577
|
+
* Removes enum members subsumed by broader scalar members in the same union.
|
|
578
|
+
*/
|
|
579
|
+
function simplifyUnionMembers(members) {
|
|
580
|
+
const scalarPrimitives = new Set(members.filter((member) => SCALAR_PRIMITIVE_TYPES.has(member.type)).map((m) => m.type));
|
|
581
|
+
if (!scalarPrimitives.size) return members;
|
|
582
|
+
return members.filter((member) => {
|
|
583
|
+
const enumNode = narrowSchema(member, "enum");
|
|
584
|
+
if (!enumNode) return true;
|
|
585
|
+
const primitive = enumNode.primitive;
|
|
586
|
+
if (!primitive) return true;
|
|
587
|
+
if (!enumNode.enumType) return true;
|
|
588
|
+
if (scalarPrimitives.has(primitive)) return false;
|
|
589
|
+
if ((primitive === "integer" || primitive === "number") && (scalarPrimitives.has("integer") || scalarPrimitives.has("number"))) return false;
|
|
590
|
+
return true;
|
|
591
|
+
});
|
|
592
|
+
}
|
|
593
|
+
//#endregion
|
|
511
594
|
//#region ../../internals/utils/dist/index.js
|
|
512
595
|
/**
|
|
513
596
|
* Shared implementation for camelCase and PascalCase conversion.
|
|
@@ -1065,6 +1148,6 @@ function collect(node, options) {
|
|
|
1065
1148
|
return results;
|
|
1066
1149
|
}
|
|
1067
1150
|
//#endregion
|
|
1068
|
-
export { applyParamsCasing, buildRefMap, collect, composeTransformers, createFunctionParameter, createFunctionParameters, createObjectBindingParameter, createOperation, createParameter, createProperty, createResponse, createRoot, createSchema, definePrinter, functionPrinter, httpMethods, isFunctionParameterNode, isFunctionParametersNode, isObjectBindingParameterNode, isOperationNode, isParameterNode, isPlainStringType, isPropertyNode, isResponseNode, isRootNode, isSchemaNode, mediaTypes, narrowSchema, nodeKinds, refMapToObject, resolveRef, schemaTypes, syncPropertySchema, transform, walk };
|
|
1151
|
+
export { SCALAR_PRIMITIVE_TYPES, applyDiscriminatorEnum, applyParamsCasing, buildRefMap, collect, composeTransformers, createFunctionParameter, createFunctionParameters, createObjectBindingParameter, createOperation, createParameter, createProperty, createResponse, createRoot, createSchema, definePrinter, extractRefName, functionPrinter, httpMethods, isFunctionParameterNode, isFunctionParametersNode, isObjectBindingParameterNode, isOperationNode, isParameterNode, isPlainStringType, isPropertyNode, isResponseNode, isRootNode, isSchemaNode, mediaTypes, mergeAdjacentAnonymousObjects, narrowSchema, nodeKinds, refMapToObject, resolveRef, schemaTypes, simplifyUnionMembers, syncPropertySchema, transform, walk };
|
|
1069
1152
|
|
|
1070
1153
|
//# sourceMappingURL=index.js.map
|