@redocly/openapi-docs 3.24.0-next.4 → 3.24.0-next.5

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.
@@ -1 +1 @@
1
- import{Fragment as L,jsx as n,jsxs as p}from"react/jsx-runtime";import{memo as T,useCallback as k}from"react";import{useAtomValue as F}from"jotai";import{TypeName as j}from"../common/index.js";import{Schema as B}from"./Schema.js";import{ObjectSchema as S}from"./ObjectSchema.js";import{humanizeConstraints as D}from"../../utils/index.js";import{SubSchema as R}from"./SubSchema.js";import{globalOptionsAtom as W}from"../../jotai/store.js";import{getExpandByDefault as _}from"./helpers.js";import{ArrayLabel as q,LabelValue as c,ArrayClosingLabel as E,Line as h}from"../common/styled.js";function N({schema:r,schema:{minItems:u,maxItems:O,items:o},fieldParentsName:l,...e}){const{schemasExpansionLevel:g}=F(W),d=Array.isArray(e.parentType)?e.parentType:[e.parentType],i=d.includes("array")&&d.length===1,t=i?(e.level||0)+1:e.level,A=u===void 0&&O===void 0?"":`(${D(r)})`;let s=l&&[...l.slice(0,-1),l[l.length-1]+"[]"];const y=k(m=>e.skipReadOnly||e.skipWriteOnly?m?.filter(f=>!(e.skipReadOnly&&f.schema.readOnly||e.skipWriteOnly&&f.schema.writeOnly)):m,[e.skipReadOnly,e.skipWriteOnly]);if(r?.fields)return n(S,{...e,shouldCloseArray:i,level:t,schema:r,fieldParentsName:s,onOneOfChange:e.onOneOfChange});if(r.displayType&&!o&&!A.length)return n("div",{children:n(j,{children:r.displayType})});const v=y(o?.fields),x=y(o?.oneOf?.[0]?.fields),b=v?.length||x?.length,a=e.level===1,C=_({level:e.level,required:e.required,schemasExpansionLevel:g});return n(R,{...e,propertyLength:b,isNestedArray:i,level:t,isArray:!0,expandable:!a,expandByDefault:C,operationPointer:r.operationPointer,children:p(L,{children:[a&&p(q,{children:[n(c,{children:"Array ["}),n(h,{})]}),n(B,{...e,parentType:a?void 0:r.type,level:t,schema:o,shouldCloseArray:i,hideBottomBorder:a,fieldParentsName:s,expandable:!1,onOneOfChange:e.onOneOfChange}),a&&p(E,{className:"array-closing-label",children:[n(h,{}),n(c,{children:"]"})]})]})})}const Q=T(N);export{Q as ArraySchema};
1
+ import{Fragment as T,jsx as n,jsxs as d}from"react/jsx-runtime";import{memo as k,useCallback as F}from"react";import{useAtomValue as j}from"jotai";import{TypeName as B}from"../common/index.js";import{Schema as D}from"./Schema.js";import{ObjectSchema as R}from"./ObjectSchema.js";import{humanizeConstraints as S}from"../../utils/index.js";import{SubSchema as W}from"./SubSchema.js";import{globalOptionsAtom as _}from"../../jotai/store.js";import{getExpandByDefault as q}from"./helpers.js";import{ArrayLabel as E,LabelValue as c,ArrayClosingLabel as I,Line as h}from"../common/styled.js";function V({schema:r,schema:{minItems:u,maxItems:O,items:o},fieldParentsName:l,...e}){const{schemasExpansionLevel:g}=j(_),s=Array.isArray(e.parentType)?e.parentType:[e.parentType],a=s.includes("array")&&s.length===1,t=a?(e.level||0)+1:e.level,v=u===void 0&&O===void 0?"":`(${S(r)})`;let A=l&&[...l.slice(0,-1),l[l.length-1]+"[]"];const y=F(f=>e.skipReadOnly||e.skipWriteOnly?f?.filter(m=>!(e.skipReadOnly&&m.schema.readOnly||e.skipWriteOnly&&m.schema.writeOnly)):f,[e.skipReadOnly,e.skipWriteOnly]);if(r?.fields)return n(R,{...e,shouldCloseArray:a,level:t,schema:r,fieldParentsName:l,onOneOfChange:e.onOneOfChange});if(r.displayType&&!o&&!v.length)return n("div",{children:n(B,{children:r.displayType})});const x=y(o?.fields),b=y(o?.oneOf?.[0]?.fields),C=x?.length||b?.length,p=!!o?.isPrimitive,i=e.level===1,L=q({level:e.level,required:e.required,schemasExpansionLevel:g});return n(W,{...e,propertyLength:C,isNestedArray:a,level:t,isArray:!0,expandable:!i,expandByDefault:L,operationPointer:r.operationPointer,children:d(T,{children:[i&&d(E,{children:[n(c,{children:"Array ["}),n(h,{})]}),n(D,{...e,parentType:i?void 0:r.type,level:t,schema:o,shouldCloseArray:a,hideBottomBorder:i,fieldParentsName:p?l:A,fieldName:p&&!i?"[i]":void 0,oneOfLevel:p?void 0:e.oneOfLevel,expandable:!1,onOneOfChange:e.onOneOfChange}),i&&d(I,{className:"array-closing-label",children:[n(h,{}),n(c,{children:"]"})]})]})})}const U=k(V);export{U as ArraySchema};
@@ -1,4 +1,4 @@
1
- import{jsx as r}from"react/jsx-runtime";import{memo as y}from"react";import{useAtomValue as S}from"jotai";import{useLocation as g}from"react-router-dom";import{ArraySchema as I}from"./ArraySchema.js";import{ObjectSchema as p}from"./ObjectSchema.js";import{OneOfSchema as b}from"./OneOfSchema.js";import{RecursiveSchema as s}from"./RecursiveSchema.js";import{operationStore as j}from"../../jotai/operation.js";import{FieldDetails as A}from"../PropertyDetails/index.js";import{pathIncludesLink as C}from"../../utils/index.js";import{styled as L}from"../../styled-components.js";function P({schema:e,onOneOfChange:n,...i}){const{activeOneOf:d}=S(j(e?.operationPointer||"")),u=g();if(!e)return null;const{type:t,oneOf:o,discriminatorProp:f,isCircular:h}=e;if(h)return r(s,{schema:e});if(f!==void 0){if(!o||!o.length)return console.warn(`Looks like you are using discriminator wrong: you don't have any definition inherited from the ${e.title}`),null;const c=o.findIndex((k,x)=>C(u,`d=${x}`)),l=c===-1?0:c,v=d[e.pointer]!==void 0?d[e.pointer]:l,a=o[v];return a?.isCircular?r(s,{schema:a}):r(p,{...i,schema:a,discriminator:{fieldName:f,parentSchema:e,activeOneOfIdx:l},onOneOfChange:n})}if(o!==void 0&&o.length>=1)return r(b,{...i,schema:e,onChange:n});const m=Array.isArray(t)?t:[t];if(m.includes("object")){if(e.fields?.length)return r(p,{...i,schema:e,onOneOfChange:n})}else if(m.includes("array"))return r(I,{...i,schema:e,onOneOfChange:n});const O={schema:e,name:"",description:i.oneOfLevel?"":e.description,required:!1,deprecated:!1};return r($,{$hideBorder:i.hideBottomBorder,children:r(A,{field:O,fieldParentsName:i.fieldParentsName})})}const G=y(P),$=L.div`
1
+ import{jsx as i}from"react/jsx-runtime";import{memo as y}from"react";import{useAtomValue as S}from"jotai";import{useLocation as g}from"react-router-dom";import{ArraySchema as I}from"./ArraySchema.js";import{ObjectSchema as p}from"./ObjectSchema.js";import{OneOfSchema as L}from"./OneOfSchema.js";import{RecursiveSchema as u}from"./RecursiveSchema.js";import{operationStore as b}from"../../jotai/operation.js";import{FieldDetails as j}from"../PropertyDetails/index.js";import{pathIncludesLink as A}from"../../utils/index.js";import{styled as C}from"../../styled-components.js";function N({schema:e,onOneOfChange:n,...o}){const{activeOneOf:a}=S(b(e?.operationPointer||"")),s=g();if(!e)return null;const{type:t,oneOf:r,discriminatorProp:f,isCircular:O}=e;if(O)return i(u,{schema:e});if(f!==void 0){if(!r||!r.length)return console.warn(`Looks like you are using discriminator wrong: you don't have any definition inherited from the ${e.title}`),null;const c=r.findIndex(($,h)=>A(s,`d=${h}`)),l=c===-1?0:c,x=a[e.pointer]!==void 0?a[e.pointer]:l,d=r[x];return d?.isCircular?i(u,{schema:d}):i(p,{...o,schema:d,discriminator:{fieldName:f,parentSchema:e,activeOneOfIdx:l},onOneOfChange:n})}if(r!==void 0&&r.length>=1)return i(L,{...o,schema:e,onChange:n});const m=Array.isArray(t)?t:[t];if(m.includes("object")){if(e.fields?.length)return i(p,{...o,schema:e,onOneOfChange:n})}else if(m.includes("array"))return i(I,{...o,schema:e,onOneOfChange:n});const v={schema:e,name:o.fieldName||"",description:o.oneOfLevel?"":e.description,example:o.oneOfLevel?void 0:e.example,required:!1,deprecated:o.oneOfLevel?!1:e.deprecated,const:e.const};return i(P,{$hideBorder:o.hideBottomBorder,children:i(j,{field:v,fieldParentsName:o.fieldParentsName})})}const G=y(N),P=C.div`
2
2
  width: 100%;
