@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.
- package/dist/redocly-openapi-docs.min.js +3156 -2974
- package/lib/components/Schema/ArraySchema.js +1 -1
- package/lib/components/Schema/Schema.js +1 -1
- package/lib/components/Schema/SubSchema.js +1 -1
- package/lib/components/Schema/types.d.ts +2 -0
- package/lib/models/field.js +1 -1
- package/lib/models/schema.js +2 -2
- package/lib/services/OpenAPIParser.js +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Fragment as
|
|
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
|
|
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
|
|
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?: {
|
package/lib/models/field.js
CHANGED
|
@@ -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
|
|
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};
|
package/lib/models/schema.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{REDOCLY_TEAMS_RBAC as
|
|
2
|
-
Field must be an object but got ${typeof r} at "${
|
|
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
|
|
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.
|
|
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.
|
|
25
|
+
"@redocly/openapi-core": "2.40.0",
|
|
26
26
|
"deepmerge": "^4.2.2",
|
|
27
|
-
"dompurify": "3.4.
|
|
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.
|
|
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.
|
|
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.
|
|
74
|
+
"@redocly/theme": "0.68.0-next.3"
|
|
75
75
|
},
|
|
76
76
|
"scripts": {
|
|
77
77
|
"start": "pnpm run copy-highlight-hook && vite",
|