@redocly/api-docs 0.2.0-next.6 → 0.2.0-next.7

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.
Files changed (76) hide show
  1. package/lib/RedocStandalone.d.ts +2 -2
  2. package/lib/RedocStandalone.js +1 -1
  3. package/lib/RedoclyApiDocs.js +1 -1
  4. package/lib/RedoclyApiDocsStandalone.d.ts +2 -2
  5. package/lib/RedoclyApiDocsStandalone.js +3 -3
  6. package/lib/adapters/graphql/group/utils.js +1 -1
  7. package/lib/adapters/openapi/configure/resolve-request-values.js +1 -1
  8. package/lib/adapters/openapi/items/operation/content.js +1 -1
  9. package/lib/components/Header/HeaderItem.js +5 -5
  10. package/lib/components/Header/HeaderPageActions.d.ts +4 -0
  11. package/lib/components/Header/HeaderPageActions.js +1 -0
  12. package/lib/components/Header/PageActions.d.ts +4 -0
  13. package/lib/components/Header/PageActions.js +11 -0
  14. package/lib/components/Mcp/McpPrompt.js +1 -1
  15. package/lib/components/Mcp/McpTool.js +1 -1
  16. package/lib/components/Mcp/utils.d.ts +1 -1
  17. package/lib/components/Mcp/utils.js +1 -1
  18. package/lib/components/Schema/views/DiscriminatorPropertyRow.js +1 -1
  19. package/lib/components/Schema/views/Examples.js +1 -1
  20. package/lib/components/Security/SecurityFlowDetail.js +1 -1
  21. package/lib/components/markdoc/SchemaDefinition.js +1 -1
  22. package/lib/components/panels/ExampleItem/ResponseExampleItem.js +1 -1
  23. package/lib/components/panels/LanguageItem/LanguagePanelItem.js +5 -1
  24. package/lib/components/panels/LanguageItem/styled.js +17 -14
  25. package/lib/components/panels/McpExamplePanelItem.js +2 -2
  26. package/lib/components/panels/styled.js +1 -1
  27. package/lib/components/pluggable/RedocResponseSamples.js +1 -1
  28. package/lib/hoc/withLicenseGate.d.ts +5 -0
  29. package/lib/hoc/withLicenseGate.js +1 -0
  30. package/lib/hoc/withStoreProvider.d.ts +2 -0
  31. package/lib/hoc/withStoreProvider.js +1 -1
  32. package/lib/hooks/useCopySpecSlice.d.ts +9 -0
  33. package/lib/hooks/useCopySpecSlice.js +1 -0
  34. package/lib/hooks/useLicense.js +1 -1
  35. package/lib/hooks/useLicenseGate.d.ts +6 -0
  36. package/lib/hooks/useLicenseGate.js +1 -0
  37. package/lib/index.d.ts +3 -1
  38. package/lib/index.js +1 -1
  39. package/lib/jotai/store.d.ts +4 -0
  40. package/lib/jotai/store.js +1 -1
  41. package/lib/options/helpers.d.ts +0 -1
  42. package/lib/options/helpers.js +1 -1
  43. package/lib/options/normalizeOptions.js +1 -1
  44. package/lib/options/standaloneLayoutVars.d.ts +3 -0
  45. package/lib/options/standaloneLayoutVars.js +1 -0
  46. package/lib/services/code-samples/replay/from-openapi-document.d.ts +8 -1
  47. package/lib/services/code-samples/replay/from-openapi-document.js +1 -1
  48. package/lib/services/code-samples/replay/index.d.ts +1 -1
  49. package/lib/services/code-samples/replay/index.js +1 -1
  50. package/lib/services/license/check.d.ts +1 -0
  51. package/lib/services/license/check.js +1 -1
  52. package/lib/services/spec-slice/assistant-links.d.ts +9 -0
  53. package/lib/services/spec-slice/assistant-links.js +5 -0
  54. package/lib/services/spec-slice/asyncapi-slice.d.ts +5 -0
  55. package/lib/services/spec-slice/asyncapi-slice.js +1 -0
  56. package/lib/services/spec-slice/clone-strip.d.ts +1 -0
  57. package/lib/services/spec-slice/clone-strip.js +1 -0
  58. package/lib/services/spec-slice/component-closure.d.ts +6 -0
  59. package/lib/services/spec-slice/component-closure.js +1 -0
  60. package/lib/services/spec-slice/graphql-slice.d.ts +2 -0
  61. package/lib/services/spec-slice/graphql-slice.js +1 -0
  62. package/lib/services/spec-slice/index.d.ts +6 -0
  63. package/lib/services/spec-slice/index.js +1 -0
  64. package/lib/services/spec-slice/openapi-slice.d.ts +6 -0
  65. package/lib/services/spec-slice/openapi-slice.js +1 -0
  66. package/lib/services/spec-slice/resolve-scope.d.ts +4 -0
  67. package/lib/services/spec-slice/resolve-scope.js +1 -0
  68. package/lib/services/spec-slice/types.d.ts +37 -0
  69. package/lib/services/spec-slice/types.js +0 -0
  70. package/lib/standalone.js +2 -2
  71. package/lib/types/content.d.ts +2 -2
  72. package/lib/types/options.d.ts +0 -6
  73. package/lib/utils/compose.d.ts +1 -0
  74. package/lib/utils/x-logo.d.ts +1 -1
  75. package/lib/utils/x-logo.js +1 -1
  76. package/package.json +2 -3
@@ -0,0 +1 @@
1
+ import{Fragment as i,jsx as r,jsxs as a}from"react/jsx-runtime";import{useLicenseGate as m}from"../hooks/useLicenseGate.js";function x(t){return function(e){const{gatedItems:s,overlay:n}=m(e.items??[]);return a(i,{children:[n,r(t,{...e,items:s})]})}}export{x as withLicenseGate};
@@ -10,6 +10,8 @@ type WithStoreProviderProps = {
10
10
  options: RawApiDocsOptions;
11
11
  layout?: LayoutVariant;
12
12
  basePath?: string;
13
+ definition?: Record<string, unknown> | string;
14
+ definitionUrl?: string;
13
15
  };
