@redocly/reef 0.137.0-next.6 → 0.137.0-next.8

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 (213) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/client/app/markdoc/custom-components/openapi/replay-openapi.js +1 -1
  3. package/dist/client/templates/api-docs/helpers.d.ts +4 -1
  4. package/dist/client/templates/api-docs/helpers.js +5 -1
  5. package/dist/client/templates/api-docs/template.js +1 -1
  6. package/dist/constants/l10n/langs/ar.js +1 -1
  7. package/dist/constants/l10n/langs/de.js +1 -1
  8. package/dist/constants/l10n/langs/en.js +1 -1
  9. package/dist/constants/l10n/langs/es.js +1 -1
  10. package/dist/constants/l10n/langs/fr.js +1 -1
  11. package/dist/constants/l10n/langs/hi.js +1 -1
  12. package/dist/constants/l10n/langs/it.js +1 -1
  13. package/dist/constants/l10n/langs/ja.js +1 -1
  14. package/dist/constants/l10n/langs/ko.js +1 -1
  15. package/dist/constants/l10n/langs/pl.js +1 -1
  16. package/dist/constants/l10n/langs/pt-BR.js +1 -1
  17. package/dist/constants/l10n/langs/pt.js +1 -1
  18. package/dist/constants/l10n/langs/ru.js +1 -1
  19. package/dist/constants/l10n/langs/uk.js +1 -1
  20. package/dist/constants/l10n/langs/zh.js +1 -1
  21. package/dist/server/config/env-config.d.ts +2 -0
  22. package/dist/server/config/env-schema.d.ts +5 -0
  23. package/dist/server/config/env-schemas/feature-flags.d.ts +4 -0
  24. package/dist/server/config/env-schemas/feature-flags.js +1 -1
  25. package/dist/server/esbuild/esbuild.js +3 -3
  26. package/dist/server/esbuild/plugins/mcp-tool-handlers-resolver.js +1 -1
  27. package/dist/server/plugins/api-docs/options.js +1 -1
  28. package/dist/server/plugins/{openapi-docs/is-openapi-doc.d.ts → api-docs/utils/is-api-doc.d.ts} +4 -2
  29. package/dist/server/plugins/api-docs/utils/is-api-doc.js +1 -0
  30. package/dist/server/plugins/arazzo-docs/arazzo-doc-loader.d.ts +1 -1
  31. package/dist/server/plugins/arazzo-docs/arazzo-doc-loader.js +1 -1
  32. package/dist/server/plugins/entitlements/index.js +1 -1
  33. package/dist/server/plugins/l10n/index.js +1 -1
  34. package/dist/server/plugins/lifecycle.js +2 -2
  35. package/dist/server/plugins/markdown/attribute-resolvers/resolve-link.js +1 -1
  36. package/dist/server/plugins/markdown/attribute-resolvers/resolve-open-api-ref.js +1 -1
  37. package/dist/server/plugins/mcp/codemode/capabilities/fetch/index.js +4 -4
  38. package/dist/server/plugins/mcp/codemode/code-execution-telemetry.d.ts +3 -1
  39. package/dist/server/plugins/mcp/codemode/code-execution-telemetry.js +1 -1
  40. package/dist/server/plugins/mcp/codemode/invoke-tool.js +1 -1
  41. package/dist/server/plugins/mcp/codemode/prompts.js +1 -1
  42. package/dist/server/plugins/mcp/codemode/sandbox/polyfills/fetch-shim.d.ts +1 -1
  43. package/dist/server/plugins/mcp/codemode/sandbox/polyfills/fetch-shim.js +9 -3
  44. package/dist/server/plugins/mcp/codemode/tools/execute.js +1 -1
  45. package/dist/server/plugins/mcp/codemode/tools/manage-credentials.js +1 -1
  46. package/dist/server/plugins/mcp/codemode/types.d.ts +1 -0
  47. package/dist/server/plugins/mcp/constants.d.ts +1 -0
  48. package/dist/server/plugins/mcp/constants.js +1 -1
  49. package/dist/server/plugins/mcp/custom-tools/extract-tool-definition.d.ts +13 -0
  50. package/dist/server/plugins/mcp/custom-tools/extract-tool-definition.js +1 -0
  51. package/dist/server/plugins/mcp/custom-tools/scan-custom-tools.d.ts +6 -0
  52. package/dist/server/plugins/mcp/custom-tools/scan-custom-tools.js +1 -0
  53. package/dist/server/plugins/mcp/custom-tools/validate-tool-definition.d.ts +3 -0
  54. package/dist/server/plugins/mcp/custom-tools/validate-tool-definition.js +1 -0
  55. package/dist/server/plugins/mcp/docs-mcp/tool-schemas.d.ts +2 -0
  56. package/dist/server/plugins/mcp/docs-mcp/tool-schemas.js +1 -1
  57. package/dist/server/plugins/mcp/docs-mcp/tools/core/search.js +2 -2
  58. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/get-endpoints.js +1 -1
  59. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/list-apis.js +1 -1
  60. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/utils.js +1 -1
  61. package/dist/server/plugins/mcp/gateway-mcp/callable-apis.d.ts +10 -0
  62. package/dist/server/plugins/mcp/gateway-mcp/callable-apis.js +1 -0
  63. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-bridge.js +1 -1
  64. package/dist/server/plugins/mcp/gateway-mcp/fetch-capability.d.ts +1 -9
  65. package/dist/server/plugins/mcp/gateway-mcp/fetch-capability.js +1 -1
  66. package/dist/server/plugins/mcp/handlers/docs-mcp-handler.js +1 -1
  67. package/dist/server/plugins/mcp/handlers/errors.d.ts +7 -2
  68. package/dist/server/plugins/mcp/handlers/errors.js +1 -1
  69. package/dist/server/plugins/mcp/index.js +1 -1
  70. package/dist/server/plugins/mcp/servers/docs-server.d.ts +2 -2
  71. package/dist/server/plugins/mcp/servers/docs-server.js +1 -1
  72. package/dist/server/plugins/mcp/servers/mcp-server.d.ts +2 -11
  73. package/dist/server/plugins/mcp/servers/mcp-server.js +3 -3
  74. package/dist/server/plugins/mcp/types.d.ts +29 -3
  75. package/dist/server/plugins/mcp/utils/available-sandbox-tools.d.ts +4 -0
  76. package/dist/server/plugins/mcp/utils/available-sandbox-tools.js +1 -0
  77. package/dist/server/plugins/mcp/utils/find-gated-tool-names.d.ts +2 -3
  78. package/dist/server/plugins/mcp/utils/find-gated-tool-names.js +1 -1
  79. package/dist/server/plugins/mcp/utils/mcp-client.d.ts +13 -0
  80. package/dist/server/plugins/mcp/utils/mcp-client.js +1 -0
  81. package/dist/server/plugins/mcp/workers/execute-mcp-tool.d.ts +6 -1
  82. package/dist/server/plugins/mcp/workers/execute-mcp-tool.js +1 -1
  83. package/dist/server/plugins/mcp/workers/import-mcp-tool-handlers.d.ts +5 -0
  84. package/dist/server/plugins/mcp/workers/import-mcp-tool-handlers.js +1 -0
  85. package/dist/server/plugins/mcp/workers/mcp-tool-telemetry.d.ts +6 -11
  86. package/dist/server/plugins/mcp/workers/mcp-tool-telemetry.js +1 -1
  87. package/dist/server/plugins/mcp/workers/tool-file-system.d.ts +6 -0
  88. package/dist/server/plugins/mcp/workers/tool-file-system.js +1 -0
  89. package/dist/server/sandbox/sandbox.js +2 -2
  90. package/dist/server/sandbox/utils/returns-from-top-level.d.ts +4 -0
  91. package/dist/server/sandbox/utils/returns-from-top-level.js +1 -0
  92. package/dist/server/store.d.ts +1 -0
  93. package/dist/server/store.js +1 -1
  94. package/dist/server/types/plugins/common.d.ts +2 -1
  95. package/dist/server/web-server/routes/resolve-route.js +1 -1
  96. package/dist/server/web-server/utils/get-request-origin.d.ts +2 -0
  97. package/dist/server/web-server/utils/get-request-origin.js +1 -1
  98. package/dist/server/workers/mcp-tool-worker-pool.d.ts +1 -0
  99. package/dist/server/workers/mcp-tool-worker-pool.js +1 -1
  100. package/dist/server/workers/mcp-tool-worker.js +1 -1
  101. package/dist/server/workers/types.d.ts +9 -2
  102. package/dist/server/workers/worker-pool.d.ts +1 -0
  103. package/dist/server/workers/worker-pool.js +1 -1
  104. package/dist/utils/guards/is-plain-object.d.ts +19 -0
  105. package/dist/utils/guards/is-plain-object.js +1 -0
  106. package/package.json +8 -11
  107. package/dist/client/templates/asyncapi-docs/helpers.d.ts +0 -12
  108. package/dist/client/templates/asyncapi-docs/helpers.js +0 -1
  109. package/dist/client/templates/asyncapi-docs/template.d.ts +0 -15
  110. package/dist/client/templates/asyncapi-docs/template.js +0 -9
  111. package/dist/client/templates/openapi-docs/helpers.d.ts +0 -18
  112. package/dist/client/templates/openapi-docs/helpers.js +0 -5
  113. package/dist/client/templates/openapi-docs/template.d.ts +0 -6
  114. package/dist/client/templates/openapi-docs/template.js +0 -14
  115. package/dist/server/esbuild/plugins/api-docs-module-replacer/empty-check.d.ts +0 -9
  116. package/dist/server/esbuild/plugins/api-docs-module-replacer/empty-check.js +0 -1
  117. package/dist/server/esbuild/plugins/api-docs-module-replacer/empty-overlay.d.ts +0 -2
  118. package/dist/server/esbuild/plugins/api-docs-module-replacer/empty-overlay.js +0 -1
  119. package/dist/server/esbuild/plugins/api-docs-module-replacer/index.d.ts +0 -6
  120. package/dist/server/esbuild/plugins/api-docs-module-replacer/index.js +0 -1
  121. package/dist/server/esbuild/plugins/openapi-docs-module-replacer/empty-check.d.ts +0 -8
  122. package/dist/server/esbuild/plugins/openapi-docs-module-replacer/empty-check.js +0 -1
  123. package/dist/server/esbuild/plugins/openapi-docs-module-replacer/empty-overlay.d.ts +0 -2
  124. package/dist/server/esbuild/plugins/openapi-docs-module-replacer/empty-overlay.js +0 -1
  125. package/dist/server/esbuild/plugins/openapi-docs-module-replacer/empty-use-license-key.d.ts +0 -5
  126. package/dist/server/esbuild/plugins/openapi-docs-module-replacer/empty-use-license-key.js +0 -1
  127. package/dist/server/esbuild/plugins/openapi-docs-module-replacer/index.d.ts +0 -6
  128. package/dist/server/esbuild/plugins/openapi-docs-module-replacer/index.js +0 -1
  129. package/dist/server/esbuild/plugins/openapi-docs-module-replacer/loadAndBundleSpec.mock.d.ts +0 -3
  130. package/dist/server/esbuild/plugins/openapi-docs-module-replacer/loadAndBundleSpec.mock.js +0 -1
  131. package/dist/server/plugins/asyncapi-docs/asyncapi-doc-loader.d.ts +0 -18
  132. package/dist/server/plugins/asyncapi-docs/asyncapi-doc-loader.js +0 -5
  133. package/dist/server/plugins/asyncapi-docs/get-server-props.d.ts +0 -4
  134. package/dist/server/plugins/asyncapi-docs/get-server-props.js +0 -1
  135. package/dist/server/plugins/asyncapi-docs/get-template-path.d.ts +0 -2
  136. package/dist/server/plugins/asyncapi-docs/get-template-path.js +0 -1
  137. package/dist/server/plugins/asyncapi-docs/index.d.ts +0 -3
  138. package/dist/server/plugins/asyncapi-docs/index.js +0 -1
  139. package/dist/server/plugins/asyncapi-docs/is-asyncapi-doc.d.ts +0 -3
  140. package/dist/server/plugins/asyncapi-docs/is-asyncapi-doc.js +0 -1
  141. package/dist/server/plugins/asyncapi-docs/search/get-ai-search-documents.d.ts +0 -9
  142. package/dist/server/plugins/asyncapi-docs/search/get-ai-search-documents.js +0 -56
  143. package/dist/server/plugins/asyncapi-docs/search/schema-processor.d.ts +0 -8
  144. package/dist/server/plugins/asyncapi-docs/search/schema-processor.js +0 -1
  145. package/dist/server/plugins/asyncapi-docs/search/search-facets.d.ts +0 -8
  146. package/dist/server/plugins/asyncapi-docs/search/search-facets.js +0 -1
  147. package/dist/server/plugins/asyncapi-docs/search/search-resolver.d.ts +0 -5
  148. package/dist/server/plugins/asyncapi-docs/search/search-resolver.js +0 -1
  149. package/dist/server/plugins/asyncapi-docs/store-definition-bundles.d.ts +0 -4
  150. package/dist/server/plugins/asyncapi-docs/store-definition-bundles.js +0 -1
  151. package/dist/server/plugins/graphql-docs/constants.d.ts +0 -2
  152. package/dist/server/plugins/graphql-docs/constants.js +0 -1
  153. package/dist/server/plugins/graphql-docs/get-template-path.d.ts +0 -2
  154. package/dist/server/plugins/graphql-docs/get-template-path.js +0 -1
  155. package/dist/server/plugins/graphql-docs/graphql-doc-loader.d.ts +0 -17
  156. package/dist/server/plugins/graphql-docs/graphql-doc-loader.js +0 -1
  157. package/dist/server/plugins/graphql-docs/index.d.ts +0 -4
  158. package/dist/server/plugins/graphql-docs/index.js +0 -1
  159. package/dist/server/plugins/graphql-docs/is-graphql-doc.d.ts +0 -2
  160. package/dist/server/plugins/graphql-docs/is-graphql-doc.js +0 -1
  161. package/dist/server/plugins/graphql-docs/search/ai/get-ai-search-document.d.ts +0 -17
  162. package/dist/server/plugins/graphql-docs/search/ai/get-ai-search-document.js +0 -4
  163. package/dist/server/plugins/graphql-docs/search/ai/utils.d.ts +0 -14
  164. package/dist/server/plugins/graphql-docs/search/ai/utils.js +0 -36
  165. package/dist/server/plugins/graphql-docs/search/search-facets.d.ts +0 -8
  166. package/dist/server/plugins/graphql-docs/search/search-facets.js +0 -1
  167. package/dist/server/plugins/graphql-docs/search/search-resolver.d.ts +0 -5
  168. package/dist/server/plugins/graphql-docs/search/search-resolver.js +0 -1
  169. package/dist/server/plugins/graphql-docs/spec-download.api.d.ts +0 -3
  170. package/dist/server/plugins/graphql-docs/spec-download.api.js +0 -1
  171. package/dist/server/plugins/graphql-docs/template/GraphQLDocs.d.ts +0 -5
  172. package/dist/server/plugins/graphql-docs/template/GraphQLDocs.js +0 -4
  173. package/dist/server/plugins/graphql-docs/types.d.ts +0 -40
  174. package/dist/server/plugins/graphql-docs/types.js +0 -0
  175. package/dist/server/plugins/openapi-docs/ai-search-indexer.d.ts +0 -14
  176. package/dist/server/plugins/openapi-docs/ai-search-indexer.js +0 -1
  177. package/dist/server/plugins/openapi-docs/decorators.d.ts +0 -25
  178. package/dist/server/plugins/openapi-docs/decorators.js +0 -1
  179. package/dist/server/plugins/openapi-docs/format-bundle-error.d.ts +0 -6
  180. package/dist/server/plugins/openapi-docs/format-bundle-error.js +0 -5
  181. package/dist/server/plugins/openapi-docs/get-server-props.d.ts +0 -4
  182. package/dist/server/plugins/openapi-docs/get-server-props.js +0 -1
  183. package/dist/server/plugins/openapi-docs/get-template-path.d.ts +0 -2
  184. package/dist/server/plugins/openapi-docs/get-template-path.js +0 -1
  185. package/dist/server/plugins/openapi-docs/index.d.ts +0 -3
  186. package/dist/server/plugins/openapi-docs/index.js +0 -1
  187. package/dist/server/plugins/openapi-docs/is-openapi-doc.js +0 -1
  188. package/dist/server/plugins/openapi-docs/load-definition.d.ts +0 -31
  189. package/dist/server/plugins/openapi-docs/load-definition.js +0 -3
  190. package/dist/server/plugins/openapi-docs/openapi-search-builder.d.ts +0 -24
  191. package/dist/server/plugins/openapi-docs/openapi-search-builder.js +0 -1
  192. package/dist/server/plugins/openapi-docs/search/get-ai-search-documents.d.ts +0 -18
  193. package/dist/server/plugins/openapi-docs/search/get-ai-search-documents.js +0 -94
  194. package/dist/server/plugins/openapi-docs/search/search-facets.d.ts +0 -11
  195. package/dist/server/plugins/openapi-docs/search/search-facets.js +0 -1
  196. package/dist/server/plugins/openapi-docs/search/search-resolver.d.ts +0 -5
  197. package/dist/server/plugins/openapi-docs/search/search-resolver.js +0 -1
  198. package/dist/server/plugins/openapi-docs/search-indexer.d.ts +0 -17
  199. package/dist/server/plugins/openapi-docs/search-indexer.js +0 -1
  200. package/dist/server/plugins/openapi-docs/spec-download.api.d.ts +0 -4
  201. package/dist/server/plugins/openapi-docs/spec-download.api.js +0 -1
  202. package/dist/server/plugins/openapi-docs/store-definition-bundles.d.ts +0 -4
  203. package/dist/server/plugins/openapi-docs/store-definition-bundles.js +0 -1
  204. package/dist/server/plugins/openapi-docs/types.d.ts +0 -17
  205. package/dist/server/plugins/openapi-docs/types.js +0 -0
  206. package/dist/server/plugins/openapi-docs/utils.d.ts +0 -25
  207. package/dist/server/plugins/openapi-docs/utils.js +0 -1
  208. /package/dist/client/templates/{openapi-docs → api-docs}/mock-server-config.d.ts +0 -0
  209. /package/dist/client/templates/{openapi-docs → api-docs}/mock-server-config.js +0 -0
  210. /package/dist/{server/plugins → markdoc}/helpers/parse-partials.d.ts +0 -0
  211. /package/dist/{server/plugins → markdoc}/helpers/parse-partials.js +0 -0
  212. /package/dist/server/plugins/{openapi-docs → api-docs/utils}/ast-utils.d.ts +0 -0
  213. /package/dist/server/plugins/{openapi-docs → api-docs/utils}/ast-utils.js +0 -0