3
3
  padding: var(--spacing-xxs) 0;
4
4
  ${({$hideBorder:e})=>!e&&"border-bottom: 1px solid var(--border-color-primary)"};
@@ -1 +1 @@
1
- import{jsx as h}from"react/jsx-runtime";import{memo as A}from"react";import{useLocation as S}from"react-router-dom";import{useAtomValue as y}from"jotai/index";import{pathIncludesLink as D}from"../../utils/index.js";import{operationStore as b}from"../../jotai/operation.js";import{extractTypeFromDeepLink as T}from"./helpers.js";import{ViewNested as $}from"../ViewNested/index.js";import{useTranslate as w}from"../../hooks/index.js";import{useExpandAllDepth as N}from"../../contexts/expand-all-depth.js";function j({expandByDefault:t,deepLink:o,level:r,expandable:a=!1,isNestedArray:n=!1,isArray:p="",propertyLength:e="",children:m,operationPointer:s}){const i=w(),l=S(),c=D(l,o),x=T(o),d=y(b(s||"")),f=N(),u=`${i("openapi.actions.show","Show")} ${Number(e)===1?"":e} ${p&&"array "}${e!==1?"properties":"property"}`;return h($,{expandByDefault:t||c,level:r,isNestedArray:n,expandable:a,expandText:u,children:m,expandedAll:d[x]?.expandedAll,expandAllDepth:f})}const q=A(j);export{q as SubSchema};
1
+ import{jsx as h}from"react/jsx-runtime";import{memo as S}from"react";import{useLocation as A}from"react-router-dom";import{useAtomValue as w}from"jotai/index";import{pathIncludesLink as D}from"../../utils/index.js";import{operationStore as $}from"../../jotai/operation.js";import{extractTypeFromDeepLink as b}from"./helpers.js";import{ViewNested as y}from"../ViewNested/index.js";import{useTranslate as T}from"../../hooks/index.js";import{useExpandAllDepth as N}from"../../contexts/expand-all-depth.js";function j({expandByDefault:n,deepLink:e,level:r,expandable:p=!1,isNestedArray:m=!1,isArray:t="",propertyLength:o="",children:s,operationPointer:i}){const a=T(),l=A(),c=D(l,e),x=b(e),d=w($(i||"")),f=N(),u=t&&!o?`${a("openapi.actions.show","Show")} array items`:`${a("openapi.actions.show","Show")} ${Number(o)===1?"":o} ${t&&"array "}${o!==1?"properties":"property"}`;return h(y,{expandByDefault:n||c,level:r,isNestedArray:m,expandable:p,expandText:u,children:s,expandedAll:d[x]?.expandedAll,expandAllDepth:f})}const z=S(j);export{z as SubSchema};
@@ -22,6 +22,8 @@ export interface SchemaProps extends SchemaOptions {
22
22
  oneOfLevel?: number;
23
23
  shouldCloseArray?: boolean;
24
24
  hideBottomBorder?: boolean;
25
+ /** Name to render for a schema that displays as a single field row (e.g. `[i]` for array items) */
26
+ fieldName?: string;
25
27
  }
