@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.d.ts CHANGED
@@ -171,6 +171,11 @@ export declare function resolveSchemaProperties({ node, propertyName }: {
171
171
  * ```
172
172
  */
173
173
  export declare function getSchemaLiteralValues(node: SchemaNode): ReadonlyArray<string | number | boolean | null>;
174
+ /**
175
+ * Infers an implicit discriminator: a property every member exposes with a distinct single
176
+ * literal value, the same shape a declared OpenAPI `discriminator` already narrows on.
177
+ */
178
+ export declare function inferDiscriminatorPropertyName(members: ReadonlyArray<SchemaNode>): string | undefined;
174
179
  declare namespace factory_d_exports {
175
180
  export { UserFileNode, createArrowFunction, createBreak, createConst, createContent, createExport, createFile, createFunction, createImport, createInput, createJsx, createOperation, createOutput, createParameter, createProperty, createRequestBody, createResponse, createSchema, createSource, createText, createType, update };
176
181
  }
@@ -266,7 +271,7 @@ export declare const nodeDefs: (NodeDef<InputNode, Partial<Omit<InputNode, "kind
266
271
  type: "ipv6";
267
272
  }) | ScalarSchemaNode, "kind">> | NodeDef<PropertyNode, Pick<PropertyNode, "schema" | "name"> & Partial<Omit<PropertyNode, "schema" | "kind" | "name">>> | NodeDef<ParameterNode, Pick<ParameterNode, "schema" | "name" | "in"> & Partial<Omit<ParameterNode, "schema" | "kind" | "name" | "in">>> | NodeDef<ConstNode, Omit<ConstNode, "kind">> | NodeDef<TypeNode, Omit<TypeNode, "kind">> | NodeDef<FunctionNode, Omit<FunctionNode, "kind">> | NodeDef<ArrowFunctionNode, Omit<ArrowFunctionNode, "kind">> | NodeDef<TextNode, string> | NodeDef<BreakNode, void> | NodeDef<JsxNode, string> | NodeDef<ImportNode, Omit<ImportNode, "kind">> | NodeDef<ExportNode, Omit<ExportNode, "kind">> | NodeDef<SourceNode, Omit<SourceNode, "kind">> | NodeDef<FileNode<object>, Omit<FileNode<object>, "kind">>)[];
268
273
  declare namespace exports_d_exports {
269
- export { ArraySchemaNode, ArrowFunctionNode, BreakNode, CodeNode, ConstNode, ContentNode, DateOnlyTypeValue, DateSchemaNode, DateTimeTypeValue, DateTypeOptions, DatetimeSchemaNode, DistributiveOmit, Enforce, EnumSchemaNode, ExportNode, FileNode, FunctionNode, GenericOperationNode, HttpMethod, HttpOperationNode, ImportNode, InferSchemaNode, InputMeta, InputNode, IntersectionSchemaNode, JSDocNode, JsxNode, Macro, Node, NodeDef, NodeKind, NumberSchemaNode, ObjectSchemaNode, OperationNode, OutputNode, ParameterLocation, ParameterNode, ParameterStyle, ParentOf, ParserOptions, PrimitiveSchemaType, Printer, PrinterFactoryOptions, PrinterPartial, PropertyNode, RefSchemaNode, RequestBodyNode, ResponseNode, ScalarSchemaNode, ScalarSchemaType, SchemaNode, SchemaNodeByType, SchemaType, SourceNode, StatusCode, StringSchemaNode, TextNode, TimeSchemaNode, TypeNode, UnionSchemaNode, UrlSchemaNode, UserFileNode, Visitor, VisitorContext, applyMacros, arrowFunctionDef, breakDef, collect, collectImportedRefNames, collectSync, collectUsedSchemaNames, composeMacros, constDef, contentDef, createPrinter, defineMacro, defineNode, exportDef, extractStringsFromNodes, factory_d_exports as factory, fileDef, findCircularSchemas, findCircularSchemasFromGraph, functionDef, getSchemaLiteralValues, importDef, inputDef, isHttpOperationNode, jsxDef, narrowSchema, nodeDefs, operationDef, optionality, outputDef, parameterDef, propertyDef, requestBodyDef, resolveRefName, resolveSchemaProperties, responseDef, schemaDef, schemaTypes, sourceDef, textDef, transform, typeDef };
274
+ export { ArraySchemaNode, ArrowFunctionNode, BreakNode, CodeNode, ConstNode, ContentNode, DateOnlyTypeValue, DateSchemaNode, DateTimeTypeValue, DateTypeOptions, DatetimeSchemaNode, DistributiveOmit, Enforce, EnumSchemaNode, ExportNode, FileNode, FunctionNode, GenericOperationNode, HttpMethod, HttpOperationNode, ImportNode, InferSchemaNode, InputMeta, InputNode, IntersectionSchemaNode, JSDocNode, JsxNode, Macro, Node, NodeDef, NodeKind, NumberSchemaNode, ObjectSchemaNode, OperationNode, OutputNode, ParameterLocation, ParameterNode, ParameterStyle, ParentOf, ParserOptions, PrimitiveSchemaType, Printer, PrinterFactoryOptions, PrinterPartial, PropertyNode, RefSchemaNode, RequestBodyNode, ResponseNode, ScalarSchemaNode, ScalarSchemaType, SchemaNode, SchemaNodeByType, SchemaType, SourceNode, StatusCode, StringSchemaNode, TextNode, TimeSchemaNode, TypeNode, UnionSchemaNode, UrlSchemaNode, UserFileNode, Visitor, VisitorContext, applyMacros, arrowFunctionDef, breakDef, collect, collectImportedRefNames, collectSync, collectUsedSchemaNames, composeMacros, constDef, contentDef, createPrinter, defineMacro, defineNode, exportDef, extractStringsFromNodes, factory_d_exports as factory, fileDef, findCircularSchemas, findCircularSchemasFromGraph, functionDef, getSchemaLiteralValues, importDef, inferDiscriminatorPropertyName, inputDef, isHttpOperationNode, jsxDef, narrowSchema, nodeDefs, operationDef, optionality, outputDef, parameterDef, propertyDef, requestBodyDef, resolveRefName, resolveSchemaProperties, responseDef, schemaDef, schemaTypes, sourceDef, textDef, transform, typeDef };
270
275
  }
271
276
  //#endregion
272
277
  export { type ArraySchemaNode, type ArrowFunctionNode, type BreakNode, type CodeNode, type ConstNode, type ContentNode, type DateOnlyTypeValue, type DateSchemaNode, type DateTimeTypeValue, type DateTypeOptions, type DatetimeSchemaNode, type DistributiveOmit, type Enforce, type EnumSchemaNode, type ExportNode, type FileNode, type FunctionNode, type GenericOperationNode, type HttpMethod, type HttpOperationNode, type ImportNode, type InferSchemaNode, type InputMeta, type InputNode, type IntersectionSchemaNode, type JSDocNode, type JsxNode, type Macro, type Node, type NodeDef, type NodeKind, type NumberSchemaNode, type ObjectSchemaNode, type OperationNode, type OutputNode, type ParameterLocation, type ParameterNode, type ParameterStyle, type ParentOf, type ParserOptions, type PrimitiveSchemaType, type Printer, type PrinterFactoryOptions, type PrinterPartial, type PropertyNode, type RefSchemaNode, type RequestBodyNode, type ResponseNode, type ScalarSchemaNode, type ScalarSchemaType, type SchemaNode, type SchemaNodeByType, type SchemaType, type SourceNode, type StatusCode, type StringSchemaNode, type TextNode, type TimeSchemaNode, type TypeNode, type UnionSchemaNode, type UrlSchemaNode, type UserFileNode, type Visitor, type VisitorContext, applyMacros, arrowFunctionDef, exports_d_exports as ast, breakDef, collect, collectSync, composeMacros, constDef, contentDef, createPrinter, defineMacro, defineNode, exportDef, factory_d_exports as factory, fileDef, functionDef, importDef, inputDef, jsxDef, operationDef, outputDef, parameterDef, propertyDef, requestBodyDef, responseDef, schemaDef, schemaTypes, sourceDef, textDef, transform, typeDef };
package/dist/index.js CHANGED
@@ -1586,6 +1586,40 @@ function getSchemaLiteralValues(node) {
1586
1586
  visit(node);
1587
1587
  return [...values];
1588
1588
  }
1589
+ function collectPropertyNames(node, visited = /* @__PURE__ */ new WeakSet()) {
1590
+ if (visited.has(node)) return /* @__PURE__ */ new Set();
1591
+ visited.add(node);
1592
+ if (node.type === "object") return new Set(node.properties.map((property) => property.name));
1593
+ if (node.type === "ref") return node.schema ? collectPropertyNames(node.schema, visited) : /* @__PURE__ */ new Set();
1594
+ if (node.type === "intersection") {
1595
+ const names = /* @__PURE__ */ new Set();
1596
+ for (const member of node.members ?? []) for (const name of collectPropertyNames(member, visited)) names.add(name);
1597
+ return names;
1598
+ }
1599
+ return /* @__PURE__ */ new Set();
1600
+ }
1601
+ /**
1602
+ * Infers an implicit discriminator: a property every member exposes with a distinct single
1603
+ * literal value, the same shape a declared OpenAPI `discriminator` already narrows on.
1604
+ */
1605
+ function inferDiscriminatorPropertyName(members) {
1606
+ if (members.length < 2) return void 0;
1607
+ let candidates;
1608
+ for (const member of members) {
1609
+ const names = collectPropertyNames(member);
1610
+ candidates = candidates ? new Set([...candidates].filter((name) => names.has(name))) : names;
1611
+ }
1612
+ for (const name of candidates ?? []) {
1613
+ const values = members.map((member) => {
1614
+ const literals = new Set(resolveSchemaProperties({
1615
+ node: member,
1616
+ propertyName: name
1617
+ }).flatMap((property) => getSchemaLiteralValues(property.schema)));
1618
+ return literals.size === 1 ? [...literals][0] : void 0;
1619
+ });
1620
+ if (values.every((value) => value !== void 0) && new Set(values).size === members.length) return name;
1621
+ }
1622
+ }
1589
1623
  //#endregion
1590
1624
  //#region src/factory.ts
1591
1625
  var factory_exports = /* @__PURE__ */ __exportAll({
@@ -1659,6 +1693,7 @@ var exports_exports = /* @__PURE__ */ __exportAll({
1659
1693
  functionDef: () => functionDef,
1660
1694
  getSchemaLiteralValues: () => getSchemaLiteralValues,
1661
1695
  importDef: () => importDef,
1696
+ inferDiscriminatorPropertyName: () => inferDiscriminatorPropertyName,
1662
1697
  inputDef: () => inputDef,
1663
1698
  isHttpOperationNode: () => isHttpOperationNode,
1664
1699
  jsxDef: () => jsxDef,
@@ -1681,6 +1716,6 @@ var exports_exports = /* @__PURE__ */ __exportAll({
1681
1716
  typeDef: () => typeDef
1682
1717
  });
1683
1718
  //#endregion
1684
- export { applyMacros, arrowFunctionDef, exports_exports as ast, breakDef, collect, collectImportedRefNames, collectSync, collectUsedSchemaNames, composeMacros, constDef, contentDef, createPrinter, defineMacro, defineNode, exportDef, extractStringsFromNodes, factory_exports as factory, fileDef, findCircularSchemas, findCircularSchemasFromGraph, functionDef, getSchemaLiteralValues, importDef, inputDef, isHttpOperationNode, jsxDef, narrowSchema, nodeDefs, operationDef, optionality, outputDef, parameterDef, propertyDef, requestBodyDef, resolveRefName, resolveSchemaProperties, responseDef, schemaDef, schemaTypes, sourceDef, textDef, transform, typeDef };
1719
+ export { applyMacros, arrowFunctionDef, exports_exports as ast, breakDef, collect, collectImportedRefNames, collectSync, collectUsedSchemaNames, composeMacros, constDef, contentDef, createPrinter, defineMacro, defineNode, exportDef, extractStringsFromNodes, factory_exports as factory, fileDef, findCircularSchemas, findCircularSchemasFromGraph, functionDef, getSchemaLiteralValues, importDef, inferDiscriminatorPropertyName, inputDef, isHttpOperationNode, jsxDef, narrowSchema, nodeDefs, operationDef, optionality, outputDef, parameterDef, propertyDef, requestBodyDef, resolveRefName, resolveSchemaProperties, responseDef, schemaDef, schemaTypes, sourceDef, textDef, transform, typeDef };
1685
1720
 
1686
1721
  //# sourceMappingURL=index.js.map