14
16
  export type StoreProviderProps = {
15
17
  options?: RawApiDocsOptions;
@@ -1 +1 @@
1
- import{jsx as p}from"react/jsx-runtime";import{memo as x,useMemo as h,useEffect as L}from"react";import{createStore as A,Provider as E,useStore as j,getDefaultStore as N}from"jotai";import{LayoutVariant as _}from"@redocly/config";import{createStoreContext as k,toRecord as M}from"../adapters/helpers.js";import{populateOpenApiStore as T}from"../adapters/openapi/store.js";import{DEFAULT_MAX_DISPLAYED_ENUM_VALUES as F}from"../options/constants.js";import{normalizeOptions as U}from"../options/normalizeOptions.js";import{globalStoreAtom as d}from"../jotai/store.js";import{appStore as O,environmentAtom as V,layoutAtom as v,userClaimsAtom as y}from"../jotai/app.js";import{buildServerEnvValues as w}from"../services/code-samples/server-env.js";const z={ignoreNamedSchemas:["java.io.ObjectStreamField"],maxDisplayedEnumValues:F};function P(e,n){const t={...z,...e,basePath:n};return U(t)}const C=new WeakSet;function g(e){C.has(e)||(C.add(e),e.sub(O,()=>{}))}function b(e,n){if(!n?.servers?.length)return;g(e);const t=w(n.servers),i=e.get(O).environments??{},m={};for(const[s,a]of Object.entries(t)){const c=i[s],r=c?Object.fromEntries(Object.entries(a).filter(([o])=>!(o in c))):a;Object.keys(r).length>0&&(m[s]=r)}Object.keys(m).length!==0&&e.set(V,{environments:m})}function Z(e){const n=x(t=>{const{items:i,options:m,store:s,layout:a,basePath:c=""}=t,r=j(),o=r!==N()?r:void 0,u=h(()=>P(m,c),[m,c]),S=a??u.layout;L(()=>{if(o){const f=o.get(d);b(o,s??f.store),o.set(v,S),o.set(y,u.userClaims??{}),o.set(d,{items:i,store:s??f.store,options:u,replayDefinition:f.replayDefinition})}},[S,u,o,i,s]);const D=h(()=>{if(o)return null;const f={items:i,store:s,options:u,replayDefinition:null},l=A();return l.set(d,f),g(l),l.set(v,S),u.userClaims&&l.set(y,u.userClaims),b(l,s),l},[o,i,s,u,S]);return o||!D?p(e,{...t}):p(E,{store:D,children:p(e,{...t})})});return n.displayName=`WithStoreProvider(${I(e)})`,n}function I(e){return e.displayName||e.name||"Component"}function q(e,n){const t=k(M(e));return T(e,t,n),{schemaStore:t.schemaStore,exampleStore:t.exampleStore,securitySchemeStore:t.securitySchemeStore,mcp:t.document["x-mcp"],schemaCatalogLink:t.document["x-schema-catalog-link"]}}const ee=x(function({children:n,definition:t,apiStore:i,options:m}){const s=h(()=>{const a=P({specType:"openapi",...m},m?.basePath??"");let c;if(i)c=i;else if(t)c=q(t,a);else throw new Error("StoreProvider requires either apiStore or definition");const r=A();return r.set(d,{items:[],store:c,options:a,replayDefinition:null}),g(r),r.set(v,_.STACKED),a.userClaims&&r.set(y,a.userClaims),b(r,c),r},[i,t,m]);return p(E,{store:s,children:n})});export{ee as StoreProvider,Z as withStoreProvider};
1
+ import{jsx as p}from"react/jsx-runtime";import{memo as E,useMemo as v,useEffect as j}from"react";import{createStore as O,Provider as P,useStore as N,getDefaultStore as _}from"jotai";import{LayoutVariant as k}from"@redocly/config";import{createStoreContext as M,toRecord as T}from"../adapters/helpers.js";import{populateOpenApiStore as F}from"../adapters/openapi/store.js";import{DEFAULT_MAX_DISPLAYED_ENUM_VALUES as V}from"../options/constants.js";import{normalizeOptions as w}from"../options/normalizeOptions.js";import{globalStoreAtom as h}from"../jotai/store.js";import{appStore as C,environmentAtom as z,layoutAtom as y}from"../jotai/app.js";import{userClaimsAtom as g}from"../jotai/app.js";import{buildServerEnvValues as I}from"../services/code-samples/server-env.js";const q={ignoreNamedSchemas:["java.io.ObjectStreamField"],maxDisplayedEnumValues:V};function L(e,o){const t={...q,...e,basePath:o};return w(t)}const U=new WeakSet;function b(e){U.has(e)||(U.add(e),e.sub(C,()=>{}))}function D(e,o){if(!o?.servers?.length)return;b(e);const t=I(o.servers),i=e.get(C).environments??{},s={};for(const[n,a]of Object.entries(t)){const m=i[n],r=m?Object.fromEntries(Object.entries(a).filter(([d])=>!(d in m))):a;Object.keys(r).length>0&&(s[n]=r)}Object.keys(s).length!==0&&e.set(z,{environments:s})}function re(e){const o=E(t=>{const{items:i,options:s,store:n,layout:a,basePath:m="",definition:r,definitionUrl:d}=t,x=N(),c=x!==_()?x:void 0,u=v(()=>L(s,m),[s,m]),S=a??u.layout;j(()=>{if(c){const l=c.get(h);D(c,n??l.store),c.set(y,S),c.set(g,u.userClaims??{}),c.set(h,{items:i,store:n??l.store,options:u,definition:r??l.definition,definitionUrl:d??l.definitionUrl,replayDefinition:l.replayDefinition})}},[S,u,c,i,n,r,d]);const A=v(()=>{if(c)return null;const l={items:i,store:n,options:u,definition:r,definitionUrl:d,replayDefinition:null},f=O();return f.set(h,l),b(f),f.set(y,S),u.userClaims&&f.set(g,u.userClaims),D(f,n),f},[c,i,n,u,S]);return c||!A?p(e,{...t}):p(P,{store:A,children:p(e,{...t})})});return o.displayName=`WithStoreProvider(${G(e)})`,o}function G(e){return e.displayName||e.name||"Component"}function K(e,o){const t=M(T(e));return F(e,t,o),{schemaStore:t.schemaStore,exampleStore:t.exampleStore,securitySchemeStore:t.securitySchemeStore,mcp:t.document["x-mcp"],schemaCatalogLink:t.document["x-schema-catalog-link"]}}const oe=E(function({children:o,definition:t,apiStore:i,options:s}){const n=v(()=>{const a=L({specType:"openapi",...s},s?.basePath??"");let m;if(i)m=i;else if(t)m=K(t,a);else throw new Error("StoreProvider requires either apiStore or definition");const r=O();return r.set(h,{items:[],store:m,options:a,replayDefinition:null}),b(r),r.set(y,k.STACKED),a.userClaims&&r.set(g,a.userClaims),D(r,m),r},[i,t,s]);return p(P,{store:n,children:o})});export{oe as StoreProvider,re as withStoreProvider};
@@ -0,0 +1,9 @@
1
+ import type { SliceContentKind, SpecSliceScope } from '../services/spec-slice/index.js';
2
+ type CopySpecSlice = {
3
+ getText: () => Promise<string>;
4
+ contentKind: SliceContentKind;
5
+ scope: SpecSliceScope;
6
+ specUrl?: string;
7
+ };
8
+ export declare function useCopySpecSlice(pageSlug: string): CopySpecSlice | null;
9
+ export {};
@@ -0,0 +1 @@
1
+ import{useMemo as a}from"react";import{useAtomValue as r}from"jotai";import{apiSpecType as d}from"../types/common.js";import{definitionAtom as l,definitionUrlAtom as y,routingBasePathAtom as h,specTypeAtom as A}from"../jotai/store.js";import{routeIndexAtom as P}from"../jotai/routes.js";import{buildSpecSlice as S,resolveSpecSliceScope as g}from"../services/spec-slice/index.js";function x(t,n,i){const e=n.toLowerCase(),o=t.routeIndexByPath.get(n)??t.routeIndexByPath.get(e);return o!==void 0?t.allRoutes[o]:e===i.toLowerCase()?t.rootPage:void 0}function R(t){const n=r(l),i=r(y),e=r(P),o=r(A),m=r(h);return a(()=>{if(!n||!e)return null;const c=x(e,t,m??""),p=c?e.tagByPath.get(c.path)?.items.map(s=>s.content):void 0,u=g(o,c?.content,c?.label,p);if(!u)return null;const f=o===d.GRAPHQL?"graphql":"yaml";return{getText:async()=>{const s=await S(o,n,u);if(s===void 0)throw new Error(`Copy for LLM: no content produced for "${t}"`);return s},contentKind:f,scope:u,specUrl:i}},[n,i,e,o,m,t])}export{R as useCopySpecSlice};
@@ -1 +1 @@
1
- import{useState as s,useEffect as a}from"react";import r from"../services/license/check.js";function d(e){const[n,o]=s(process.env.NODE_ENV==="development"?{valid:!0,allowed:!0}:null);a(()=>{async function i(){const l=await r(e);o(l)}i()},[e]);const t=n===null;return{licenseInfo:n??{},isValid:n!==null&&u(n),isPending:t}}function u(e){return!!e.valid&&!!e.allowed&&!e.expired||!!e.local}export{d as useLicense};
1
+ import{useState as a,useEffect as l}from"react";import r,{isLicenseBypassed as u}from"../services/license/check.js";function p(e){const[n,i]=a(u()?{valid:!0,allowed:!0}:null);l(()=>{async function o(){const s=await r(e);i(s)}o()},[e]);const t=n===null;return{licenseInfo:n??{},isValid:n!==null&&c(n),isPending:t}}function c(e){return!!e.valid&&!!e.allowed&&!e.expired||!!e.local}export{p as useLicense};
@@ -0,0 +1,6 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { ApiItem } from '../types/store.js';
3
+ export declare function useLicenseGate(items: ApiItem[]): {
4
+ gatedItems: ApiItem[];
5
+ overlay: ReactElement | null;
6
+ };
@@ -0,0 +1 @@
1
+ import{jsx as r}from"react/jsx-runtime";import{useAtomValue as t}from"jotai";import{licenseKeyAtom as m}from"../jotai/store.js";import{useLicense as c}from"./useLicense.js";import{LicenseOverlay as l}from"../components/LicenseOverlay.js";function d(o){const s=t(m),{isValid:e,licenseInfo:i,isPending:n}=c(s);return{gatedItems:e?o:[],overlay:!n&&!e?r(l,{licenseInfo:i}):null}}export{d as useLicenseGate};
package/lib/index.d.ts CHANGED
@@ -15,7 +15,6 @@ export { extractFullText } from './adapters/utils/markdoc.js';
15
15
  export { normalizeOptions } from './options/normalizeOptions.js';
16
16
  export { excludeMockServers } from './adapters/openapi/utils/merge-mock-server.js';
17
17
  export { appendUndeclaredConfigureParameters } from './services/code-samples/replay/merge-configure-into-source.js';
18
- export { isGraphqlDocsSidebarHidden } from './options/helpers.js';
19
18
  export { findFirstBinding } from './adapters/asyncapi/build/utils.js';
20
19
  export { resolveRequestValues, applyRequestValuesToOperationInfo, type ResolveRequestValuesParams, } from './adapters/openapi/configure/index.js';
21
20
  export { updateObjectProperties, isDirectRequestValues, getEffectiveRequestValues, createSecurityUpdates, mergeSecurityIntoScheme, applyServerVariableDefaults, type SchemeForCredentials, } from './adapters/openapi/configure/merge-utils.js';
@@ -24,6 +23,7 @@ export type { ConfigureRequestValues, ConfigureServerRequestValues, SecurityDeta
24
23
  export { MarkdownAdapterProvider, useMarkdownAdapter, type MarkdownAdapter, type MarkdownParser, type MarkdownRenderer, } from './contexts/markdownAdapter.js';
25
24
  export { markdocParser } from './components/markdoc/markdocParser.js';
26
25
  export { createMarkdocAdapter } from './components/markdoc/markdocAdapter.js';
26
+ export { adapterToMarkdownParser } from './components/Replay/adapterToMarkdownParser.js';
27
27
  export { parseMarkdown, type ParseMarkdownOptions } from './adapters/utils/parseMarkdown.js';
28
28
  export { isPlainText } from './adapters/utils/isPlainText.js';
29
29
  export { buildMarkdocOptions } from './components/markdoc/buildMarkdocOptions.js';
@@ -54,6 +54,8 @@ export { schemaDefinitionTag } from './components/markdoc/tags/schema-definition
54
54
  export { withReplayPrefetch, useOpenApiDefinition } from './hoc/withReplayPrefetch.js';
55
55
  export { mergeEnvData } from './utils/environments.js';
56
56
  export { buildReplayPredefinedEnvValues } from './services/code-samples/replay/replay-predefined-env.js';
57
+ export { createDocumentReplayConverter } from './services/code-samples/replay/from-openapi-document.js';
58
+ export { ReplayCodeSampleHTTPSnippet } from './services/code-samples/replay/har-to-code-sample-har.js';
57
59
  export { encodeJsonPointerSegment } from './utils/refPointer.js';
58
60
  export { JsonPointer } from './adapters/openapi/utils/JsonPointer.js';
59
61
  export { langFromMime, encodeExampleForMediaType } from './utils/media-type.js';
package/lib/index.js CHANGED
@@ -1 +1 @@
1
- export*from"./types/common.js";import{buildItems as t,buildNavItems as p}from"./adapters/build.js";import{buildGraphqlStoreFromSdl as m}from"./adapters/graphql/buildStoreFromSdl.js";import{simplifyAstStructure as d}from"./adapters/utils/simplifyAstStructure.js";import{extractFullText as f}from"./adapters/utils/markdoc.js";import{normalizeOptions as l}from"./options/normalizeOptions.js";import{excludeMockServers as c}from"./adapters/openapi/utils/merge-mock-server.js";import{appendUndeclaredConfigureParameters as S}from"./services/code-samples/replay/merge-configure-into-source.js";import{isGraphqlDocsSidebarHidden as y}from"./options/helpers.js";import{findFirstBinding as D}from"./adapters/asyncapi/build/utils.js";import{resolveRequestValues as M,applyRequestValuesToOperationInfo as P}from"./adapters/openapi/configure/index.js";import{updateObjectProperties as A,isDirectRequestValues as b,getEffectiveRequestValues as h,createSecurityUpdates as k,mergeSecurityIntoScheme as E,applyServerVariableDefaults as O}from"./adapters/openapi/configure/merge-utils.js";import{MarkdownAdapterProvider as q,useMarkdownAdapter as V}from"./contexts/markdownAdapter.js";import{markdocParser as C}from"./components/markdoc/markdocParser.js";import{createMarkdocAdapter as N}from"./components/markdoc/markdocAdapter.js";import{parseMarkdown as B}from"./adapters/utils/parseMarkdown.js";import{isPlainText as H}from"./adapters/utils/isPlainText.js";import{buildMarkdocOptions as J}from"./components/markdoc/buildMarkdocOptions.js";import{apiDocsMarkdocTags as Y,apiDocsMarkdocNodes as j}from"./components/markdoc/defaultMarkdocConfig.js";import{apiDocsMarkdocComponents as K}from"./components/markdoc/apiDocsMarkdocComponents.js";import{RedoclyApiDocs as W}from"./RedoclyApiDocs.js";import{RedoclyApiDocsStandalone as Z}from"./RedoclyApiDocsStandalone.js";import{ApiDocsSearchIndexer as ee}from"./services/search/indexer.js";import{RedocTelemetry as oe}from"./telemetry/RedocTelemetry.js";import{Replay as pe,EmbeddedReplay as ae}from"./components/Replay/index.js";import{REPLAY_TRY_IT_LOADING_STATE as ie}from"./services/code-samples/index.js";import{findExampleIdByKey as se}from"./services/code-samples/example-key.js";import{RedocSchema as xe,RedocExample as le,RedocResponseSamples as ne,RedocCodeSample as ce}from"./components/pluggable/index.js";import{StoreProvider as Se}from"./hoc/withStoreProvider.js";import{GraphQLTypeViewByName as ye}from"./components/graphql/GraphQLTypeView.js";import{mcpTagSchemas as De}from"./components/markdoc/tags/mcp-tag-schemas.js";import{schemaDefinitionTag as Me}from"./components/markdoc/tags/schema-definition-tag.js";import{withReplayPrefetch as ve,useOpenApiDefinition as Ae}from"./hoc/withReplayPrefetch.js";import{mergeEnvData as he}from"./utils/environments.js";import{buildReplayPredefinedEnvValues as Ee}from"./services/code-samples/replay/replay-predefined-env.js";import{encodeJsonPointerSegment as Ie}from"./utils/refPointer.js";import{JsonPointer as Ve}from"./adapters/openapi/utils/JsonPointer.js";import{langFromMime as Ce,encodeExampleForMediaType as Fe}from"./utils/media-type.js";import{isOperationName as _e,HTTP_METHODS as Be}from"./utils/http-methods.js";import{convertSampleToString as He}from"./services/code-samples/convertSampleToString.js";import{resolveOperationSampleContext as Je,buildCodeSamples as Ue,getRequestBodySamples as Ye,getResponseSamples as je}from"./services/operation-samples/index.js";export{ee as ApiDocsSearchIndexer,ae as EmbeddedReplay,ye as GraphQLTypeViewByName,Be as HTTP_METHODS,Ve as JsonPointer,q as MarkdownAdapterProvider,ie as REPLAY_TRY_IT_LOADING_STATE,ce as RedocCodeSample,le as RedocExample,ne as RedocResponseSamples,xe as RedocSchema,oe as RedocTelemetry,W as RedoclyApiDocs,Z as RedoclyApiDocsStandalone,pe as Replay,Se as StoreProvider,K as apiDocsMarkdocComponents,j as apiDocsMarkdocNodes,Y as apiDocsMarkdocTags,S as appendUndeclaredConfigureParameters,P as applyRequestValuesToOperationInfo,O as applyServerVariableDefaults,Ue as buildCodeSamples,m as buildGraphqlStoreFromSdl,t as buildItems,J as buildMarkdocOptions,p as buildNavItems,Ee as buildReplayPredefinedEnvValues,He as convertSampleToString,N as createMarkdocAdapter,k as createSecurityUpdates,Fe as encodeExampleForMediaType,Ie as encodeJsonPointerSegment,c as excludeMockServers,f as extractFullText,se as findExampleIdByKey,D as findFirstBinding,h as getEffectiveRequestValues,Ye as getRequestBodySamples,je as getResponseSamples,b as isDirectRequestValues,y as isGraphqlDocsSidebarHidden,_e as isOperationName,H as isPlainText,Ce as langFromMime,C as markdocParser,De as mcpTagSchemas,he as mergeEnvData,E as mergeSecurityIntoScheme,l as normalizeOptions,B as parseMarkdown,Je as resolveOperationSampleContext,M as resolveRequestValues,Me as schemaDefinitionTag,d as simplifyAstStructure,A as updateObjectProperties,V as useMarkdownAdapter,Ae as useOpenApiDefinition,ve as withReplayPrefetch};
1
+ export*from"./types/common.js";import{buildItems as t,buildNavItems as p}from"./adapters/build.js";import{buildGraphqlStoreFromSdl as m}from"./adapters/graphql/buildStoreFromSdl.js";import{simplifyAstStructure as f}from"./adapters/utils/simplifyAstStructure.js";import{extractFullText as s}from"./adapters/utils/markdoc.js";import{normalizeOptions as n}from"./options/normalizeOptions.js";import{excludeMockServers as c}from"./adapters/openapi/utils/merge-mock-server.js";import{appendUndeclaredConfigureParameters as S}from"./services/code-samples/replay/merge-configure-into-source.js";import{findFirstBinding as y}from"./adapters/asyncapi/build/utils.js";import{resolveRequestValues as D,applyRequestValuesToOperationInfo as P}from"./adapters/openapi/configure/index.js";import{updateObjectProperties as M,isDirectRequestValues as v,getEffectiveRequestValues as k,createSecurityUpdates as A,mergeSecurityIntoScheme as E,applyServerVariableDefaults as b}from"./adapters/openapi/configure/merge-utils.js";import{MarkdownAdapterProvider as O,useMarkdownAdapter as I}from"./contexts/markdownAdapter.js";import{markdocParser as V}from"./components/markdoc/markdocParser.js";import{createMarkdocAdapter as w}from"./components/markdoc/markdocAdapter.js";import{adapterToMarkdownParser as N}from"./components/Replay/adapterToMarkdownParser.js";import{parseMarkdown as B}from"./adapters/utils/parseMarkdown.js";import{isPlainText as H}from"./adapters/utils/isPlainText.js";import{buildMarkdocOptions as J}from"./components/markdoc/buildMarkdocOptions.js";import{apiDocsMarkdocTags as Y,apiDocsMarkdocNodes as j}from"./components/markdoc/defaultMarkdocConfig.js";import{apiDocsMarkdocComponents as K}from"./components/markdoc/apiDocsMarkdocComponents.js";import{RedoclyApiDocs as W}from"./RedoclyApiDocs.js";import{RedoclyApiDocsStandalone as Z}from"./RedoclyApiDocsStandalone.js";import{ApiDocsSearchIndexer as ee}from"./services/search/indexer.js";import{RedocTelemetry as oe}from"./telemetry/RedocTelemetry.js";import{Replay as pe,EmbeddedReplay as ae}from"./components/Replay/index.js";import{REPLAY_TRY_IT_LOADING_STATE as de}from"./services/code-samples/index.js";import{findExampleIdByKey as ie}from"./services/code-samples/example-key.js";import{RedocSchema as xe,RedocExample as ne,RedocResponseSamples as le,RedocCodeSample as ce}from"./components/pluggable/index.js";import{StoreProvider as Se}from"./hoc/withStoreProvider.js";import{GraphQLTypeViewByName as ye}from"./components/graphql/GraphQLTypeView.js";import{mcpTagSchemas as De}from"./components/markdoc/tags/mcp-tag-schemas.js";import{schemaDefinitionTag as ge}from"./components/markdoc/tags/schema-definition-tag.js";import{withReplayPrefetch as ve,useOpenApiDefinition as ke}from"./hoc/withReplayPrefetch.js";import{mergeEnvData as Ee}from"./utils/environments.js";import{buildReplayPredefinedEnvValues as he}from"./services/code-samples/replay/replay-predefined-env.js";import{createDocumentReplayConverter as Ie}from"./services/code-samples/replay/from-openapi-document.js";import{ReplayCodeSampleHTTPSnippet as Ve}from"./services/code-samples/replay/har-to-code-sample-har.js";import{encodeJsonPointerSegment as we}from"./utils/refPointer.js";import{JsonPointer as Ne}from"./adapters/openapi/utils/JsonPointer.js";import{langFromMime as Be,encodeExampleForMediaType as Ge}from"./utils/media-type.js";import{isOperationName as Le,HTTP_METHODS as Je}from"./utils/http-methods.js";import{convertSampleToString as Ye}from"./services/code-samples/convertSampleToString.js";import{resolveOperationSampleContext as ze,buildCodeSamples as Ke,getRequestBodySamples as Qe,getResponseSamples as We}from"./services/operation-samples/index.js";export{ee as ApiDocsSearchIndexer,ae as EmbeddedReplay,ye as GraphQLTypeViewByName,Je as HTTP_METHODS,Ne as JsonPointer,O as MarkdownAdapterProvider,de as REPLAY_TRY_IT_LOADING_STATE,ce as RedocCodeSample,ne as RedocExample,le as RedocResponseSamples,xe as RedocSchema,oe as RedocTelemetry,W as RedoclyApiDocs,Z as RedoclyApiDocsStandalone,pe as Replay,Ve as ReplayCodeSampleHTTPSnippet,Se as StoreProvider,N as adapterToMarkdownParser,K as apiDocsMarkdocComponents,j as apiDocsMarkdocNodes,Y as apiDocsMarkdocTags,S as appendUndeclaredConfigureParameters,P as applyRequestValuesToOperationInfo,b as applyServerVariableDefaults,Ke as buildCodeSamples,m as buildGraphqlStoreFromSdl,t as buildItems,J as buildMarkdocOptions,p as buildNavItems,he as buildReplayPredefinedEnvValues,Ye as convertSampleToString,Ie as createDocumentReplayConverter,w as createMarkdocAdapter,A as createSecurityUpdates,Ge as encodeExampleForMediaType,we as encodeJsonPointerSegment,c as excludeMockServers,s as extractFullText,ie as findExampleIdByKey,y as findFirstBinding,k as getEffectiveRequestValues,Qe as getRequestBodySamples,We as getResponseSamples,v as isDirectRequestValues,Le as isOperationName,H as isPlainText,Be as langFromMime,V as markdocParser,De as mcpTagSchemas,Ee as mergeEnvData,E as mergeSecurityIntoScheme,n as normalizeOptions,B as parseMarkdown,ze as resolveOperationSampleContext,D as resolveRequestValues,ge as schemaDefinitionTag,f as simplifyAstStructure,M as updateObjectProperties,I as useMarkdownAdapter,ke as useOpenApiDefinition,ve as withReplayPrefetch};
@@ -6,6 +6,8 @@ export type GlobalStoreAtom = {
6
6
  items: ApiItem[];
7
7
  store: ApiStore;
8
8
  options: ApiDocsOptions;
9
+ definition?: Record<string, unknown> | string;
10
+ definitionUrl?: string;
9
11
  replayDefinition: OpenAPIDefinition | null;
10
12
  };
11
13
  export declare const globalStoreAtom: import("jotai").PrimitiveAtom<GlobalStoreAtom> & {
@@ -19,6 +21,8 @@ export declare const specTypeAtom: import("jotai").Atom<ApiSpecType>;
19
21
  export declare const routingBasePathAtom: import("jotai").Atom<string>;
20
22
  export declare const licenseKeyAtom: import("jotai").Atom<string | undefined>;
21
23
  export declare const storeAtom: import("jotai").Atom<ApiStore>;
24
+ export declare const definitionAtom: import("jotai").Atom<string | Record<string, unknown> | undefined>;
25
+ export declare const definitionUrlAtom: import("jotai").Atom<string | undefined>;
22
26
  export declare const replayDefinitionAtom: import("jotai").Atom<OpenAPIDefinition | null>;
23
27
  export declare const setReplayDefinitionAtom: import("jotai").WritableAtom<null, [value: OpenAPIDefinition | null], void> & {
24
28
  init: null;
@@ -1 +1 @@
1
- import{atom as o}from"jotai";const m={schemaStore:{},exampleStore:{},securitySchemeStore:{}},e=o({items:[],store:m,options:{},replayDefinition:null}),c=o(t=>t(e).items),l=o(t=>{const s={};function i(p){for(const n of p){const r=n.content?.meta?.name;n.httpVerb==="schema"&&r&&n.routeSlug&&(s[r]=n.routeSlug),"items"in n&&Array.isArray(n.items)&&i(n.items)}}return i(t(e).items),s}),f=o(t=>t(e).options),y=o(t=>t(e).options.specType),A=o(t=>t(e).options.basePath),u=o(t=>t(e).options.licenseKey),x=o(t=>t(e).store??m),S=o(t=>t(e).replayDefinition),g=o(null,(t,s,i)=>{s(e,{...t(e),replayDefinition:i})});export{c as globalItemsAtom,f as globalOptionsAtom,e as globalStoreAtom,u as licenseKeyAtom,S as replayDefinitionAtom,A as routingBasePathAtom,l as schemaDefinitionSlugMapAtom,g as setReplayDefinitionAtom,y as specTypeAtom,x as storeAtom};
1
+ import{atom as o}from"jotai";const m={schemaStore:{},exampleStore:{},securitySchemeStore:{}},e=o({items:[],store:m,options:{},replayDefinition:null}),a=o(t=>t(e).items),l=o(t=>{const i={};function s(p){for(const n of p){const r=n.content?.meta?.name;n.httpVerb==="schema"&&r&&n.routeSlug&&(i[r]=n.routeSlug),"items"in n&&Array.isArray(n.items)&&s(n.items)}}return s(t(e).items),i}),f=o(t=>t(e).options),A=o(t=>t(e).options.specType),x=o(t=>t(e).options.basePath),y=o(t=>t(e).options.licenseKey),u=o(t=>t(e).store??m),S=o(t=>t(e).definition),g=o(t=>t(e).definitionUrl),h=o(t=>t(e).replayDefinition),D=o(null,(t,i,s)=>{i(e,{...t(e),replayDefinition:s})});export{S as definitionAtom,g as definitionUrlAtom,a as globalItemsAtom,f as globalOptionsAtom,e as globalStoreAtom,y as licenseKeyAtom,h as replayDefinitionAtom,x as routingBasePathAtom,l as schemaDefinitionSlugMapAtom,D as setReplayDefinitionAtom,A as specTypeAtom,u as storeAtom};
@@ -23,4 +23,3 @@ export declare function normalizeDownloadUrls(downloadUrls: {
23
23
  url: string;
24
24
  }[];
25
25
  export declare function normalizeLayout(layout: RawApiDocsOptions['layout']): LayoutVariant;
26
- export declare function isGraphqlDocsSidebarHidden(options: Pick<RawApiDocsOptions, 'specType' | 'sidebar'>): boolean;
@@ -1 +1 @@
1
- import{LayoutVariant as o}from"@redocly/config";import{apiSpecType as i}from"../types/common.js";import{DEFAULT_LAYOUT as f}from"./constants.js";import{DEFAULT_LANGUAGES as p,getLangKey as s}from"../utils/languages.js";function u(r,t){return r===void 0?t??!1:typeof r=="string"?r!=="false":r}function A(r,t=0){return typeof r=="string"?parseInt(r,10):typeof r=="number"?r:t}function a(r,t=0){return typeof r=="string"?parseInt(r,10):typeof r=="number"?Math.ceil(r):t}function x(r,t){return r===void 0?t:r==="all"?1/0:a(r,t)}function h(r){let t=r;return t.length>1&&t.endsWith("/")&&(t=t.slice(0,-1)),t.startsWith("/")||(t="/"+t),t}function T(r){if(typeof r>"u")return!1;if(r==="")return!0;if(typeof r!="string")return r;switch(r){case"true":return!0;case"false":return!1;default:return r.split(",").map(t=>t.trim()).filter(Boolean)}}function c(r){return/^-?\d+(\.\d+)?$/.test(r)}function E(r){return typeof r=="number"?()=>r:typeof r=="string"&&c(r)?()=>parseFloat(r):typeof r=="function"?()=>{const t=r();return typeof t=="number"?t:0}:()=>0}function L(r){const t=typeof r=="object"&&r!==null?r:{},e=t.languages??p.map(({label:n})=>({lang:n}));return{...t,languages:e.map(n=>({...n,key:s(n),label:n.label??n.lang}))}}function b(r){return Array.isArray(r)?r:typeof r=="string"?r.split(",").map(t=>t.trim()):[]}function S(r,t){return r.map(e=>({...e,title:e.title??m(e.url,t)}))}function m(r,t){const e=r.split("?")[0].split(/[\\/]/).pop();if(e&&["yaml","json","gql","graphql"].some(n=>e.includes(n)))return e;switch(t){case i.OPENAPI:return"openapi.yaml";case i.ASYNCAPI:return"asyncapi.yaml";case i.GRAPHQL:return"graphql.gql";default:return"description.json"}}function N(r){return r===void 0?f:r===o.STACKED?o.STACKED:o.THREE_PANEL}function z(r){return r.specType===i.GRAPHQL&&u(r.sidebar?.hide,!1)}export{u as argValueToBoolean,x as argValueToExpandLevel,a as argValueToInt,A as argValueToNumber,z as isGraphqlDocsSidebarHidden,L as normalizeCodeSamples,S as normalizeDownloadUrls,b as normalizeIgnoreNamedSchemas,N as normalizeLayout,h as normalizePath,E as normalizeScrollYOffset,T as normalizeShowExtensions};
1
+ import{LayoutVariant as i}from"@redocly/config";import{apiSpecType as o}from"../types/common.js";import{DEFAULT_LAYOUT as f}from"./constants.js";import{DEFAULT_LANGUAGES as p,getLangKey as s}from"../utils/languages.js";function d(r,t){return r===void 0?t??!1:typeof r=="string"?r!=="false":r}function A(r,t=0){return typeof r=="string"?parseInt(r,10):typeof r=="number"?r:t}function u(r,t=0){return typeof r=="string"?parseInt(r,10):typeof r=="number"?Math.ceil(r):t}function x(r,t){return r===void 0?t:r==="all"?1/0:u(r,t)}function h(r){let t=r;return t.length>1&&t.endsWith("/")&&(t=t.slice(0,-1)),t.startsWith("/")||(t="/"+t),t}function E(r){if(typeof r>"u")return!1;if(r==="")return!0;if(typeof r!="string")return r;switch(r){case"true":return!0;case"false":return!1;default:return r.split(",").map(t=>t.trim()).filter(Boolean)}}function a(r){return/^-?\d+(\.\d+)?$/.test(r)}function T(r){return typeof r=="number"?()=>r:typeof r=="string"&&a(r)?()=>parseFloat(r):typeof r=="function"?()=>{const t=r();return typeof t=="number"?t:0}:()=>0}function L(r){const t=typeof r=="object"&&r!==null?r:{},n=t.languages??p.map(({label:e})=>({lang:e}));return{...t,languages:n.map(e=>({...e,key:s(e),label:e.label??e.lang}))}}function S(r){return Array.isArray(r)?r:typeof r=="string"?r.split(",").map(t=>t.trim()):[]}function b(r,t){return r.map(n=>({...n,title:n.title??m(n.url,t)}))}function m(r,t){const n=r.split("?")[0].split(/[\\/]/).pop();if(n&&["yaml","json","gql","graphql"].some(e=>n.includes(e)))return n;switch(t){case o.OPENAPI:return"openapi.yaml";case o.ASYNCAPI:return"asyncapi.yaml";case o.GRAPHQL:return"graphql.gql";default:return"description.json"}}function N(r){return r===void 0?f:r===i.STACKED?i.STACKED:i.THREE_PANEL}export{d as argValueToBoolean,x as argValueToExpandLevel,u as argValueToInt,A as argValueToNumber,L as normalizeCodeSamples,b as normalizeDownloadUrls,S as normalizeIgnoreNamedSchemas,N as normalizeLayout,h as normalizePath,T as normalizeScrollYOffset,E as normalizeShowExtensions};
@@ -1 +1 @@
1
- import{addTrailingSlash as r}from"@redocly/theme/core/openapi";import{WindowReferenceOptions as n}from"../constants/openapi.js";import{argValueToBoolean as a,argValueToExpandLevel as o,argValueToInt as s,argValueToNumber as t,normalizeCodeSamples as d,normalizeDownloadUrls as m,normalizeIgnoreNamedSchemas as p,normalizeLayout as S,normalizePath as E,normalizeScrollYOffset as h,normalizeShowExtensions as c}from"./helpers.js";import{ASYNCAPI_DEFAULT_JSON_SAMPLES_DEPTH as _,DEFAULT_FEEDBACK as u,DEFAULT_MAX_DISPLAYED_ENUM_VALUES as L,GENERATED_SAMPLES_MAX_DEPTH_DEFAULT as f,GRAPHQL_DEFAULT_FIELD_EXPAND_LEVEL as P,GRAPHQL_DEFAULT_JSON_SAMPLES_DEPTH as A,GRAPHQL_DEFAULT_SAMPLES_MAX_INLINE_ARGS as D,JSON_SAMPLES_EXPAND_LEVEL_DEFAULT as i,MOCK_SERVER_DEFAULT_DESCRIPTION as T,MOCK_SERVER_DEFAULT_POSITION as I,DEFAULT_ROUTING_BASE_PATH as R}from"./constants.js";import{apiSpecType as x}from"../types/common.js";import{EDITION_OPTION_OVERRIDES as N}from"./editionOverrides.js";function b(l){const e={...l,...N};return{specType:e.specType,licenseKey:e.licenseKey,metadata:e.metadata??{},downloadUrls:m(e.downloadUrls??[],e.specType),userClaims:e.userClaims,dynamicRequestValues:e.dynamicRequestValues,schemaDefinitionsTagName:e.schemaDefinitionsTagName,corsProxyUrl:e.corsProxyUrl?r(e.corsProxyUrl):void 0,hideSidebar:a(e.hideSidebar,!1),hideSearch:a(e.hideSearch,!1),jsonSamplesExpandLevel:o(e.jsonSamplesExpandLevel,i)??i,generatedSamplesMaxDepth:s(e.generatedSamplesMaxDepth,f),hideDownloadButtons:a(e.hideDownloadButtons,!1),hideInfoMetadata:a(e.hideInfoMetadata,!1),hideLoading:a(e.hideLoading,!1),hideSchemaTitles:a(e.hideSchemaTitles,!1),hideSchemaPattern:a(e.hideSchemaPattern,!1),maxDisplayedEnumValues:t(e.maxDisplayedEnumValues,L),mockServer:e.mockServer?.url?{url:e.mockServer.url,position:e.mockServer.position||I,description:e.mockServer.description||T}:void 0,hideReplay:a(e.hideReplay,!1),oAuth2RedirectURI:e.oAuth2RedirectURI,onlyRequiredInSamples:a(e.onlyRequiredInSamples,!1),[n.ON_DEEP_LINK_CLICK]:e.onDeepLinkClick??null,basePath:e.basePath?E(e.basePath):R,schemasExpansionLevel:o(e.schemasExpansionLevel),feedback:e.feedback??u,sortRequiredPropsFirst:a(e.sortRequiredPropsFirst??e.requiredPropsFirst,!1),scrollYOffset:h(e.scrollYOffset),showExtensions:c(e.showExtensions),sanitize:a(e.sanitize,!1),skipBundle:a(e.skipBundle,!1),ignoreNamedSchemas:new Set(p(e.ignoreNamedSchemas)),markdocOptions:e.markdocOptions,markdownParser:e.markdownParser,codeSamples:d(e.codeSamples),layout:S(e.layout),events:e.events??{},unstable_hooks:e.unstable_hooks??{},unstable_skipSamples:a(e.unstable_skipSamples,!1),unstable_externalCodeSamples:e.unstable_externalCodeSamples??[],hidePropertiesPrefix:a(e?.hidePropertiesPrefix,!1),showSchemaCatalogLinks:a(e?.showSchemaCatalogLinks,!1),baseUrlPath:e.baseUrlPath,jsonSamplesDepth:s(e.jsonSamplesDepth,e.specType===x.ASYNCAPI?_:A),samplesMaxInlineArgs:s(e.samplesMaxInlineArgs,D),fieldExpandLevel:s(e.fieldExpandLevel,P),menu:e.menu,sidebar:e.sidebar,showBuiltInScalars:e.showBuiltInScalars,showBuiltInDirectives:e.showBuiltInDirectives,info:e.info,markdown:e.markdown,apiLogo:e.apiLogo,protocol:e.protocol}}export{b as normalizeOptions};
1
+ import{addTrailingSlash as r}from"@redocly/theme/core/openapi";import{WindowReferenceOptions as t}from"../constants/openapi.js";import{argValueToBoolean as a,argValueToExpandLevel as n,argValueToInt as s,argValueToNumber as m,normalizeCodeSamples as d,normalizeDownloadUrls as p,normalizeIgnoreNamedSchemas as S,normalizeLayout as E,normalizePath as c,normalizeScrollYOffset as u,normalizeShowExtensions as h}from"./helpers.js";import{ASYNCAPI_DEFAULT_JSON_SAMPLES_DEPTH as _,DEFAULT_FEEDBACK as L,DEFAULT_MAX_DISPLAYED_ENUM_VALUES as f,GENERATED_SAMPLES_MAX_DEPTH_DEFAULT as P,GRAPHQL_DEFAULT_FIELD_EXPAND_LEVEL as A,GRAPHQL_DEFAULT_JSON_SAMPLES_DEPTH as D,GRAPHQL_DEFAULT_SAMPLES_MAX_INLINE_ARGS as T,JSON_SAMPLES_EXPAND_LEVEL_DEFAULT as i,MOCK_SERVER_DEFAULT_DESCRIPTION as I,MOCK_SERVER_DEFAULT_POSITION as R,DEFAULT_ROUTING_BASE_PATH as x}from"./constants.js";import{apiSpecType as N}from"../types/common.js";import{EDITION_OPTION_OVERRIDES as k}from"./editionOverrides.js";function v(l){const e={...l,...k},o=e.basePath||e.routingBasePath;return{specType:e.specType,licenseKey:e.licenseKey,metadata:e.metadata??{},downloadUrls:p(e.downloadUrls??[],e.specType),userClaims:e.userClaims,dynamicRequestValues:e.dynamicRequestValues,schemaDefinitionsTagName:e.schemaDefinitionsTagName,corsProxyUrl:e.corsProxyUrl?r(e.corsProxyUrl):void 0,jsonSamplesExpandLevel:n(e.jsonSamplesExpandLevel,i)??i,generatedSamplesMaxDepth:s(e.generatedSamplesMaxDepth,P),hideDownloadButtons:a(e.hideDownloadButtons,!1),hideInfoMetadata:a(e.hideInfoMetadata,!1),hideLoading:a(e.hideLoading,!1),hideSchemaTitles:a(e.hideSchemaTitles,!1),hideSchemaPattern:a(e.hideSchemaPattern,!1),maxDisplayedEnumValues:m(e.maxDisplayedEnumValues,f),mockServer:e.mockServer?.url?{url:e.mockServer.url,position:e.mockServer.position||R,description:e.mockServer.description||I}:void 0,hideReplay:a(e.hideReplay,!1),oAuth2RedirectURI:e.oAuth2RedirectURI,onlyRequiredInSamples:a(e.onlyRequiredInSamples,!1),[t.ON_DEEP_LINK_CLICK]:e.onDeepLinkClick??null,basePath:o?c(o):x,schemasExpansionLevel:n(e.schemasExpansionLevel),feedback:e.feedback??L,sortRequiredPropsFirst:a(e.sortRequiredPropsFirst??e.requiredPropsFirst,!1),scrollYOffset:u(e.scrollYOffset),showExtensions:h(e.showExtensions),sanitize:a(e.sanitize,!1),skipBundle:a(e.skipBundle,!1),ignoreNamedSchemas:new Set(S(e.ignoreNamedSchemas)),markdocOptions:e.markdocOptions,markdownParser:e.markdownParser,codeSamples:d(e.codeSamples),layout:E(e.layout),events:e.events??{},unstable_hooks:e.unstable_hooks??{},unstable_skipSamples:a(e.unstable_skipSamples,!1),unstable_externalCodeSamples:e.unstable_externalCodeSamples??[],hidePropertiesPrefix:a(e?.hidePropertiesPrefix,!1),showSchemaCatalogLinks:a(e?.showSchemaCatalogLinks,!1),jsonSamplesDepth:s(e.jsonSamplesDepth,e.specType===N.ASYNCAPI?_:D),samplesMaxInlineArgs:s(e.samplesMaxInlineArgs,T),fieldExpandLevel:s(e.fieldExpandLevel,A),menu:e.menu,showBuiltInScalars:e.showBuiltInScalars,showBuiltInDirectives:e.showBuiltInDirectives,info:e.info,markdown:e.markdown,apiLogo:e.apiLogo,protocol:e.protocol}}export{v as normalizeOptions};
@@ -0,0 +1,3 @@
1
+ import type { CSSProperties } from 'react';
2
+ import type { ApiDocsOptions } from '../types/options.js';
3
+ export declare function getStandaloneLayoutStyle({ scrollYOffset, }: ApiDocsOptions): CSSProperties | undefined;
@@ -0,0 +1 @@
1
+ function n({scrollYOffset:e}){const t=e?.()??0;if(!(t<=0))return{"--navbar-height":`${t}px`,"--navbar-stack-height":`${t}px`}}export{n as getStandaloneLayoutStyle};
@@ -1,7 +1,8 @@
1
1
  import type { OperationInfo } from '../../../types/openapi.js';
2
- import type { ApiDocsOptions } from '../../../types/options.js';
2
+ import type { ApiDocsOptions, RawApiDocsOptions } from '../../../types/options.js';
3
3
  import type { StoreContext } from '../../../types/store.js';
4
4
  import type { CodeSampleSource } from '../source.js';
5
+ import type { ReplayNormalizedOpenAPIOperation } from './replay-types.js';
5
6
  import type { OpenAPIDefinition } from '../../../types/openapi.js';
6
7
  /** Hook to apply adapter-time `configure()` results to a fallback-built `OperationInfo`. */
7
8
  export type ApplyConfigureToOperationInfo = (operationInfo: OperationInfo, storeCtx: StoreContext, doc: OpenAPIDefinition) => void;
@@ -10,3 +11,9 @@ export type ApplyConfigureToOperationInfo = (operationInfo: OperationInfo, store
10
11
  * Fallback path used by the Replay overlay when the prebuilt source map misses.
11
12
  */
12
13
  export declare function buildCodeSampleSourceFromDocument(pathName: string, method: string, doc: OpenAPIDefinition, options: ApiDocsOptions, applyConfigure?: ApplyConfigureToOperationInfo): CodeSampleSource | undefined;
14
+ /**
15
+ * Build a Replay `convertOperationToReplayValue` for hosts that have no api-docs store —
16
+ * the standalone Replay desktop app. Resolvers are read back from the store context that
17
+ * {@link buildCodeSampleSourceFromDocument} just populated, so schema and example ids match.
18
+ */
19
+ export declare function createDocumentReplayConverter(rawOptions: RawApiDocsOptions): (path: string, method: string, document: unknown) => ReplayNormalizedOpenAPIOperation | undefined;
@@ -1 +1 @@
1
- import{createStoreContext as S,toRecord as b}from"../../../adapters/helpers.js";import{populateOpenApiStore as O}from"../../../adapters/openapi/store.js";import{buildCodeSampleSource as $}from"../../../adapters/openapi/build-code-sample-source.js";function q(e,t){if(!e.length&&!t?.length||!e.length)return t;if(!t?.length)return e;const r=new Set(t.map(a=>{const n=a;return`${n.in}:${n.name}`})),u=[...t];for(const a of e){const n=a,o=`${n.in}:${n.name}`;r.has(o)||u.push(a)}return u}let m=null;function v(e,t){if(m?.doc===e)return m.ctx;const r=S(b(e));return O(e,r,t),m={doc:e,ctx:r},r}function K(e,t,r,u,a){const n=r.paths;if(!n||typeof n!="object")return;const o=n[e];if(!o||typeof o!="object")return;const d=t.toLowerCase(),f=o;let c=d,i=f[d],p=!1;if(!i&&d==="query"&&f["x-query"]&&(i=f["x-query"],c="x-query"),!i&&d!=="query"&&o.additionalOperations){const l=o.additionalOperations,y=t in l?t:Object.keys(l).find(C=>C.toLowerCase()===d);y&&(i=l[y],c=y,p=!0)}if(!i||typeof i!="object")return;const s=i,x=o.parameters??[],h={pointer:p?`/paths/${e}/additionalOperations/${c}`:`/paths/${e}/${c}`,pathName:e,httpVerb:t.toUpperCase(),operationId:s.operationId,summary:typeof s.summary=="string"?s.summary:void 0,isWebhook:!1,isAdditionalOperation:p,tags:[],parameters:q(x,s.parameters),requestBody:s.requestBody,servers:s.servers??o.servers,security:s.security},g=v(r,u);return a?.(h,g,r),$(h,g,u.ignoreNamedSchemas,void 0,void 0,u)}export{K as buildCodeSampleSourceFromDocument};
1
+ import{createStoreContext as O,toRecord as b}from"../../../adapters/helpers.js";import{populateOpenApiStore as R}from"../../../adapters/openapi/store.js";import{buildCodeSampleSource as v}from"../../../adapters/openapi/build-code-sample-source.js";import{normalizeOptions as $}from"../../../options/normalizeOptions.js";import{createCodeSampleResolvers as q}from"../resolvers.js";import{toReplayOperation as j}from"./replay-adapter.js";function w(t,e){if(!t.length&&!e?.length||!t.length)return e;if(!e?.length)return t;const n=new Set(e.map(i=>{const o=i;return`${o.in}:${o.name}`})),s=[...e];for(const i of t){const o=i,r=`${o.in}:${o.name}`;n.has(r)||s.push(i)}return s}let y=null;function C(t,e){if(y?.doc===t)return y.ctx;const n=O(b(t));return R(t,n,e),y={doc:t,ctx:n},n}function I(t,e,n,s,i){const o=n.paths;if(!o||typeof o!="object")return;const r=o[t];if(!r||typeof r!="object")return;const u=e.toLowerCase(),f=r;let p=u,c=f[u],d=!1;if(!c&&u==="query"&&f["x-query"]&&(c=f["x-query"],p="x-query"),!c&&u!=="query"&&r.additionalOperations){const l=r.additionalOperations,m=e in l?e:Object.keys(l).find(g=>g.toLowerCase()===u);m&&(c=l[m],p=m,d=!0)}if(!c||typeof c!="object")return;const a=c,S=r.parameters??[],h={pointer:d?`/paths/${t}/additionalOperations/${p}`:`/paths/${t}/${p}`,pathName:t,httpVerb:e.toUpperCase(),operationId:a.operationId,summary:typeof a.summary=="string"?a.summary:void 0,isWebhook:!1,isAdditionalOperation:d,tags:[],parameters:w(S,a.parameters),requestBody:a.requestBody,servers:a.servers??r.servers,security:a.security},x=C(n,s);return i?.(h,x,n),v(h,x,s.ignoreNamedSchemas,void 0,void 0,s)}function F(t){const e=$(t);return(n,s,i)=>{if(!i||typeof i!="object")return;const o=i;try{const r=I(n,s,o,e);if(!r)return;const u=C(o,e);return j(r,q(u.schemaStore,u.exampleStore,e))}catch(r){console.error("[Replay] createDocumentReplayConverter error:",r);return}}}export{I as buildCodeSampleSourceFromDocument,F as createDocumentReplayConverter};
@@ -1,4 +1,4 @@
1
- export { buildCodeSampleSourceFromDocument } from './from-openapi-document.js';
1
+ export { buildCodeSampleSourceFromDocument, createDocumentReplayConverter, } from './from-openapi-document.js';
2
2
  export { REPLAY_TRY_IT_LOADING_STATE, type ReplayTryItLoadingState, } from '../constants/try-it-loading-state.js';
3
3
  export { createReplayOverlayConverter } from './overlay-converter.js';
4
4
  export { createReplayConverter, toReplayOperation } from './replay-adapter.js';
@@ -1 +1 @@
1
- import{buildCodeSampleSourceFromDocument as o}from"./from-openapi-document.js";import{REPLAY_TRY_IT_LOADING_STATE as p}from"../constants/try-it-loading-state.js";import{createReplayOverlayConverter as m}from"./overlay-converter.js";import{createReplayConverter as n,toReplayOperation as R}from"./replay-adapter.js";import{handleReplayParamChange as u}from"./replay-handler.js";import{pickRuntimeConfigureRequestValues as y}from"./merge-configure-into-source.js";import{ReplayCodeSampleHTTPSnippet as T,replayHarToCodeSampleHar as i}from"./har-to-code-sample-har.js";export{p as REPLAY_TRY_IT_LOADING_STATE,T as ReplayCodeSampleHTTPSnippet,o as buildCodeSampleSourceFromDocument,n as createReplayConverter,m as createReplayOverlayConverter,u as handleReplayParamChange,y as pickRuntimeConfigureRequestValues,i as replayHarToCodeSampleHar,R as toReplayOperation};
1
+ import{buildCodeSampleSourceFromDocument as o,createDocumentReplayConverter as a}from"./from-openapi-document.js";import{REPLAY_TRY_IT_LOADING_STATE as t}from"../constants/try-it-loading-state.js";import{createReplayOverlayConverter as l}from"./overlay-converter.js";import{createReplayConverter as R,toReplayOperation as f}from"./replay-adapter.js";import{handleReplayParamChange as y}from"./replay-handler.js";import{pickRuntimeConfigureRequestValues as c}from"./merge-configure-into-source.js";import{ReplayCodeSampleHTTPSnippet as T,replayHarToCodeSampleHar as i}from"./har-to-code-sample-har.js";export{t as REPLAY_TRY_IT_LOADING_STATE,T as ReplayCodeSampleHTTPSnippet,o as buildCodeSampleSourceFromDocument,a as createDocumentReplayConverter,R as createReplayConverter,l as createReplayOverlayConverter,y as handleReplayParamChange,c as pickRuntimeConfigureRequestValues,i as replayHarToCodeSampleHar,f as toReplayOperation};
@@ -10,5 +10,6 @@ export type LicenseInfo = {
10
10
  cryptoMissing?: boolean;
11
11
  };
12
12
  export declare function isHostAllowed(hostname: string, hosts: string[] | boolean | undefined): boolean;
13
+ export declare function isLicenseBypassed(): boolean;
13
14
  export declare function parseLicense(key?: string): Promise<LicenseInfo>;
14
15
  export default parseLicense;
@@ -1 +1 @@
1
- const a="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMHjNir5fXx/ZXoaEeXQ5XyxbNJ4YJYczoCRdSkL6NLzw1FHnng5Vfcgk5+bvox9QRYRbuk84mA4f2NhywDbXKECAwEAAQ==",o=typeof window<"u"&&(window.crypto||window.msCrypto)||void 0;function u(e){return"then"in e?e:new Promise(t=>{e.oncomplete=n=>{t(n.target.result)}})}function f(e){const t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let i=0,r=e.length;i<r;i++)n[i]=e.charCodeAt(i);return t}function l(e){if(typeof TextEncoder<"u")return new TextEncoder().encode(e);const t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=t.charCodeAt(i);return n}function c(){const e=f(atob(typeof REDOCLY_PUBLIC_KEY<"u"?REDOCLY_PUBLIC_KEY:a));return u(o.subtle.importKey("spki",e,{name:"RSASSA-PKCS1-v1_5",hash:"SHA-256"},!0,["verify"]))}async function d(e,t){return u(o.subtle.verify({name:"RSASSA-PKCS1-v1_5",hash:"SHA-256"},await c(),f(atob(t)),l(e)))}function s(e,t){return t===!0?!0:Array.isArray(t)&&typeof window<"u"?e==="localhost"||e==="127.0.0.1"||e.endsWith(".localhost")||t.find(n=>n===e||e.endsWith("."+n))?!0:!!t.find(n=>{if(n.indexOf("*")!==n.lastIndexOf("*"))return!1;const[i,r]=n.split("*");return!!r&&e.startsWith(i)&&e.endsWith(r)&&r.split(".").length>2}):!1}async function w(e){if(process.env.NODE_ENV==="development")return{valid:!0,allowed:!0};const t=window.location.hostname;if(!e)return t==="localhost"||t==="127.0.0.1"||t.endsWith(".localhost")?{local:!0}:{};const[n,i]=e.split(".");let r;try{if(!await d(atob(n),i))return{valid:!1};r=JSON.parse(atob(n))}catch{return{valid:!1,cryptoMissing:!0}}return r.valid=!0,(!r.e||Date.now()/1e3>r.e)&&(r.expired=!0),r.allowed=s(t,r.h),r}var p=w;export{p as default,s as isHostAllowed,w as parseLicense};
1
+ const a="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMHjNir5fXx/ZXoaEeXQ5XyxbNJ4YJYczoCRdSkL6NLzw1FHnng5Vfcgk5+bvox9QRYRbuk84mA4f2NhywDbXKECAwEAAQ==",o=typeof window<"u"&&(window.crypto||window.msCrypto)||void 0;function u(e){return"then"in e?e:new Promise(t=>{e.oncomplete=n=>{t(n.target.result)}})}function f(e){const t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let i=0,r=e.length;i<r;i++)n[i]=e.charCodeAt(i);return t}function c(e){if(typeof TextEncoder<"u")return new TextEncoder().encode(e);const t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=t.charCodeAt(i);return n}function l(){const e=f(atob(typeof REDOCLY_PUBLIC_KEY<"u"?REDOCLY_PUBLIC_KEY:a));return u(o.subtle.importKey("spki",e,{name:"RSASSA-PKCS1-v1_5",hash:"SHA-256"},!0,["verify"]))}async function s(e,t){return u(o.subtle.verify({name:"RSASSA-PKCS1-v1_5",hash:"SHA-256"},await l(),f(atob(t)),c(e)))}function d(e,t){return t===!0?!0:Array.isArray(t)&&typeof window<"u"?e==="localhost"||e==="127.0.0.1"||e.endsWith(".localhost")||t.find(n=>n===e||e.endsWith("."+n))?!0:!!t.find(n=>{if(n.indexOf("*")!==n.lastIndexOf("*"))return!1;const[i,r]=n.split("*");return!!r&&e.startsWith(i)&&e.endsWith(r)&&r.split(".").length>2}):!1}function p(){return process.env.REDOCLY_FIRST_PARTY==="true"||process.env.NODE_ENV==="development"}async function w(e){if(p())return{valid:!0,allowed:!0};const t=window.location.hostname;if(!e)return t==="localhost"||t==="127.0.0.1"||t.endsWith(".localhost")?{local:!0}:{};const[n,i]=e.split(".");let r;try{if(!await s(atob(n),i))return{valid:!1};r=JSON.parse(atob(n))}catch{return{valid:!1,cryptoMissing:!0}}return r.valid=!0,(!r.e||Date.now()/1e3>r.e)&&(r.expired=!0),r.allowed=d(t,r.h),r}var y=w;export{y as default,d as isHostAllowed,p as isLicenseBypassed,w as parseLicense};
@@ -0,0 +1,9 @@
1
+ import type { SliceContentKind, SpecSliceScope } from './types.js';
2
+ export declare const ASSISTANT_LINK_BASES: {
3
+ readonly chatgpt: 'https://chatgpt.com';
4
+ readonly claude: 'https://claude.ai/new';
5
+ };
6
+ export declare const MAX_ASSISTANT_URL_LENGTH = 8000;
7
+ export declare function buildInlinePromptLink(baseUrl: string, content: string, contentKind?: SliceContentKind): string | undefined;
8
+ export declare function describeSliceScope(scope: SpecSliceScope): string | undefined;
9
+ export declare function buildFetchSpecPromptLink(baseUrl: string, specUrl: string, scope: SpecSliceScope): string;
@@ -0,0 +1,5 @@
1
+ const c={chatgpt:"https://chatgpt.com",claude:"https://claude.ai/new"},i=8e3,s={yaml:`Read the yaml and answer questions based on the content.
2
+
3
+ `,graphql:`Read the GraphQL SDL and answer questions based on the content.
4
+
5
+ `};function u(e,a,r="yaml"){const t=new URL(e);t.searchParams.set("q",`${s[r]}${a}`);const n=t.toString();return n.length<=i?n:void 0}function h(e){switch(e.kind){case"operation":return`the ${e.httpVerb.toUpperCase()} ${e.pathName} operation`;case"tag":return`the "${e.tagName}" operations`;case"schema":return`the ${e.name} schema`;case"channel":return`the "${e.channelId}" channel`;case"async-operation":return`the "${e.operationId}" operation`;case"graphql-operation":return`the ${e.name} ${e.operationType}`;case"graphql-type":return`the ${e.name} type`;case"graphql-directive":return`the @${e.name} directive`;case"graphql-group":return e.label?`the "${e.label}" section`:void 0;default:return}}function d(e,a,r){const t=h(r),n=t?`answer questions about ${t}`:"answer questions based on the content",o=new URL(e);return o.searchParams.set("q",`Read ${a} and ${n}.`),o.toString()}export{c as ASSISTANT_LINK_BASES,i as MAX_ASSISTANT_URL_LENGTH,d as buildFetchSpecPromptLink,u as buildInlinePromptLink,h as describeSliceScope};
@@ -0,0 +1,5 @@
1
+ import type { SpecSliceScope } from './types.js';
2
+ export declare function scopeFromAsyncApiPointer(pointer: string): SpecSliceScope | undefined;
3
+ export declare function extractAsyncApiSlice(document: Record<string, unknown>, scope: SpecSliceScope): {
4
+ document: Record<string, unknown>;
5
+ } | undefined;
@@ -0,0 +1 @@
1
+ import{isRecord as i,resolveJsonPointer as O}from"../../adapters/helpers.js";import{collectComponentClosure as C,buildComponentsFromClosure as b}from"./component-closure.js";import{cloneStrip as I}from"./clone-strip.js";import{parsePointerTokens as h}from"./openapi-slice.js";function A(n){return typeof n.asyncapi=="string"&&n.asyncapi.startsWith("3.")}const v=["asyncapi","id","info","defaultContentType","servers"];function x(n){const e=h(n);if(!(e.length<2)){if(e[0]==="channels")return{kind:"channel",channelId:e[1]};if(e[0]==="operations")return{kind:"async-operation",operationId:e[1]}}}function F(n,e){if(!A(n))return;if(e.kind==="document")return{document:I(n,new Map)};const t=S(n,e);if(!t)return;const{keptChannels:p,keptOperations:f}=t,s={};for(const o of v)n[o]!==void 0&&(s[o]=n[o]);const u=i(n.channels)?n.channels:{},a=i(n.operations)?n.operations:{},r={};for(const[o,d]of Object.entries(u))p.has(o)&&(r[o]=d);const c={};for(const[o,d]of Object.entries(a))f.has(o)&&(c[o]=d);s.channels=r,Object.keys(c).length&&(s.operations=c);const l=C(n,[s],o=>{if(o.startsWith("#/servers/"))return n.servers!==void 0;const d=h(o);return d[0]==="channels"?p.has(d[1]):d[0]==="operations"?f.has(d[1]):!1}),y=b(n,l.keep);return y&&(s.components=y),{document:I(s,l.inlineTargets)}}function g(n){if(!i(n)||!i(n.channel))return;const e=n.channel.$ref;if(typeof e!="string")return;const t=h(e);return t[0]==="channels"&&t.length>=2?t[1]:void 0}function R(n,e){return!i(n)||!Array.isArray(n.tags)?!1:n.tags.some(t=>i(t)&&t.name===e)}function S(n,e){const t=i(n.channels)?n.channels:{},p=i(n.operations)?n.operations:{},f=new Set,s=new Set,u=a=>{for(const[r,c]of Object.entries(p))g(c)===a&&s.add(r)};switch(e.kind){case"channel":{if(!(e.channelId in t))return;f.add(e.channelId),u(e.channelId);break}case"async-operation":{const a=p[e.operationId];if(!i(a))return;s.add(e.operationId);const r=g(a);r&&r in t&&f.add(r);break}case"tag":{for(const[a,r]of Object.entries(t))R(r,e.tagName)&&(f.add(a),u(a));if(f.size===0)return;break}default:return}for(const a of s){const r=p[a];if(!i(r))continue;const c=T(n,r.reply),k=i(c?.channel)?c.channel.$ref:void 0;if(typeof k!="string")continue;const l=h(k);l[0]==="channels"&&l[1]&&l[1]in t&&f.add(l[1])}return{keptChannels:f,keptOperations:s}}function T(n,e){if(i(e)){if(typeof e.$ref=="string"&&e.$ref.startsWith("#/")){const t=O(n,e.$ref);return i(t)?t:void 0}return e}}export{F as extractAsyncApiSlice,x as scopeFromAsyncApiPointer};
@@ -0,0 +1 @@
1
+ export declare function cloneStrip(value: unknown, inlineTargets: ReadonlyMap<string, unknown>): unknown;
@@ -0,0 +1 @@
1
+ import{REDOCLY_TEAMS_RBAC as E,REDOCLY_ROUTE_RBAC as S}from"@redocly/config";import{isRecord as l}from"../../adapters/helpers.js";const h=new Set([E,S,"x-circular-ref","x-original-ref"]);function w(p,a){const r=new WeakSet,s=new Set,c=e=>{if(Array.isArray(e)){if(r.has(e))throw new Error("spec-slice: circular object graph in the source document");r.add(e);const t=e.map(c);return r.delete(e),t}if(!l(e))return e;if(r.has(e))throw new Error("spec-slice: circular object graph in the source document");const i=typeof e.$ref=="string"?e.$ref:void 0;if(i&&a.has(i)){if(s.has(i))return{};s.add(i),r.add(e);const t=c(a.get(i));s.delete(i);const n={};for(const[f,u]of Object.entries(e))f==="$ref"||h.has(f)||u===void 0||(n[f]=c(u));return r.delete(e),l(t)?{...t,...n}:t}r.add(e);const o={};for(const[t,n]of Object.entries(e))h.has(t)||n===void 0||(o[t]=c(n));return r.delete(e),o};return c(p)}export{w as cloneStrip};
@@ -0,0 +1,6 @@
1
+ export type ComponentClosure = {
2
+ keep: Map<string, Set<string>>;
3
+ inlineTargets: Map<string, unknown>;
4
+ };
5
+ export declare function collectComponentClosure(document: Record<string, unknown>, seeds: unknown[], retainRef?: (ref: string) => boolean): ComponentClosure;
6
+ export declare function buildComponentsFromClosure(document: Record<string, unknown>, keep: Map<string, Set<string>>): Record<string, unknown> | undefined;
@@ -0,0 +1 @@
1
+ import{isRecord as r,resolveJsonPointer as N}from"../../adapters/helpers.js";import{encodeJsonPointerSegment as b}from"../../utils/refPointer.js";const O="#/components/";function $(a){return a.replace(/~1/g,"/").replace(/~0/g,"~")}function w(a,d,g){const u=new Map,p=new Map,f=[...d],h=new WeakSet;let c;const y=()=>{if(c)return c;c=new Map;const e=r(a.components)?a.components.schemas:void 0;if(r(e)){const n=`${O}schemas/`;for(const[o,t]of Object.entries(e))if(!(!r(t)||!Array.isArray(t.allOf)))for(const s of t.allOf){if(!r(s)||typeof s.$ref!="string"||!s.$ref.startsWith(n))continue;const i=$(s.$ref.slice(n.length)),m=e[i];if(!r(m)||!(m.discriminator||m["x-discriminator"]))continue;const k=c.get(i)??[];k.push(o),c.set(i,k)}}return c},l=(e,n)=>{const o=$(n);let t=u.get(e);if(t||(t=new Set,u.set(e,t)),t.has(o))return;const s=`${O}${e}/${n}`,i=N(a,s);if(i&&(t.add(o),f.push(i),e==="schemas"&&(i.discriminator||i["x-discriminator"])))for(const m of y().get(o)??[])l("schemas",b(m))},j=e=>{if(e.startsWith(O)){const[n,o]=e.slice(O.length).split("/");if(n&&o){l(n,o);return}}if(!g?.(e)&&e.startsWith("#/")){if(p.has(e))return;const n=N(a,e);if(!n)return;p.set(e,n),f.push(n);return}};for(;f.length;){const e=f.pop();if(Array.isArray(e)){f.push(...e);continue}if(!r(e)||h.has(e))continue;h.add(e);for(const[t,s]of Object.entries(e)){if(t==="$ref"&&typeof s=="string"){j(s);continue}if(t==="security"&&Array.isArray(s)){for(const i of s)if(r(i))for(const m of Object.keys(i))l("securitySchemes",b(m))}f.push(s)}const n=e.discriminator??e["x-discriminator"],o=r(n)?n.mapping:void 0;if(r(o))for(const t of Object.values(o))typeof t=="string"&&(t.startsWith("#/")?j(t):l("schemas",b(t)))}return{keep:u,inlineTargets:p}}function x(a,d){const g=a.components;if(!r(g)||d.size===0)return;const u={};for(const[p,f]of Object.entries(g)){const h=d.get(p);if(!h?.size||!r(f))continue;const c={};for(const[y,l]of Object.entries(f))h.has(y)&&(c[y]=l);Object.keys(c).length&&(u[p]=c)}return Object.keys(u).length?u:void 0}export{x as buildComponentsFromClosure,w as collectComponentClosure};
@@ -0,0 +1,2 @@
1
+ import type { SpecSliceScope } from './types.js';
2
+ export declare function extractGraphqlSlice(sdl: string, scope: SpecSliceScope): string | undefined;
@@ -0,0 +1 @@
1
+ import{Kind as t,OperationTypeNode as O,parse as g,print as F,visit as Y}from"graphql";const C=new Set([t.SCALAR_TYPE_DEFINITION,t.OBJECT_TYPE_DEFINITION,t.INTERFACE_TYPE_DEFINITION,t.UNION_TYPE_DEFINITION,t.ENUM_TYPE_DEFINITION,t.INPUT_OBJECT_TYPE_DEFINITION]),A=new Set([t.SCALAR_TYPE_EXTENSION,t.OBJECT_TYPE_EXTENSION,t.INTERFACE_TYPE_EXTENSION,t.UNION_TYPE_EXTENSION,t.ENUM_TYPE_EXTENSION,t.INPUT_OBJECT_TYPE_EXTENSION]);function S(o){return C.has(o.kind)}function v(o){return A.has(o.kind)}const P={query:O.QUERY,mutation:O.MUTATION,subscription:O.SUBSCRIPTION},M=["query","mutation","subscription"],k={query:"Query",mutation:"Mutation",subscription:"Subscription"};function R(o){const i={typeDefs:new Map,typeExts:new Map,directiveDefs:new Map,schemaExts:[]};for(const n of o.definitions)if(S(n))i.typeDefs.set(n.name.value,n);else if(v(n)){const r=n.name.value,s=i.typeExts.get(r)??[];s.push(n),i.typeExts.set(r,s)}else n.kind===t.DIRECTIVE_DEFINITION?i.directiveDefs.set(n.name.value,n):n.kind===t.SCHEMA_DEFINITION?i.schemaDef=n:n.kind===t.SCHEMA_EXTENSION&&i.schemaExts.push(n);return i}function x(o){const i={typeNames:[],directiveNames:[],operationFields:new Map},n=r=>{if(r.kind==="graphql-type")i.typeNames.push(r.name);else if(r.kind==="graphql-directive")i.directiveNames.push(r.name);else{const s=i.operationFields.get(r.operationType)??[];s.push(r.name),i.operationFields.set(r.operationType,s)}};if(o.kind==="graphql-type"||o.kind==="graphql-directive"||o.kind==="graphql-operation")return n(o),i;if(o.kind==="graphql-group")return o.members.forEach(n),i}function w(o,i){const n=P[i];for(const r of[o.schemaDef,...o.schemaExts])for(const s of r?.operationTypes??[])if(s.operation===n)return s.type.name.value;return k[i]}function q(o,i,n){const r=[],s=new Set,c=[i,...o.typeExts.get(i.name.value)??[]];for(const d of c)if(!(d.kind!==t.OBJECT_TYPE_DEFINITION&&d.kind!==t.OBJECT_TYPE_EXTENSION))for(const T of d.fields??[]){const a=T.name.value;n.has(a)&&!s.has(a)&&(s.add(a),r.push(T))}return r}function B(o,i){const n=x(i);if(!n)return;let r;try{r=g(o,{noLocation:!0})}catch{return}const s=R(r),c=new Map,d=[];let T=!1;for(const e of M){const f=n.operationFields.get(e);if(!f?.length)continue;const E=w(s,e),I=s.typeDefs.get(E);if(I?.kind!==t.OBJECT_TYPE_DEFINITION)continue;const _=q(s,I,new Set(f));if(!_.length)continue;const y=c.get(E);c.set(E,{kind:t.OBJECT_TYPE_DEFINITION,name:I.name,description:I.description,directives:I.directives,fields:y?[...y.fields??[],..._]:_}),d.push({kind:t.OPERATION_TYPE_DEFINITION,operation:P[e],type:{kind:t.NAMED_TYPE,name:{kind:t.NAME,value:E}}}),E!==k[e]&&(T=!0)}const a=d.length&&(s.schemaDef||T)?{kind:t.SCHEMA_DEFINITION,description:s.schemaDef?.description,directives:s.schemaDef?.directives,operationTypes:d}:void 0,p=new Set,l=new Set,N=[],h=e=>{if(p.has(e))return;const f=s.typeDefs.get(e);if(!f)return;p.add(e);const E=c.get(e);if(E){N.push(E);return}N.push(f,...s.typeExts.get(e)??[])},D=e=>{if(l.has(e))return;const f=s.directiveDefs.get(e);f&&(l.add(e),N.push(f))};a&&N.push(a);for(const e of c.keys())h(e);for(const e of n.typeNames)h(e);for(const e of n.directiveNames)D(e);if(p.size===0&&l.size===0)return;for(;N.length;){const e=N.pop();e&&Y(e,{NamedType(f){h(f.name.value)},Directive(f){D(f.name.value)}})}const u=[];let m=!1;for(const e of r.definitions)if(e.kind===t.SCHEMA_DEFINITION)a&&(u.push(a),m=!0);else if(S(e)){const f=e.name.value;p.has(f)&&u.push(c.get(f)??e)}else if(v(e)){const f=e.name.value;p.has(f)&&!c.has(f)&&u.push(e)}else e.kind===t.DIRECTIVE_DEFINITION&&l.has(e.name.value)&&u.push(e);if(a&&!m&&u.unshift(a),u.length!==0)return F({kind:t.DOCUMENT,definitions:u})}export{B as extractGraphqlSlice};
@@ -0,0 +1,6 @@
1
+ import type { ApiSpecType } from '../../types/common.js';
2
+ import type { SpecSliceScope } from './types.js';
3
+ export { resolveSpecSliceScope } from './resolve-scope.js';
4
+ export { ASSISTANT_LINK_BASES, buildInlinePromptLink, buildFetchSpecPromptLink, } from './assistant-links.js';
5
+ export type { SliceContentKind, SpecSliceScope } from './types.js';
6
+ export declare function buildSpecSlice(specType: ApiSpecType, document: unknown, scope: SpecSliceScope): Promise<string | undefined>;
@@ -0,0 +1 @@
1
+ import{dump as n}from"js-yaml";import{isRecord as f}from"../../adapters/helpers.js";import{apiSpecType as t}from"../../types/common.js";import{extractOpenApiSlice as c}from"./openapi-slice.js";import{extractAsyncApiSlice as p}from"./asyncapi-slice.js";import{resolveSpecSliceScope as x}from"./resolve-scope.js";import{ASSISTANT_LINK_BASES as h,buildInlinePromptLink as I,buildFetchSpecPromptLink as y}from"./assistant-links.js";async function s(o,e,i){switch(o){case t.GRAPHQL:{if(typeof e!="string")return;if(i.kind==="document")return e;const{extractGraphqlSlice:r}=await import("./graphql-slice.js");return r(e,i)}case t.OPENAPI:{if(f(e)){const r=c(e,i);if(r)return n(r.document,{noRefs:!0,lineWidth:-1})}return}case t.ASYNCAPI:{if(f(e)){const r=p(e,i);if(r)return n(r.document,{noRefs:!0,lineWidth:-1})}return}default:return}}export{h as ASSISTANT_LINK_BASES,y as buildFetchSpecPromptLink,I as buildInlinePromptLink,s as buildSpecSlice,x as resolveSpecSliceScope};
@@ -0,0 +1,6 @@
1
+ import type { SpecSliceScope } from './types.js';
2
+ export declare function parsePointerTokens(pointer: string): string[];
3
+ export declare function operationScopeFromPointer(pointer: string, isWebhook: boolean | undefined): SpecSliceScope | undefined;
4
+ export declare function extractOpenApiSlice(document: Record<string, unknown>, scope: SpecSliceScope): {
5
+ document: Record<string, unknown>;
6
+ } | undefined;
@@ -0,0 +1 @@
1
+ import{isRecord as f}from"../../adapters/helpers.js";import{resolvePathItemRef as A}from"../../adapters/openapi/utils/resolvePathItemRef.js";import{JsonPointer as O}from"../../adapters/openapi/utils/JsonPointer.js";import{isOperationName as v}from"../../utils/http-methods.js";import{encodeJsonPointerSegment as w}from"../../utils/refPointer.js";import{DEFAULT_WEBHOOKS_TAG_NAME as x}from"../../constants/openapi.js";import{collectComponentClosure as S,buildComponentsFromClosure as T}from"./component-closure.js";import{cloneStrip as g}from"./clone-strip.js";const N=["openapi","info","jsonSchemaDialect","externalDocs","servers","security"];function I(e){const n=e.startsWith("/")||e.startsWith("#")?e:`/${e}`;try{return O.parse(n)}catch{return[]}}function L(e,n){const r=I(e);if(!(r.length<3||r[0]!=="paths"))return{kind:"operation",pathName:r[1],httpVerb:r[2],source:n?"webhooks":"paths"}}function W(e,n){if(typeof e.openapi!="string")return;if(n.kind==="document")return{document:g(e,new Map)};const r=M(e,n);if(!r)return;const{draft:s,extraSeeds:o=[]}=r,i=S(e,[s,...o]),t=T(e,i.keep);return t&&(s.components=t),{document:g(s,i.inlineTargets)}}function M(e,n){const r={};for(const p of N)e[p]!==void 0&&(r[p]=e[p]);if(n.kind==="schema"){const p=f(e.components)?e.components.schemas:void 0;if(!f(p)||!(n.name in p))return;r.paths={};const d={$ref:`#/components/schemas/${w(n.name)}`};return{draft:r,extraSeeds:[d]}}const s=e["x-webhooks"]?"x-webhooks":"webhooks",o=e["x-webhooks"]??e.webhooks;let i,t;if(n.kind==="operation"){i=new Map,t=new Map;const p=n.source==="webhooks"?o:e.paths,d=P(e,p,n.pathName,n.httpVerb);if(!d)return;(n.source==="webhooks"?t:i).set(n.pathName,d)}else if(n.kind==="tag"){if(i=k(e,e.paths,n.tagName,!1),t=k(e,o,n.tagName,!0),i.size===0&&t.size===0)return}else return;const a=new Set;for(const p of[...i.values(),...t.values()])for(const{operation:d}of p.operations){const l=d.tags;if(Array.isArray(l))for(const h of l)typeof h=="string"&&a.add(h)}const c=K(e,a);c.length&&(r.tags=c);const u=_(e,a);return u.length&&(r["x-tagGroups"]=u),r.paths=b(i),t.size&&(r[s]=b(t)),{draft:r}}function m(e,n){if(f(n))try{const r=A(e,n,e.openapi);return f(r)?r:void 0}catch{return}}function P(e,n,r,s){if(!f(n))return;const o=m(e,n[r]);if(!o)return;const i=o[s];if(f(i))return{pathItem:o,operations:[{operation:i,verbKey:s,isAdditional:!1}]};if(s==="query"&&f(o["x-query"]))return{pathItem:o,operations:[{operation:o["x-query"],verbKey:"x-query",isAdditional:!1}]};const t=f(o.additionalOperations)?o.additionalOperations[s]:void 0;if(f(t))return{pathItem:o,operations:[{operation:t,verbKey:s,isAdditional:!0}]}}function y(e,n,r){return(Array.isArray(e.tags)?e.tags:[r?x:""]).includes(n)}function k(e,n,r,s){const o=new Map;if(!f(n))return o;for(const i of Object.keys(n)){const t=m(e,n[i]);if(!t)continue;const a=[];for(const[c,u]of Object.entries(t))!v(c)||!f(u)||y(u,r,s)&&a.push({operation:u,verbKey:c,isAdditional:!1});if(f(t.additionalOperations))for(const[c,u]of Object.entries(t.additionalOperations))f(u)&&y(u,r,s)&&a.push({operation:u,verbKey:c,isAdditional:!0});a.length&&o.set(i,{pathItem:t,operations:a})}return o}const E=["summary","description","parameters","servers"];function b(e){const n={};for(const[r,{pathItem:s,operations:o}]of e){const i={};for(const a of E)s[a]!==void 0&&(i[a]=s[a]);const t={};for(const{operation:a,verbKey:c,isAdditional:u}of o)u?t[c]=a:i[c]=a;Object.keys(t).length&&(i.additionalOperations=t),n[r]=i}return n}function K(e,n){const r=Array.isArray(e.tags)?e.tags:[],s=new Map;for(const t of r)f(t)&&typeof t.name=="string"&&s.set(t.name,t);const o=new Set,i=t=>{if(o.has(t))return;const a=s.get(t);a&&(o.add(t),typeof a.parent=="string"&&i(a.parent))};for(const t of n)i(t);return r.filter(t=>f(t)&&o.has(t.name))}function _(e,n){const r=e["x-tagGroups"];if(!Array.isArray(r))return[];const s=[];for(const o of r){if(!f(o)||!Array.isArray(o.tags))continue;const i=o.tags.filter(t=>typeof t=="string"&&n.has(t));i.length&&s.push({...o,tags:i})}return s}export{W as extractOpenApiSlice,L as operationScopeFromPointer,I as parsePointerTokens};
@@ -0,0 +1,4 @@
1
+ import type { ApiItemContent } from '../../types/store.js';
2
+ import type { ApiSpecType } from '../../types/common.js';
3
+ import type { SpecSliceScope } from './types.js';
4
+ export declare function resolveSpecSliceScope(specType: ApiSpecType, content: ApiItemContent | null | undefined, label: string | undefined, groupMemberContents?: Array<ApiItemContent | null | undefined>): SpecSliceScope | undefined;
@@ -0,0 +1 @@
1
+ import{apiSpecType as u,contentType as t,itemVariant as i}from"../../types/common.js";import{BUILT_IN_DIRECTIVES as m,BUILT_IN_SCALARS as s}from"../../adapters/graphql/utils/constants.js";import{operationScopeFromPointer as T}from"./openapi-slice.js";import{scopeFromAsyncApiPointer as A}from"./asyncapi-slice.js";function V(e,r,n,p){if(r){if(r.contentType===t.OVERVIEW)return{kind:"document"};switch(e){case u.OPENAPI:return I(r);case u.ASYNCAPI:return S(r,n);case u.GRAPHQL:return r.contentType===t.GROUP?N(n,p):d(r);default:return}}}function I(e){if(e.contentType===t.GROUP){const r=e.meta?.name;return typeof r=="string"?{kind:"tag",tagName:r}:void 0}if(e.contentType===t.ITEM){if(e.itemVariant===i.HTTP_ITEM&&e.meta?.pointer)return T(e.meta.pointer,e.meta.isWebhook);if(e.itemVariant===i.SCHEMA&&e.meta?.name)return{kind:"schema",name:e.meta.name}}}const E={[i.QUERY]:"query",[i.MUTATION]:"mutation",[i.SUBSCRIPTION]:"subscription"},c=new Set([i.OBJECT,i.INTERFACE,i.INPUT,i.UNION,i.ENUM,i.SCALAR]);function d(e){if(e.contentType!==t.ITEM||!e.itemVariant)return;const r=e.meta?.name;if(typeof r!="string"||!r)return;const n=E[e.itemVariant];if(n)return{kind:"graphql-operation",operationType:n,name:r};if(c.has(e.itemVariant))return s.has(r)?void 0:{kind:"graphql-type",name:r};if(e.itemVariant===i.DIRECTIVE)return m.has(r)?void 0:{kind:"graphql-directive",name:r}}function N(e,r){if(!r?.length)return;const n=[],p=new Set;for(const o of r){const a=o?d(o):void 0;if(!a)continue;const f=`${a.kind}/${"operationType"in a?a.operationType:""}/${a.name}`;p.has(f)||(p.add(f),n.push(a))}return n.length?{kind:"graphql-group",label:e,members:n}:void 0}function S(e,r){if(e.contentType===t.GROUP)return r?{kind:"tag",tagName:r}:void 0;if(e.contentType===t.ITEM&&(e.itemVariant===i.CHANNEL||e.itemVariant===i.CHANNEL_OPERATION)&&e.meta?.pointer)return A(e.meta.pointer)}export{V as resolveSpecSliceScope};
@@ -0,0 +1,37 @@
1
+ export type GraphqlOperationType = 'query' | 'mutation' | 'subscription';
2
+ export type GraphqlItemScope = {
3
+ kind: 'graphql-operation';
4
+ operationType: GraphqlOperationType;
5
+ name: string;
6
+ } | {
7
+ kind: 'graphql-type';
8
+ name: string;
9
+ } | {
10
+ kind: 'graphql-directive';
11
+ name: string;
12
+ };
13
+ export type SpecSliceScope = {
14
+ kind: 'document';
15
+ } | {
16
+ kind: 'tag';
17
+ tagName: string;
18
+ } | {
19
+ kind: 'operation';
20
+ pathName: string;
21
+ httpVerb: string;
22
+ source: 'paths' | 'webhooks';
23
+ } | {
24
+ kind: 'schema';
25
+ name: string;
26
+ } | {
27
+ kind: 'channel';
28
+ channelId: string;
29
+ } | {
30
+ kind: 'async-operation';
31
+ operationId: string;
32
+ } | GraphqlItemScope | {
33
+ kind: 'graphql-group';
34
+ label?: string;
35
+ members: GraphqlItemScope[];
36
+ };
37
+ export type SliceContentKind = 'yaml' | 'graphql';
File without changes
package/lib/standalone.js CHANGED
@@ -1,2 +1,2 @@
1
- import{createElement as m}from"react";import{createRoot as g,hydrateRoot as E}from"react-dom/client";import{HashRouter as R}from"react-router";import{RedocStandalone as y,prepareApiDocs as S}from"./RedocStandalone.js";import{RedoclyApiDocsStandalone as A}from"./RedoclyApiDocsStandalone.js";import{logoFromDefinition as T}from"./utils/x-logo.js";const C=["html","cli","react","docker"];function M(e,t){return C.includes(e)?e:t}function f(e){return typeof document<"u"?document.querySelector(e):null}function w(e){const t={};for(const o of Array.from(e.attributes))t[o.name]=o.value;return t}function q(e){const t=w(e),o={};for(const r in t){const s=r.replace(/-(.)/g,(n,c)=>c.toUpperCase());o[s]=t[r]}return o}function h(e,t,o,r){const{router:s,disableTelemetry:n,specType:c,typeOfUsage:i,basePath:p,...u}={...t,...q(o)};let l,a;return typeof e=="string"?c==="graphql"&&!I(e)?a=e:l=e:typeof e=="object"&&(a=e),{router:s,props:{definition:a,definitionUrl:l,specType:c,options:u,basePath:p,telemetryConfig:{typeOfUsage:M(i,r),...n!==void 0?{disabled:n===!0||String(n)==="true"}:{}}}}}function d(e,t){return t==="history"?e:m(R,null,e)}function b(e){if(e===null)throw new Error('"element" argument is not provided and <redoc> tag is not found on the page');return e}function v(e,t={},o=f("redoc")){const r=b(o),{router:s,props:n}=h(e,t,r,"html");g(r).render(d(m(y,n),s))}const H=/server rendered HTML didn't match the client|error while hydrating|Minified React error #(418|423)/;async function L(e,t={},o=f("redoc")){const r=b(o),{router:s,props:n}=h(e,t,r,"cli"),c=n.basePath??"/",i=await S({...n,basePath:c}),p=m(A,{items:i.items,store:i.store,basePath:c,options:i.options,logo:T(i.document),telemetryConfig:n.telemetryConfig,definition:i.document});if(r.childElementCount===0){g(r).render(d(p,s));return}E(r,d(p,s),{onRecoverableError:(u,l)=>{const a=u instanceof Error?u.message:String(u);H.test(a)||console.error(a,l)}})}function I(e){return!e.includes(`
2
- `)&&/^[^\s]+$/.test(e)}function P(){const e=f("redoc");if(!e)return;const t=e.getAttribute("spec-url");t&&v(t,{},e)}P();export{y as RedocStandalone,L as hydrate,v as init};
1
+ import{createElement as f}from"react";import{createRoot as g,hydrateRoot as E}from"react-dom/client";import{HashRouter as R}from"react-router";import{RedocStandalone as y,prepareApiDocs as S}from"./RedocStandalone.js";import{RedoclyApiDocsStandalone as A}from"./RedoclyApiDocsStandalone.js";import{logoFromDefinition as T}from"./utils/x-logo.js";const C=["html","cli","react","docker"];function M(e,t){return C.includes(e)?e:t}function m(e){return typeof document<"u"?document.querySelector(e):null}function w(e){const t={};for(const o of Array.from(e.attributes))t[o.name]=o.value;return t}function U(e){const t=w(e),o={};for(const r in t){const s=r.replace(/-(.)/g,(n,c)=>c.toUpperCase());o[s]=t[r]}return o}function h(e,t,o,r){const{router:s,disableTelemetry:n,specType:c,typeOfUsage:i,basePath:p,...u}={...t,...U(o)};let l,a;return typeof e=="string"?c==="graphql"&&!H(e)?a=e:l=e:typeof e=="object"&&(a=e),{router:s,props:{definition:a,definitionUrl:l,specType:c,options:u,basePath:p,telemetryConfig:{typeOfUsage:M(i,r),...n!==void 0?{disabled:n===!0||String(n)==="true"}:{}}}}}function d(e,t){return t==="history"?e:f(R,null,e)}function b(e){if(e===null)throw new Error('"element" argument is not provided and <redoc> tag is not found on the page');return e}function q(e,t={},o=m("redoc")){const r=b(o),{router:s,props:n}=h(e,t,r,"html");g(r).render(d(f(y,n),s))}const v=/server rendered HTML didn't match the client|error while hydrating|Minified React error #(418|423)/;async function L(e,t={},o=m("redoc")){const r=b(o),{router:s,props:n}=h(e,t,r,"cli"),c=n.basePath??"/",i=await S({...n,basePath:c}),p=f(A,{items:i.items,store:i.store,basePath:c,options:i.options,logo:T(i.document),telemetryConfig:n.telemetryConfig,definition:i.document,definitionUrl:n.definitionUrl});if(r.childElementCount===0){g(r).render(d(p,s));return}E(r,d(p,s),{onRecoverableError:(u,l)=>{const a=u instanceof Error?u.message:String(u);v.test(a)||console.error(a,l)}})}function H(e){return!e.includes(`
2
+ `)&&/^[^\s]+$/.test(e)}function I(){const e=m("redoc");if(!e)return;const t=e.getAttribute("spec-url");t&&q(t,{},e)}I();export{y as RedocStandalone,L as hydrate,q as init};
@@ -406,7 +406,7 @@ export type ResponseExamplesPanelItem = BaseExamplePanelItem & {
406
406
  kind: typeof panelKind.RESPONSE;
407
407
  exampleIds?: string[];
408
408
  responseCodes?: ResponseCodeEntry[];
409
- headerTitle?: string;
409
+ hideHeaderTitle?: boolean;
410
410
  exampleKey?: string;
411
411
  };
412
412
  export type GraphQLQueryPanelItem = BaseExamplePanelItem & {
@@ -469,7 +469,7 @@ export type OverviewPanelItem = ExternalLinkPanelItem | EmailPanelItem | KeyValu
469
469
  export type McpPanelItem = KeyValuePanelItem | TagsPanelItem | ExternalLinkPanelItem | ConnectMcpButtonPanelItem;
470
470
  export type McpExamplePanelItem = {
471
471
  kind: typeof panelKind.MCP_EXAMPLE;
472
- headerTitle: string;
472
+ headerTitleTranslationKey: string;
473
473
  data: unknown;
474
474
  language?: string;
475
475
  };
@@ -93,8 +93,6 @@ export type ApiDocsOptions = {
93
93
  scrollYOffset: () => number;
94
94
  hideLoading: boolean;
95
95
  skipBundle: boolean;
96
- hideSidebar: boolean;
97
- hideSearch: boolean;
98
96
  basePath: string;
99
97
  specType: ApiSpecType;
100
98
  metadata: ApiDocsMetadata;
@@ -104,7 +102,6 @@ export type ApiDocsOptions = {
104
102
  jsonSamplesDepth: number;
105
103
  samplesMaxInlineArgs: number;
106
104
  fieldExpandLevel: number;
107
- baseUrlPath?: string;
108
105
  } & GraphQLOptions;
109
106
  export type RawApiDocsOptions = EditionRedocConfig & EditionAsyncApiConfig & EditionGraphQLConfig & {
110
107
  specType: ApiSpecType;
@@ -114,9 +111,6 @@ export type RawApiDocsOptions = EditionRedocConfig & EditionAsyncApiConfig & Edi
114
111
  requiredPropsFirst?: boolean;
115
112
  licenseKey?: string;
116
113
  protocol?: ProtocolVariant;
117
- excludeFromSearch?: boolean;
118
- /** Hides the standalone sidebar search. Portal embeds have their own search. */
119
- hideSearch?: boolean;
120
114
  dynamicRequestValues?: ConfigureRequestValues | ConfigureServerRequestValues;
121
115
  userClaims?: UserClaims;
122
116
  layout?: EditionRedocConfig['layout'] | EditionAsyncApiConfig['layout'] | EditionGraphQLConfig['layout'];
@@ -4,4 +4,5 @@ export declare function compose<P>(f: HOC<P>): (Component: ComponentType<P>) =>
4
4
  export declare function compose<P>(f: HOC<P>, g: HOC<P>): (Component: ComponentType<P>) => FC<P>;
5
5
  export declare function compose<P>(f: HOC<P>, g: HOC<P>, h: HOC<P>): (Component: ComponentType<P>) => FC<P>;
6
6
  export declare function compose<P>(f: HOC<P>, g: HOC<P>, h: HOC<P>, i: HOC<P>): (Component: ComponentType<P>) => FC<P>;
7
+ export declare function compose<P>(f: HOC<P>, g: HOC<P>, h: HOC<P>, i: HOC<P>, j: HOC<P>): (Component: ComponentType<P>) => FC<P>;
7
8
  export {};
@@ -9,5 +9,5 @@ export type LogoConfig = XLogo;
9
9
  * Derives the sidebar logo config from the definition's `info['x-logo']`
10
10
  * extension, falling back to `info.contact.url` for the link.
11
11
  */
12
- export declare function logoFromDefinition(definition: Record<string, unknown> | undefined): LogoConfig | undefined;
12
+ export declare function logoFromDefinition(definition: Record<string, unknown> | string | undefined): LogoConfig | undefined;
13
13
  export {};
@@ -1 +1 @@
1
- function c(r){const n=r?.info,o=n?.["x-logo"];if(!o?.url)return;const t=n?.contact;return{url:o.url,href:o.href||t?.url,altText:o.altText,backgroundColor:o.backgroundColor}}export{c as logoFromDefinition};
1
+ function e(n){if(typeof n=="string")return;const r=n?.info,o=r?.["x-logo"];if(!o?.url)return;const t=r?.contact;return{url:o.url,href:o.href||t?.url,altText:o.altText,backgroundColor:o.backgroundColor}}export{e as logoFromDefinition};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/api-docs",
3
- "version": "0.2.0-next.6",
3
+ "version": "0.2.0-next.7",
4
4
  "description": "Redocly API Documentation Library",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -49,7 +49,7 @@
49
49
  "url-template": "^2.0.8",
50
50
  "web-vitals": "3.3.1",
51
51
  "@redocly/allof-merge": "0.6.9",
52
- "@redocly/config": "0.54.0",
52
+ "@redocly/config": "0.55.0",
53
53
  "@redocly/redoc-opentelemetry": "0.2.4",
54
54
  "@redocly/replay": "0.28.0-next.6",
55
55
  "@redocly/theme": "^0.69.0-next.6"
@@ -113,7 +113,6 @@
113
113
  "test": "nx run vitest:test",
114
114
  "test:update": "nx run vitest:test -u --skip-nx-cache",
115
115
  "test:coverage:html": "nx run vitest:test --coverage --coverage.reporter=html --exclude 'tools/**'",
116
- "test:tools": "vitest run tools",
117
116
  "test:ce": "pnpm run stage:ce && cd redoc && npm run unit",
118
117
  "ts:check": "tsgo -p tsconfig.build.json --noEmit --skipLibCheck"
119
118
  }