@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.
- package/lib/RedocStandalone.d.ts +2 -2
- package/lib/RedocStandalone.js +1 -1
- package/lib/RedoclyApiDocs.js +1 -1
- package/lib/RedoclyApiDocsStandalone.d.ts +2 -2
- package/lib/RedoclyApiDocsStandalone.js +3 -3
- package/lib/adapters/graphql/group/utils.js +1 -1
- package/lib/adapters/openapi/configure/resolve-request-values.js +1 -1
- package/lib/adapters/openapi/items/operation/content.js +1 -1
- package/lib/components/Header/HeaderItem.js +5 -5
- package/lib/components/Header/HeaderPageActions.d.ts +4 -0
- package/lib/components/Header/HeaderPageActions.js +1 -0
- package/lib/components/Header/PageActions.d.ts +4 -0
- package/lib/components/Header/PageActions.js +11 -0
- package/lib/components/Mcp/McpPrompt.js +1 -1
- package/lib/components/Mcp/McpTool.js +1 -1
- package/lib/components/Mcp/utils.d.ts +1 -1
- package/lib/components/Mcp/utils.js +1 -1
- package/lib/components/Schema/views/DiscriminatorPropertyRow.js +1 -1
- package/lib/components/Schema/views/Examples.js +1 -1
- package/lib/components/Security/SecurityFlowDetail.js +1 -1
- package/lib/components/markdoc/SchemaDefinition.js +1 -1
- package/lib/components/panels/ExampleItem/ResponseExampleItem.js +1 -1
- package/lib/components/panels/LanguageItem/LanguagePanelItem.js +5 -1
- package/lib/components/panels/LanguageItem/styled.js +17 -14
- package/lib/components/panels/McpExamplePanelItem.js +2 -2
- package/lib/components/panels/styled.js +1 -1
- package/lib/components/pluggable/RedocResponseSamples.js +1 -1
- package/lib/hoc/withLicenseGate.d.ts +5 -0
- package/lib/hoc/withLicenseGate.js +1 -0
- package/lib/hoc/withStoreProvider.d.ts +2 -0
- package/lib/hoc/withStoreProvider.js +1 -1
- package/lib/hooks/useCopySpecSlice.d.ts +9 -0
- package/lib/hooks/useCopySpecSlice.js +1 -0
- package/lib/hooks/useLicense.js +1 -1
- package/lib/hooks/useLicenseGate.d.ts +6 -0
- package/lib/hooks/useLicenseGate.js +1 -0
- package/lib/index.d.ts +3 -1
- package/lib/index.js +1 -1
- package/lib/jotai/store.d.ts +4 -0
- package/lib/jotai/store.js +1 -1
- package/lib/options/helpers.d.ts +0 -1
- package/lib/options/helpers.js +1 -1
- package/lib/options/normalizeOptions.js +1 -1
- package/lib/options/standaloneLayoutVars.d.ts +3 -0
- package/lib/options/standaloneLayoutVars.js +1 -0
- package/lib/services/code-samples/replay/from-openapi-document.d.ts +8 -1
- package/lib/services/code-samples/replay/from-openapi-document.js +1 -1
- package/lib/services/code-samples/replay/index.d.ts +1 -1
- package/lib/services/code-samples/replay/index.js +1 -1
- package/lib/services/license/check.d.ts +1 -0
- package/lib/services/license/check.js +1 -1
- package/lib/services/spec-slice/assistant-links.d.ts +9 -0
- package/lib/services/spec-slice/assistant-links.js +5 -0
- package/lib/services/spec-slice/asyncapi-slice.d.ts +5 -0
- package/lib/services/spec-slice/asyncapi-slice.js +1 -0
- package/lib/services/spec-slice/clone-strip.d.ts +1 -0
- package/lib/services/spec-slice/clone-strip.js +1 -0
- package/lib/services/spec-slice/component-closure.d.ts +6 -0
- package/lib/services/spec-slice/component-closure.js +1 -0
- package/lib/services/spec-slice/graphql-slice.d.ts +2 -0
- package/lib/services/spec-slice/graphql-slice.js +1 -0
- package/lib/services/spec-slice/index.d.ts +6 -0
- package/lib/services/spec-slice/index.js +1 -0
- package/lib/services/spec-slice/openapi-slice.d.ts +6 -0
- package/lib/services/spec-slice/openapi-slice.js +1 -0
- package/lib/services/spec-slice/resolve-scope.d.ts +4 -0
- package/lib/services/spec-slice/resolve-scope.js +1 -0
- package/lib/services/spec-slice/types.d.ts +37 -0
- package/lib/services/spec-slice/types.js +0 -0
- package/lib/standalone.js +2 -2
- package/lib/types/content.d.ts +2 -2
- package/lib/types/options.d.ts +0 -6
- package/lib/utils/compose.d.ts +1 -0
- package/lib/utils/x-logo.d.ts +1 -1
- package/lib/utils/x-logo.js +1 -1
- 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
|
|
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};
|
package/lib/hooks/useLicense.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useState as
|
|
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 @@
|
|
|
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
|
|
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};
|
package/lib/jotai/store.d.ts
CHANGED
|
@@ -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;
|
package/lib/jotai/store.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{atom as o}from"jotai";const m={schemaStore:{},exampleStore:{},securitySchemeStore:{}},e=o({items:[],store:m,options:{},replayDefinition:null}),
|
|
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};
|
package/lib/options/helpers.d.ts
CHANGED
|
@@ -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;
|
package/lib/options/helpers.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{LayoutVariant as
|
|
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
|
|
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 @@
|
|
|
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
|
|
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
|
|
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
|
|
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 @@
|
|
|
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
|
|
2
|
-
`)&&/^[^\s]+$/.test(e)}function
|
|
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};
|
package/lib/types/content.d.ts
CHANGED
|
@@ -406,7 +406,7 @@ export type ResponseExamplesPanelItem = BaseExamplePanelItem & {
|
|
|
406
406
|
kind: typeof panelKind.RESPONSE;
|
|
407
407
|
exampleIds?: string[];
|
|
408
408
|
responseCodes?: ResponseCodeEntry[];
|
|
409
|
-
|
|
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
|
-
|
|
472
|
+
headerTitleTranslationKey: string;
|
|
473
473
|
data: unknown;
|
|
474
474
|
language?: string;
|
|
475
475
|
};
|
package/lib/types/options.d.ts
CHANGED
|
@@ -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'];
|
package/lib/utils/compose.d.ts
CHANGED
|
@@ -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 {};
|
package/lib/utils/x-logo.d.ts
CHANGED
|
@@ -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 {};
|
package/lib/utils/x-logo.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
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.
|
|
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.
|
|
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
|
}
|