@kubb/ast 5.2.1 → 5.2.3
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 +36 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +36 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1618,6 +1618,40 @@ function getSchemaLiteralValues(node) {
|
|
|
1618
1618
|
visit(node);
|
|
1619
1619
|
return [...values];
|
|
1620
1620
|
}
|
|
1621
|
+
function collectPropertyNames(node, visited = /* @__PURE__ */ new WeakSet()) {
|
|
1622
|
+
if (visited.has(node)) return /* @__PURE__ */ new Set();
|
|
1623
|
+
visited.add(node);
|
|
1624
|
+
if (node.type === "object") return new Set(node.properties.map((property) => property.name));
|
|
1625
|
+
if (node.type === "ref") return node.schema ? collectPropertyNames(node.schema, visited) : /* @__PURE__ */ new Set();
|
|
1626
|
+
if (node.type === "intersection") {
|
|
1627
|
+
const names = /* @__PURE__ */ new Set();
|
|
1628
|
+
for (const member of node.members ?? []) for (const name of collectPropertyNames(member, visited)) names.add(name);
|
|
1629
|
+
return names;
|
|
1630
|
+
}
|
|
1631
|
+
return /* @__PURE__ */ new Set();
|
|
1632
|
+
}
|
|
1633
|
+
/**
|
|
1634
|
+
* Infers an implicit discriminator: a property every member exposes with a distinct single
|
|
1635
|
+
* literal value, the same shape a declared OpenAPI `discriminator` already narrows on.
|
|
1636
|
+
*/
|
|
1637
|
+
function inferDiscriminatorPropertyName(members) {
|
|
1638
|
+
if (members.length < 2) return void 0;
|
|
1639
|
+
let candidates;
|
|
1640
|
+
for (const member of members) {
|
|
1641
|
+
const names = collectPropertyNames(member);
|
|
1642
|
+
candidates = candidates ? new Set([...candidates].filter((name) => names.has(name))) : names;
|
|
1643
|
+
}
|
|
1644
|
+
for (const name of candidates ?? []) {
|
|
1645
|
+
const values = members.map((member) => {
|
|
1646
|
+
const literals = new Set(resolveSchemaProperties({
|
|
1647
|
+
node: member,
|
|
1648
|
+
propertyName: name
|
|
1649
|
+
}).flatMap((property) => getSchemaLiteralValues(property.schema)));
|
|
1650
|
+
return literals.size === 1 ? [...literals][0] : void 0;
|
|
1651
|
+
});
|
|
1652
|
+
if (values.every((value) => value !== void 0) && new Set(values).size === members.length) return name;
|
|
1653
|
+
}
|
|
1654
|
+
}
|
|
1621
1655
|
//#endregion
|
|
1622
1656
|
//#region src/factory.ts
|
|
1623
1657
|
var factory_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -1691,6 +1725,7 @@ var exports_exports = /* @__PURE__ */ __exportAll({
|
|
|
1691
1725
|
functionDef: () => functionDef,
|
|
1692
1726
|
getSchemaLiteralValues: () => getSchemaLiteralValues,
|
|
1693
1727
|
importDef: () => importDef,
|
|
1728
|
+
inferDiscriminatorPropertyName: () => inferDiscriminatorPropertyName,
|
|
1694
1729
|
inputDef: () => inputDef,
|
|
1695
1730
|
isHttpOperationNode: () => isHttpOperationNode,
|
|
1696
1731
|
jsxDef: () => jsxDef,
|
|
@@ -1746,6 +1781,7 @@ exports.findCircularSchemasFromGraph = findCircularSchemasFromGraph;
|
|
|
1746
1781
|
exports.functionDef = functionDef;
|
|
1747
1782
|
exports.getSchemaLiteralValues = getSchemaLiteralValues;
|
|
1748
1783
|
exports.importDef = importDef;
|
|
1784
|
+
exports.inferDiscriminatorPropertyName = inferDiscriminatorPropertyName;
|
|
1749
1785
|
exports.inputDef = inputDef;
|
|
1750
1786
|
exports.isHttpOperationNode = isHttpOperationNode;
|
|
1751
1787
|
exports.jsxDef = jsxDef;
|