@@ -1,56 +0,0 @@
1
- import{basename as S}from"node:path";import{REDOCLY_TEAMS_RBAC as y}from"@redocly/config";import{isResourcePubliclyAccessible as C}from"../../../utils/rbac.js";import{getLlmsTxtMdPathBySlug as A}from"../../../utils/llmstxt/get-llms-txt-md-path-by-slug.js";import{getLocaleFromRelativePath as L}from"../../../fs/utils/get-locale-from-relative-path.js";import{extractDocumentSearchFacets as j}from"./search-facets.js";import{removeMarkdownLinks as m}from"../../openapi-docs/utils.js";import{processSchema as d}from"./schema-processor.js";import{llmsTxtLink as k}from"../../search/llmstxt/index.js";const Z=({actions:n,document:e,metadata:i})=>async(t,s,r)=>{const a=t.getSidebar?.(t)||[],c=await r.getConfig(),{allSearchDocuments:o,publiclyAccessibleSearchDocuments:l}=b(t,a,e,n,i,c);if(o.length)return{async getLLMsTxts(){return l.map(f=>({slug:f.url,fsPath:t.fsPath,title:f.title,content:f.content,includeInLLMsTxt:f.includeInLLMsTxt}))},async getSearchDocuments(){return o}}};function b(n,e,i,t,s,r,a){const c=[],o=[];for(const l of e){if(l.type==="group"){const h=l.apiItemData?.type==="channel"?l:a,{allSearchDocuments:D,publiclyAccessibleSearchDocuments:P}=b(n,l.items||[],i,t,s,r,h);c.push(...D),o.push(...P)}const f=I(n,l,i,t,s,r);f&&(c.push(f),B(l,r,a)&&o.push(f))}return{allSearchDocuments:c,publiclyAccessibleSearchDocuments:o}}function I(n,e,i,t,s,r){const a=F(e,i);if(!a)return null;const c=e.link||"",o=e.httpVerb||"",l=L(n.fsPath),f=j(t,s),h=M(n,e,i,a,o,c,r);return{url:c||n.slug,fsPath:n.fsPath,content:h.trim(),title:m(a.title||"")||S(n.fsPath),locale:l,product:n.product?.name,facets:f,includeInLLMsTxt:!e.apiItemData}}function M(n,e,i,t,s,r,a){let c="";const o=m(t.title||""),l=m(t.description||"")+m(t.summary||"");return o&&(c+=`# ${o}
2
-
3
- `),l&&(c+=`${l}
4
-
5
- `),s&&(c+=`Method: ${s.toUpperCase()}
6
- `),c+=O(i),c+=v(i),e.type==="link"&&!e.apiItemData&&(c+=T(n,a)),e.apiItemData?.type==="channel"&&(c+=x(e,i,r,n)),e.apiItemData?.type==="operation"&&(c+=N(e,i)),c}function O(n){let e="";return n.info?.version&&(e+=`Version: ${n.info.version}
7
- `),n.info?.license?.name&&(e+=`License: ${n.info.license.name}
8
- `),e}function v(n){if(!n.servers||Object.keys(n.servers).length===0)return"";let e=`
9
- ## Servers
10
-
11
- `;for(const[i,t]of Object.entries(n.servers))e+=`### ${i}
12
- `,t.description&&(e+=`${t.description}
13
- `),e+=`Host: ${t.host}
14
- `,e+=`Protocol: ${t.protocol}
15
- `,t.protocolVersion&&(e+=`Protocol Version: ${t.protocolVersion}
16
- `),t.pathname&&(e+=`Path: ${t.pathname}
17
- `),e+=`
18
- `;return e}function T(n,e){const i=n.getSidebar?.(n)||[],t=$(i,e);if(Object.keys(t).length===0)return"";let s="";for(const[,r]of Object.entries(t))if(r.length>0)for(const a of r){const c=a.label||"Untitled",o=a.link||a.routeSlug||"";s+=`#### ${c}
19
-
20
- `,o&&(s+=` - ${k({title:c,description:void 0,slug:A(o)})}
21
-
22
- `)}return s}function x(n,e,i,t){const s=n.apiItemData?.id;if(!s)return"";const r=e.channels?.[s];if(!r)return"";let a="";if(r.parameters&&Object.keys(r.parameters).length>0){a+=`## Parameters
23
-
24
- `;for(const[c,o]of Object.entries(r.parameters))a+=`### ${c}
25
- `,typeof o=="object"&&o!==null&&"description"in o&&o.description&&(a+=`${o.description}
26
- `),typeof o=="object"&&o!==null&&"enum"in o&&Array.isArray(o.enum)&&o.enum.length>0&&(a+=`Enum: ${o.enum.join(", ")}
27
- `),typeof o=="object"&&o!==null&&"default"in o&&o.default&&(a+=`Default: ${o.default}
28
- `),a+=`
29
- `}if(r.messages&&Object.keys(r.messages).length>0){a+=`## Messages
30
-
31
- `;for(const[c,o]of Object.entries(r.messages))a+=R(o,c,i,t)}return a}function R(n,e,i,t){let r=`### ${n.title||n.name||e}
32
- `;if(n.description&&(r+=`${n.description}
33
- `),n.summary&&(r+=`${n.summary}
34
- `),n.payload){const a=d(n.payload,"message payload",i.replace(t.slug+"/","").replace(/^\//,""),e);a.length>0&&(r+=`
35
- #### Payload Schema
36
-
37
- `,r+=g(a))}if(n.headers){const a=d(n.headers,"message headers",i.replace(t.slug+"/","").replace(/^\//,""),e);a.length>0&&(r+=`
38
- #### Headers Schema
39
-
40
- `,r+=g(a))}return r}function g(n){let e="";for(const i of n)if(typeof i=="object"&&i!==null&&"name"in i&&"type"in i){const t=i;e+=`- **${t.name}** (${t.type}${t.required?", required":""})
41
- `,t.description&&(e+=` ${t.description}
42
- `),t.enum&&Array.isArray(t.enum)&&t.enum.length>0&&(e+=` Enum: ${t.enum.join(", ")}
43
- `),e+=`
44
- `}return e}function N(n,e){const i=n.apiItemData?.id;if(!i)return"";const t=e.operations?.[i];if(!t)return"";let s=`## Operation Details
45
-
46
- `;if(t.action&&(s+=`Action: ${t.action}
47
- `),t.description&&(s+=`${t.description}
48
- `),t.summary&&(s+=`${t.summary}
49
- `),t.messages&&t.messages.length>0){s+=`
50
- ### Messages
51
-
52
- `;for(const r of t.messages){const a=r.title||r.name||"Message";s+=`#### ${a}
53
- `,r.description&&(s+=`${r.description}
54
- `),r.summary&&(s+=`${r.summary}
55
- `),s+=`
56
- `}}return s}function $(n,e){const i={};for(const t of n)t.type==="group"?t.apiItemData?.type==="channel"?q(t,i,e):V(t,i,e):t.apiItemData?.type==="channel"&&E(t,i,e);return i}function q(n,e,i){const t=n.label||"Channel";if(p(u(n),i)&&(e[t]||(e[t]=[]),e[t].push(n),n.items))for(const s of n.items)s.apiItemData?.type==="operation"&&p(u(s),i)&&e[t].push(s)}function V(n,e,i){if(n.items){const t=$(n.items,i);for(const[s,r]of Object.entries(t))e[s]||(e[s]=[]),e[s].push(...r)}}function E(n,e,i){const t=n.label||"Channel";if(p(u(n),i)&&(e[t]||(e[t]=[]),e[t].push(n),n.items))for(const s of n.items)s.apiItemData?.type==="operation"&&p(u(s),i)&&e[t].push(s)}function F(n,e){const{apiItemData:i,type:t}=n;return i?.type?w(i,e):t==="link"?_(e):null}function w(n,e){switch(n.type){case"channel":return e.channels?.[n.id]||null;case"operation":return e.operations?.[n.id]||null;default:return null}}function _(n){return{description:n.info?.description||"",title:n.info?.title||"",summary:""}}function B(n,e,i){const t=p(u(n),e);if(n.apiItemData?.type==="operation"&&i){const s=p(u(i),e);return t&&s}return t}function u(n){return{slug:n.link||"",[y]:n[y]}}function p(n,e){return e.access?.requiresLogin?!0:C(n,e)}export{Z as getAiDocumentsStore};
@@ -1,8 +0,0 @@
1
- import type { OperationParameter } from '@redocly/theme/core/types';
2
- export type SchemaProcessorOptions = {
3
- basePath?: string;
4
- mediaType?: string;
5
- messageKey?: string;
6
- };
7
- export declare function processSchema(schema: any | undefined, place: string, basePath: string, messageKey?: string): OperationParameter[];
8
- //# sourceMappingURL=schema-processor.d.ts.map
@@ -1 +0,0 @@
1
- import{removeMarkdownLinks as j}from"../../openapi-docs/utils.js";function w(t,n,o,i){if(!t)return[];const e={};return l(e,t,n,o,i),Object.values(e)}function l(t,n,o,i,e,f=[]){if(!(!n||n.type==="null")){if(n.type==="object"&&n.properties){for(const[r,u]of Object.entries(n.properties))if(typeof u=="object"&&u!==null){const d=f.concat([r]),p=n.required?.includes(r)||!1,y=c(r,u,o,d,p,i,e),O=A(y);if(t[O]!==void 0)continue;t[O]=y,l(t,u,o,i,e,d)}}if(n.type==="array"&&n.items&&typeof n.items=="object"&&n.items!==null&&l(t,n.items,o,i,e,f),n.oneOf&&Array.isArray(n.oneOf))for(const r of n.oneOf)typeof r=="object"&&r!==null&&l(t,r,o,i,e,f);if(n.anyOf&&Array.isArray(n.anyOf))for(const r of n.anyOf)typeof r=="object"&&r!==null&&l(t,r,o,i,e,f);if(n.allOf&&Array.isArray(n.allOf))for(const r of n.allOf)typeof r=="object"&&r!==null&&l(t,r,o,i,e,f)}}function c(t,n,o,i,e,f,r){const u=S(n),d=j(n.description||""),p=n.example,y=n.enum;return{name:t,description:d,place:o,mediaType:void 0,path:i.slice(0,-1),type:u||"unknown",required:e,example:p?JSON.stringify(p):void 0,enum:y?.length?y:void 0,deepLink:k(i,o,f,r)}}function S(t){return t.type?Array.isArray(t.type)?t.type.filter(n=>n!=="null").join(" | "):t.type:t.properties?"object":t.items?"array":t.enum?"enum":t.format?t.format:"unknown"}function A(t){return`${t.name}${t.description}${t.place}`}function k(t,n,o,i){let e="",f="";n==="message headers"?f="headers":n==="message payload"&&(f="payload"),t.length>0&&(e=t.join("/"));let r=`#${o}/messages`;return i&&(r+=`&m=${i.toLowerCase()}`),f&&(r+=`&t=${f}`),e&&(r+=`&path=${e.toLowerCase()}`),r}export{w as processSchema};
@@ -1,8 +0,0 @@
1
- import type { ProcessContentActions } from '../../../types';
2
- export declare function setDocumentSearchFacets(actions: ProcessContentActions, documentSearchFacets: {
3
- [key: string]: string | Set<string>;
4
- }): void;
5
- export declare function extractDocumentSearchFacets(actions: ProcessContentActions, metadata?: Record<string, unknown>): {
6
- [key: string]: string;
7
- };
8
- //# sourceMappingURL=search-facets.d.ts.map
@@ -1 +0,0 @@
1
- import{SEARCH_GROUP_FACET_FIELD as f}from"../../../../constants/common.js";import{SEARCH_GROUP_NAME_API as u}from"../../../constants/plugins/search.js";function h(r,a){const e=r.getSearchFacets();for(const[s,t]of Object.entries(a)){const c=e.get(s);if(c){const o=new Set(c.values??[]);t instanceof Set?[...t].forEach(n=>c.values=Array.from(o.add(n))):c.values=Array.from(o.add(t))}}r.setSearchFacets(e)}function F(r,a){const e={[f]:u};if(!a)return e;const s=r.getSearchFacets();for(const[t,c]of Object.entries(a))s.has(t)&&(e[t]=String(c));return e}export{F as extractDocumentSearchFacets,h as setDocumentSearchFacets};
@@ -1,5 +0,0 @@
1
- import type { PageStaticData } from '@redocly/config';
2
- import type { AsyncApiDefinition } from '@redocly/asyncapi-docs';
3
- import type { PageRouteDetails, ProcessContentActions, SearchDocument } from '../../../types';
4
- export declare function searchResolver(actions: ProcessContentActions, document: AsyncApiDefinition): (route: PageRouteDetails, staticData: PageStaticData) => Promise<SearchDocument[]>;
5
- //# sourceMappingURL=search-resolver.d.ts.map
@@ -1 +0,0 @@
1
- import{REDOCLY_ROUTE_RBAC as D,REDOCLY_TEAMS_RBAC as d}from"@redocly/config";import{extractDocumentSearchFacets as O,setDocumentSearchFacets as T}from"./search-facets.js";import{removeMarkdownLinks as m}from"../../openapi-docs/utils.js";import{processSchema as S}from"./schema-processor.js";function q(e,t){return async(n,r)=>{const o=n.getSidebar?.(n)||[];return k({actions:e,document:t,staticData:r,route:n},o)}}function k(e,t){const n=[];for(const r of t){r.type==="group"&&n.push(...k(e,r.items||[]));const o=w(e,r);o&&n.push(o)}return n}function w(e,t){const{actions:n,document:r,staticData:o,route:s}=e,f=A(t,r);if(!f)return null;const g=t.link||"",L=t.httpVerb||"",P={slug:s.slug,fsPath:s.fsPath},R=s.metadata||{},y=O(n,R);T(n,y);const i={id:g,url:g,text:m(f.description||"")+m(f.summary||""),title:m(f.title||""),httpMethod:L,facets:y,[d]:t[d]||o[d],[D]:s[D]||P};if(t.apiItemData?.type==="channel"){const x=t.apiItemData.id,u=r.channels?.[x];if(u){const p=[];if(u.parameters)for(const[l,c]of Object.entries(u.parameters)){const a={name:l,description:m(c.description||""),place:"channel parameters",mediaType:void 0,type:"string",required:!1,example:void 0,enum:c.enum,deepLink:`#${i.url.replace(s.slug+"/","").replace(/^\//,"")}/parameters&path=${l}`};p.push(a)}if(u.messages){const l=u.messages;if(l)for(const[c,a]of Object.entries(l)){const C={name:a.title||a.name||c,description:m(a.description||"")+m(a.summary||""),place:"message",mediaType:void 0,type:"unknown",deepLink:`#${i.url.replace(s.slug+"/","").replace(/^\//,"")}/messages&m=${c.toLocaleLowerCase()}`,required:!1,example:void 0,enum:void 0};if(p.push(C),a.payload){const h=S(a.payload,"message payload",i.url.replace(s.slug+"/","").replace(/^\//,""),c);p.push(...h)}if(a.headers){const h=S(a.headers,"message headers",i.url.replace(s.slug+"/","").replace(/^\//,""),c);p.push(...h)}}}p.length>0&&(i.parameters=p)}}return i}function A(e,t){const{apiItemData:n}=e;return n?.type?E(n,t):e.type==="group"&&e.label?F(e.label,t):I(t)}function E(e,t){switch(e.type){case"channel":return t.channels?.[e.id]||null;case"operation":return t.operations?.[e.id]||null}}function F(e,t){const n=t.components?.tags?.[e];return{description:n?.description||"",title:n?.name||e,summary:""}}function I(e){return{description:e.info?.description||"",title:e.info?.title||"",summary:""}}export{q as searchResolver};
@@ -1,4 +0,0 @@
1
- import type { BundledDefinition } from './asyncapi-doc-loader.js';
2
- export declare function storeDefinitionBundles(definitions: BundledDefinition[], outDir: string, hash: string): void;
3
- export declare function replaceFileExtension(filePath: string, fileExt: string): string;
4
- //# sourceMappingURL=store-definition-bundles.d.ts.map
@@ -1 +0,0 @@
1
- import{writeFileSync as l}from"fs";import o from"path";import{dump as d}from"js-yaml";import{PUBLIC_API_DEFINITIONS_FOLDER as u,PUBLIC_STATIC_FOLDER as m}from"../../constants/common.js";import{logger as x}from"../../tools/notifiers/logger.js";import{ensureDir as g}from"../../utils/fs.js";const c=new Map;function _(e,t,i){const r=u.slice(1);try{for(const s of e){const{documentWithReferences:f,relativePath:n}=s;if(c.get(n)!==i){if(n.startsWith(m+"/")){const a=o.posix.extname(n);p({outDir:t,definitionFolder:".",relativePath:n.replace(m+"/",""),definitionString:a===".json"?JSON.stringify(f,null,2):d(f)}),c.set(n,i);continue}p({outDir:t,definitionFolder:r,relativePath:F(n,".json"),definitionString:JSON.stringify(f,null,2)}),c.set(n,i)}}}catch(s){x.error("failed to store definition bundles",s)}}function F(e,t){const i=o.posix.dirname(e),r=o.posix.basename(e,o.posix.extname(e))+t;return o.posix.join(i,r)}function p({outDir:e,definitionString:t,relativePath:i,definitionFolder:r}){l(g(o.resolve(e,`${r}/${i}`)),t,"utf8")}export{F as replaceFileExtension,_ as storeDefinitionBundles};
@@ -1,2 +0,0 @@
1
- export declare const TYPE_GROUPS: readonly ['queries', 'mutations', 'subscriptions', 'directives', 'unions', 'scalars', 'interfaces', 'enums', 'objects', 'inputs'];
2
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- const s=["queries","mutations","subscriptions","directives","unions","scalars","interfaces","enums","objects","inputs"];export{s as TYPE_GROUPS};
@@ -1,2 +0,0 @@
1
- export declare function getTemplatePath(relativePath: string): string;
2
- //# sourceMappingURL=get-template-path.d.ts.map
@@ -1 +0,0 @@
1
- import{fromCurrentDir as t}from"../../utils/paths.js";function m(r){return t(import.meta.url,r)}export{m as getTemplatePath};
@@ -1,17 +0,0 @@
1
- import { MenuStore, AppStore } from '@redocly/graphql-docs';
2
- import type { LoaderFn } from '../../types';
3
- import type { GraphQLConfig } from '@redocly/config';
4
- export type GraphqlLoadResult = {
5
- content: string;
6
- menu: MenuStore;
7
- store: AppStore;
8
- metadata?: Record<string, unknown>;
9
- settings: GraphQLConfig;
10
- } | undefined;
11
- export declare const graphqlDocLoader: LoaderFn;
12
- export type BundledDefinition = {
13
- relativePath: string;
14
- settings: GraphQLConfig;
15
- };
16
- export declare const graphqlDocsLoader: LoaderFn<BundledDefinition[]>;
17
- //# sourceMappingURL=graphql-doc-loader.d.ts.map
@@ -1 +0,0 @@
1
- import{buildSchema as d}from"graphql";import{MenuStore as f,AppStore as g}from"@redocly/graphql-docs";import h from"node:path";import{combineUrls as u}from"@redocly/theme/core/utils";import{GRAPHQL_SPEC_SLUG as w}from"../../../constants/common.js";import{deepMerge as q}from"../../../utils/object/deep-merge.js";import{reporter as S}from"../../tools/notifiers/reporter.js";import{getApiConfigByPath as b}from"../get-api-config.js";import{replaceFileExtension as x}from"../openapi-docs/store-definition-bundles.js";const E=async(r,{getConfig:i,fs:c})=>{const e=await i(),o=e?.graphql??{},t=await c.read(r),{graphql:n={},metadata:m}=b(e.apis,r),s=q(o||{},n,{feedback:o.feedback||e.feedback,downloadUrls:o.downloadUrls||[{url:u(w,`${x(r,h.posix.extname(r))}?download`)}]});let p,l;try{const a=d(t);l=new g(a),p=new f(a,s)}catch(a){await S.panicOnBuild(a);return}return{menu:p,store:l,settings:s,metadata:m,content:t}},F=async(r,{fs:i,cache:c,isPathIgnored:e})=>{const o=[];for(const{relativePath:t}of i.scan(/(\.gql|\.graphql)$/)){if(await e(t))continue;const n=await c.load(t,"graphql-doc").catch(()=>null);n?.data&&o.push({relativePath:t,settings:n.data.settings})}return o};export{E as graphqlDocLoader,F as graphqlDocsLoader};
@@ -1,4 +0,0 @@
1
- import type { LifecyclePluginInstance } from '../../types';
2
- export declare function graphqlDocsPlugin(): Promise<LifecyclePluginInstance>;
3
- export declare function storeGqlSchema(content: string, outDir: string, relativePath: string): void;
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- import{writeFileSync as v}from"node:fs";import C from"node:path";import{REDOCLY_TEAMS_RBAC as $}from"@redocly/config";import{combineUrls as q}from"@redocly/theme/core/utils";import{PUBLIC_API_DEFINITIONS_FOLDER as w}from"../../constants/common.js";import{GRAPHQL_TEMPLATE_ID as O,GRAPHQL_SPEC_SLUG as Q,PUBLIC_RBAC_SCOPE_ITEM as H}from"../../../constants/common.js";import{removeTrailingSlash as I}from"../../../utils/url/remove-trailing-slash.js";import{getTemplatePath as N}from"./get-template-path.js";import{searchResolver as F}from"./search/search-resolver.js";import{graphqlDocLoader as M,graphqlDocsLoader as U}from"./graphql-doc-loader.js";import{getAiDocumentsStore as A}from"./search/ai/get-ai-search-document.js";import{fromCurrentDir as k}from"../../utils/paths.js";import{ensureDir as x}from"../../utils/fs.js";import{telemetryTraceStep as B}from"../../../cli/telemetry/helpers/trace-step.js";const j="graphql-docs-",R="graphql-spec-download";async function nt(){return{id:"graphql",requiredEntitlements:["graphql"],loaders:{"graphql-doc":M,"load-graphql-docs":U},processContent:async(t,{fs:l,cache:n,isPathIgnored:i,withPathPrefix:p})=>{await B("com.redocly.build.plugin.graphqlDocs",async()=>{t.createRequestHandler(R,k(import.meta.url,"./spec-download.api.js")),t.addApiRoute({slug:Q+"/*",requestHandlerId:R,httpMethod:"all",[$]:H,getStaticData:async()=>({props:{}})});const m=t.createTemplate(O,N("./template/GraphQLDocs.js"));for(const{relativePath:o}of l.scan(/(\.gql|\.graphql)$/)){if(await i(o))continue;const h=await n.load(o,"graphql-doc");if(!h.data)continue;K(h.data.content,t.outdir,o);const{menu:_,content:y,settings:u,metadata:G,store:c}=h.data,L=`${j}${o}`;await t.createSharedData(L,y);const d=[{key:"graphQlSettings",id:L}],b=_.getGroups(),T=_.getSidebarItems(),g={type:"graphql",title:b[0].name,...G},s=[{slugSuffix:"",fsPath:o,templateId:m,getStaticData:S(void 0,u,p),sharedData:d,getAiDocumentsStore:A({label:u.info?.title??"GraphQL Overview",groupName:"overview",metadata:g,actions:t,store:c,includeInLLMsTxt:!0})}];for(const r of b){const f=`${r.id}`;s.push({slugSuffix:f,fsPath:o,templateId:m,getStaticData:S(r,u,p),sharedData:d});for(const e of r.typeGroups){const a=`${e.id}`;s.push({slugSuffix:a,fsPath:o,templateId:m,getStaticData:S(e,u,p),sharedData:d,getAiDocumentsStore:A({label:e.name,groupName:e.name,metadata:g,actions:t,store:c,isTypeGroup:!0,items:new Set(e.items)})});for(const E of e.items){const P=`${e.id}/${E}`;s.push({slugSuffix:P,fsPath:o,templateId:m,getStaticData:S(e,u,p),sharedData:d,getAiDocumentsStore:A({label:E,groupName:e.name,metadata:g,actions:t,store:c})})}}}if(!s.length)return;const D=s[s.length-1];D.metadata=g,D.getSidebar=r=>{function f(e){return e.map(a=>({...a,slug:a.slug&&I(q(r.baseSlug,a.slug)),routeSlug:a.routeSlug&&I(q(r.baseSlug,a.routeSlug)),link:a.link&&I(q(r.baseSlug,a.link)),items:a.items&&f(a.items)}))}return f(T)},D.getSearchDocuments=F(t,c);for(const r of s)t.addRoute(r)}})}}}function S(t,l,n){return async function(i){return{props:{seo:{title:t?.name??l.info?.title??"GraphQL Overview"},settings:{...l,location:{section:t?.id},sidebar:{hide:!0},baseUrlPath:n(i.baseSlug)},disableAutoScroll:!0}}}}function K(t,l,n){const i=w.slice(1);v(x(C.resolve(l,`${i}/${n}`)),t,"utf8")}export{nt as graphqlDocsPlugin,K as storeGqlSchema};
@@ -1,2 +0,0 @@
1
- export declare const isGraphqlDoc: (relativePath: string) => boolean;
2
- //# sourceMappingURL=is-graphql-doc.d.ts.map
@@ -1 +0,0 @@
1
- const t=r=>!!r.match(/(\.gql|\.graphql)$/);export{t as isGraphqlDoc};
@@ -1,17 +0,0 @@
1
- import type { AppStore } from '@redocly/graphql-docs';
2
- import type { PageRouteDetails, ProcessContentActions } from '../../../../types';
3
- import type { AiDocumentsStore } from '../../../../plugins/search/types.js';
4
- type GetAiDocumentsStoreParams = {
5
- label: string;
6
- groupName: string;
7
- metadata: Record<string, unknown>;
8
- actions: ProcessContentActions;
9
- store: AppStore;
10
- includeInLLMsTxt?: boolean;
11
- llmstxtTitle?: string;
12
- isTypeGroup?: boolean;
13
- items?: Set<string>;
14
- };
15
- export declare const getAiDocumentsStore: ({ label, groupName, metadata, actions, store, includeInLLMsTxt, llmstxtTitle, isTypeGroup, items, }: GetAiDocumentsStoreParams) => (route: PageRouteDetails) => Promise<AiDocumentsStore | undefined>;
16
- export {};
17
- //# sourceMappingURL=get-ai-search-document.d.ts.map
@@ -1,4 +0,0 @@
1
- import{TYPE_GROUPS as S}from"../../constants.js";import{getLocaleFromRelativePath as D}from"../../../../fs/utils/get-locale-from-relative-path.js";import{convertDocumentToMarkdown as y,getSearchDocument as P}from"./utils.js";import{extractDocumentSearchFacets as L}from"../search-facets.js";const F=({label:o,groupName:r,metadata:a,actions:i,store:m,includeInLLMsTxt:e,llmstxtTitle:c,isTypeGroup:f,items:u})=>async t=>{const s=D(t.fsPath),n=L(i,a),h=t.slug===t.baseSlug,g=e!==void 0?e:h,l=A(o,r,t,m,s,n,f,u,h);if(l)return{async getLLMsTxts(){return[{slug:l.url,fsPath:t.fsPath,title:c||l.title,content:l.content,includeInLLMsTxt:g}]},async getSearchDocuments(){return[l]}}};function d(o,r,a,i,m){const e=[];for(const c of S){const f=c.charAt(0).toUpperCase()+c.slice(1),u=P({label:f,groupName:c,store:a,isTypeGroup:!0}),t=(Array.isArray(u)?u:[u]).filter(n=>!!(n&&n.name));if(t.length===0)continue;e.push(`## ${f}`);const s=t.map(n=>`- ${n.name}: ${n.description}`);e.push(...s)}return{url:r.slug,fsPath:r.fsPath,content:e.join(`
2
- `),title:o,locale:i,facets:m}}function A(o,r,a,i,m,e,c,f,u){if(u)return d(o,a,i,m,e);const t=c?P({label:o,groupName:r,store:i,isTypeGroup:c,items:f??new Set}):P({label:o,groupName:r,store:i}),s=(Array.isArray(t)?t:[t]).filter(p=>!!p);if(s.length===0)return;const n=s.length===1,h=n?1:2,g=s.map(p=>y(p,h)).join(`---
3
-
4
- `),l=n?s[0].name:o;return{url:a.slug,fsPath:a.fsPath,content:g,title:l??"",locale:m,facets:e}}export{F as getAiDocumentsStore};
@@ -1,14 +0,0 @@
1
- import type { AppStore } from '@redocly/graphql-docs';
2
- import type { GraphQLSearchDocument } from '../../types.js';
3
- type GetSearchDocumentParams = {
4
- label: string;
5
- groupName: string;
6
- store: AppStore;
7
- isTypeGroup?: boolean;
8
- items?: Set<string>;
9
- };
10
- type GetSearchDocumentReturnType = GraphQLSearchDocument | (GraphQLSearchDocument | undefined)[] | undefined;
11
- export declare function getSearchDocument({ label, groupName, store, isTypeGroup, items, }: GetSearchDocumentParams): GetSearchDocumentReturnType;
12
- export declare function convertDocumentToMarkdown(document: GraphQLSearchDocument, baseLevel?: number): string;
13
- export {};
14
- //# sourceMappingURL=utils.d.ts.map
@@ -1,36 +0,0 @@
1
- import{GraphQLEnumType as _,GraphQLInputObjectType as Q,GraphQLInterfaceType as S,GraphQLList as j,GraphQLNonNull as R,GraphQLObjectType as D,GraphQLScalarType as M,GraphQLUnionType as P,Kind as a}from"graphql";const V={queries:(n,e)=>n.getQueryTypes(e),mutations:(n,e)=>n.getMutationTypes(e),subscriptions:(n,e)=>n.getSubscriptionTypes(e),directives:(n,e)=>n.getDirectiveTypes(e),interfaces:(n,e)=>n.getTypes(a.INTERFACE_TYPE_DEFINITION,e),objects:(n,e)=>n.getTypes(a.OBJECT_TYPE_DEFINITION,e),unions:(n,e)=>n.getTypes(a.UNION_TYPE_DEFINITION,e),scalars:(n,e)=>n.getTypes(a.SCALAR_TYPE_DEFINITION,e),enums:(n,e)=>n.getTypes(a.ENUM_TYPE_DEFINITION,e),inputs:(n,e)=>n.getTypes(a.INPUT_OBJECT_TYPE_DEFINITION,e)};function w(n,e,i){const t=V[n];return t?t(e,i).map(s=>E(s?.name??"",n,e)):[]}function E(n,e,i){switch(e){case"queries":return g(i.getQueryField(n),e);case"mutations":return g(i.getMutationField(n),e);case"subscriptions":return g(i.getSubscriptionField(n),e);case"directives":const t=i.getDirective(n);return{name:t?.name,group:e,description:t?.description||void 0,locations:t?.locations.map(f=>f.toString()),isRepeatable:!!t?.isRepeatable,args:F(t?.args)};case"interfaces":return m(i.getType(n),e);case"objects":return m(i.getType(n),e);case"unions":const r=i.getType(n),s=r?Y(r):[];return{name:r?.name,group:e,description:r?.description||void 0,types:s};case"scalars":const o=i.getType(n);return{name:o?.name,group:e,description:o?.description||void 0};case"enums":const u=i.getType(n),d=u?A(u):[];return{name:u?.name,group:e,description:u?.description||void 0,values:d};case"inputs":return m(i.getType(n),e);default:return}}function g(n,e){return{name:n?.name,group:e,description:n?.description??void 0,response:n?$(n.type):void 0,args:F(n?.args)}}function m(n,e){return{name:n?.name,group:e,description:n?.description||void 0,fields:n?y(n.getFields(),1,[]):void 0}}function Y(n){return n.getTypes().map(({name:e,description:i})=>({name:e,description:i||void 0}))}function A(n){return n.getValues().map(({name:e,description:i,value:t})=>({name:e,description:i||void 0,value:t}))}function U({label:n,groupName:e,store:i,isTypeGroup:t,items:r}){const s=e.toLowerCase();return t?w(s,i,r):E(n,s,i)}function $(n,e=1,i=[]){const{type:t,list:r,notNull:s}=l(n),o=t.toString();if(i.includes(o)||i.length>=e)return o;if(t instanceof D)return{name:t.name,description:t.description||void 0,list:r,notNull:s,fields:y(t.getFields(),e,[...i,o])};if(t instanceof S)return{name:t.name,description:t.description||void 0,list:r,notNull:s,fields:y(t.getFields(),e,[...i,o])};if(t instanceof P)return{name:t.name,description:t.description||void 0,list:r,notNull:s,types:t.getTypes().map(u=>u.name)};if(t instanceof _){const u=t.getValues().map(d=>({name:d.name,description:d.description||void 0,value:d.value}));return{name:t.name,description:t.description||void 0,list:r,notNull:s,values:u}}else{if(t instanceof M)return o;if(t instanceof Q)return{name:t.name,description:t.description||void 0,list:r,notNull:s,fields:y(t.getFields(),e,[...i,o])}}}function F(n,e=3){if(!n)return;const i={};return n.forEach(t=>{i[t.name]={type:$(t.type,e),description:t.description??void 0}}),i}function y(n,e,i){if(!n)return;const t={};return Object.entries(n).forEach(([r,s])=>{t[r]={type:$(s.type,e,i),description:s.description,defaultValue:s.defaultValue}}),t}function l(n){return n instanceof R?{type:l(n.ofType).type,notNull:!0}:n instanceof j?{type:l(n.ofType).type,list:!0}:{type:n}}function p(n,e=2){return"#".repeat(Math.min(6,e+n-1))}function B(n,e=1){const{name:i,group:t,description:r,args:s,response:o,locations:u,isRepeatable:d,types:f,values:I,fields:N}=n;let c=`${p(1,e)} ${i}
2
-
3
- **Type:** GraphQL ${t}
4
-
5
- `;return r&&(c+=`**Description:**
6
- ${r}
7
-
8
- `),f&&(c+=`${p(2,e)} Types
9
- ${h(f)}
10
-
11
- `),I&&(c+=`${p(2,e)} Values
12
- ${h(I)}
13
-
14
- `),N&&(c+=`${p(2,e)} Fields
15
- ${T(N)}
16
-
17
- `),s&&Object.keys(s).length>0&&(c+=`${p(2,e)} Arguments
18
- ${T(s)}
19
-
20
- `),o&&(typeof o=="string"?c+=`${p(2,e)} Response
21
- **Type:** ${o}
22
- `:(c+=`${p(2,e)} Response
23
- **Type:** ${o.name}
24
- **Description:**
25
- ${o.description}
26
-
27
- `,c+=o.fields?`${p(3,e)} Fields
28
- ${T(o.fields)}
29
- `:"")),c+=d?`${p(2,e)} Repeatable
30
- `:"",c+=u?`${p(2,e)} Locations
31
- ${u.map(O=>`- ${O}`).join(`
32
- `)}
33
- `:"",c}function h(n){return n.map(e=>`- ${e.name}${e.description?`: ${e.description}`:""}`).join(`
34
- `)}function T(n,e=0){const i=" ".repeat(e);return n?Object.entries(n).map(([t,r])=>typeof r.type=="string"?`${i}- ${t} (${r.type})${r.description?`: ${r.description}`:""}`:`${i}- ${t} (${r.type?.name}${r.type?.notNull?", Not Null":""}): ${r.description}
35
- ${T(r.type?.fields??{},e+1)}`).join(`
36
- `):""}export{B as convertDocumentToMarkdown,U as getSearchDocument};
@@ -1,8 +0,0 @@
1
- import type { ProcessContentActions } from '../../../types';
2
- export declare function setDocumentSearchFacets(actions: ProcessContentActions, documentSearchFacets: {
3
- [key: string]: string | Set<string>;
4
- }): void;
5
- export declare function extractDocumentSearchFacets(actions: ProcessContentActions, metadata?: Record<string, unknown>): {
6
- [key: string]: string;
7
- };
8
- //# sourceMappingURL=search-facets.d.ts.map
@@ -1 +0,0 @@
1
- import{SEARCH_GROUP_FACET_FIELD as f}from"../../../../constants/common.js";import{SEARCH_GROUP_NAME_API as u}from"../../../constants/plugins/search.js";function h(r,a){const e=r.getSearchFacets();for(const[s,t]of Object.entries(a)){const c=e.get(s);if(c){const o=new Set(c.values??[]);t instanceof Set?[...t].forEach(n=>c.values=Array.from(o.add(n))):c.values=Array.from(o.add(t))}}r.setSearchFacets(e)}function F(r,a){const e={[f]:u};if(!a)return e;const s=r.getSearchFacets();for(const[t,c]of Object.entries(a))s.has(t)&&(e[t]=String(c));return e}export{F as extractDocumentSearchFacets,h as setDocumentSearchFacets};
@@ -1,5 +0,0 @@
1
- import type { AppStore } from '@redocly/graphql-docs';
2
- import type { PageStaticData } from '@redocly/config';
3
- import type { PageRouteDetails, ProcessContentActions, SearchDocument } from '../../../types';
4
- export declare function searchResolver(actions: ProcessContentActions, store: AppStore): (route: PageRouteDetails, staticData: PageStaticData) => Promise<SearchDocument[]>;
5
- //# sourceMappingURL=search-resolver.d.ts.map
@@ -1 +0,0 @@
1
- import{REDOCLY_ROUTE_RBAC as m,REDOCLY_TEAMS_RBAC as l}from"@redocly/config";import{removeMarkdownLinks as h}from"../../openapi-docs/utils.js";import{extractDocumentSearchFacets as b,setDocumentSearchFacets as R}from"./search-facets.js";function k(c,e){return async(t,r)=>{const s=t.getSidebar?.(t)||[];return f(c,r,t,s,e)}}function f(c,e,t,r,s,p){const a=[];for(const n of r)if(n.type==="group")a.push(...f(c,e,t,n.items??[],s,n.label));else{const i=S(n,s,p||"");if(i){const o=n.link||n.slug,d={slug:t.slug,fsPath:t.fsPath},g=t.metadata||{},u=b(c,g);R(c,u),a.push({id:o,url:o,text:h(i.description||""),title:i.name,facets:u,[l]:e[l],[m]:e[m]||d})}}return a}function S(c,e,t){const r=t.toLowerCase(),{label:s}=c;switch(r){case"queries":return e.getQueryField(s);case"mutations":return e.getMutationField(s);case"subscriptions":return e.getSubscriptionField(s);case"directives":return e.getDirective(s);case"objects":case"interfaces":case"unions":case"enums":case"inputs":case"scalars":return e.getType(s)}}export{k as searchResolver};
@@ -1,3 +0,0 @@
1
- import type { ApiFunctionsContext, PageStaticData } from '@redocly/config';
2
- export default function (request: Request, ctx: ApiFunctionsContext, staticData: PageStaticData): Promise<Response>;
3
- //# sourceMappingURL=spec-download.api.d.ts.map
@@ -1 +0,0 @@
1
- import l from"node:path";import{readFile as d,existsSync as h}from"node:fs";import{promisify as A}from"node:util";import{PUBLIC_API_DEFINITIONS_FOLDER as L}from"../../constants/common.js";import{GRAPHQL_SPEC_SLUG as R}from"../../../constants/common";import{canDownloadApiDefinition as w}from"../../utils/rbac.js";const F=A(d);async function q(r,e,i){const{isAuthenticated:n,teams:a,claims:{email:c}}=e.user,o=new URL(r.url),p=decodeURIComponent(o.pathname.replace(R,"")),s=e.config.access??{},m=s.rbac??{},f=s.requiresLogin??!1;if(!w(o.pathname,m,f,{isAuthenticated:n,email:c,teams:a}))return new Response("Unauthorized",{status:n?403:401});const t=l.join(i.props?.outdir??"",L,p);if(!h(t))return new Response("Not found",{status:404});const u=await F(t,"utf-8");return new Response(u,{headers:{"Content-Type":"application/graphql"}})}export{q as default};
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- export default function GraphQLDocs({ pageProps }: {
3
- pageProps: any;
4
- }): React.JSX.Element;
5
- //# sourceMappingURL=GraphQLDocs.d.ts.map
@@ -1,4 +0,0 @@
1
- import t from"react";import c from"styled-components";import{RedoclyGraphQLDocs as h}from"@redocly/graphql-docs";import{buildSchema as l}from"graphql";import{LayoutVariant as f}from"@redocly/theme/components/SidebarActions/SidebarActions";import{useThemeConfig as p}from"@redocly/theme/core/hooks";import{withPathPrefix as g}from"@redocly/theme/core/utils";import{ServerRoutes as E}from"../../../../constants/api.js";import{CLIENT_TELEMETRY_ENABLED as u}from"../../../../client/constants/common.js";import{PACKAGE_NAME as d}from"../../../../config/product-gates.js";import{envConfig as S}from"../../../config/env-config.js";import{usePageSharedData as L}from"../../../../client/providers/page-data/hooks.js";import{useCodeHighlight as R}from"../../../../client/app/hooks/codeHighlight/useCodeHighlight.js";function v({pageProps:o}){const e=L("graphQlSettings"),{settings:r}=o,{graphql:i}=p(),{highlight:n}=R(),m=t.useMemo(()=>({graphql:l(e)}),[e]),s=t.useMemo(()=>{const a={...i,...r};return{layout:o.apiOptions?.layout??f.THREE_PANEL,...a,markdown:{...a.markdown,highlight:n},navigation:{contentPrefix:""}}},[i,r,n,o.apiOptions?.layout]);return t.createElement(C,null,t.createElement(h,{schema:m,settings:s,telemetryConfig:{collectorUrl:new URL(g(E.OTEL_TRACES),location.origin).toString(),disabled:!u,serviceVersion:`${d}@${S.REDOCLY_PORTAL_VERSION}`}}))}const C=c.div`
2
- --navigation-anchor-offset: var(--navbar-height);
3
- --sidebar-width: 0px;
4
- `;export{v as default};
@@ -1,40 +0,0 @@
1
- import type { GraphQLType } from 'graphql';
2
- import type { TYPE_GROUPS } from './constants.js';
3
- export type TypeGroup = (typeof TYPE_GROUPS)[number];
4
- export type GraphQLSearchDocument = {
5
- name?: string;
6
- group: string;
7
- description?: string;
8
- args?: Record<string, GraphQLFieldDetails>;
9
- locations?: string[];
10
- isRepeatable?: boolean;
11
- response?: GraphQLTypeDetails | string;
12
- types?: GraphQLTypeDetails[];
13
- values?: GraphQLFieldValue[];
14
- fields?: Record<string, GraphQLFieldDetails>;
15
- };
16
- export type GraphQLTypeDetails = {
17
- name: string;
18
- description?: string;
19
- list?: boolean;
20
- notNull?: boolean;
21
- fields?: Record<string, GraphQLFieldDetails>;
22
- values?: GraphQLFieldValue[];
23
- types?: string[];
24
- };
25
- export type GraphQLFieldDetails = {
26
- type?: string | GraphQLTypeDetails;
27
- description?: string;
28
- defaultValue?: unknown;
29
- };
30
- export type GraphQLFieldValue = {
31
- name: string;
32
- description?: string;
33
- value?: unknown;
34
- };
35
- export type UnwrappedGraphQLType = {
36
- type: GraphQLType;
37
- notNull?: boolean;
38
- list?: boolean;
39
- };
40
- //# sourceMappingURL=types.d.ts.map
File without changes
@@ -1,14 +0,0 @@
1
- import type { ContentItemModel, OpenAPIParser, OperationModel, Options, SchemaModel } from '@redocly/openapi-docs';
2
- import type { OperationParameter } from '@redocly/theme/core/types';
3
- import type { SearchDocument } from '../../types';
4
- import { OpenApiSearchBuilder } from './openapi-search-builder.js';
5
- type Parameters = Record<string, OperationParameter>;
6
- export declare class AiSearchIndexer extends OpenApiSearchBuilder {
7
- #private;
8
- constructor(parser: OpenAPIParser, options: Options, basePath: string);
9
- addItem(item: ContentItemModel): SearchDocument | undefined;
10
- protected buildOperationDocument(operation: OperationModel): SearchDocument | undefined;
11
- protected addSchema(parameters: Parameters, schema: SchemaModel | undefined, mediaType: string | undefined, place: string, isResponse: boolean, path?: string[], visited?: Set<string>, level?: number, skipFields?: Set<string>): void;
12
- }
13
- export {};
14
- //# sourceMappingURL=ai-search-indexer.d.ts.map
@@ -1 +0,0 @@
1
- import{REDOCLY_TEAMS_RBAC as m}from"@redocly/config";import{OpenApiSearchBuilder as h}from"./openapi-search-builder.js";import{getOneOfSchema as O}from"./utils.js";class y extends h{constructor(t,e,n){super(t,e,n)}addItem(t){try{return this.buildSearchDocument(t)}catch(e){console.error("Cannot add item to AI search indexer",e.message);return}}buildOperationDocument(t){const e=this.createOperationDocumentBase(t),n=e?.parameters?.find(i=>i.place==="request fields"&&i.name==="body"&&"oneOf"in i&&i.oneOf!==void 0);return n&&(n.required=t.requestBody?.required??!1),e}addSchema(t,e,n,i,s,u=[],o=new Set,d=0,c){if(!(!e||e.isCircular||d>this.options.generatedSamplesMaxDepth)){if(e.pointer){if(o.has(e.pointer))return;o.add(e.pointer)}for(const r of e.fields??[]){if(c?.has(r.name)||this.#t(e,r,s))continue;const a=this.createSchemaFieldParameter(r,e,i,n,u),f=this.getParameterId(a);if(t[f]!=null)continue;t[f]=a,this.addSchema(t,r.schema,n,i,s,[...u,r.name],o,d+1);const l=O(r.schema);l&&(a.oneOf=this.#e(l,{mediaType:n,place:i,isResponse:s,visited:o,level:d+1}))}if(e.items&&this.addSchema(t,e.items,n,i,s,u,o,d+1),d===0&&u.length===0&&e.oneOf){const r=this.#e(e,{mediaType:n,place:i,isResponse:s,visited:o,level:d+1});if(r){const a={name:"body",description:"",place:i,mediaType:n,path:[],type:e.displayType||"object",required:!1,example:void 0,enum:void 0,oneOf:r};t[this.getParameterId(a)]=a}}}}#t(t,e,n){return!!t[m]||e.kind==="additionalProperties"||!!e.schema?.readOnly&&!n||!!e.schema?.writeOnly&&n}#e(t,e){const{mediaType:n,place:i,isResponse:s,visited:u,level:o}=e,d=new Set((t.fields??[]).map(r=>r.name)),c=(t.oneOf??[]).map((r,a)=>{const f={};return this.addSchema(f,r,n,i,s,[],new Set(u),o,d),{title:r.title||`variant ${a+1}`,parameters:Object.values(f)}}).filter(r=>r.parameters.length>0);if(c.length!==0)return{discriminator:t.discriminatorProp,variants:c}}}export{y as AiSearchIndexer};
@@ -1,25 +0,0 @@
1
- import type { RawUniversalConfig } from '@redocly/openapi-core';
2
- export declare const MarkdownParserDecorator: ({ outputRelativePath, cwd, }: {
3
- outputRelativePath: string;
4
- cwd: string;
5
- }) => {
6
- any: {
7
- leave(node: Record<string, unknown>, ctx: any): void;
8
- };
9
- ref: {
10
- leave(node: Record<string, unknown>, ctx: any): void;
11
- };
12
- };
13
- export declare const RbacDecorator: () => {
14
- Tag: {
15
- enter(node: Record<string, unknown>): void;
16
- };
17
- any: {
18
- leave(node: Record<string, unknown>, ctx: any): void;
19
- };
20
- ref: {
21
- leave(node: Record<string, unknown>): void;
22
- };
23
- };
24
- export declare function injectDecoratorIntoConfig(config: RawUniversalConfig, outputRelativePath: string, cwd: string): RawUniversalConfig;
25
- //# sourceMappingURL=decorators.d.ts.map
@@ -1 +0,0 @@
1
- import b from"node:path";import{REDOCLY_TEAMS_RBAC as u}from"@redocly/config";import{slash as k}from"../../../utils/path/slash.js";function f(a,r,t){if(!r)throw new Error("Visitor required");if(a){a.description&&r(a,"description",t.location.absolutePointer+"/description",t);for(const o in a["x-enumDescriptions"])r(a["x-enumDescriptions"],o,t.location.absolutePointer+"/x-enumDescriptions/"+o,t)}}const g=/^[a-zA-Z0-9\s\-,.!\?:;'"()/]+$/,s=({outputRelativePath:a,cwd:r})=>{const t=function(e,m,l,p){const{node:n}=p.resolve(e[m]);if(!n||typeof n!="string"||n.match(g))return;const i=p.getVisitorData();i.markdocChunks=i.markdocChunks||[],i.markdocChunks.push({node:e,pointer:k(b.relative(r,l)),markdown:n,relativePath:a,key:m})};return{any:{leave(o,e){f(o,t,e)}},ref:{leave(o,e){f(o,t,e)}}}},c=()=>{const a={};return{Tag:{enter(r){r?.["x-rbac"]&&(a[String(r.name)]=r["x-rbac"])}},any:{leave(r,t){if((t.type.name==="Operation"||t.type.name==="Webhook")&&"tags"in r&&Array.isArray(r.tags))for(const o of r.tags)a[o]&&(r["x-rbac"]=r["x-rbac"]||a[o]);r?.["x-rbac"]&&(r[u]=r["x-rbac"],delete r["x-rbac"])}},ref:{leave(r){r?.["x-rbac"]&&(r[u]=r["x-rbac"],delete r["x-rbac"])}}}};function h(a,r,t){const o={id:"markdown",decorators:{oas2:{markdown:s,rbac:c},oas3:{markdown:s,rbac:c},async3:{markdown:s,rbac:c}}};return{...a,decorators:{"markdown/rbac":"on","markdown/markdown":{outputRelativePath:r,cwd:t},...a.decorators||{}},plugins:[...a.plugins||[],o]}}export{s as MarkdownParserDecorator,c as RbacDecorator,h as injectDecoratorIntoConfig};
@@ -1,6 +0,0 @@
1
- import { type NormalizedProblem } from '@redocly/openapi-core';
2
- /**
3
- * Formats a bundle error with file path, line/column, and codeframe for better debugging.
4
- */
5
- export declare function formatBundleError(problem: NormalizedProblem, cwd: string): Promise<string>;
6
- //# sourceMappingURL=format-bundle-error.d.ts.map
@@ -1,5 +0,0 @@
1
- import{getLineColLocation as f,isAbsoluteUrl as m}from"@redocly/openapi-core";import g from"node:path";import{gray as s}from"../../tools/notifiers/helpers/colors.js";import{getCodeframe as h}from"../../utils/codeframes/codeframes.js";async function P(o,c){const e=o.location?.[0];if(!e)return`${o.message} at `;if(!e.source){const t=e.pointer??"";return`${o.message} at ${t}`}const n=m(e.source.absoluteRef)?e.source.absoluteRef:g.relative(c,e.source.absoluteRef);try{const t=f(e),i=e.pointer?s(`at ${e.pointer}`):"",l=`${n}:${t.start.line}:${t.start.col}`;let r="";try{const a=e.source?.getLines()??[],u={start:{line:t.start.line,character:t.start.col},end:{line:t.end?.line??t.start.line,character:t.end?.col??Math.max(t.start.col+1,a[t.start.line-1]?.length??t.start.col)},lines:a},{frame:$}=h(u,!0);r=$}catch{r=""}return`${l} ${i}
2
- ${o.message}
3
- ${r?`${r}
4
- `:""}`}catch{const t=e.pointer?s(`at ${e.pointer}`):"";return`${n} ${t}
5
- ${o.message}`}}export{P as formatBundleError};
@@ -1,4 +0,0 @@
1
- import type { GetServerPropsFn } from '../../types';
2
- declare const getServerProps: GetServerPropsFn;
3
- export default getServerProps;
4
- //# sourceMappingURL=get-server-props.d.ts.map
@@ -1 +0,0 @@
1
- import{getPublicEnvVariables as n}from"../../utils/envs/get-public-env-variables.js";const l=async({fsPath:r,slug:e},t,{variables:a,partials:i},o)=>{const s=o.getPartialsForRoute?.(e)||i;return{definitionId:r,...t.props,markdown:{partials:s,variables:{...a,env:n()}}}};var d=l;export{d as default};
@@ -1,2 +0,0 @@
1
- export declare function getTemplatePath(relativePath: string): string;
2
- //# sourceMappingURL=get-template-path.d.ts.map
@@ -1 +0,0 @@
1
- import{fromCurrentDir as t}from"../../utils/paths.js";function m(r){return t(import.meta.url,r)}export{m as getTemplatePath};
@@ -1,3 +0,0 @@
1
- import type { LifecyclePluginInstance } from '../../types';
2
- export declare function openAPIDocsPlugin(): Promise<LifecyclePluginInstance>;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- import{simplifyAstStructure as Z}from"@redocly/openapi-docs";import{REDOCLY_ROUTE_RBAC as y,REDOCLY_TEAMS_RBAC as D}from"@redocly/config";import{OPENAPI_DOCS_TEMPLATE_ID as j,PUBLIC_RBAC_SCOPE_ITEM as U}from"../../../constants/common.js";import{DEPRECATED_PUBLIC_API_DEFINITIONS_FOLDER as ee,PUBLIC_API_DEFINITIONS_FOLDER as te}from"../../constants/common.js";import{OPENAPI_SHARED_DATA_PREFIX as L}from"../../constants/plugins/openapi-docs.js";import{envConfig as V}from"../../config/env-config.js";import{isRbacScopeItems as oe}from"../../utils/rbac/is-rbac-scope-items.js";import{getRouteSlugsForPath as ae}from"../utils.js";import{searchResolver as re}from"./search/search-resolver.js";import{convertOpenAPIDocs2Sidebar as se,shouldAddRoute as ie}from"./utils.js";import{getTemplatePath as q}from"./get-template-path.js";import{storeDefinitionBundles as ne}from"./store-definition-bundles.js";import{definitionLoader as ce,definitionsLoader as pe}from"./load-definition.js";import{getAiDocumentsStore as de}from"./search/get-ai-search-documents.js";import{fromCurrentDir as le}from"../../utils/paths.js";import{telemetryTraceStep as fe}from"../../../cli/telemetry/helpers/trace-step.js";import{getApiConfigByPath as ue}from"../get-api-config.js";import{shouldAdvertiseGatewayXMcp as me,buildGatewayXMcp as ge}from"../mcp/gateway-mcp/eligibility.js";const x="openapi-spec-download";async function Be(){let k=[],C={},N=new Set,d={};return{id:"openapi",requiredEntitlements:["openapi"],loaders:{"load-oas-docs":pe,"load-oas":ce},processContent:async(e,n)=>{await fe("com.redocly.build.plugin.openapiDocs",async l=>{e.createRequestHandler(x,le(import.meta.url,"./spec-download.api.js")),e.addApiRoute({slug:te+"/*",requestHandlerId:x,httpMethod:"all",[D]:U,getStaticData:async()=>({props:{}})}),e.addApiRoute({slug:ee+"/*",requestHandlerId:x,httpMethod:"all",[D]:U,getStaticData:async()=>({props:{}})});const E=e.createTemplate(j,q("../../../client/templates/openapi-docs/template.js")),f=e.registerServerPropsGetter(j,q("./get-server-props.js")),u=await n.getConfig();l?.setAttribute("config",JSON.stringify(u.openapi||{})),C={},d={};const c=(await n.cache.load(".","load-oas-docs")).data;k=c.map(({markdocChunks:a,relativePath:o,customOutputRelativeFile:r,isVirtual:s,realRelativePath:m})=>({chunks:a,relativePath:o,realRelativePath:m,isVirtual:r!=null||s})),ne(c,e.outdir);for(const a of c||[]){const{definition:o,config:r,relativePath:s,customOutputRelativeFile:m,contentItems:_,flatItems:g,parser:h,options:I,rawOptions:v,hash:R}=a,S=m||s,i=[],G={},{definition:X}=h||{},{info:p}=X||{},O=p?.["x-metadata"],w=!!r.openapi?.excludeFromSearch||!!r.theme?.openapi?.excludeFromSearch||!!u.openapi?.excludeFromSearch||!!u.theme?.openapi?.excludeFromSearch,H={title:p?.title,description:p?.description,summary:p?.summary,...r.metadata,...O},P={untagged:[],tagged:new Map};for(const t of g){const{id:F,href:A,operationDefinition:T}=t;if(T){const{tags:b}=T;if(b)for(const B of b)P.tagged.has(B)||P.tagged.set(B,[]),P.tagged.get(B)?.push(t);else P.untagged.push(t);V.isDevelopMode&&(G[`#${T.pointer}`]=t.href)}if(!ie({item:t}))continue;const M=t,Q=M.type==="section"&&!!M.infoDefinition,W=A.split("#")[0]+"/",z=t?.operationDefinition?.[D],K=oe(r.access?.rbac)?r.access.rbac:void 0;i.push({excludeFromSearch:w,slugSuffix:W,fsPath:S,metadata:{subType:"openapi-operation"},httpVerb:t?.httpVerb||"",path:s,templateId:E,[D]:z||K,getAiDocumentsStore:de({parser:h,options:I,info:p,tagOperations:P,openapiContentItem:M,metadata:H,relativePath:s,getSearchFacets:e.getSearchFacets,includeInLLMsTxt:Q,excludeFromSearch:w}),getStaticData:async b=>({props:{dynamicMarkdocComponents:["openapi"],baseSlug:b.baseSlug,seo:t["x-metadata"]?.seo||{title:t.name,description:t.description},itemId:F,disableAutoScroll:!0}})})}if(i[0]={...i[0],metadata:{type:"openapi",...H},hasClientRoutes:!0,getSidebar:(t,F)=>{const A=[];return se({contentItems:_,sidebarItems:A,routeSlug:t.slug,navItem:F}),A},getNavText:()=>p?.title,getSearchDocuments:re(h,I,g,e.getSearchFacets,e.setSearchFacets,w)},O?.apiId&&!a.isVirtual){const t=ue(a.config.apis,a.realRelativePath);d[O.apiId]={[D]:t.rbac,[y]:{fsPath:S}}}const Y=i[0];i[0]=i[i.length-1],i[i.length-1]=Y;for(const t of i)e.addRoute({...t,serverPropsGetterIds:[f]});const J=V.isDevelopMode?s:void 0,$=`${L}${s}`;C[$]={fsPath:S,definition:o,options:v,sourcePath:J,routesMapping:G,hash:R};for(const t of i)e.addRoute({...t,sharedData:[{id:$,key:"openAPIDocsStore"}],serverPropsGetterIds:[f]})}})},afterRoutesCreated:async(e,n)=>{const l=new Set;for(const{chunks:a,relativePath:o,isVirtual:r,realRelativePath:s}of k){const m=ae(e.getAllRoutes(),o),_=(await n.cache.load(s,"load-oas")).compoundHash;await n.cache.load(o,{loader:async function(){for(const{node:h,markdown:I,key:v,relativePath:R}of a){const{ast:S}=await e.parseMarkdoc({input:{content:I,relativePath:R,isVirtual:r},context:n,deps:{sharedDataIds:[`${L}${R}`],routeSlugs:m}});h[`x-parsed-md-${v}`]={result:Z(S)}}},name:"openapi-markdoc-inline-parser"},[_]);for(const{pointer:g}of a)l.add(g)}const E=N.difference(l);for(const a of E)n.cache.delete(a);N=l;const f=e.getConfig(),u=f.access?.rbac??{},c=n.withPathPrefix("/mcp");for(const[a,o]of Object.entries(C)){const r=e.getRouteByFsPath(o.fsPath)?.baseSlug,s=r&&me(o.definition,a.slice(L.length),u,f.mcp)?{...o.definition,"x-mcp":{...ge(c),...o.definition["x-mcp"],servers:[{url:c}]}}:o.definition;await e.createSharedData(a,{...o,definition:s,baseSlug:r},o.hash)}Object.entries(d).forEach(([a,o])=>{const r=o[y]?.fsPath;if(!r)return;const s=e.getRouteByFsPath(r)?.baseSlug;d[a]={...o,[y]:{...o[y],slug:s},slug:s}}),e.setGlobalData({apiProducts:d})}}}export{Be as openAPIDocsPlugin};
@@ -1 +0,0 @@
1
- import f from"node:path";import{CONFIG_FILE_NAME as h}from"../../../constants/common.js";import{normalizeRouteSlug as c}from"../../../utils/path/normalize-route-slug.js";import{removeLeadingSlash as L}from"../../../utils/url/remove-leading-slash.js";import{parseBaseName as x}from"../utils.js";const y=async(e,s)=>{if(!e.match(/(\.ya?ml|\.json)$/)||f.posix.basename(e)===h||await s.isPathIgnored(e))return!1;const i=s.fs.getFileInfo(e);if(!i)return!1;try{const{data:n}=await s.cache.load(i.realRelativePath,"yaml");return!(!n?.openapi&&!n?.swagger)}catch{return!1}},F=async(e,s,i,n)=>{const{getRouteBySlug:u,getRouteByFsPath:l}=i,o={isOpenapiDetected:!1,isOpenapiValid:!1},g={isOpenapiDetected:!0,isOpenapiValid:!1},d={isOpenapiDetected:!0,isOpenapiValid:!0};let r=e.toLowerCase();if(e.startsWith("/"))r=c(e);else if(e.startsWith("./")||e.startsWith("../")){const t=l(s)?.slug;if(!t)return o;const{isIndexFile:a}=x(s);r=a?c(f.posix.join(t,e)):c(f.posix.join(t,"../",e))}else return o;const p=r.toLowerCase().split("/");for(let t=p.length;t>=0;t--){const a=p.slice(0,t).join("/"),O=p.slice(t).join("/"),m=u(a)||l(L(a));if(m)return await y(m.fsPath,n)?O?g:d:o}return o};export{F as isOpenApiURL,y as isOpenapiDoc};
@@ -1,31 +0,0 @@
1
- import { OpenAPIParser } from '@redocly/openapi-docs';
2
- import type { RbacScopeItems, RedocConfig, REDOCLY_TEAMS_RBAC, RedoclyConfig } from '@redocly/config';
3
- import type { ContentItemModel, IMenuItem, OpenAPIDefinition, Options } from '@redocly/openapi-docs';
4
- import type { LifecycleContext } from '../../types';
5
- export type BundledDefinition = {
6
- definition: OpenAPIDefinition;
7
- config: Partial<RedoclyConfig & NonNullable<RedoclyConfig['apis']>[string]>;
8
- relativePath: string;
9
- realRelativePath: string;
10
- customOutputRelativeFile?: string;
11
- markdocChunks: MarkdocChunk[];
12
- hash: string;
13
- isVirtual: boolean;
14
- contentItems: ContentItemModel[];
15
- flatItems: (IMenuItem & {
16
- [REDOCLY_TEAMS_RBAC]?: RbacScopeItems;
17
- })[];
18
- options: Options;
19
- rawOptions: RedocConfig;
20
- parser: OpenAPIParser;
21
- };
22
- export type MarkdocChunk = {
23
- node: Record<string, unknown>;
24
- pointer: string;
25
- markdown: string;
26
- relativePath: string;
27
- key: string;
28
- };
29
- export declare function definitionLoader(relativePath: string, context: LifecycleContext): Promise<Omit<BundledDefinition, 'hash'>[]>;
30
- export declare function definitionsLoader(_: string, context: LifecycleContext): Promise<BundledDefinition[]>;
31
- //# sourceMappingURL=load-definition.d.ts.map
@@ -1,3 +0,0 @@
1
- import*as l from"path";import{convertSwagger2OpenAPI as no}from"@redocly/openapi-docs/lib/utils/convertSwagger2OpenAPI.js";import{Source as ro,bundle as to,createConfig as io,getTotals as eo,resolvePlugins as ao}from"@redocly/openapi-core";import{normalizeOptions as so,OpenAPIParser as co,buildContentItems as fo}from"@redocly/openapi-docs";import{combineUrls as E}from"@redocly/theme/core/utils";import{CONFIG_FILE_NAME as j}from"../../../constants/common.js";import{PUBLIC_API_DEFINITIONS_FOLDER as P}from"../../constants/common.js";import{MAX_BUNDLING_ERRORS_TO_PRINT as lo}from"../../constants/plugins/openapi-docs.js";import{unique as po}from"../../../utils/array/unique.js";import{deepMerge as F}from"../../../utils/object/deep-merge.js";import{pluralize as R}from"../../../utils/string/pluralize.js";import{replaceEnvVariablesDeep as uo}from"../../utils/envs/replace-env-variables-deep.js";import{logger as N}from"../../tools/notifiers/logger.js";import{reporter as b}from"../../tools/notifiers/reporter.js";import{injectDecoratorIntoConfig as mo}from"./decorators.js";import{getAllApiConfigsByPath as go}from"../get-api-config.js";import{normalizeFeedbackOptions as wo}from"./utils.js";import{replaceFileExtension as L}from"./store-definition-bundles.js";import{ExternalResolver as ho}from"../../fs/utils/external-ref-resolver.js";import{formatBundleError as bo}from"./format-bundle-error.js";import{ensureAccessBackwardsCompatibility as Oo}from"../config-parser/loaders/utils/read-and-validate-config.js";async function Uo(o,u){const{fs:r,cache:O,getConfig:g,isPathIgnored:m}=u;if(l.posix.basename(o)===j)return[];let s;try{s=(await O.load(o,"yaml")).data}catch{return[]}if(!s?.openapi&&!s?.swagger)return N.verbose(`${o} file is not definition. Skipping`),[];const p=await g("."),e=r.getFileInfo(o),n=await g(l.posix.dirname(o)),M=go(n?.apis,o,n.configPath),S=[],V=await m(o);for(const c of M){if(!c.output&&V)continue;const T=F({decorators:p.decorators},n,{rbac:void 0,access:{rbac:void 0}},c),{resolvedObj:U}=uo(T),a=Oo(U);if(a.decorators&&typeof a.decorators!="object"){await b.panicOnBuildContentError(`'decorators' must be an object at redocly.yaml, got '${typeof a.decorators}'`);continue}if(a.plugins&&!Array.isArray(a.plugins)){await b.panicOnBuildContentError(`'plugins' must be an array at redocly.yaml, got '${typeof a.plugins}'`);continue}const z=n.configPath?l.posix.dirname(n.configPath):".",t=c.output?l.posix.join(z,c.output):o;if(await m(t))continue;e&&c.output&&!r.exists(t)&&r.addVirtualFile(t,e);const G=l.resolve(r.cwd,n.realConfigPath||j),v=new ho(r),C=await io(mo(a,t,r.cwd),{configPath:G,externalRefResolver:v});p.plugins&&p.configPath!==n.configPath&&(C.plugins=po([...C.plugins||[],...await ao(p.plugins,r.cwd)],f=>f.id));const B=l.resolve(r.cwd,o),J=await r.read(o),q={config:C,base:l.dirname(B),doc:{source:new ro(B,J),parsed:JSON.parse(JSON.stringify(s))},externalRefResolver:v},{bundle:{parsed:y},problems:D,visitorsData:H}=await to(q),X=H["markdown/markdown"]?.markdocChunks??[],i=eo(D);let A=[i.errors&&`${i.errors} ${R(i.errors,"error","errors")}`,i.warnings&&`${i.warnings} ${R(i.warnings,"warning","warnings")}`,i.ignored&&`${i.ignored} ignored`].filter(Boolean).join(", ");if(i.errors){const f=D.filter(d=>d.severity==="error");let $=`${A} while bundling ${t} definition:
2
- `;const x=Math.min(f.length,lo);for(let d=0;d<x;d++){const Z=f[d],oo=await bo(Z,r.cwd);$+=`${oo}
3
- `}if(f.length>x){const d=f.length-x;$+=`... and ${d} more ${R(d,"error","errors")}`}await b.panicOnBuild($)}i.warnings&&N.warn(`${A} while bundling %rp definition`,t);const w=Co(y.swagger!==void 0?await no(y):y,n.metadata),h=F(p.openapi||{},n.openapi||{},c.openapi||c?.theme?.openapi||{});h.showSchemaCatalogLinks&&(w["x-schema-catalog-link"]=E(P,t));const K=w["x-feedback"]||h.feedback||n.feedback,_={...h,feedback:wo(K),hideSidebar:!0,disableRouter:!0,mockServer:a?.mockServer||p?.mockServer,downloadUrls:h.downloadUrls||[{url:E(P,`${L(t,".json")}?download`)},{url:E(P,`${L(t,".yaml")}?download`)}]},I=so(_);let k;try{k=new co(w,void 0,I)}catch(f){await b.panicOnBuild(f);continue}const{contentItems:Q,flatItems:W}=fo(k,I),Y={definition:w,config:a,relativePath:t,realRelativePath:e?.realRelativePath||t,customOutputRelativeFile:c.output&&t,markdocChunks:X,contentItems:Q,flatItems:W,options:I,rawOptions:_,parser:k,isVirtual:e?.isVirtual??!1};S.push(Y)}return S}async function zo(o,u){const{fs:r,cache:O,getConfig:g}=u,m=[];for(const s of r.scan(/(\.ya?ml|\.json)$/)){if(!await g(l.posix.dirname(s.relativePath)))continue;const e=await O.load(s.relativePath,"load-oas");e.data&&e.data.length&&m.push(...e.data.map(n=>({...n,isVirtual:s.isVirtual||n.isVirtual,hash:e.compoundHash})))}return m}function Co(o,u){return u?{...o,info:{...o.info,"x-metadata":{...o.info["x-metadata"],...u}}}:o}export{Uo as definitionLoader,zo as definitionsLoader};
@@ -1,24 +0,0 @@
1
- import type { OperationMenuItem } from '@redocly/openapi-docs/lib/models/types.js';
2
- import type { ContentItemModel, OpenAPIParser, OperationModel, Options, SchemaModel } from '@redocly/openapi-docs';
3
- import type { OperationParameter } from '@redocly/theme/core/types';
4
- import type { SearchDocument } from '../../types';
5
- type OperationParameterModel = OperationModel['parameters'][number];
6
- type SchemaFieldModel = NonNullable<SchemaModel['fields']>[number];
7
- export declare abstract class OpenApiSearchBuilder {
8
- #private;
9
- protected readonly parser: OpenAPIParser;
10
- protected readonly options: Options;
11
- protected readonly basePath: string;
12
- constructor(parser: OpenAPIParser, options: Options, basePath: string);
13
- getOperation(item: OperationMenuItem): OperationModel;
14
- protected buildSearchDocument(item: ContentItemModel): SearchDocument | undefined;
15
- protected abstract buildOperationDocument(operation: OperationModel, rbac: Record<string, string> | undefined): SearchDocument | undefined;
16
- protected collectOperationSearchParameters(operation: OperationModel): OperationParameter[];
17
- protected abstract addSchema(parameters: Record<string, OperationParameter>, schema: SchemaModel | undefined, mediaType: string | undefined, place: string, isResponse: boolean, path?: string[], visitedPointers?: Set<string>, level?: number): void;
18
- protected createOperationDocumentBase(operation: OperationModel, rbac?: Record<string, string> | undefined): SearchDocument | undefined;
19
- protected createOperationParameter(parameter: OperationParameterModel): OperationParameter;
20
- protected createSchemaFieldParameter(field: SchemaFieldModel, schema: SchemaModel, place: string, mediaType: string | undefined, path: string[]): OperationParameter;
21
- protected getParameterId(param: OperationParameter): string;
22
- }
23
- export {};
24
- //# sourceMappingURL=openapi-search-builder.d.ts.map
@@ -1 +0,0 @@
1
- import*as u from"@redocly/openapi-docs";import{REDOCLY_TEAMS_RBAC as i}from"@redocly/config";import{combineUrls as d}from"@redocly/theme/core/utils";import{removeMarkdownLinks as c,stripFormatting as a}from"./utils.js";const o=u.default||u;class g{parser;options;basePath;constructor(e,t,n){this.parser=e,this.options=t,this.basePath=n}getOperation(e){return o.getOperation(this.parser,e.operationDefinition,e.parent,{...this.options,internal_skipSamples:!0},e.href)}buildSearchDocument(e){switch(e.type){case"tag":case"section":return this.#e(e,!0);case"operation":return this.buildOperationDocument(this.getOperation(e),e[i]);case"rsrc":case"prompt":case"tool":return this.#e(e,!1);default:return}}collectOperationSearchParameters(e){const t={};for(const r of e.parameters){if(r[i])continue;const s=this.createOperationParameter(r);t[this.getParameterId(s)]=s}const n=new Set;this.addSchema(t,e.requestBody?.content?.mediaTypes[0]?.schema,e.requestBody?.content?.mediaTypes[0]?.name,"request fields",!1,[],n);for(const r of e.responses)this.addSchema(t,r.content?.mediaTypes[0]?.schema,r.content?.mediaTypes[0]?.name,`response ${r.code} fields`,!0,[],n);return Object.values(t)}createOperationDocumentBase(e,t){if(e.type!=="operation")return;const n=d(this.basePath,e.href);return{id:n,url:n,title:a(e.name),text:a(c(e.description||"")),httpMethod:e.httpVerb,httpPath:e.path,deprecated:e.deprecated,security:e.security.map(r=>r.schemes.map(s=>s.id)).flat().filter(Boolean),parameters:this.collectOperationSearchParameters(e),...t?{[i]:t}:{}}}createOperationParameter(e){const t=e.schema?.example||e.example;return{name:e.name,description:a(c(e.description)),place:`${e.in} parameters`,mediaType:void 0,type:e.schema?.type.toString()||"unknown",deepLink:o.generateDeepLink(e),required:e.required,example:t?JSON.stringify(t):void 0,enum:e.schema?.enum?.length?e.schema.enum:void 0}}createSchemaFieldParameter(e,t,n,r,s){const p=e.schema?.example||e.example,m=e.schema?.enum;return{name:e.name,description:a(e.description),place:n,mediaType:r,path:s,deepLink:o.generateDeepLink(e),type:e.schema?.type.toString()||"unknown",required:e.required||t.schema.required?.includes(e.name)||!1,example:p?JSON.stringify(p):void 0,enum:m?.length?m:void 0}}getParameterId(e){return[...e.path||[],e.name.toString()].join(".")+e.description+e.place}#e(e,t){const n=d(this.basePath,e.href);return{id:n,url:n,text:a(c(e.description||"")),title:t?a(e.name):e.name}}}export{g as OpenApiSearchBuilder};
@@ -1,18 +0,0 @@
1
- import type { ContentItemModel, OpenAPIParser, Options, OpenAPIInfo } from '@redocly/openapi-docs';
2
- import type { AfterRoutesCreatedActions, AfterRoutesCreatedLifecycleContext, MdPageStaticData, PageRouteDetails } from '../../../types';
3
- import type { AiDocumentsStore } from '../../../plugins/search/types.js';
4
- import type { TagOperations } from '../types.js';
5
- import type { SearchFacet } from '@redocly/theme/core/types';
6
- export declare const getAiDocumentsStore: ({ parser, options, info, tagOperations, relativePath, openapiContentItem, metadata, getSearchFacets, includeInLLMsTxt, excludeFromSearch, }: {
7
- parser: OpenAPIParser;
8
- options: Options;
9
- info: OpenAPIInfo;
10
- tagOperations: TagOperations;
11
- relativePath: string;
12
- openapiContentItem: ContentItemModel;
13
- metadata: Record<string, unknown>;
14
- getSearchFacets: () => Map<string, SearchFacet>;
15
- includeInLLMsTxt: boolean;
16
- excludeFromSearch?: boolean;
17
- }) => (route: PageRouteDetails, staticData: MdPageStaticData, context: AfterRoutesCreatedLifecycleContext, actions: AfterRoutesCreatedActions) => Promise<AiDocumentsStore | undefined>;
18
- //# sourceMappingURL=get-ai-search-documents.d.ts.map