26
28
  export interface ObjectSchemaProps extends SchemaProps {
27
29
  discriminator?: {
@@ -1 +1 @@
1
- import{REDOCLY_TEAMS_RBAC as m}from"@redocly/config";import{joinWithSeparator as V}from"../services/index.js";import{extractExtensions as I,getValueFromMdParsedExtension as E,mapValues as L,removePercentChart as T}from"../utils/index.js";import{getSchema as _}from"./schema.js";import{getExamples as j}from"./example.js";const F={path:{style:"simple",explode:!1},query:{style:"form",explode:!0},header:{style:"simple",explode:!1},cookie:{style:"form",explode:!0},querystring:{style:"form",explode:!0}};function U(l,i,p,a,d,x,b=p){const{resolved:e}=l.deref(i),P=i.kind||"field",f=i.name||e.name,o=e.in,v=!!e.required;let r=e.schema,u,s="",c;if(!r&&e.in&&e.content){s=Object.keys(e.content)[0];const n=e.content[s];r=n&&n?.example?{...l.deref(n.schema,x,!0).resolved,example:e.example||n.example}:n.schema}const h=V(d.parentFieldFullPath,T(f||"")),t=_({parser:l,schemaOrRef:r||{},pointer:p,options:a,baseRefsStack:x,absolutePointer:i.$ref||e.schema?.absolutePointer||b,deps:{...d,parentFieldFullPath:h,in:o}}),w=e.description===void 0?E(t,"description")||"":E(e,"description"),R=e.example||t.example,y=e.examples||e.content?.[s]?.examples,S=y?L(y,(n,M)=>j({parser:l,infoOrRef:n,mime:M,encoding:e.encoding})):void 0;s?u=s:e.style?c=e.style:o&&(c=F[o]?.style??"form");const A=e.explode===void 0&&o?F[o]?.explode??!0:!!e.explode,k=e.deprecated===void 0?t.deprecated:e.deprecated,q=a.showExtensions?I(e,a.showExtensions):void 0,C=t?.const||e?.const||"",g=e["x-badges"]??t.schema?.["x-badges"];return{deps:d||{},schema:t,name:f,required:v,description:w,example:R,examples:S,deprecated:k,in:o,kind:P,extensions:q,explode:A,style:c,const:C,serializationMime:u,fieldFullPath:h,...g?.length&&{badges:g},...e.allowReserved&&{allowReserved:e.allowReserved},[m]:e[m]||t[m]}}export{U as getField};
1
+ import{REDOCLY_TEAMS_RBAC as m}from"@redocly/config";import{joinWithSeparator as V}from"../services/index.js";import{extractExtensions as I,getValueFromMdParsedExtension as E,mapValues as L,removePercentChart as T}from"../utils/index.js";import{getSchema as _}from"./schema.js";import{getExamples as j}from"./example.js";const F={path:{style:"simple",explode:!1},query:{style:"form",explode:!0},header:{style:"simple",explode:!1},cookie:{style:"form",explode:!0},querystring:{style:"form",explode:!0}};function U(l,i,p,a,d,x,b=p){const{resolved:e}=l.deref(i),P=i.kind||"field",f=i.name||e.name,o=e.in,v=!!e.required;let r=e.schema,u,s="",c;if(!r&&e.in&&e.content){s=Object.keys(e.content)[0];const n=e.content[s];r=n&&n?.example?{...l.deref(n.schema,x,!0).resolved,example:e.example||n.example}:n.schema}const h=V(d.parentFieldFullPath,T(f||"")),t=_({parser:l,schemaOrRef:r||{},pointer:p,options:a,baseRefsStack:x,absolutePointer:i.$ref||e.schema?.absolutePointer||b,deps:{...d,parentFieldFullPath:h,in:o}}),w=e.description===void 0?E(t,"description")||"":E(e,"description"),R=e.example!==void 0?e.example:t.example,y=e.examples||e.content?.[s]?.examples,S=y?L(y,(n,M)=>j({parser:l,infoOrRef:n,mime:M,encoding:e.encoding})):void 0;s?u=s:e.style?c=e.style:o&&(c=F[o]?.style??"form");const A=e.explode===void 0&&o?F[o]?.explode??!0:!!e.explode,k=e.deprecated===void 0?t.deprecated:e.deprecated,q=a.showExtensions?I(e,a.showExtensions):void 0,C=t?.const||e?.const||"",g=e["x-badges"]??t.schema?.["x-badges"];return{deps:d||{},schema:t,name:f,required:v,description:w,example:R,examples:S,deprecated:k,in:o,kind:P,extensions:q,explode:A,style:c,const:C,serializationMime:u,fieldFullPath:h,...g?.length&&{badges:g},...e.allowReserved&&{allowReserved:e.allowReserved},[m]:e[m]||t[m]}}export{U as getField};
@@ -1,2 +1,2 @@
1
- import{REDOCLY_TEAMS_RBAC as S}from"@redocly/config";import{isObject as I}from"@redocly/theme/core/openapi";import{pushRef as C}from"../services/OpenAPIParser.js";import{detectType as w,extractExtensions as q,getValueFromMdParsedExtension as M,humanizeConstraints as E,isNamedDefinition as h,isPrimitiveType as B,JsonPointer as g,pluralizeType as z,sortByDeprecated as L,sortByRequired as J}from"../utils/index.js";import{getField as T}from"./field.js";function b({parser:r,schemaOrRef:n,pointer:d,options:l,isChild:x=!1,isDefaultMapping:f=!1,baseRefsStack:u=[],deps:a,absolutePointer:m}){const{resolved:p,refsStack:y}=r.deref(n,u,!0),s=n.$ref||d||m||"",o=C(y,s),t=r.mergeAllOf(p,s,o,n.$ref||m),c=t.type||w(t);let P,$=!1;const e={operationPointer:a.operation?.pointer||m||"",schemaOrRef:n,isChild:x,isDefaultMapping:f,typePrefix:"",pointer:s,absolutePointer:m,refsStack:o,rawSchema:p,type:c,isCircular:!!t["x-circular-ref"],isComplex:!!t["x-complex"],title:t.title||h(s)&&g.baseName(s)||"",description:M(t,"description")||"",format:t.format,enum:t.enum||[],example:t.example,deprecated:!!t.deprecated,pattern:t.pattern,externalDocs:t.externalDocs,displayFormat:t.format,isPrimitive:B(t,c),constraints:E(t),default:t.default,readOnly:!!t.readOnly,writeOnly:!!t.writeOnly,const:t.const||"",contentEncoding:t.contentEncoding,contentMediaType:t.contentMediaType,minItems:t.minItems,maxItems:t.maxItems,nullable:t.nullable||t["x-nullable"],schema:t,displayType:"",items:void 0,extensions:void 0,oneOfType:"",discriminatorProp:void 0,oneOf:void 0,[S]:t[S],"x-enumDescriptions":M(t,"x-enumDescriptions"),get fields(){return $||($=!0,!e.isCircular&&!e.isComplex&&(F(e,"object")||F(e,"array")&&v(t))&&(P=K(r,t,s,l,o,a))),P}};if((t.nullable||t["x-nullable"])&&(Array.isArray(e.type)&&!e.type.some(i=>i===null||i==="null")?e.type=[...e.type,"null"]:!Array.isArray(e.type)&&(e.type!==null||e.type!=="null")&&(e.type=[e.type,"null"])),e.displayType=Array.isArray(e.type)?e.type.map(i=>i===null?"null":i).join(" or "):e.type,e.isCircular)return e;if(t.if&&t.then||t.if&&t.else){const{oneOf:i,oneOfType:O}=_({schema:t,parser:r,pointer:s,options:l,deps:a,refsStack:o});return e.oneOf=i,e.oneOfType=O,e}if(!x&&j(t)!==void 0){const{oneOf:i,discriminatorProp:O}=V({schema:t,parser:r,deps:a,mergedSchema:t,options:l,pointer:s,refsStack:o});return e.oneOf=i,e.discriminatorProp=O,e}else x&&Array.isArray(t.oneOf)&&t.oneOf.find(i=>i.$ref===s)&&delete t.oneOf;if(t.oneOf!==void 0){const{oneOf:i,displayType:O}=k({schemaOneOf:t.oneOf,parser:r,deps:a,options:l,pointer:s,refsStack:o,schema:t});return e.oneOfType="One of",i&&(e.oneOf=i),e.displayType=O,t.anyOf!==void 0&&console.warn(`oneOf and anyOf are not supported on the same level. Skipping anyOf at ${s}`),e}if(t.anyOf!==void 0){const{oneOf:i,displayType:O}=k({schemaOneOf:t.anyOf,parser:r,deps:a,options:l,pointer:s,refsStack:o,schema:t});return i&&(e.oneOf=i),e.displayType=O,e.oneOfType="Any of",e}if(F(e,"array")&&(t.items&&!v(t)&&(e.items=b({parser:r,schemaOrRef:t.items,pointer:s+"/items",options:l,baseRefsStack:o,deps:a,absolutePointer:g.join(t.absolutePointer||"",["items"])}),e.items.isPrimitive&&(e.description=e.items.description||e.description,e.pattern=e.items.pattern||e.pattern,e.format=e.items.format||e.format,e.constraints=[...e.constraints,...e.items.constraints])),e.displayType=t.prefixItems||Array.isArray(t.items)?"items":z(e.items?.displayType||e.displayType),e.displayFormat=e.items?.format||"",e.typePrefix=e.items?.typePrefix||"Array of ",e.title=e.title||e.items?.title||"",e.isPrimitive=e.items?.isPrimitive!==void 0?e.items?.isPrimitive:e.isPrimitive,e.example===void 0&&e.items?.example!==void 0&&(e.example=[e.items.example]),e.items?.isPrimitive&&(e.enum=e.items.enum,e["x-enumDescriptions"]=M(e.items,"x-enumDescriptions")),Array.isArray(e.type))){const i=e.type.filter(O=>O!=="array");i.length&&(e.displayType+=` or ${i.join(" or ")}`)}return l.showExtensions&&(e.extensions=q(t,l.showExtensions)),e}function V({schema:r,parser:n,pointer:d,options:l,refsStack:x,deps:f,mergedSchema:u}){const a=j(r),m=a?.propertyName,p=n.findDerived([...u["x-parentRefs"]||[],d]);if(r.oneOf)for(const e of r.oneOf){if(e.$ref===void 0)continue;const i=g.baseName(e.$ref);p[e.$ref]=i}const y=a?.mapping||{},s=a?.["x-explicitMappingOnly"]??Object.keys(y).length>0,o={};for(const e in y){const i=y[e];Array.isArray(o[i])?o[i].push(e):o[i]=[e]}const t=s?{...o}:{...p,...o};let c=[];for(const e of Object.keys(t)){const i=t[e];if(Array.isArray(i))for(const O of i)c.push({$ref:e,name:O});else c.push({$ref:e,name:i})}if(a?.defaultMapping){const e=c.findIndex(O=>O.name===g.baseName(a.defaultMapping)),i="Default mapping";~e?c[e]={$ref:a.defaultMapping,name:i,isDefaultMapping:!0}:c.push({$ref:a.defaultMapping,name:i,isDefaultMapping:!0})}const P=Object.keys(y);return P.length!==0&&(c=c.sort((e,i)=>{if(e.isDefaultMapping&&!i.isDefaultMapping)return 1;if(!e.isDefaultMapping&&i.isDefaultMapping)return-1;const O=P.indexOf(e.name),A=P.indexOf(i.name);return O<0&&A<0?e.name.localeCompare(i.name):O<0?1:A<0?-1:O-A})),{oneOf:c.map(({$ref:e,name:i,isDefaultMapping:O},A)=>{const D=b({parser:n,schemaOrRef:{$ref:e},pointer:e,options:l,isChild:!0,isDefaultMapping:O,baseRefsStack:x.slice(0,-1),deps:{...f,parentFieldFullPath:f.parentFieldFullPath?f.parentFieldFullPath+"&d="+A:"&d="+A.toString()},absolutePointer:u.absolutePointer});return D.title=i,D}),discriminatorProp:m}}function k({schemaOneOf:r,parser:n,refsStack:d,pointer:l,schema:x,options:f,deps:u}){const a=r.map((p,y)=>{const{resolved:s,refsStack:o}=n.deref(p,d,!0),t=n.mergeAllOf(s,l+"/oneOf/"+y,o),c=h(p.$ref)&&!t.title?g.baseName(p.$ref):`${t.title||""}${t.const&&JSON.stringify(t.const)||""}`;return b({parser:n,schemaOrRef:{...t,title:c,allOf:[{...x,oneOf:void 0,anyOf:void 0}],discriminator:s.allOf?void 0:t.discriminator},pointer:p.$ref||l+"/oneOf/"+y,options:f,baseRefsStack:o,deps:{...u,parentFieldFullPath:u.parentFieldFullPath?u.parentFieldFullPath+"&oneOf="+y:"&oneOf="+y.toString()}})}),m=[...new Set(a.map(p=>{let y=p.typePrefix+(p.title&&!f.hideSchemaTitles?`${p.title} (${p.displayType})`:p.displayType);return y.indexOf(" or ")>-1&&(y=`(${y})`),y}))].join(" or ");return{oneOf:a,displayType:m}}function _({schema:r,parser:n,pointer:d,options:l,refsStack:x,deps:f}){const{if:u,else:a={},then:m={},...p}=r;return{oneOf:[{allOf:[p,m,u],title:u&&u["x-displayName"]||u?.title||"case 1"},{allOf:[p,a],title:a&&a["x-displayName"]||a?.title||"case 2"}].map((t,c)=>b({parser:n,schemaOrRef:{...t},pointer:d+"/oneOf/"+c,options:l,baseRefsStack:x,deps:{...f,parentFieldFullPath:f.parentFieldFullPath?f.parentFieldFullPath+"&oneOf="+c:"&oneOf="+c.toString()}})),oneOfType:"One of"}}function R(r,n,d){return r||(console.warn(`Field "${n}" is invalid, skipping.
2
- Field must be an object but got ${typeof r} at "${d}"`),{})}function K(r,n,d,l,x,f){let u=n.properties||(F(n,"array")?n.prefixItems||n.items:void 0)||{};const a=n.patternProperties||{},m=n.additionalProperties||n.unevaluatedProperties,p=n.prefixItems?n.items:n.additionalItems,y=n.default||{};let s=Object.keys(u).map(o=>{const t=R(u[o],o,d),c=n.required===void 0?!1:n.required.indexOf(o)>-1;return T(r,{name:n.properties?o:`[${o}]`,required:c,schema:{...t,example:n.example?.[o]||t.example,default:t.default===void 0&&y?y[o]:t.default}},d+"/properties/"+o,l,f,x,g.join(n.absolutePointer||"",["properties",o]))});return l.sortRequiredPropsFirst&&(s=J(s,n.required)),s.push(...Object.keys(a).map(o=>{const t=R(a[o],o,d);return T(r,{name:o,required:!1,schema:t,kind:"patternProperties"},`${d}/patternProperties/${o}`,l,f,x)})),(I(m)||m===!0)&&s.push(T(r,{name:(I(m)&&m["x-additionalPropertiesName"]||"property name").concat("*"),required:!1,schema:m===!0?{}:m,kind:"additionalProperties"},d+"/additionalProperties",l,f,x,g.join(n.absolutePointer||"",["additionalProperties"]))),s.push(...Y({parser:r,schema:p,fieldsCount:s.length,$ref:d,options:l,refsStack:x,deps:f})),L(s)}function Y({parser:r,schema:n=!1,fieldsCount:d,$ref:l,options:x,refsStack:f,deps:u}){return typeof n=="boolean"?n?[T(r,{name:`[${d}...]`,schema:{},kind:"additionalItems"},`${l}/additionalItems`,x,u,f)]:[]:Array.isArray(n)?[...n.map((a,m)=>T(r,{name:`[${d+m}]`,schema:a,kind:"additionalItems"},`${l}/additionalItems/${m}`,x,u,f))]:I(n)?[T(r,{name:`[${d}...]`,schema:n,kind:"additionalItems"},`${l}/additionalItems`,x,u,f)]:[]}function j(r){return r.discriminator||r["x-discriminator"]}function F(r,n){return r.type===n||Array.isArray(r.type)&&r.type.includes(n)}function v(r){return!!(Array.isArray(r.items)||Array.isArray(r.prefixItems))}export{b as getSchema};
1
+ import{REDOCLY_TEAMS_RBAC as M}from"@redocly/config";import{isObject as h}from"@redocly/theme/core/openapi";import{pushRef as w}from"../services/OpenAPIParser.js";import{detectType as C,extractExtensions as q,getValueFromMdParsedExtension as D,humanizeConstraints as B,isNamedDefinition as S,isPrimitiveType as z,JsonPointer as A,pluralizeType as L,sortByDeprecated as J,sortByRequired as V}from"../utils/index.js";import{getField as T}from"./field.js";function I({parser:r,schemaOrRef:n,pointer:m,options:s,isChild:x=!1,isDefaultMapping:f=!1,baseRefsStack:p=[],deps:a,absolutePointer:y}){const{resolved:d,refsStack:c}=r.deref(n,p,!0),u=n.$ref||m||y||"",o=w(c,u),t=r.mergeAllOf(d,u,o,n.$ref||y),l=t.type||C(t);let g,b=!1;const e={operationPointer:a.operation?.pointer||y||"",schemaOrRef:n,isChild:x,isDefaultMapping:f,typePrefix:"",pointer:u,absolutePointer:y,refsStack:o,rawSchema:d,type:l,isCircular:!!t["x-circular-ref"],isComplex:!!t["x-complex"],title:t.title||S(u)&&A.baseName(u)||"",description:D(t,"description")||"",format:t.format,enum:t.enum||[],example:t.example,deprecated:!!t.deprecated,pattern:t.pattern,externalDocs:t.externalDocs,displayFormat:t.format,isPrimitive:z(t,l),constraints:B(t),default:t.default,readOnly:!!t.readOnly,writeOnly:!!t.writeOnly,const:t.const||"",contentEncoding:t.contentEncoding,contentMediaType:t.contentMediaType,minItems:t.minItems,maxItems:t.maxItems,nullable:t.nullable||t["x-nullable"],schema:t,displayType:"",items:void 0,extensions:void 0,oneOfType:"",discriminatorProp:void 0,oneOf:void 0,[M]:t[M],"x-enumDescriptions":D(t,"x-enumDescriptions"),get fields(){return b||(b=!0,!e.isCircular&&!e.isComplex&&($(e,"object")||$(e,"array")&&R(t))&&(g=K(r,t,u,s,o,a))),g}};if((t.nullable||t["x-nullable"])&&(Array.isArray(e.type)&&!e.type.some(i=>i===null||i==="null")?e.type=[...e.type,"null"]:!Array.isArray(e.type)&&(e.type!==null||e.type!=="null")&&(e.type=[e.type,"null"])),e.displayType=Array.isArray(e.type)?e.type.map(i=>i===null?"null":i).join(" or "):e.type,e.isCircular)return e;if(t.if&&t.then||t.if&&t.else){const{oneOf:i,oneOfType:O}=H({schema:t,parser:r,pointer:u,options:s,deps:a,refsStack:o});return e.oneOf=i,e.oneOfType=O,e}if(!x&&v(t)!==void 0){const{oneOf:i,discriminatorProp:O}=_({schema:t,parser:r,deps:a,mergedSchema:t,options:s,pointer:u,refsStack:o});return e.oneOf=i,e.discriminatorProp=O,e}else x&&Array.isArray(t.oneOf)&&t.oneOf.find(i=>i.$ref===u)&&delete t.oneOf;if(t.oneOf!==void 0){const{oneOf:i,displayType:O}=k({schemaOneOf:t.oneOf,parser:r,deps:a,options:s,pointer:u,refsStack:o,schema:t});return e.oneOfType="One of",i&&(e.oneOf=i),e.displayType=O,t.anyOf!==void 0&&console.warn(`oneOf and anyOf are not supported on the same level. Skipping anyOf at ${u}`),e}if(t.anyOf!==void 0){const{oneOf:i,displayType:O}=k({schemaOneOf:t.anyOf,parser:r,deps:a,options:s,pointer:u,refsStack:o,schema:t});return i&&(e.oneOf=i),e.displayType=O,e.oneOfType="Any of",e}if($(e,"array")){t.items&&!R(t)&&(e.items=I({parser:r,schemaOrRef:t.items,pointer:u+"/items",options:s,baseRefsStack:o,deps:a,absolutePointer:A.join(t.absolutePointer||"",["items"])}));const i=!!(e.items?.isPrimitive&&(e.items.description||e.items.pattern||e.items.constraints.length||e.items.externalDocs||e.items.default!==void 0||e.items.const||e.items.deprecated||e.items.contentEncoding)),O=e.items&&$(e.items,"array")&&e.items.displayType==="any"?"array":e.items?.displayType;e.displayType=t.prefixItems||Array.isArray(t.items)||t.items===!1?"items":L(O||"any"),e.typePrefix=e.items?.typePrefix||"Array of ",i||(e.displayFormat=e.items?.format||"",e.title=e.title||e.items?.title||""),e.isPrimitive=i?!1:e.items?.isPrimitive!==void 0?e.items?.isPrimitive:e.isPrimitive,e.example===void 0&&e.items?.example!==void 0&&!i&&(e.example=[e.items.example]);const P=t.prefixItems||(Array.isArray(t.items)?t.items:[]);if(Array.isArray(e.example)&&e.example.length&&P.length&&e.example.length<=P.length&&(e.example=void 0),e.items?.isPrimitive&&!i&&(e.enum=e.items.enum,e["x-enumDescriptions"]=D(e.items,"x-enumDescriptions")),Array.isArray(e.type)){const F=e.type.filter(E=>E!=="array");F.length&&(e.displayType+=` or ${F.join(" or ")}`)}}return s.showExtensions&&(e.extensions=q(t,s.showExtensions)),e}function _({schema:r,parser:n,pointer:m,options:s,refsStack:x,deps:f,mergedSchema:p}){const a=v(r),y=a?.propertyName,d=n.findDerived([...p["x-parentRefs"]||[],m]);if(r.oneOf)for(const e of r.oneOf){if(e.$ref===void 0)continue;const i=A.baseName(e.$ref);d[e.$ref]=i}const c=a?.mapping||{},u=a?.["x-explicitMappingOnly"]??Object.keys(c).length>0,o={};for(const e in c){const i=c[e];Array.isArray(o[i])?o[i].push(e):o[i]=[e]}const t=u?{...o}:{...d,...o};let l=[];for(const e of Object.keys(t)){const i=t[e];if(Array.isArray(i))for(const O of i)l.push({$ref:e,name:O});else l.push({$ref:e,name:i})}if(a?.defaultMapping){const e=l.findIndex(O=>O.name===A.baseName(a.defaultMapping)),i="Default mapping";~e?l[e]={$ref:a.defaultMapping,name:i,isDefaultMapping:!0}:l.push({$ref:a.defaultMapping,name:i,isDefaultMapping:!0})}const g=Object.keys(c);return g.length!==0&&(l=l.sort((e,i)=>{if(e.isDefaultMapping&&!i.isDefaultMapping)return 1;if(!e.isDefaultMapping&&i.isDefaultMapping)return-1;const O=g.indexOf(e.name),P=g.indexOf(i.name);return O<0&&P<0?e.name.localeCompare(i.name):O<0?1:P<0?-1:O-P})),{oneOf:l.map(({$ref:e,name:i,isDefaultMapping:O},P)=>{const F=I({parser:n,schemaOrRef:{$ref:e},pointer:e,options:s,isChild:!0,isDefaultMapping:O,baseRefsStack:x.slice(0,-1),deps:{...f,parentFieldFullPath:f.parentFieldFullPath?f.parentFieldFullPath+"&d="+P:"&d="+P.toString()},absolutePointer:p.absolutePointer});return F.title=i,F}),discriminatorProp:y}}function k({schemaOneOf:r,parser:n,refsStack:m,pointer:s,schema:x,options:f,deps:p}){const a=r.map((d,c)=>{const{resolved:u,refsStack:o}=n.deref(d,m,!0),t=n.mergeAllOf(u,s+"/oneOf/"+c,o),l=S(d.$ref)&&!t.title?A.baseName(d.$ref):`${t.title||""}${t.const&&JSON.stringify(t.const)||""}`;return I({parser:n,schemaOrRef:{...t,title:l,allOf:[{...x,oneOf:void 0,anyOf:void 0}],discriminator:u.allOf?void 0:t.discriminator},pointer:d.$ref||s+"/oneOf/"+c,options:f,baseRefsStack:o,deps:{...p,parentFieldFullPath:p.parentFieldFullPath?p.parentFieldFullPath+"&oneOf="+c:"&oneOf="+c.toString()}})}),y=[...new Set(a.map(d=>{let c=d.typePrefix+(d.title&&!f.hideSchemaTitles?`${d.title} (${d.displayType})`:d.displayType);return c.indexOf(" or ")>-1&&(c=`(${c})`),c}))].join(" or ");return{oneOf:a,displayType:y}}function H({schema:r,parser:n,pointer:m,options:s,refsStack:x,deps:f}){const{if:p,else:a={},then:y={},...d}=r;return{oneOf:[{allOf:[d,y,p],title:p&&p["x-displayName"]||p?.title||"case 1"},{allOf:[d,a],title:a&&a["x-displayName"]||a?.title||"case 2"}].map((t,l)=>I({parser:n,schemaOrRef:{...t},pointer:m+"/oneOf/"+l,options:s,baseRefsStack:x,deps:{...f,parentFieldFullPath:f.parentFieldFullPath?f.parentFieldFullPath+"&oneOf="+l:"&oneOf="+l.toString()}})),oneOfType:"One of"}}function j(r,n,m){return r||(console.warn(`Field "${n}" is invalid, skipping.
2
+ Field must be an object but got ${typeof r} at "${m}"`),{})}function K(r,n,m,s,x,f){let p=n.properties||($(n,"array")?n.prefixItems||n.items:void 0)||{};const a=n.patternProperties||{},y=n.additionalProperties||n.unevaluatedProperties,d=n.prefixItems?n.items:n.additionalItems,c=n.default||{},u=!!n.properties||Array.isArray(n.example)&&n.example.length>0&&n.example.length<=Object.keys(p).length;let o=Object.keys(p).map(t=>{const l=j(p[t],t,m),g=n.required===void 0?!1:n.required.indexOf(t)>-1,b=u?n.example?.[t]:void 0;return T(r,{name:n.properties?t:`[${t}]`,required:g,schema:{...l,example:b!==void 0?b:l.example,default:l.default===void 0&&c?c[t]:l.default}},m+"/properties/"+t,s,f,x,A.join(n.absolutePointer||"",["properties",t]))});return s.sortRequiredPropsFirst&&(o=V(o,n.required)),o.push(...Object.keys(a).map(t=>{const l=j(a[t],t,m);return T(r,{name:t,required:!1,schema:l,kind:"patternProperties"},`${m}/patternProperties/${t}`,s,f,x)})),(h(y)||y===!0)&&o.push(T(r,{name:(h(y)&&y["x-additionalPropertiesName"]||"property name").concat("*"),required:!1,schema:y===!0?{}:y,kind:"additionalProperties"},m+"/additionalProperties",s,f,x,A.join(n.absolutePointer||"",["additionalProperties"]))),o.push(...Y({parser:r,schema:d,fieldsCount:o.length,$ref:m,options:s,refsStack:x,deps:f})),J(o)}function Y({parser:r,schema:n=!1,fieldsCount:m,$ref:s,options:x,refsStack:f,deps:p}){return typeof n=="boolean"?n?[T(r,{name:`[${m}...]`,schema:{},kind:"additionalItems"},`${s}/additionalItems`,x,p,f)]:[]:Array.isArray(n)?[...n.map((a,y)=>T(r,{name:`[${m+y}]`,schema:a,kind:"additionalItems"},`${s}/additionalItems/${y}`,x,p,f))]:h(n)?[T(r,{name:`[${m}...]`,schema:n,kind:"additionalItems"},`${s}/additionalItems`,x,p,f)]:[]}function v(r){return r.discriminator||r["x-discriminator"]}function $(r,n){return r.type===n||Array.isArray(r.type)&&r.type.includes(n)}function R(r){return!!(Array.isArray(r.items)||Array.isArray(r.prefixItems))}export{I as getSchema};
@@ -1 +1 @@
1
- import{IS_BROWSER as E,isObject as w,isString as B,isUndefined as i}from"@redocly/theme/core/openapi";import{tryDecodeURIComponent as W,getDefinitionName as I}from"../utils/index.js";import{JsonPointer as g}from"../utils/JsonPointer.js";import{normalizeOptions as z}from"./config-options/normalizeOptions.js";function R(O,e){return e&&O[O.length-1]!==e?[...O,e]:O}function $(O,e){return e?O.concat(e):O}class _{options;definitionUrl;definition;allowMergeRefs=!1;constructor(e,t,l=z({})){this.options=l,this.definition=Object.assign({},e),this.validate(e),this.definition=e,this.allowMergeRefs=e.openapi.startsWith("3.1");const s=E?window.location.href:"";B(t)&&(this.definitionUrl=new URL(t,s).href)}validate(e){if(i(e.openapi))throw new Error("Document must be valid OpenAPI 3.0.0 definition")}byRef=e=>{let t;if(this.definition){e.charAt(0)!=="#"&&(e="#"+e),e=W(e);try{t=g.get(this.definition,e)}catch{}return t||{}}};isRef(e){return e?(e=e,e.$ref!==void 0&&e.$ref!==null):!1}deref(e,t=[],l=!1,s=0){const n=e?.["x-refsStack"];if(t=$(t,n),s>5)return{resolved:Object.assign({},e,{"x-complex":!0}),refsStack:t};if(this.isRef(e)){const r=I(e.$ref);if(r&&this.options.ignoreNamedSchemas.has(r))return{resolved:{type:"object",title:r},refsStack:t};let f=this.byRef(e.$ref);if(!f)throw new Error(`Failed to resolve $ref "${e.$ref}"`);return t.includes(e.$ref)?f=Object.assign({},f,{"x-circular-ref":!0}):this.isRef(f)&&(f=this.deref(f,t,l,s).resolved),this.allowMergeRefs&&(f=this.mergeRefs(e,f,l)),{resolved:f,refsStack:R(t,e.$ref)}}return{resolved:e,refsStack:$(t,n)}}mergeRefs(e,t,l){const{$ref:s,...n}=e,r=Object.keys(n);if(r.length===0)return t;if(l&&r.some(f=>!["description","title","externalDocs","x-refsStack","x-parentRefs","readOnly","writeOnly","x-complex"].includes(f))){const{description:f,title:d,readOnly:h,writeOnly:o,...y}=n;return{allOf:[{description:f,title:d,readOnly:h,writeOnly:o},t,y]}}else return{...t,...n}}mergeAllOf(e,t,l,s="",n=0){if(e["x-circular-ref"])return e;if(e=this.hoistOneOfs(e),e.allOf===void 0)return{absolutePointer:s,...e};let r={...e,"x-parentRefs":[],absolutePointer:g.join(s,["allOf"]),allOf:void 0,title:n===0?e.title||I(t):e.title};!i(r.properties)&&w(r.properties)&&(r.properties={...r.properties}),!i(r.items)&&w(r.items)&&(r.items={...r.items});const f=e.allOf.map((d,h)=>{const{resolved:o,refsStack:y}=this.deref(d,l,!0,n),p=d.$ref,u=p||g.join(s,[String(h)]);if(o["x-complex"]){const c={"x-complex":!0};return i(o.readOnly)||(c.readOnly=o.readOnly),i(o.writeOnly)||(c.writeOnly=o.writeOnly),i(o.title)||(c.title=o.title),i(o.description)||(c.description=o.description),{$ref:p,refsStack:R(y,p),schema:c,absolutePointer:u}}const m=this.mergeAllOf(o,p,y,u,n+1);if(!(m["x-circular-ref"]&&m.allOf))return p&&r["x-parentRefs"]?.push(...m["x-parentRefs"]||[],p),{$ref:p,refsStack:R(y,p),schema:m,absolutePointer:u}}).filter(Boolean);for(const[d,{$ref:h,schema:o,refsStack:y,absolutePointer:p}]of f.entries()){const{type:u,enum:m,properties:c,items:D,required:k,title:S,description:C,readOnly:M,writeOnly:N,oneOf:P,anyOf:v,"x-circular-ref":A,"x-complex":b,...U}=o||{};if(!(r.type!==u&&!i(r.type)&&!i(u)&&!n)){if(i(u)||(Array.isArray(u)&&Array.isArray(r.type)?r.type=[...u,...r.type]:r.type=u),i(m)||(Array.isArray(m)&&Array.isArray(r.enum)?r.enum=Array.from(new Set([...m,...r.enum])):r.enum=m),!i(c)&&w(c)){r.properties=r.properties||{};for(const a in c){const x=$(y,c[a]?.["x-refsStack"]);if(!r.properties[a])r.properties[a]={...c[a],absolutePointer:g.join(p,["properties",a]),"x-refsStack":x};else if(!A){const q=this.mergeAllOf({allOf:[r.properties[a],c[a]],"x-refsStack":x},t+"/properties/"+a,x,g.join(p,["allOf",String(d),"properties",a]),n+1);r.properties[a]=q}}}if(!i(D)&&!A&&!b){const a=typeof r.items=="boolean"?{}:Object.assign({},r.items),x=typeof o.items=="boolean"?{}:Object.assign({},o.items);r.items=this.mergeAllOf({allOf:[a,x]},t+"/items",y,"",n+1)}i(P)||(r.oneOf=P),i(v)||(r.anyOf=v),Array.isArray(k)&&(r.required=[...r.required||[],...k]),r={...r,title:e.title||(h&&S?S:r.title||S),description:r.description||C,readOnly:i(r.readOnly)?M:r.readOnly,writeOnly:i(r.writeOnly)?N:r.writeOnly,"x-circular-ref":r["x-circular-ref"]||A,"x-complex":r["x-complex"]||b,...U}}}return r}findDerived(e){const t={},l=this.definition.components&&this.definition.components.schemas||{};for(const s in l){const{resolved:n}=this.deref(l[s]);!i(n.allOf)&&n.allOf.find(r=>!i(r.$ref)&&e.indexOf(r.$ref)>-1)&&(t["#/components/schemas/"+s]=[n["x-discriminator-value"]||s])}return t}hoistOneOfs(e){if(i(e.allOf))return e;const{allOf:t,...l}=e;for(let s=0;s<t.length;s++){const{oneOf:n,...r}=t[s];if(n&&Array.isArray(n)&&i(r.discriminator)&&i(r["x-discriminator"])){const f=t.slice(0,s),d=t.slice(s+1),h=Object.keys(r).length>0?[r]:[];return{...l,oneOf:n.map(o=>({allOf:[...f,...h,o,...d]}))}}}return e}}export{_ as OpenAPIParser,$ as concatRefStacks,R as pushRef};
1
+ import{IS_BROWSER as W,isObject as R,isString as z,isUndefined as i}from"@redocly/theme/core/openapi";import{tryDecodeURIComponent as F,getDefinitionName as I}from"../utils/index.js";import{JsonPointer as g}from"../utils/JsonPointer.js";import{normalizeOptions as J}from"./config-options/normalizeOptions.js";function $(y,r){return r&&y[y.length-1]!==r?[...y,r]:y}function k(y,r){return r?y.concat(r):y}class j{options;definitionUrl;definition;allowMergeRefs=!1;constructor(r,t,l=J({})){this.options=l,this.definition=Object.assign({},r),this.validate(r),this.definition=r,this.allowMergeRefs=r.openapi.startsWith("3.1");const o=W?window.location.href:"";z(t)&&(this.definitionUrl=new URL(t,o).href)}validate(r){if(i(r.openapi))throw new Error("Document must be valid OpenAPI 3.0.0 definition")}byRef=r=>{let t;if(this.definition){r.charAt(0)!=="#"&&(r="#"+r),r=F(r);try{t=g.get(this.definition,r)}catch{}return t||{}}};isRef(r){return r?(r=r,r.$ref!==void 0&&r.$ref!==null):!1}deref(r,t=[],l=!1,o=0){const n=r?.["x-refsStack"];if(t=k(t,n),o>5)return{resolved:Object.assign({},r,{"x-complex":!0}),refsStack:t};if(this.isRef(r)){const e=I(r.$ref);if(e&&this.options.ignoreNamedSchemas.has(e))return{resolved:{type:"object",title:e},refsStack:t};let s=this.byRef(r.$ref);if(!s)throw new Error(`Failed to resolve $ref "${r.$ref}"`);return t.includes(r.$ref)?s=Object.assign({},s,{"x-circular-ref":!0}):this.isRef(s)&&(s=this.deref(s,t,l,o).resolved),this.allowMergeRefs&&(s=this.mergeRefs(r,s,l)),{resolved:s,refsStack:$(t,r.$ref)}}return{resolved:r,refsStack:k(t,n)}}mergeRefs(r,t,l){const{$ref:o,...n}=r,e=Object.keys(n);if(e.length===0)return t;if(l&&e.some(s=>!["description","x-parsed-md-description","title","externalDocs","x-refsStack","x-parentRefs","readOnly","writeOnly","x-complex"].includes(s))){const{description:s,"x-parsed-md-description":d,title:u,readOnly:f,writeOnly:x,...c}=n;return{allOf:[{description:s,"x-parsed-md-description":d,title:u,readOnly:f,writeOnly:x},t,c]}}else{const s={...t,...n};for(const d of e){const u=`x-parsed-md-${d}`;!(u in n)&&u in s&&delete s[u]}return s}}mergeAllOf(r,t,l,o="",n=0){if(r["x-circular-ref"])return r;if(r=this.hoistOneOfs(r),r.allOf===void 0)return{absolutePointer:o,...r};let e={...r,"x-parentRefs":[],absolutePointer:g.join(o,["allOf"]),allOf:void 0,title:n===0?r.title||I(t):r.title};!i(e.properties)&&R(e.properties)&&(e.properties={...e.properties}),!i(e.items)&&R(e.items)&&(e.items={...e.items});const s=r.allOf.map((d,u)=>{const{resolved:f,refsStack:x}=this.deref(d,l,!0,n),c=d.$ref,m=c||g.join(o,[String(u)]);if(f["x-complex"]){const p={"x-complex":!0};return i(f.readOnly)||(p.readOnly=f.readOnly),i(f.writeOnly)||(p.writeOnly=f.writeOnly),i(f.title)||(p.title=f.title),i(f.description)||(p.description=f.description),{$ref:c,refsStack:$(x,c),schema:p,absolutePointer:m}}const O=this.mergeAllOf(f,c,x,m,n+1);if(!(O["x-circular-ref"]&&O.allOf))return c&&e["x-parentRefs"]?.push(...O["x-parentRefs"]||[],c),{$ref:c,refsStack:$(x,c),schema:O,absolutePointer:m}}).filter(Boolean);for(const[d,{$ref:u,schema:f,refsStack:x,absolutePointer:c}]of s.entries()){const{type:m,enum:O,properties:p,items:C,required:P,title:S,description:M,"x-parsed-md-description":N,readOnly:U,writeOnly:q,oneOf:D,anyOf:v,"x-circular-ref":A,"x-complex":b,...E}=f||{};if(e.type!==m&&!i(e.type)&&!i(m)&&!n)continue;if(i(m)||(Array.isArray(m)&&Array.isArray(e.type)?e.type=[...m,...e.type]:e.type=m),i(O)||(Array.isArray(O)&&Array.isArray(e.enum)?e.enum=Array.from(new Set([...O,...e.enum])):e.enum=O),!i(p)&&R(p)){e.properties=e.properties||{};for(const a in p){const h=k(x,p[a]?.["x-refsStack"]);if(!e.properties[a])e.properties[a]={...p[a],absolutePointer:g.join(c,["properties",a]),"x-refsStack":h};else if(!A){const B=this.mergeAllOf({allOf:[e.properties[a],p[a]],"x-refsStack":h},t+"/properties/"+a,h,g.join(c,["allOf",String(d),"properties",a]),n+1);e.properties[a]=B}}}if(!i(C)&&!A&&!b){const a=typeof e.items=="boolean"?{}:Object.assign({},e.items),h=typeof f.items=="boolean"?{}:Object.assign({},f.items);e.items=this.mergeAllOf({allOf:[a,h]},t+"/items",x,"",n+1)}i(D)||(e.oneOf=D),i(v)||(e.anyOf=v),Array.isArray(P)&&(e.required=[...e.required||[],...P]);const w=e.description?e["x-parsed-md-description"]:N;e["x-parsed-md-description"]!==w&&delete e["x-parsed-md-description"],e={...e,...i(w)?{}:{"x-parsed-md-description":w},title:r.title||(u&&S?S:e.title||S),description:e.description||M,readOnly:i(e.readOnly)?U:e.readOnly,writeOnly:i(e.writeOnly)?q:e.writeOnly,"x-circular-ref":e["x-circular-ref"]||A,"x-complex":e["x-complex"]||b,...E}}return e}findDerived(r){const t={},l=this.definition.components&&this.definition.components.schemas||{};for(const o in l){const{resolved:n}=this.deref(l[o]);!i(n.allOf)&&n.allOf.find(e=>!i(e.$ref)&&r.indexOf(e.$ref)>-1)&&(t["#/components/schemas/"+o]=[n["x-discriminator-value"]||o])}return t}hoistOneOfs(r){if(i(r.allOf))return r;const{allOf:t,...l}=r;for(let o=0;o<t.length;o++){const{oneOf:n,...e}=t[o];if(n&&Array.isArray(n)&&i(e.discriminator)&&i(e["x-discriminator"])){const s=t.slice(0,o),d=t.slice(o+1),u=Object.keys(e).length>0?[e]:[];return{...l,oneOf:n.map(f=>({allOf:[...s,...u,f,...d]}))}}}return r}}export{j as OpenAPIParser,k as concatRefStacks,$ as pushRef};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/openapi-docs",
3
- "version": "3.24.0-next.4",
3
+ "version": "3.24.0-next.5",
4
4
  "description": "Redocly OpenAPI Docs",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -22,9 +22,9 @@
22
22
  "dependencies": {
23
23
  "@babel/core": "7.29.7",
24
24
  "@markdoc/markdoc": "0.5.2",
25
- "@redocly/openapi-core": "2.39.0",
25
+ "@redocly/openapi-core": "2.40.0",
26
26
  "deepmerge": "^4.2.2",
27
- "dompurify": "3.4.11",
27
+ "dompurify": "3.4.12",
28
28
  "fast-deep-equal": "^3.1.3",
29
29
  "fast-xml-parser": "5.7.3",
30
30
  "jotai": "^2.12.5",
@@ -41,7 +41,7 @@
41
41
  "web-vitals": "3.3.1",
42
42
  "@redocly/config": "0.52.0",
43
43
  "@redocly/redoc-opentelemetry": "0.2.2",
44
- "@redocly/replay": "0.27.0-next.3"
44
+ "@redocly/replay": "0.27.0-next.4"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@shikijs/transformers": "3.21.0",
@@ -57,7 +57,7 @@
57
57
  "@vitest/coverage-v8": "4.1.10",
58
58
  "esbuild": "0.28.1",
59
59
  "jest-styled-components": "7.2.0",
60
- "js-yaml": "4.2.0",
60
+ "js-yaml": "4.3.0",
61
61
  "json-schema": "0.4.0",
62
62
  "outdent": "0.8.0",
63
63
  "path-browserify": "1.0.1",
@@ -71,7 +71,7 @@
71
71
  "url": "~0.11.0",
72
72
  "vite": "7.3.6",
73
73
  "vitest": "4.1.10",
74
- "@redocly/theme": "0.68.0-next.2"
74
+ "@redocly/theme": "0.68.0-next.3"
75
75
  },
76
76
  "scripts": {
77
77
  "start": "pnpm run copy-highlight-hook && vite",