@redocly/realm 0.136.0-next.1 → 0.136.0-next.10

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 (495) hide show
  1. package/CHANGELOG.md +191 -0
  2. package/dist/bin.js +1 -1
  3. package/dist/cli/build/analytics/collect-analytics.js +1 -1
  4. package/dist/cli/build/index.js +1 -1
  5. package/dist/cli/eject/ejectComponent.d.ts +1 -1
  6. package/dist/cli/eject/ejectTheme.d.ts +1 -1
  7. package/dist/cli/eject/resolveEjectParams.js +1 -1
  8. package/dist/cli/eject/themeOperations.d.ts +2 -2
  9. package/dist/cli/stats/collectors/openapi/index.js +1 -1
  10. package/dist/cli/stats/index.js +1 -1
  11. package/dist/client/App.js +1 -1
  12. package/dist/client/ErrorBoundary.js +1 -1
  13. package/dist/client/TestProvider.d.ts +1 -1
  14. package/dist/client/TestProvider.js +1 -1
  15. package/dist/client/api-docs-builder-entry.d.ts +3 -0
  16. package/dist/client/api-docs-builder-entry.js +1 -0
  17. package/dist/client/app/ConditionalLink.d.ts +1 -1
  18. package/dist/client/app/Feedback/useSubmitFeedback.js +1 -1
  19. package/dist/client/app/Sidebar/Sidebar.js +3 -3
  20. package/dist/client/app/Sidebar/helpers/hide-empty-separators.d.ts +13 -0
  21. package/dist/client/app/Sidebar/helpers/hide-empty-separators.js +1 -0
  22. package/dist/client/app/Sidebar/useActions.js +1 -1
  23. package/dist/client/app/Sidebar/utils.js +1 -1
  24. package/dist/client/app/hooks/catalog/useCatalogFilter.d.ts +1 -1
  25. package/dist/client/app/hooks/catalog/useCatalogViewMode.js +1 -1
  26. package/dist/client/app/hooks/catalog/useFetchCatalogEntities.d.ts +1 -1
  27. package/dist/client/app/hooks/catalog/useFetchCatalogEntities.js +1 -1
  28. package/dist/client/app/hooks/catalog/useFetchCatalogEntitiesRelations.d.ts +2 -2
  29. package/dist/client/app/hooks/catalog/useFetchCatalogEntitiesRelations.js +1 -1
  30. package/dist/client/app/hooks/catalog/useFetchCatalogEntityRevisions.d.ts +1 -1
  31. package/dist/client/app/hooks/catalog/useSearchTracker.d.ts +2 -5
  32. package/dist/client/app/hooks/catalog/useSearchTracker.js +1 -1
  33. package/dist/client/app/hooks/codeHighlight/useCodeHighlight.d.ts +1 -6
  34. package/dist/client/app/hooks/codeHighlight/useCodeHighlight.js +1 -1
  35. package/dist/client/app/hooks/index.d.ts +1 -0
  36. package/dist/client/app/hooks/index.js +1 -1
  37. package/dist/client/app/hooks/useAutoScroll.js +1 -1
  38. package/dist/client/app/hooks/useUserClaims.js +1 -1
  39. package/dist/client/app/l10n/hooks/index.d.ts +1 -0
  40. package/dist/client/app/l10n/hooks/index.js +1 -1
  41. package/dist/client/app/l10n/hooks/useTranslate.js +1 -1
  42. package/dist/client/app/l10n/hooks/useTranslationKeys.d.ts +2 -0
  43. package/dist/client/app/l10n/hooks/useTranslationKeys.js +1 -0
  44. package/dist/client/app/l10n/initL10n.js +1 -1
  45. package/dist/client/app/markdoc/custom-components/openapi/json-schema.d.ts +1 -1
  46. package/dist/client/app/markdoc/custom-components/openapi/json-schema.js +1 -1
  47. package/dist/client/app/markdoc/custom-components/openapi/openapi-code-sample.d.ts +1 -5
  48. package/dist/client/app/markdoc/custom-components/openapi/openapi-code-sample.js +1 -1
  49. package/dist/client/app/markdoc/custom-components/openapi/openapi-example.js +1 -1
  50. package/dist/client/app/markdoc/custom-components/openapi/openapi-response-sample.js +1 -1
  51. package/dist/client/app/markdoc/custom-components/openapi/replay-openapi.d.ts +8 -24
  52. package/dist/client/app/markdoc/custom-components/openapi/replay-openapi.js +1 -1
  53. package/dist/client/app/markdoc/hooks/use-store.d.ts +8 -6
  54. package/dist/client/app/markdoc/utils/build-replay-operation-source-map.d.ts +20 -0
  55. package/dist/client/app/markdoc/utils/build-replay-operation-source-map.js +1 -0
  56. package/dist/client/app/markdoc/utils/find-api-item.d.ts +15 -0
  57. package/dist/client/app/markdoc/utils/find-api-item.js +1 -0
  58. package/dist/client/app/markdoc/utils/find-code-sample-panel.d.ts +11 -0
  59. package/dist/client/app/markdoc/utils/find-code-sample-panel.js +1 -0
  60. package/dist/client/app/markdoc/utils/find-openapi-response-samples.d.ts +15 -0
  61. package/dist/client/app/markdoc/utils/find-openapi-response-samples.js +1 -0
  62. package/dist/client/app/markdoc/utils/openapi-panel-entry.d.ts +18 -0
  63. package/dist/client/app/markdoc/utils/openapi-panel-entry.js +1 -0
  64. package/dist/client/app/pages/DevLogin/DevLoginForm.d.ts +1 -1
  65. package/dist/client/app/useGlobalData.d.ts +1 -1
  66. package/dist/client/app/usePreloadHistory.d.ts +2 -2
  67. package/dist/client/app/usePreloadHistory.js +1 -1
  68. package/dist/client/app/utils/loadAndNavigate.d.ts +1 -1
  69. package/dist/client/app/utils/loadAndNavigate.js +1 -1
  70. package/dist/client/app/utils/resolveRouteBySlug.js +1 -1
  71. package/dist/client/app/utils/same-resolved-route.d.ts +5 -0
  72. package/dist/client/app/utils/same-resolved-route.js +1 -0
  73. package/dist/client/browser-entry.js +2 -2
  74. package/dist/client/providers/page-data/hooks.d.ts +2 -2
  75. package/dist/client/providers/post-message/PostMessageProvider.js +1 -1
  76. package/dist/client/providers/post-message/use-post-message.d.ts +1 -1
  77. package/dist/client/providers/theme/ThemeDataProvider.js +1 -1
  78. package/dist/client/runtime/loader.js +1 -1
  79. package/dist/client/templates/api-docs/helpers.d.ts +10 -0
  80. package/dist/client/templates/api-docs/helpers.js +1 -0
  81. package/dist/client/templates/api-docs/template.d.ts +17 -0
  82. package/dist/client/templates/api-docs/template.js +14 -0
  83. package/dist/client/templates/openapi-docs/helpers.d.ts +1 -1
  84. package/dist/client/templates/openapi-docs/helpers.js +2 -2
  85. package/dist/client/types/sidebar.d.ts +0 -1
  86. package/dist/client/utils/utils.d.ts +0 -2
  87. package/dist/client/utils/utils.js +1 -1
  88. package/dist/constants/common.d.ts +14 -1
  89. package/dist/constants/common.js +1 -1
  90. package/dist/constants/l10n/langs/ar.js +1 -1
  91. package/dist/constants/l10n/langs/de.js +1 -1
  92. package/dist/constants/l10n/langs/en.js +1 -1
  93. package/dist/constants/l10n/langs/es.js +1 -1
  94. package/dist/constants/l10n/langs/fr.js +1 -1
  95. package/dist/constants/l10n/langs/hi.js +1 -1
  96. package/dist/constants/l10n/langs/it.js +1 -1
  97. package/dist/constants/l10n/langs/ja.js +1 -1
  98. package/dist/constants/l10n/langs/ko.js +1 -1
  99. package/dist/constants/l10n/langs/pl.js +1 -1
  100. package/dist/constants/l10n/langs/pt-BR.js +1 -1
  101. package/dist/constants/l10n/langs/pt.js +1 -1
  102. package/dist/constants/l10n/langs/ru.js +1 -1
  103. package/dist/constants/l10n/langs/uk.js +1 -1
  104. package/dist/constants/l10n/langs/zh.js +1 -1
  105. package/dist/markdoc/tags/index.d.ts +48 -2
  106. package/dist/server/api-routes/helpers/enhance-context.js +1 -1
  107. package/dist/server/api-routes/helpers/read-stream-with-size-limit.d.ts +1 -1
  108. package/dist/server/api-routes/run-api-routes-worker.d.ts +1 -1
  109. package/dist/server/api-routes/run-api-routes-worker.js +1 -1
  110. package/dist/server/config/env-config.d.ts +2 -4
  111. package/dist/server/config/env-schema.d.ts +5 -10
  112. package/dist/server/config/env-schemas/feature-flags.d.ts +4 -8
  113. package/dist/server/config/env-schemas/feature-flags.js +1 -1
  114. package/dist/server/constants/common.d.ts +2 -0
  115. package/dist/server/constants/common.js +1 -1
  116. package/dist/server/constants/entitlements.js +1 -1
  117. package/dist/server/constants/plugins/api-docs.d.ts +3 -0
  118. package/dist/server/constants/plugins/api-docs.js +1 -0
  119. package/dist/server/esbuild/esbuild-logger.js +3 -3
  120. package/dist/server/esbuild/esbuild.js +3 -3
  121. package/dist/server/esbuild/plugins/api-docs-module-replacer/empty-check.d.ts +9 -0
  122. package/dist/server/esbuild/plugins/api-docs-module-replacer/empty-check.js +1 -0
  123. package/dist/server/esbuild/plugins/api-docs-module-replacer/empty-overlay.d.ts +2 -0
  124. package/dist/server/esbuild/plugins/api-docs-module-replacer/empty-overlay.js +1 -0
  125. package/dist/server/esbuild/plugins/api-docs-module-replacer/index.d.ts +6 -0
  126. package/dist/server/esbuild/plugins/api-docs-module-replacer/index.js +1 -0
  127. package/dist/server/persistence/cache/mappers/create-cache-db-record.d.ts +1 -1
  128. package/dist/server/persistence/file-hashes/mappers/create-file-hash-db-record.d.ts +1 -1
  129. package/dist/server/persistence/kv/mappers/create-kv-db-record.d.ts +1 -1
  130. package/dist/server/plugins/api-docs/get-server-props.d.ts +4 -0
  131. package/dist/server/plugins/api-docs/get-server-props.js +1 -0
  132. package/dist/server/plugins/api-docs/get-template-path.d.ts +2 -0
  133. package/dist/server/plugins/api-docs/get-template-path.js +1 -0
  134. package/dist/server/plugins/api-docs/import-api-docs-builder.d.ts +8 -0
  135. package/dist/server/plugins/api-docs/import-api-docs-builder.js +1 -0
  136. package/dist/server/plugins/api-docs/index.d.ts +19 -0
  137. package/dist/server/plugins/api-docs/index.js +1 -0
  138. package/dist/server/plugins/api-docs/loader.d.ts +35 -0
  139. package/dist/server/plugins/api-docs/loader.js +3 -0
  140. package/dist/server/plugins/api-docs/options.d.ts +14 -0
  141. package/dist/server/plugins/api-docs/options.js +1 -0
  142. package/dist/server/plugins/api-docs/search/get-ai-search-documents.d.ts +20 -0
  143. package/dist/server/plugins/api-docs/search/get-ai-search-documents.js +105 -0
  144. package/dist/server/plugins/api-docs/search/search-facets.d.ts +10 -0
  145. package/dist/server/plugins/api-docs/search/search-facets.js +1 -0
  146. package/dist/server/plugins/api-docs/search/search-indexer.d.ts +9 -0
  147. package/dist/server/plugins/api-docs/search/search-indexer.js +1 -0
  148. package/dist/server/plugins/api-docs/search/search-resolver.d.ts +5 -0
  149. package/dist/server/plugins/api-docs/search/search-resolver.js +1 -0
  150. package/dist/server/plugins/api-docs/spec-download.api.d.ts +4 -0
  151. package/dist/server/plugins/api-docs/spec-download.api.js +1 -0
  152. package/dist/server/plugins/api-docs/store-definition-bundles.d.ts +3 -0
  153. package/dist/server/plugins/api-docs/store-definition-bundles.js +1 -0
  154. package/dist/server/plugins/api-docs/utils/build-item-positions.d.ts +17 -0
  155. package/dist/server/plugins/api-docs/utils/build-item-positions.js +1 -0
  156. package/dist/server/plugins/api-docs/utils/build-routes-mapping.d.ts +3 -0
  157. package/dist/server/plugins/api-docs/utils/build-routes-mapping.js +1 -0
  158. package/dist/server/plugins/api-docs/utils/collect-item-routes.d.ts +12 -0
  159. package/dist/server/plugins/api-docs/utils/collect-item-routes.js +1 -0
  160. package/dist/server/plugins/api-docs/utils/decorators.d.ts +26 -0
  161. package/dist/server/plugins/api-docs/utils/decorators.js +1 -0
  162. package/dist/server/plugins/api-docs/utils/format-bundle-error.d.ts +6 -0
  163. package/dist/server/plugins/api-docs/utils/format-bundle-error.js +5 -0
  164. package/dist/server/plugins/api-docs/utils/normalize-api-version.d.ts +2 -0
  165. package/dist/server/plugins/api-docs/utils/normalize-api-version.js +1 -0
  166. package/dist/server/plugins/api-docs/utils/normalize-feedback-options.d.ts +2 -0
  167. package/dist/server/plugins/api-docs/utils/normalize-feedback-options.js +1 -0
  168. package/dist/server/plugins/api-docs/utils/relative-path-to-base-slug.d.ts +20 -0
  169. package/dist/server/plugins/api-docs/utils/relative-path-to-base-slug.js +1 -0
  170. package/dist/server/plugins/api-docs/utils/replace-file-extension.d.ts +2 -0
  171. package/dist/server/plugins/api-docs/utils/replace-file-extension.js +1 -0
  172. package/dist/server/plugins/api-docs/utils/resolve-api-doc-title.d.ts +3 -0
  173. package/dist/server/plugins/api-docs/utils/resolve-api-doc-title.js +1 -0
  174. package/dist/server/plugins/api-docs/utils/resolve-config-rbac.d.ts +10 -0
  175. package/dist/server/plugins/api-docs/utils/resolve-config-rbac.js +1 -0
  176. package/dist/server/plugins/api-docs/utils/to-relative-slug.d.ts +2 -0
  177. package/dist/server/plugins/api-docs/utils/to-relative-slug.js +1 -0
  178. package/dist/server/plugins/api-functions/index.js +1 -1
  179. package/dist/server/plugins/arazzo-docs/index.js +1 -1
  180. package/dist/server/plugins/asyncapi-docs/index.js +1 -1
  181. package/dist/server/plugins/catalog-classic/index.js +1 -1
  182. package/dist/server/plugins/catalog-entities/database/catalog-entities-diff-publisher.d.ts +1 -1
  183. package/dist/server/plugins/catalog-entities/database/catalog-entities-revisions-pruner.d.ts +4 -2
  184. package/dist/server/plugins/catalog-entities/database/catalog-entities-revisions-pruner.js +23 -3
  185. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +5 -5
  186. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.d.ts +1 -1
  187. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-db-record.d.ts +1 -1
  188. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-db-record-from-file-schema.d.ts +1 -1
  189. package/dist/server/plugins/catalog-entities/database/remote-publish-lock-service.d.ts +3 -3
  190. package/dist/server/plugins/catalog-entities/database/repositories/bffEntities/bff-entities-read-repository.d.ts +2 -2
  191. package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.js +1 -1
  192. package/dist/server/plugins/catalog-entities/database/repositories/common/filters-repository.d.ts +1 -1
  193. package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.d.ts +1 -1
  194. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-read-repository.d.ts +1 -1
  195. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.d.ts +2 -2
  196. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.js +1 -1
  197. package/dist/server/plugins/catalog-entities/database/repositories/entityAttributes/entity-attributes-write-repository.d.ts +1 -1
  198. package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-read-repository.d.ts +1 -1
  199. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/arazzo-entities-extractor.js +1 -1
  200. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.d.ts +13 -5
  201. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.js +1 -1
  202. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.d.ts +5 -2
  203. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.js +1 -1
  204. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.d.ts +6 -5
  205. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.js +2 -2
  206. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.d.ts +12 -5
  207. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.js +1 -1
  208. package/dist/server/plugins/catalog-entities/extensions/extractors/fs-entities-extractor.d.ts +1 -1
  209. package/dist/server/plugins/catalog-entities/plugin.js +1 -1
  210. package/dist/server/plugins/catalog-entities/template/index.js +1 -1
  211. package/dist/server/plugins/catalog-entities/types/openapi.d.ts +1 -1
  212. package/dist/server/plugins/catalog-entities/utils/get-not-accessible-catalog-resources.d.ts +1 -1
  213. package/dist/server/plugins/catalog-entities/utils/openapi-component-content-extractor.d.ts +4 -4
  214. package/dist/server/plugins/catalog-entities/utils/openapi-component-content-extractor.js +1 -1
  215. package/dist/server/plugins/catalog-entities/utils/openapi-schema-resolver.d.ts +4 -3
  216. package/dist/server/plugins/catalog-entities/utils/openapi-schema-resolver.js +1 -1
  217. package/dist/server/plugins/config-parser/index.js +1 -1
  218. package/dist/server/plugins/config-parser/loaders/utils/read-and-validate-config.js +1 -1
  219. package/dist/server/plugins/create-slugify.d.ts +17 -0
  220. package/dist/server/plugins/create-slugify.js +1 -0
  221. package/dist/server/plugins/default-theme/index.js +1 -1
  222. package/dist/server/plugins/dev-onboarding/index.d.ts +1 -1
  223. package/dist/server/plugins/dev-onboarding/index.js +1 -1
  224. package/dist/server/plugins/dev-onboarding/template/components/RevokeAPIKey.d.ts +1 -1
  225. package/dist/server/plugins/dev-onboarding/template/components/RollAPIKey.d.ts +1 -1
  226. package/dist/server/plugins/entitlements/index.js +1 -1
  227. package/dist/server/plugins/graphql-docs/index.js +1 -1
  228. package/dist/server/plugins/graphql-docs/search/ai/utils.d.ts +1 -1
  229. package/dist/server/plugins/helpers/parse-partials.d.ts +3 -0
  230. package/dist/server/plugins/helpers/parse-partials.js +1 -0
  231. package/dist/server/plugins/l10n/index.js +1 -1
  232. package/dist/server/plugins/lifecycle.js +2 -2
  233. package/dist/server/plugins/markdown/attribute-resolvers/helpers/load-openapi-bundle.d.ts +5 -3
  234. package/dist/server/plugins/markdown/attribute-resolvers/helpers/load-openapi-bundle.js +1 -1
  235. package/dist/server/plugins/markdown/attribute-resolvers/resolve-json-example-ref.js +1 -1
  236. package/dist/server/plugins/markdown/attribute-resolvers/resolve-open-api-ref.js +1 -1
  237. package/dist/server/plugins/markdown/attribute-resolvers/resolve-openapi-code-samples.js +1 -1
  238. package/dist/server/plugins/markdown/attribute-resolvers/resolve-openapi-response-samples.js +1 -1
  239. package/dist/server/plugins/markdown/index.js +1 -1
  240. package/dist/server/plugins/markdown/markdoc/markdoc-options.d.ts +9 -9
  241. package/dist/server/plugins/markdown/markdoc/plugins/utils.d.ts +5 -0
  242. package/dist/server/plugins/markdown/markdoc/plugins/utils.js +1 -1
  243. package/dist/server/plugins/markdown/runtime-transform.js +1 -1
  244. package/dist/server/plugins/markdown/search/create-render-tag-fn.d.ts +2 -1
  245. package/dist/server/plugins/markdown/search/create-render-tag-fn.js +1 -1
  246. package/dist/server/plugins/markdown/search/get-ai-search-documents.js +9 -9
  247. package/dist/server/plugins/markdown/search/walk-sections.js +1 -1
  248. package/dist/server/plugins/markdown/utils/resolve-markdown-template.d.ts +1 -1
  249. package/dist/server/plugins/mcp/auth/auth-handlers.d.ts +3 -0
  250. package/dist/server/plugins/mcp/auth/auth-handlers.js +1 -1
  251. package/dist/server/plugins/mcp/codemode/capabilities/types.d.ts +1 -1
  252. package/dist/server/plugins/mcp/codemode/capabilities/utils.d.ts +1 -1
  253. package/dist/server/plugins/mcp/codemode/code-audit.d.ts +12 -0
  254. package/dist/server/plugins/mcp/codemode/code-audit.js +1 -0
  255. package/dist/server/plugins/mcp/codemode/code-execution-telemetry.d.ts +11 -0
  256. package/dist/server/plugins/mcp/codemode/code-execution-telemetry.js +1 -0
  257. package/dist/server/plugins/mcp/codemode/constants.js +1 -1
  258. package/dist/server/plugins/mcp/codemode/prompts.js +1 -1
  259. package/dist/server/plugins/mcp/codemode/tools/describe-tools.d.ts +2 -3
  260. package/dist/server/plugins/mcp/codemode/tools/execute-schema.d.ts +1 -1
  261. package/dist/server/plugins/mcp/codemode/tools/execute-schema.js +1 -1
  262. package/dist/server/plugins/mcp/codemode/tools/execute.d.ts +1 -0
  263. package/dist/server/plugins/mcp/codemode/tools/execute.js +1 -1
  264. package/dist/server/plugins/mcp/constants.d.ts +2 -1
  265. package/dist/server/plugins/mcp/constants.js +1 -1
  266. package/dist/server/plugins/mcp/docs-mcp/tool-schemas.d.ts +1 -0
  267. package/dist/server/plugins/mcp/docs-mcp/tool-schemas.js +1 -1
  268. package/dist/server/plugins/mcp/docs-mcp/tools/core/create-anonymous-session.d.ts +11 -0
  269. package/dist/server/plugins/mcp/docs-mcp/tools/core/create-anonymous-session.js +1 -0
  270. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/constants.d.ts +4 -0
  271. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/constants.js +1 -0
  272. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/get-graphql-type-list.js +1 -1
  273. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/get-graphql-type.js +7 -4
  274. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/types.d.ts +7 -1
  275. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/types.js +0 -1
  276. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/utils.d.ts +5 -1
  277. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/utils.js +4 -2
  278. package/dist/server/plugins/mcp/docs-mcp/tools/index.d.ts +4 -0
  279. package/dist/server/plugins/mcp/docs-mcp/tools/index.js +1 -1
  280. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/constants.d.ts +2 -0
  281. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/constants.js +1 -0
  282. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/get-endpoint-info.js +1 -1
  283. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/get-endpoints.js +1 -1
  284. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/get-full-api-description.js +1 -1
  285. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/get-security-schemes.js +1 -1
  286. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/list-apis.js +1 -1
  287. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/load-api-description.d.ts +6 -2
  288. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/load-api-description.js +1 -1
  289. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/types.d.ts +2 -0
  290. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/utils.d.ts +2 -2
  291. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/utils.js +1 -1
  292. package/dist/server/plugins/mcp/docs-mcp/utils.d.ts +3 -3
  293. package/dist/server/plugins/mcp/docs-mcp/utils.js +1 -1
  294. package/dist/server/plugins/mcp/gateway-mcp/elicitation.d.ts +28 -0
  295. package/dist/server/plugins/mcp/gateway-mcp/elicitation.js +2 -0
  296. package/dist/server/plugins/mcp/gateway-mcp/eligibility.d.ts +5 -17
  297. package/dist/server/plugins/mcp/gateway-mcp/eligibility.js +1 -1
  298. package/dist/server/plugins/mcp/gateway-mcp/fetch/allowed-hosts.d.ts +9 -9
  299. package/dist/server/plugins/mcp/gateway-mcp/fetch/allowed-hosts.js +1 -1
  300. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-bridge.d.ts +17 -1
  301. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-bridge.js +1 -1
  302. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-errors.d.ts +11 -0
  303. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-errors.js +1 -0
  304. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-telemetry.d.ts +14 -0
  305. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-telemetry.js +1 -0
  306. package/dist/server/plugins/mcp/gateway-mcp/fetch/normalize-path.d.ts +6 -0
  307. package/dist/server/plugins/mcp/gateway-mcp/fetch/normalize-path.js +1 -0
  308. package/dist/server/plugins/mcp/gateway-mcp/fetch/redact.d.ts +4 -0
  309. package/dist/server/plugins/mcp/gateway-mcp/fetch/redact.js +1 -0
  310. package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-blocklist.d.ts +22 -0
  311. package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-blocklist.js +1 -0
  312. package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-guard.d.ts +1 -1
  313. package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-guard.js +1 -1
  314. package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-safe-lookup.d.ts +13 -0
  315. package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-safe-lookup.js +1 -0
  316. package/dist/server/plugins/mcp/gateway-mcp/fetch-capability.d.ts +8 -1
  317. package/dist/server/plugins/mcp/gateway-mcp/fetch-capability.js +1 -1
  318. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/apply-edge-rate-limit.d.ts +3 -0
  319. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/apply-edge-rate-limit.js +1 -0
  320. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/edge-limiter.d.ts +16 -0
  321. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/edge-limiter.js +1 -0
  322. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/ip-key.d.ts +2 -0
  323. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/ip-key.js +1 -0
  324. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/limits.d.ts +7 -0
  325. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/limits.js +1 -0
  326. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/rate-limit-telemetry.d.ts +8 -0
  327. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/rate-limit-telemetry.js +1 -0
  328. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/window-counter.d.ts +15 -0
  329. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/window-counter.js +1 -0
  330. package/dist/server/plugins/mcp/gateway-mcp/secret-store.d.ts +24 -0
  331. package/dist/server/plugins/mcp/gateway-mcp/secret-store.js +1 -0
  332. package/dist/server/plugins/mcp/gateway-mcp/subject.d.ts +20 -0
  333. package/dist/server/plugins/mcp/gateway-mcp/subject.js +1 -0
  334. package/dist/server/plugins/mcp/gateway-mcp/upstream-auth-scheme.d.ts +18 -0
  335. package/dist/server/plugins/mcp/gateway-mcp/upstream-auth-scheme.js +1 -0
  336. package/dist/server/plugins/mcp/gateway-mcp/upstream-auth.d.ts +10 -0
  337. package/dist/server/plugins/mcp/gateway-mcp/upstream-auth.js +1 -0
  338. package/dist/server/plugins/mcp/handlers/docs-mcp-handler.js +1 -1
  339. package/dist/server/plugins/mcp/handlers/errors.d.ts +3 -3
  340. package/dist/server/plugins/mcp/handlers/errors.js +1 -1
  341. package/dist/server/plugins/mcp/handlers/handle-mcp-request.js +1 -1
  342. package/dist/server/plugins/mcp/handlers/mcp-credentials-handler.d.ts +5 -0
  343. package/dist/server/plugins/mcp/handlers/mcp-credentials-handler.js +101 -0
  344. package/dist/server/plugins/mcp/index.d.ts +1 -0
  345. package/dist/server/plugins/mcp/index.js +1 -1
  346. package/dist/server/plugins/mcp/servers/docs-server.d.ts +3 -1
  347. package/dist/server/plugins/mcp/servers/docs-server.js +1 -1
  348. package/dist/server/plugins/mcp/servers/mcp-server.d.ts +15 -8
  349. package/dist/server/plugins/mcp/servers/mcp-server.js +1 -1
  350. package/dist/server/plugins/mcp/types.d.ts +16 -20
  351. package/dist/server/plugins/mcp/utils/json-schema-validator.d.ts +9 -0
  352. package/dist/server/plugins/mcp/utils/json-schema-validator.js +1 -0
  353. package/dist/server/plugins/mcp/utils/jwt.d.ts +0 -9
  354. package/dist/server/plugins/mcp/utils/jwt.js +1 -1
  355. package/dist/server/plugins/mcp/utils/mode.d.ts +12 -2
  356. package/dist/server/plugins/mcp/utils/mode.js +1 -1
  357. package/dist/server/plugins/mcp/utils/telemetry-attributes.d.ts +8 -0
  358. package/dist/server/plugins/mcp/utils/telemetry-attributes.js +1 -0
  359. package/dist/server/plugins/mcp/utils/xmcp-utils.d.ts +1 -1
  360. package/dist/server/plugins/mcp/utils.d.ts +17 -5
  361. package/dist/server/plugins/mcp/utils.js +1 -1
  362. package/dist/server/plugins/mcp/workers/execute-mcp-tool.js +1 -1
  363. package/dist/server/plugins/mcp/workers/mcp-tool-telemetry.d.ts +10 -2
  364. package/dist/server/plugins/mcp/workers/mcp-tool-telemetry.js +1 -1
  365. package/dist/server/plugins/openapi-docs/index.js +1 -1
  366. package/dist/server/plugins/openapi-docs/search/get-ai-search-documents.js +16 -16
  367. package/dist/server/plugins/openapi-docs/utils.js +1 -1
  368. package/dist/server/plugins/pages/index.js +1 -1
  369. package/dist/server/plugins/scorecard-classic/compute-scorecard.d.ts +1 -1
  370. package/dist/server/plugins/scorecard-classic/compute-scorecard.js +4 -4
  371. package/dist/server/plugins/scorecard-classic/index.d.ts +1 -1
  372. package/dist/server/plugins/scorecard-classic/index.js +1 -1
  373. package/dist/server/plugins/scorecard-classic/template/components.d.ts +1 -1
  374. package/dist/server/plugins/scorecard-classic/template/useData.d.ts +1 -1
  375. package/dist/server/plugins/scorecards/plugin.js +1 -1
  376. package/dist/server/plugins/search/ai-indexer/prepare-semantic-documents.d.ts +1 -1
  377. package/dist/server/plugins/search/ai-indexer/prepare-semantic-documents.js +2 -2
  378. package/dist/server/plugins/search/documents/search-documents.js +1 -1
  379. package/dist/server/plugins/search/engines/flexsearch/index.js +1 -1
  380. package/dist/server/plugins/search/engines/flexsearch/search-index.js +1 -1
  381. package/dist/server/plugins/search/engines/search-engine.d.ts +1 -1
  382. package/dist/server/plugins/search/engines/typesense/index.js +1 -1
  383. package/dist/server/plugins/search/index.js +1 -1
  384. package/dist/server/plugins/search/llmstxt/index.d.ts +1 -1
  385. package/dist/server/plugins/search/llmstxt/index.js +4 -4
  386. package/dist/server/plugins/sidebars/index.d.ts +1 -1
  387. package/dist/server/plugins/sidebars/index.js +1 -1
  388. package/dist/server/plugins/sitemap/index.js +1 -1
  389. package/dist/server/plugins/sso/index.js +1 -1
  390. package/dist/server/providers/database/database-path-generator.d.ts +2 -2
  391. package/dist/server/providers/database/utils/storage-limit-validator.d.ts +1 -1
  392. package/dist/server/sandbox/sandbox.js +2 -2
  393. package/dist/server/sandbox/types.d.ts +3 -2
  394. package/dist/server/sandbox/utils/execution-budget.d.ts +4 -3
  395. package/dist/server/sandbox/utils/execution-budget.js +1 -1
  396. package/dist/server/ssr/render.js +1 -1
  397. package/dist/server/ssr/server-side-props/get-default-static-props.d.ts +1 -1
  398. package/dist/server/ssr/server-side-props/get-server-props-from-user-handler.d.ts +1 -1
  399. package/dist/server/ssr/template.d.ts +1 -1
  400. package/dist/server/ssr/utils.d.ts +1 -0
  401. package/dist/server/ssr/utils.js +5 -5
  402. package/dist/server/store.d.ts +2 -6
  403. package/dist/server/store.js +1 -1
  404. package/dist/server/tools/notifiers/logger.js +1 -1
  405. package/dist/server/tools/notifiers/reporter.js +6 -6
  406. package/dist/server/types/plugins/common.d.ts +4 -6
  407. package/dist/server/types/plugins/markdown.d.ts +1 -3
  408. package/dist/server/types/plugins/search.d.ts +1 -0
  409. package/dist/server/utils/catalog-classic/get-route-slug-to-catalog-slug-map.test.js +1 -1
  410. package/dist/server/utils/crypto/constants.d.ts +5 -0
  411. package/dist/server/utils/crypto/constants.js +1 -0
  412. package/dist/server/utils/crypto/decrypt-aes-gcm.d.ts +6 -0
  413. package/dist/server/utils/crypto/decrypt-aes-gcm.js +1 -0
  414. package/dist/server/utils/crypto/decrypt-claim-value.d.ts +6 -0
  415. package/dist/server/utils/crypto/decrypt-claim-value.js +1 -0
  416. package/dist/server/utils/crypto/derive-key.d.ts +5 -0
  417. package/dist/server/utils/crypto/derive-key.js +1 -0
  418. package/dist/server/utils/crypto/encrypt-aes-gcm.d.ts +6 -0
  419. package/dist/server/utils/crypto/encrypt-aes-gcm.js +1 -0
  420. package/dist/server/utils/crypto/encrypt-claim-value.d.ts +6 -0
  421. package/dist/server/utils/crypto/encrypt-claim-value.js +1 -0
  422. package/dist/server/utils/l10n/get-build-translate-context.d.ts +7 -0
  423. package/dist/server/utils/l10n/get-build-translate-context.js +1 -0
  424. package/dist/server/utils/llmstxt/agent-feedback-llms-footer.js +1 -1
  425. package/dist/server/utils/rbac.d.ts +4 -0
  426. package/dist/server/utils/rbac.js +1 -1
  427. package/dist/server/utils/report-all-errors.js +1 -1
  428. package/dist/server/utils/sandbox-context.d.ts +18 -0
  429. package/dist/server/utils/sandbox-context.js +1 -0
  430. package/dist/server/utils/shared-data.js +1 -1
  431. package/dist/server/web-server/auth.d.ts +34 -4
  432. package/dist/server/web-server/auth.js +3 -3
  433. package/dist/server/web-server/handle-api-route-request.js +1 -1
  434. package/dist/server/web-server/middleware/catalogAuthMiddleware.d.ts +1 -1
  435. package/dist/server/web-server/middleware/telemetry-middleware.js +1 -1
  436. package/dist/server/web-server/routes/api-routes/api-routes.js +1 -1
  437. package/dist/server/web-server/routes/auth.js +1 -1
  438. package/dist/server/web-server/routes/catalog/bff-catalog-related-entities.js +1 -1
  439. package/dist/server/web-server/routes/catalog/bff-catalog-revisions.js +1 -1
  440. package/dist/server/web-server/routes/catalog/bff-catalog.js +1 -1
  441. package/dist/server/web-server/routes/catalog/catalog-relations.js +1 -1
  442. package/dist/server/web-server/routes/catalog/catalog.js +1 -1
  443. package/dist/server/web-server/routes/catalog/helpers/has-access-to-entity.d.ts +1 -1
  444. package/dist/server/web-server/routes/catalog/helpers/upsert-pages-stats.d.ts +1 -1
  445. package/dist/server/web-server/routes/dynamic-route.js +1 -1
  446. package/dist/server/web-server/routes/feedback.d.ts +1 -1
  447. package/dist/server/web-server/routes/helpers/process-redirects.d.ts +1 -1
  448. package/dist/server/web-server/routes/mcp-routes/a2a.js +1 -1
  449. package/dist/server/web-server/routes/mcp-routes/agent-card.js +1 -1
  450. package/dist/server/web-server/routes/mcp-routes/mcp-oauth.d.ts +10 -6
  451. package/dist/server/web-server/routes/mcp-routes/mcp-oauth.js +1 -1
  452. package/dist/server/web-server/routes/mcp-routes/mcp-routes.js +1 -1
  453. package/dist/server/web-server/routes/mcp-routes/mcp-server-card.js +1 -1
  454. package/dist/server/web-server/routes/mcp-routes/utils/build-agent-card.d.ts +1 -1
  455. package/dist/server/web-server/routes/page-data.js +1 -1
  456. package/dist/server/web-server/routes/resolve-route.js +1 -1
  457. package/dist/server/web-server/routes/search.js +1 -1
  458. package/dist/server/web-server/routes/skills/skill-markdown.js +1 -1
  459. package/dist/server/web-server/routes/skills/skills-index.js +1 -1
  460. package/dist/server/web-server/utils/prepare-list-response.d.ts +1 -1
  461. package/dist/server/workers/api-routes-worker-pool.js +1 -1
  462. package/dist/server/workers/mcp-tool-worker-pool.js +1 -1
  463. package/dist/server/workers/worker-pool.d.ts +1 -0
  464. package/dist/server/workers/worker-pool.js +1 -1
  465. package/dist/types/entitlements.d.ts +6 -1
  466. package/dist/types/markdoc.d.ts +2 -1
  467. package/dist/utils/l10n/build-i18n-config.d.ts +24 -0
  468. package/dist/utils/l10n/build-i18n-config.js +1 -0
  469. package/dist/utils/l10n/create-translate.d.ts +19 -0
  470. package/dist/utils/l10n/create-translate.js +1 -0
  471. package/dist/utils/url/get-shared-data-fetch-url.d.ts +17 -0
  472. package/dist/utils/url/get-shared-data-fetch-url.js +1 -0
  473. package/dist/utils/url/parse-preview-url.d.ts +22 -0
  474. package/dist/utils/url/parse-preview-url.js +1 -0
  475. package/package.json +15 -14
  476. package/dist/markdoc/helpers/get-operation/get-operation-info-by-id.d.ts +0 -4
  477. package/dist/markdoc/helpers/get-operation/get-operation-info-by-id.js +0 -1
  478. package/dist/markdoc/helpers/get-operation/get-operation-info-by-pointer.d.ts +0 -4
  479. package/dist/markdoc/helpers/get-operation/get-operation-info-by-pointer.js +0 -1
  480. package/dist/markdoc/helpers/get-operation/get-operation.d.ts +0 -14
  481. package/dist/markdoc/helpers/get-operation/get-operation.js +0 -1
  482. package/dist/markdoc/helpers/get-operation/index.d.ts +0 -4
  483. package/dist/markdoc/helpers/get-operation/index.js +0 -1
  484. package/dist/markdoc/helpers/get-operation/types/index.d.ts +0 -4
  485. package/dist/markdoc/helpers/get-operation/types/index.js +0 -0
  486. package/dist/markdoc/helpers/get-operation/types/operation-identifier.d.ts +0 -5
  487. package/dist/markdoc/helpers/get-operation/types/operation-identifier.js +0 -0
  488. package/dist/markdoc/helpers/get-operation/types/operation-info.d.ts +0 -6
  489. package/dist/markdoc/helpers/get-operation/types/operation-info.js +0 -0
  490. package/dist/markdoc/helpers/get-operation/types/operation-parameters.d.ts +0 -3
  491. package/dist/markdoc/helpers/get-operation/types/operation-parameters.js +0 -0
  492. package/dist/server/plugins/markdown/attribute-resolvers/helpers/get-media-content-samples.d.ts +0 -4
  493. package/dist/server/plugins/markdown/attribute-resolvers/helpers/get-media-content-samples.js +0 -1
  494. package/dist/server/plugins/mcp/handlers/sse-keepalive.d.ts +0 -15
  495. package/dist/server/plugins/mcp/handlers/sse-keepalive.js +0 -3
@@ -0,0 +1 @@
1
+ import{REDOCLY_TEAMS_RBAC as p}from"@redocly/config";import{extractFullText as W,nodeTypes as g,contentType as P,schemaKind as j}from"@redocly/api-docs";import{toMarkdown as H}from"../../markdown/search/to-markdown.js";const L=10,_=200,C="message payload",D="message headers";function E(h){if(typeof h=="string")return h;const e=Array.isArray(h)?h:[h];return H(e).trim()}function N(h){return h.length>_?`${h.slice(0,_)}\u2026`:h}class B{#c=[];#i;#s;#o;#f;constructor(e,t,n){this.#i=e,this.#s=t,this.#o=n}addItem(e){if(!(!e.link||!e.content))try{switch(e.content.contentType){case P.OVERVIEW:this.#a(e,this.#i);break;case P.GROUP:case P.ITEM:this.#a(e,e.link);break}}catch(t){console.error(`Cannot add item to api-docs search indexer [${e.label}, ${e.link}]:`,t.message)}}#a(e,t){if(!e.content)return;const n=t.startsWith(this.#i+"/")?t.slice(this.#i.length+1):t.split("/").slice(-2).join("/"),i=e.content.children,o=this.#p(i),f=this.#y(i,n),r=e,s={id:t,url:t,title:e.label??"",text:o,path:[],deprecated:e.content.meta?.deprecated,..."httpVerb"in e&&e.httpVerb?{httpMethod:e.httpVerb}:{},..."httpPath"in e&&e.httpPath?{httpPath:e.httpPath}:{},..."badges"in e&&Array.isArray(e.badges)&&e.badges.length?{badges:e.badges}:{},..."isAdditionalOperation"in e&&e.isAdditionalOperation?{isAdditionalOperation:!0}:{},[p]:r[p],...f.length&&{parameters:f}};this.#c.push(s)}#p(e){const t=[],n=i=>{for(const o of i)if(o.nodeType===g.MARKDOC){const f=o;if(this.#h(f.content))continue;const r=W(f.content);r&&t.push(r)}else(o.nodeType===g.CONTAINER||o.nodeType===g.OVERVIEW_SECTION_WRAPPER)&&n(o.children)};return n(e),t.join(" ").trim()}#h(e){let t=!1,n=!1;const i=f=>{f.type==="code"&&f.attributes?.content?t=!0:f.type==="text"&&f.attributes?.content&&(n=!0);for(const r of f.children??[])i(r)},o=Array.isArray(e)?e:[e];for(const f of o)i(f);return t&&!n}#y(e,t){const n={},i=new Set,o=f=>{for(const r of f)if(r.nodeType===g.ITEM){const s=r;if(s[p])continue;if(s.parameters?.length)for(const a of s.parameters){if(a[p])continue;const d=this.#O(s.variant),c=this.#$(s.variant),u=a.description?E(a.description):"",l=this.#A(a.schemaId),$={name:a.name,description:u,place:d,mediaType:void 0,type:l,required:a.required??!1,deepLink:this.#d(t,"request",c,void 0,void 0,[a.name]),example:void 0,enum:void 0};n[this.#n($)]=$}this.#g(s,n,i,t)}else if(r.nodeType===g.CONTAINER){const s=r;if(s[p])continue;o(s.children)}else r.nodeType===g.OVERVIEW_SECTION_WRAPPER&&o(r.children)};return o(e),Object.values(n)}#n(e){return[...Array.isArray(e.path)?e.path:[],e.name.toString()].join(".")+e.description+e.place}#d(e,t,n,i,o,f){if(!e)return"";const r=f.join("/"),s=[`t=${t}`];return n&&s.push(`in=${n}`),o&&s.push(`c=${o}`),i&&s.push(`ct=${i}`),r&&s.push(`path=${r}`),`/${e}#${e}/${s.join("&")}`.toLowerCase()}#m(e,t,n,i){if(!e)return"";let o="messages";t&&(o+=`&m=${t}`),o+=`&t=${n}`;const f=i.join("/");return f&&(o+=`&path=${f}`),`/${e}#${e}/${o}`.toLowerCase()}#$(e){switch(e){case"query":return"query";case"path":return"path";case"headers":return"header";case"cookies":return"cookie";default:return}}#O(e){switch(e){case"query":return"query parameters";case"path":return"path parameters";case"headers":return"header parameters";case"cookies":return"cookie parameters";case"parameters":return"channel parameters";default:return e?`${e} parameters`:"parameters"}}#A(e){const t=this.#s?.[e];if(!t||t.kind!==j.JSON_SCHEMA)return"unknown";const n=t.data,i=this.#l(n);return this.#u(i)}#u(e){return Array.isArray(e.type)?e.type.join(" | "):e.type?e.type:e.properties||e.additionalProperties?"object":e.items?"array":e.enum?"string":"any"}#g(e,t,n,i){const o=this.#E(e);if(e.graphqlSchema&&Array.isArray(e.graphqlSchema)){this.#S(e.graphqlSchema,o,t);return}if(!this.#s||!this.#o)return;const f=o.startsWith("response");if(e.mediaTypeSchemas){const r=Object.entries(e.mediaTypeSchemas),s=r.find(([,a])=>!a[p]);if(s){const[a,d]=s;d.schemaId&&this.#r(d.schemaId,o,a,r.length>1,f,t,[],n,i)}}else e.schemaId&&this.#r(e.schemaId,o,void 0,!1,f,t,[],n,i);if(e.responses)for(const r of e.responses){if(r[p])continue;const s=`response ${r.code} fields`,a=new Set;if(r.mediaTypeContent){const d=Object.entries(r.mediaTypeContent),c=d.find(([,u])=>!u[p]);if(c){const[u,l]=c;l.schemaId&&this.#r(l.schemaId,s,u,d.length>1,!0,t,[],a,i)}}else r.schemaId&&this.#r(r.schemaId,s,r.mediaType,!1,!0,t,[],a,i)}if(e.messages)for(const r of e.messages){if(r[p])continue;const s=r.description?E(r.description):"",a=r.summary??"",d={name:r.name,description:(s+a).trim(),place:"message",mediaType:void 0,type:"unknown",required:!1,example:void 0,enum:void 0};t[this.#n(d)]=d,this.#f=r.name;const c=new Set;r.schemaId&&this.#r(r.schemaId,C,r.contentType,!1,!1,t,[],c,i),r.headerSchemaId&&this.#r(r.headerSchemaId,D,void 0,!1,!1,t,[],c,i),this.#f=void 0}}#E(e){switch(e.variant){case"body":return"request fields";case"responses":return"response fields";case"graphql-fields":return"fields";case"graphql-args":return"arguments";case"return-type":return"return type fields";default:return e.variant??"fields"}}#S(e,t,n){for(const i of e){const o=i.description?E(i.description):"",f={name:i.name,description:o,place:t,mediaType:void 0,path:[],type:i.type??"unknown",required:!1,example:void 0,enum:void 0};if(n[this.#n(f)]=f,i.args?.length)for(const r of i.args){const s=r.description?E(r.description):"",a={name:r.name,description:s,place:"arguments",mediaType:void 0,path:[i.name],type:r.type??"unknown",required:!1,example:void 0,enum:void 0};n[this.#n(a)]=a}}}#r(e,t,n,i,o,f,r,s,a=""){const d=this.#s?.[e];if(!d||d.kind!==j.JSON_SCHEMA||d[p])return;const c=d.data,u=i?n:void 0;this.#t(c,t,n,u,o,f,r,s,0,a)}#I(e){const t=e.match(/^response (\d+)/);return t?t[1]:void 0}#l(e){if(e.allOf){const t={};for(const n of e.allOf){const i=n.$ref?this.#e(n.$ref):n;if(i){const o=t.properties,f=t.required;Object.assign(t,i),(o||i.properties)&&(t.properties={...o||{},...i.properties||{}}),(f||i.required)&&(t.required=[...f||[],...i.required||[]])}}return delete t.allOf,e.description&&(t.description=e.description),t}if(e.$ref){const t=this.#e(e.$ref);if(t){const n={...t};return e.description&&(n.description=e.description),n}}return e}#e(e){if(!e.startsWith("#/"))return;const t=e.slice(2).split("/");let n=this.#o;for(const i of t){if(n==null||typeof n!="object")return;n=n[i]}return n!=null&&typeof n=="object"?n:void 0}#t(e,t,n,i,o,f,r,s,a,d=""){if(!(a>L||e[p])){if(e.$ref){if(s.has(e.$ref))return;s.add(e.$ref);const c=this.#e(e.$ref);c&&this.#t(c,t,n,i,o,f,r,s,a,d);return}if(e.allOf){const c={};for(const u of e.allOf){let l=u;if(u.$ref){if(s.has(u.$ref))continue;s.add(u.$ref),l=this.#e(u.$ref)}if(l){const $=c.properties,A=c.required;Object.assign(c,l),($||l.properties)&&(c.properties={...$||{},...l.properties||{}}),(A||l.required)&&(c.required=[...A||[],...l.required||[]])}}delete c.allOf,this.#t(c,t,n,i,o,f,r,s,a,d);return}if(e.discriminator&&e.properties&&e.oneOf){this.#t({...e,oneOf:void 0,discriminator:void 0},t,n,i,o,f,r,s,a,d);return}if(e.oneOf||e.anyOf){for(const c of e.oneOf||e.anyOf||[]){if(c.$ref){if(s.has(c.$ref))continue;s.add(c.$ref)}const u=c.$ref?this.#e(c.$ref):c;u&&this.#t(u,t,n,i,o,f,r,s,a+1,d)}return}if(e.properties){const c=e.required||[],u=this.#I(t),l=o?"response":"request",$=t===C?"payload":t===D?"headers":void 0;for(const[A,O]of Object.entries(e.properties)){if(O[p])continue;if(O.$ref){if(s.has(O.$ref))continue;s.add(O.$ref)}const m=O.$ref?this.#e(O.$ref):O;if(!m)continue;let x=!1;if(m.allOf){let b=!1;for(const q of m.allOf)q.$ref?s.has(q.$ref)||(s.add(q.$ref),b=!0):b=!0;x=!b}const y=this.#l(m);if(m[p]||y[p]||y.readOnly&&!o||y.writeOnly&&o||m.additionalProperties!==void 0&&!m.properties)continue;const T=m.description??y.description,R=T?E(T):"",S=m.example??y.example,V=S!==void 0?N(typeof S=="string"?S:JSON.stringify(S)):void 0,v=Array.isArray(y.enum)&&y.enum.length?y.enum:void 0,I=[...r,A],w={name:A,description:R,place:t,mediaType:n,path:r,type:this.#u(y),required:c.includes(A),deepLink:$?this.#m(d,this.#f,$,I):this.#d(d,l,void 0,i,u,I),example:V,enum:v},k=this.#n(w);f[k]==null&&(f[k]=w,x||this.#t(y,t,n,i,o,f,I,s,a+1,d))}}if(e.items&&typeof e.items=="object"&&!Array.isArray(e.items)){if(e.items.$ref){if(s.has(e.items.$ref))return;s.add(e.items.$ref)}const c=e.items.$ref?this.#e(e.items.$ref):e.items;c&&this.#t(c,t,n,i,o,f,r,s,a+1,d)}}}getResult(){return this.#c}}export{B as ApiDocsSearchIndexer};
@@ -0,0 +1,5 @@
1
+ import type { SearchFacet } from '@redocly/theme/core/types';
2
+ import type { ApiItem, ApiDocsMetadata, ApiStore } from '@redocly/api-docs';
3
+ import type { PageRouteDetails, SearchDocument } from '../../../types';
4
+ export declare function searchResolver(items: ApiItem[], metadata: ApiDocsMetadata, getSearchFacets: () => Map<string, SearchFacet>, setSearchFacets: (searchFacets: Map<string, SearchFacet>) => void, excludeFromSearch?: boolean, store?: ApiStore, document?: Record<string, unknown>): (route: PageRouteDetails) => Promise<SearchDocument[]>;
5
+ //# sourceMappingURL=search-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ import{REDOCLY_ROUTE_RBAC as p,REDOCLY_TEAMS_RBAC as o}from"@redocly/config";import{extractDocumentSearchFacets as A,setDocumentSearchFacets as D}from"./search-facets.js";import{ApiDocsSearchIndexer as d}from"./search-indexer.js";import{normalizeApiVersion as x}from"../utils/normalize-api-version.js";function O(h,i,c,u,R,g,S){return async e=>{if(R)return[];const a=e.baseSlug||e.slug,m=new d(a,g?.schemaStore,S),f=t=>{for(const r of t)m.addItem(r),r.items?.length&&f(r.items)};f(h);const s=typeof i.title=="string"?i.title:void 0,n=x(i.version),l=A(e.metadata||{},s,n,c);return D(l,c,u),m.getResult().map(t=>({...t,...t.url===a&&s&&{title:n?`${s} (${n})`:s},[o]:t[o]??e[o],[p]:e[p]??{slug:e.slug,fsPath:e.fsPath},facets:l}))}}export{O as searchResolver};
@@ -0,0 +1,4 @@
1
+ import type { ApiRoutesHandler } from '@redocly/config';
2
+ declare const specDownloadApi: ApiRoutesHandler;
3
+ export default specDownloadApi;
4
+ //# sourceMappingURL=spec-download.api.d.ts.map
@@ -0,0 +1 @@
1
+ import e from"node:path";import{existsSync as c}from"node:fs";import{readFile as F}from"node:fs/promises";import C from"js-yaml";import{withoutPathPrefix as U}from"@redocly/theme/core/utils";import{DEPRECATED_PUBLIC_API_DEFINITIONS_FOLDER as I,PUBLIC_API_DEFINITIONS_FOLDER as p}from"../../constants/common.js";import{GRAPHQL_SPEC_SLUG as y}from"../../../constants/common.js";import{canDownloadApiDefinition as O,filterDataByAccessDeep as q}from"../../utils/rbac.js";function A(a,t){const n=e.parse(a);return e.join(n.dir,n.name+t)}const T=async(a,t,n)=>{const{isAuthenticated:i,teams:l,claims:{email:f}}=t.user,S=new URL(a.url),o=U(S.pathname),m=o.startsWith(y),s=decodeURIComponent(m?o.replace(y,""):o.replace(p,"").replace(I,"")),{rbac:u={},requiresLogin:d=!1}=t.config.access||{};if(!O(o,u,d,{isAuthenticated:i,email:f,teams:l}))return new Response("Unauthorized",{status:i?403:401});const r=n.props?.outdir||"";if(m){const E=e.join(r,p,s);if(!c(E))return new Response("Not found",{status:404});const x=await F(E,"utf-8");return new Response(x,{headers:{"Content-Type":"application/graphql"}})}const h=e.join(r,p,A(s,".json")),P=e.join(r,I,A(s,".json")),R=c(h),_=c(P);if(!R&&!_)return new Response("Not found",{status:404});const L=await F(R?h:P,"utf-8"),N=JSON.parse(L),w=q(N,{isAuthenticated:i,email:f,teams:l},u,d),D=e.extname(s),j=D===".yaml"?C.dump(w):JSON.stringify(w,null,2);return new Response(j,{headers:{"Content-Type":D===".yaml"?"application/yaml":"application/json"}})};var k=T;export{k as default};
@@ -0,0 +1,3 @@
1
+ import type { BundledApiDefinition } from './loader.js';
2
+ export declare function storeDefinitionBundles(definitions: BundledApiDefinition[], outDir: string): void;
3
+ //# sourceMappingURL=store-definition-bundles.d.ts.map
@@ -0,0 +1 @@
1
+ import{writeFileSync as m}from"fs";import p from"path";import{print as d}from"graphql";import{PUBLIC_API_DEFINITIONS_FOLDER as h,PUBLIC_STATIC_FOLDER as a}from"../../constants/common.js";import{logger as u}from"../../tools/notifiers/logger.js";import{ensureDir as g}from"../../utils/fs.js";import{replaceFileExtension as S}from"./utils/replace-file-extension.js";const r=new Map;function D(f,t){const n=h.slice(1);try{for(const e of f){const{document:s,relativePath:i,hash:o,type:c}=e;if(r.get(i)!==o){if(c==="graphql"){l({outDir:t,definitionFolder:n,relativePath:i,definitionString:d(s)}),r.set(i,o);continue}if(i.startsWith(a+"/")){l({outDir:t,definitionFolder:".",relativePath:i.replace(a+"/",""),definitionString:JSON.stringify(s,null,2)}),r.set(i,o);continue}l({outDir:t,definitionFolder:n,relativePath:S(i,".json"),definitionString:JSON.stringify(s,null,2)}),r.set(i,o)}}}catch(e){u.error("failed to store definition bundles",e)}}function l({outDir:f,definitionString:t,relativePath:n,definitionFolder:e}){m(g(p.resolve(f,`${e}/${n}`)),t,"utf8")}export{D as storeDefinitionBundles};
@@ -0,0 +1,17 @@
1
+ import type { ApiItem } from '@redocly/api-docs';
2
+ export type ItemPosition = {
3
+ position: {
4
+ start: {
5
+ lineNumber: number;
6
+ column: number;
7
+ };
8
+ end?: {
9
+ lineNumber: number;
10
+ column: number;
11
+ };
12
+ };
13
+ startLine: number;
14
+ endLine: number;
15
+ };
16
+ export declare function buildItemPositions(items: ApiItem[], baseSlug: string, acc?: Record<string, ItemPosition>): Record<string, ItemPosition>;
17
+ //# sourceMappingURL=build-item-positions.d.ts.map
@@ -0,0 +1 @@
1
+ import{toRelativeSlug as s}from"./to-relative-slug.js";function m(r,n,i={}){for(const t of r){const e=t.content?.meta?.position,o=t.routeSlug??t.link;e&&o&&(i[s(o,n)]={position:e,startLine:e.start.lineNumber,endLine:e.end?.lineNumber??e.start.lineNumber}),t.items?.length&&m(t.items,n,i)}return i}export{m as buildItemPositions};
@@ -0,0 +1,3 @@
1
+ import type { ApiItem } from '@redocly/api-docs';
2
+ export declare function buildRoutesMapping(items: ApiItem[], baseSlug: string, acc?: Record<string, string>): Record<string, string>;
3
+ //# sourceMappingURL=build-routes-mapping.d.ts.map
@@ -0,0 +1 @@
1
+ import{toRelativeSlug as u}from"./to-relative-slug.js";function f(r,e,o={}){for(const t of r){const i=t.content?.meta?.pointer,n=t.routeSlug??t.link;i&&n&&(o[`#${i}`]=u(n,e)),t.items?.length&&f(t.items,e,o)}return o}export{f as buildRoutesMapping};
@@ -0,0 +1,12 @@
1
+ import { REDOCLY_TEAMS_RBAC } from '@redocly/config';
2
+ import type { ApiItem } from '@redocly/api-docs';
3
+ import type { RbacScopeItems } from '@redocly/config';
4
+ export type ItemRouteEntry = {
5
+ link: string;
6
+ label?: string;
7
+ httpVerb?: string;
8
+ metadata?: Record<string, unknown>;
9
+ [REDOCLY_TEAMS_RBAC]?: RbacScopeItems;
10
+ };
11
+ export declare function collectItemRoutes(items: ApiItem[], configRbac?: RbacScopeItems, inheritedRbac?: RbacScopeItems): ItemRouteEntry[];
12
+ //# sourceMappingURL=collect-item-routes.d.ts.map
@@ -0,0 +1 @@
1
+ import{REDOCLY_TEAMS_RBAC as n}from"@redocly/config";function i(m,o,l){const e=[];for(const t of m){const s=t[n],a=s??l??o;t.link&&e.push({link:t.link,label:t.label,httpVerb:t.httpVerb,metadata:t.metadata,[n]:a}),t.items&&t.items.length>0&&e.push(...i(t.items,o,s??l))}return e}export{i as collectItemRoutes};
@@ -0,0 +1,26 @@
1
+ import type { RawUniversalConfig } from '@redocly/openapi-core';
2
+ export declare function isPlainNonMarkdownText(markdown: string): boolean;
3
+ export declare const MarkdownParserDecorator: ({ outputRelativePath, cwd, }: {
4
+ outputRelativePath: string;
5
+ cwd: string;
6
+ }) => {
7
+ any: {
8
+ leave(node: Record<string, unknown>, ctx: any): void;
9
+ };
10
+ ref: {
11
+ leave(node: Record<string, unknown>, ctx: any): void;
12
+ };
13
+ };
14
+ export declare const RbacDecorator: () => {
15
+ Tag: {
16
+ enter(node: Record<string, unknown>): void;
17
+ };
18
+ any: {
19
+ leave(node: Record<string, unknown>, ctx: any): void;
20
+ };
21
+ ref: {
22
+ leave(node: Record<string, unknown>): void;
23
+ };
24
+ };
25
+ export declare function injectDecoratorIntoConfig(config: RawUniversalConfig, outputRelativePath: string, cwd: string): RawUniversalConfig;
26
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ import b from"node:path";import{REDOCLY_TEAMS_RBAC as p}from"@redocly/config";import{slash as k}from"../../../../utils/path/slash.js";function f(t,r,a){if(!r)throw new Error("Visitor required");if(t){t.description&&r(t,"description",a.location.absolutePointer+"/description",a);for(const o in t["x-enumDescriptions"])r(t["x-enumDescriptions"],o,a.location.absolutePointer+"/x-enumDescriptions/"+o,a)}}const x=/^[a-zA-Z0-9\s\-,.!\?:;'"()/]+$/,d=/^\s*(?:[-+*]\s|\d+[.)]\s)/m;function g(t){return x.test(t)&&!d.test(t)}const s=({outputRelativePath:t,cwd:r})=>{const a=function(e,m,l,u){const{node:n}=u.resolve(e[m]);if(!n||typeof n!="string"||g(n))return;const i=u.getVisitorData();i.markdocChunks=i.markdocChunks||[],i.markdocChunks.push({node:e,pointer:k(b.relative(r,l)),markdown:n,relativePath:t,key:m})};return{any:{leave(o,e){f(o,a,e)}},ref:{leave(o,e){f(o,a,e)}}}},c=()=>{const t={};return{Tag:{enter(r){r?.["x-rbac"]&&(t[String(r.name)]=r["x-rbac"])}},any:{leave(r,a){if((a.type.name==="Operation"||a.type.name==="Webhook")&&"tags"in r&&Array.isArray(r.tags))for(const o of r.tags)t[o]&&(r["x-rbac"]=r["x-rbac"]||t[o]);r?.["x-rbac"]&&(r[p]=r["x-rbac"],delete r["x-rbac"])}},ref:{leave(r){r?.["x-rbac"]&&(r[p]=r["x-rbac"],delete r["x-rbac"])}}}};function D(t,r,a){const o={id:"markdown",decorators:{oas2:{markdown:s,rbac:c},oas3:{markdown:s,rbac:c},async3:{markdown:s,rbac:c}}};return{...t,decorators:{"markdown/rbac":"on","markdown/markdown":{outputRelativePath:r,cwd:a},...t.decorators||{}},plugins:[...t.plugins||[],o]}}export{s as MarkdownParserDecorator,c as RbacDecorator,D as injectDecoratorIntoConfig,g as isPlainNonMarkdownText};
@@ -0,0 +1,6 @@
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
@@ -0,0 +1,5 @@
1
+ import f from"node:path";import{getLineColLocation as m,isAbsoluteUrl as g}from"@redocly/openapi-core";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=g(e.source.absoluteRef)?e.source.absoluteRef:f.relative(c,e.source.absoluteRef);try{const t=m(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};
@@ -0,0 +1,2 @@
1
+ export declare function normalizeApiVersion(value: unknown): string | undefined;
2
+ //# sourceMappingURL=normalize-api-version.d.ts.map
@@ -0,0 +1 @@
1
+ function r(n){if(!(n==null||typeof n=="object"))return String(n)}export{r as normalizeApiVersion};
@@ -0,0 +1,2 @@
1
+ export declare function normalizeFeedbackOptions(feedbackOptions: Record<string, any> | null | undefined): Record<string, any> | undefined;
2
+ //# sourceMappingURL=normalize-feedback-options.d.ts.map
@@ -0,0 +1 @@
1
+ import{FEEDBACK_TYPES as t}from"../../../../constants/common.js";function o(s){if(!s)return;let e="";const{type:i,settings:a}=s;switch(i){case t.RATING:e="Rate this section";break;case t.SENTIMENT:e="Was this section helpful?";break;case t.MOOD:e="Was this section helpful?";break;case t.COMMENT:e="Share your feedback about this section";break;case t.SCALE:e="How would you rate this section?";break}return{...s,settings:{...a,label:a?.label||e}}}export{o as normalizeFeedbackOptions};
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Convert a spec file's relative path to its base route slug, applying the same
3
+ * l10n transform the route builder uses (`@l10n/de/foo.yaml` -> `/de/foo`).
4
+ *
5
+ * Index files map to their directory URL (`foo/index.yaml` -> `/foo`). The
6
+ * index decision reuses `parseBaseName` — the exact primitive the core route
7
+ * slugifier uses (`isIndexFile` in server/plugins/lifecycle.ts) — so it can't
8
+ * drift from the core / openapi-docs. Without it, an API mounted at
9
+ * `output: foo/index.yaml` would land at `/foo/index` and break links/sidebar
10
+ * entries that reference it by its `index.yaml` output path.
11
+ *
12
+ * NOTE: this transform does NOT apply the content-slugs normalizations
13
+ * (versioned `@x.y` folders, custom slugs) — route building derives slugs
14
+ * through `createSlugify` instead. It is used by the loader-time mock-server
15
+ * URL (`options.ts`) and by `rebaseAutoMockServerUrl` (`index.ts`), which
16
+ * reconstructs the same value to detect the auto-generated URL and rebase it
17
+ * onto the normalized route slug.
18
+ */
19
+ export declare function relativePathToBaseSlug(relativePath: string): string;
20
+ //# sourceMappingURL=relative-path-to-base-slug.d.ts.map
@@ -0,0 +1 @@
1
+ import i from"node:path";import{isL10nPath as m}from"../../../fs/utils/is-l10n-path.js";import{getLocaleFromRelativePath as n}from"../../../fs/utils/get-locale-from-relative-path.js";import{removeL10nPrefix as s}from"../../../fs/utils/remove-l10n-prefix.js";import{parseBaseName as p}from"../../utils.js";function h(r){const{baseName:t,isIndexFile:a}=p(r),e=i.posix.dirname(r),o=a?e==="."?"":e:e==="."?t:i.posix.join(e,t);return m(o)?("/"+n(o).toLowerCase()+"/"+s(o)).replace(/\/{2,}/g,"/"):("/"+o).replace(/\/{2,}/g,"/")}export{h as relativePathToBaseSlug};
@@ -0,0 +1,2 @@
1
+ export declare function replaceFileExtension(filePath: string, fileExt: string): string;
2
+ //# sourceMappingURL=replace-file-extension.d.ts.map
@@ -0,0 +1 @@
1
+ import n from"node:path";function s(o,e){const i=n.posix.dirname(o),p=n.posix.basename(o,n.posix.extname(o))+e;return n.posix.join(i,p)}export{s as replaceFileExtension};
@@ -0,0 +1,3 @@
1
+ import type { ApiItem } from '@redocly/api-docs';
2
+ export declare function resolveApiDocTitle(info: Record<string, unknown> | undefined, type: string, navItems: ApiItem[]): string | undefined;
3
+ //# sourceMappingURL=resolve-api-doc-title.d.ts.map
@@ -0,0 +1 @@
1
+ function n(e,r,i){if(typeof e?.title=="string")return e.title;if(r==="graphql"){const t=i[0]?.label;if(typeof t=="string")return t}}export{n as resolveApiDocTitle};
@@ -0,0 +1,10 @@
1
+ import type { RbacScopeItems } from '@redocly/config';
2
+ type ConfigWithRbac = {
3
+ access?: {
4
+ rbac?: unknown;
5
+ };
6
+ rbac?: unknown;
7
+ };
8
+ export declare function resolveConfigRbac(config?: ConfigWithRbac): RbacScopeItems | undefined;
9
+ export {};
10
+ //# sourceMappingURL=resolve-config-rbac.d.ts.map
@@ -0,0 +1 @@
1
+ import{isRbacScopeItems as e}from"../../../utils/rbac/is-rbac-scope-items.js";function a(r){if(e(r?.access?.rbac))return r.access.rbac;if(e(r?.rbac))return r.rbac}export{a as resolveConfigRbac};
@@ -0,0 +1,2 @@
1
+ export declare function toRelativeSlug(absoluteSlug: string, baseSlug: string): string;
2
+ //# sourceMappingURL=to-relative-slug.d.ts.map
@@ -0,0 +1 @@
1
+ function i(r,t){return t?r===t?"":r.startsWith(`${t}/`)?r.slice(t.length+1):r:r}export{i as toRelativeSlug};
@@ -1 +1 @@
1
- import{join as c}from"path";import{transformSync as l}from"esbuild";import{REDOCLY_ROUTE_RBAC as p}from"@redocly/config";import{removeTrailingSlash as d}from"../../../utils/url/remove-trailing-slash.js";import{removeLeadingSlash as m}from"../../../utils/url/remove-leading-slash.js";import{logger as u}from"../../tools/notifiers/logger.js";import{envConfig as g}from"../../config/env-config.js";import{USER_DEFINED_API_FUNCTIONS_COUNTER_KEY as h}from"../../../server/store.js";import{parseRouteFsPathForHono as F}from"./helpers/parse-route-fs-path-for-hono.js";import{telemetryTraceStep as A}from"../../../cli/telemetry/helpers/trace-step.js";const f="api-functions",P=/\bexport\s+default\b|\bexport\s*\{[^}]*\b(?:default\s*[,}]|\w+\s+as\s+default\b)/;async function E(t,o){let i;try{i=await o.fs.read(t),l(i,{loader:t.endsWith(".js")?"js":"ts"})}catch(e){const a=e instanceof Error?e.message:String(e);return u.warn(`Skipping API function ${t} because it cannot be parsed: ${a}`),!1}if(!P.test(i)){const e=`API function ${t} does not export a default function. Add 'export default function (request, context) { ... }' to define an API function.`;return g.isDevelopMode?(u.warn(e),!0):(u.warn(`Skipping ${e}`),!1)}return!0}function R(t){return m(d(t))}function I(t){return`^${R(t)}`}function _(t){const o=t.map(I);return o.push(".*@api"),new RegExp(`(${o.join("|")})/.*.(ts|js)$`)}async function H(){return{id:"ApiFunctions",requiredEntitlements:["apiFunctions"],async processContent(t,o){await A("build.plugin.api_functions",async i=>{const e=await o.getConfig();i?.setAttribute("config",JSON.stringify(e.apiFunctions||{}));const a=_(e.apiFunctions?.folders||[]),s=[];for(const n of o.fs.scan(a)){if(n.isVirtual)continue;const r=F(n.relativePath);r&&await E(n.relativePath,o)&&s.push({requestHandlerId:`${f}:${r.handler}`,fullPath:c(t.contentDir,r.handler),slug:r.path,httpMethod:r.method,fsPath:n.relativePath})}t.clearRequestHandlersByPrefix(`${f}:`);for(const n of s)t.createRequestHandler(n.requestHandlerId,n.fullPath),t.addApiRoute({requestHandlerId:n.requestHandlerId,slug:n.slug,fsPath:n.fsPath,httpMethod:n.httpMethod,[p]:{fsPath:n.fsPath,slug:n.slug}});i?.setAttribute("definedApiFunctions",String(s.length)),t.setGlobalConfig({[h]:s.length})})}}}export{f as API_FUNCTIONS_REQUEST_HANDLER_ID,H as apiFunctionsPlugin};
1
+ import{join as c}from"path";import{transformSync as l}from"esbuild";import{REDOCLY_ROUTE_RBAC as p}from"@redocly/config";import{removeTrailingSlash as d}from"../../../utils/url/remove-trailing-slash.js";import{removeLeadingSlash as m}from"../../../utils/url/remove-leading-slash.js";import{logger as u}from"../../tools/notifiers/logger.js";import{envConfig as g}from"../../config/env-config.js";import{USER_DEFINED_API_FUNCTIONS_COUNTER_KEY as h}from"../../../server/store.js";import{parseRouteFsPathForHono as F}from"./helpers/parse-route-fs-path-for-hono.js";import{telemetryTraceStep as A}from"../../../cli/telemetry/helpers/trace-step.js";const f="api-functions",P=/\bexport\s+default\b|\bexport\s*\{[^}]*\b(?:default\s*[,}]|\w+\s+as\s+default\b)/;async function E(t,o){let r;try{r=await o.fs.read(t),l(r,{loader:t.endsWith(".js")?"js":"ts"})}catch(e){const a=e instanceof Error?e.message:String(e);return u.warn(`Skipping API function ${t} because it cannot be parsed: ${a}`),!1}if(!P.test(r)){const e=`API function ${t} does not export a default function. Add 'export default function (request, context) { ... }' to define an API function.`;return g.isDevelopMode?(u.warn(e),!0):(u.warn(`Skipping ${e}`),!1)}return!0}function R(t){return m(d(t))}function I(t){return`^${R(t)}`}function b(t){const o=t.map(I);return o.push(".*@api"),new RegExp(`(${o.join("|")})/.*.(ts|js)$`)}async function H(){return{id:"ApiFunctions",requiredEntitlements:["apiFunctions"],async processContent(t,o){await A("com.redocly.build.plugin.apiFunctions",async r=>{const e=await o.getConfig();r?.setAttribute("config",JSON.stringify(e.apiFunctions||{}));const a=b(e.apiFunctions?.folders||[]),s=[];for(const n of o.fs.scan(a)){if(n.isVirtual)continue;const i=F(n.relativePath);i&&await E(n.relativePath,o)&&s.push({requestHandlerId:`${f}:${i.handler}`,fullPath:c(t.contentDir,i.handler),slug:i.path,httpMethod:i.method,fsPath:n.relativePath})}t.clearRequestHandlersByPrefix(`${f}:`);for(const n of s)t.createRequestHandler(n.requestHandlerId,n.fullPath),t.addApiRoute({requestHandlerId:n.requestHandlerId,slug:n.slug,fsPath:n.fsPath,httpMethod:n.httpMethod,[p]:{fsPath:n.fsPath,slug:n.slug}});r?.setAttribute("definedApiFunctions",String(s.length)),t.setGlobalConfig({[h]:s.length})})}}}export{f as API_FUNCTIONS_REQUEST_HANDLER_ID,H as apiFunctionsPlugin};
@@ -1 +1 @@
1
- import{simplifyAstStructure as h}from"@redocly/openapi-docs/lib/utils/simplifyAstStructure.js";import{storeDefinitionBundles as p}from"./store-definition-bundles.js";import{arazzoDocLoader as y,arazzoDocsLoader as P}from"./arazzo-doc-loader.js";import{telemetryTraceStep as k}from"../../../cli/telemetry/helpers/trace-step.js";const u="arazzo-docs-";async function $(w){let l=[];return{id:"arazzo",loaders:{"arazzo-doc":y,"arazzo-docs":P},processContent:async(e,o)=>{await k("build.plugin.arazzo_docs",async()=>{for(const t of await o.fs.scan(/(\.ya?ml|\.json)$/))if(!await o.isPathIgnored(t.relativePath))try{const{data:a,compoundHash:c}=await o.cache.load(t.realRelativePath,"arazzo-doc");if(!a?.length)continue;l=a.map(({markdocChunks:r,relativePath:n,isVirtual:i,customOutputRelativeFile:s,realRelativePath:d})=>({chunks:r,relativePath:n,realRelativePath:d,isVirtual:s!=null||t.isVirtual||i})),p(a,e.outdir,c);for(const r of a){const n=`${u}${r.relativePath}`;await e.createSharedData(n,{document:r.document})}}catch(a){console.error(a)}})},afterRoutesCreated:async(e,o)=>{for(const{chunks:t,relativePath:a,isVirtual:c,realRelativePath:r}of l)await o.cache.load(a,{loader:async function(){await o.cache.load(r,"arazzo-doc");for(const{node:i,markdown:s,pointer:d,key:z,relativePath:m}of t){const{ast:f}=await e.parseMarkdoc({input:{content:s,relativePath:d,isVirtual:c},context:o,deps:{sharedDataIds:[`${u}${m}`]}});i[`x-parsed-md-${z}`]={result:h(f)}}},name:"arazzo-markdoc-inline-parser"})}}}export{$ as arazzoDocsPlugin};
1
+ import{simplifyAstStructure as h}from"@redocly/api-docs";import{storeDefinitionBundles as p}from"./store-definition-bundles.js";import{arazzoDocLoader as y,arazzoDocsLoader as D}from"./arazzo-doc-loader.js";import{telemetryTraceStep as P}from"../../../cli/telemetry/helpers/trace-step.js";const u="arazzo-docs-";async function $(k){let l=[];return{id:"arazzo",loaders:{"arazzo-doc":y,"arazzo-docs":D},processContent:async(e,o)=>{await P("com.redocly.build.plugin.arazzoDocs",async()=>{for(const t of await o.fs.scan(/(\.ya?ml|\.json)$/))if(!await o.isPathIgnored(t.relativePath))try{const{data:a,compoundHash:n}=await o.cache.load(t.realRelativePath,"arazzo-doc");if(!a?.length)continue;l=a.map(({markdocChunks:r,relativePath:c,isVirtual:i,customOutputRelativeFile:s,realRelativePath:d})=>({chunks:r,relativePath:c,realRelativePath:d,isVirtual:s!=null||t.isVirtual||i})),p(a,e.outdir,n);for(const r of a){const c=`${u}${r.relativePath}`;await e.createSharedData(c,{document:r.document})}}catch(a){console.error(a)}})},afterRoutesCreated:async(e,o)=>{for(const{chunks:t,relativePath:a,isVirtual:n,realRelativePath:r}of l)await o.cache.load(a,{loader:async function(){await o.cache.load(r,"arazzo-doc");for(const{node:i,markdown:s,pointer:d,key:z,relativePath:m}of t){const{ast:f}=await e.parseMarkdoc({input:{content:s,relativePath:d,isVirtual:n},context:o,deps:{sharedDataIds:[`${u}${m}`]}});i[`x-parsed-md-${z}`]={result:h(f)}}},name:"arazzo-markdoc-inline-parser"})}}}export{$ as arazzoDocsPlugin};
@@ -1 +1 @@
1
- import A from"path";import{simplifyAstStructure as E}from"@redocly/openapi-docs/lib/utils/simplifyAstStructure.js";import{buildMenuItems as $}from"@redocly/asyncapi-docs/lib/utils/build-menu-items.js";import{findFirstBinding as T}from"@redocly/asyncapi-docs/lib/utils/find-first-binding.js";import{ASYNC_API_DOCS_TEMPLATE_ID as v}from"../../../constants/common.js";import{combineUrls as D}from"@redocly/theme/core/utils";import{PUBLIC_API_DEFINITIONS_FOLDER as R}from"../../constants/common.js";import{logger as x}from"../../tools/notifiers/logger.js";import{getRouteSlugsForPath as F}from"../utils.js";import{getTemplatePath as b}from"./get-template-path.js";import{storeDefinitionBundles as O}from"./store-definition-bundles.js";import{asyncapiDocLoader as N,asyncapiDocsLoader as j}from"./asyncapi-doc-loader.js";import{searchResolver as L}from"./search/search-resolver.js";import{getAiDocumentsStore as G}from"./search/get-ai-search-documents.js";import{telemetryTraceStep as M}from"../../../cli/telemetry/helpers/trace-step.js";const _="asyncapi-docs-";async function ot(d){let p=[],u=new Set;return{id:"asyncapi",requiredEntitlements:["asyncapi"],loaders:{"asyncapi-doc":N,"asyncapi-docs":j},processContent:async(e,o)=>{await M("build.plugin.asyncapi_docs",async()=>{if((await o.getConfig()).plugins?.some(l=>l.startsWith("@redocly/portal-plugin-async-api/"))){x.warn("The plugin '@redocly/portal-plugin-async-api' is deprecated. Please remove it from your config to use built-in AsyncAPI docs.");return}const c=e.createTemplate(v,b("../../../client/templates/asyncapi-docs/template.js")),g=e.registerServerPropsGetter(v,b("./get-server-props.js"));for(const l of await o.fs.scan(/(\.ya?ml|\.json)$/))if(!await o.isPathIgnored(l.relativePath))try{const{data:r,compoundHash:w}=await o.cache.load(l.realRelativePath,"asyncapi-doc");if(!r?.length)continue;p=r.map(({markdocChunks:t,relativePath:s,isVirtual:m,customOutputRelativeFile:f,realRelativePath:y})=>({chunks:t,relativePath:s,realRelativePath:y,isVirtual:f!=null||l.isVirtual||m})),O(r,e.outdir,w);for(const t of r){const s=`${_}${t.relativePath}`,m=T(t.document),{navItems:f,apiItems:y}=$({asyncApiDoc:t.document,protocol:m||""}),I=[{url:D(R,`${C(t.relativePath,".json")}?download`)},{url:D(R,`${C(t.relativePath,".yaml")}?download`)}];await e.createSharedData(s,{document:t.document,apiItems:y,protocol:m,downloadUrls:I}),f.forEach(i=>{const n={fsPath:t.relativePath,slugSuffix:`/${i.link}`,templateId:c,sharedData:[{key:"AsyncApiDefinition",id:s}],getStaticData:S(o.withPathPrefix,i.label),serverPropsGetterIds:[g]};e.addRoute(n),i.items&&i.items.forEach(a=>{e.addRoute({...n,slugSuffix:`/${a.link}`,getStaticData:S(o.withPathPrefix,a.label)}),a.items&&a.items.forEach(h=>{e.addRoute({...n,slugSuffix:`/${h.link}`,getStaticData:S(o.withPathPrefix,a.label)})})})}),e.addRoute({fsPath:t.customOutputRelativeFile||t.relativePath,templateId:c,hasClientRoutes:!0,getSidebar:i=>{const n=a=>{const h={...a};return a.link&&(h.routeSlug=D(i.slug,a.link),h.link=D(i.slug,a.link)),a.items&&(h.items=a.items.map(n)),h};return[{type:"link",label:t.document.info?.title??"AsyncAPI Overview",routeSlug:i.slug,link:i.slug},...f.map(n)]},getSearchDocuments:L(e,t.document),getStaticData:S(o.withPathPrefix,t.document.info?.title??"AsyncAPI Docs"),getAiDocumentsStore:G({actions:e,document:t.document,metadata:{type:"asyncapi",title:t.document.info?.title??"AsyncAPI Docs",description:t.document.info?.description??"",...t.document.info?.["x-metadata"]??{}}}),metadata:{type:"asyncapi",title:t.document.info?.title??"AsyncAPI Docs",description:t.document.info?.description??"",...t.document.info?.["x-metadata"]??{}},sharedData:[{key:"AsyncApiDefinition",id:s}]})}}catch(r){console.error(r)}})},afterRoutesCreated:async(e,o)=>{const P=new Set;for(const{chunks:c,relativePath:g,isVirtual:l,realRelativePath:r}of p){const w=F(e.getAllRoutes(),g),t=(await o.cache.load(r,"asyncapi-doc")).compoundHash;await o.cache.load(g,{loader:async function(){for(const{node:m,markdown:f,pointer:y,key:I,relativePath:i}of c){const{ast:n}=await e.parseMarkdoc({input:{content:f,relativePath:y,isVirtual:l},context:o,deps:{sharedDataIds:[`${_}${i}`],routeSlugs:w}});m[`x-parsed-md-${I}`]={result:E(n)}}},name:"asyncapi-markdoc-inline-parser"},[t]);for(const{pointer:s}of c)P.add(s)}const k=u.difference(P);for(const c of k)o.cache.delete(c);u=P}}}function S(d,p){return async function(u,e){return{props:{settings:{baseUrlPath:d(u.baseSlug)},disableAutoScroll:!0,seo:{title:p}}}}}function C(d,p){const u=A.posix.dirname(d),e=A.posix.basename(d,A.posix.extname(d))+p;return A.posix.join(u,e)}export{ot as asyncAPIDocsPlugin};
1
+ import A from"path";import{simplifyAstStructure as E}from"@redocly/openapi-docs/lib/utils/simplifyAstStructure.js";import{buildMenuItems as $}from"@redocly/asyncapi-docs/lib/utils/build-menu-items.js";import{findFirstBinding as T}from"@redocly/asyncapi-docs/lib/utils/find-first-binding.js";import{ASYNC_API_DOCS_TEMPLATE_ID as v}from"../../../constants/common.js";import{combineUrls as D}from"@redocly/theme/core/utils";import{PUBLIC_API_DEFINITIONS_FOLDER as R}from"../../constants/common.js";import{logger as x}from"../../tools/notifiers/logger.js";import{getRouteSlugsForPath as F}from"../utils.js";import{getTemplatePath as b}from"./get-template-path.js";import{storeDefinitionBundles as O}from"./store-definition-bundles.js";import{asyncapiDocLoader as N,asyncapiDocsLoader as j}from"./asyncapi-doc-loader.js";import{searchResolver as L}from"./search/search-resolver.js";import{getAiDocumentsStore as G}from"./search/get-ai-search-documents.js";import{telemetryTraceStep as M}from"../../../cli/telemetry/helpers/trace-step.js";const _="asyncapi-docs-";async function ot(d){let p=[],u=new Set;return{id:"asyncapi",requiredEntitlements:["asyncapi"],loaders:{"asyncapi-doc":N,"asyncapi-docs":j},processContent:async(e,o)=>{await M("com.redocly.build.plugin.asyncapiDocs",async()=>{if((await o.getConfig()).plugins?.some(l=>l.startsWith("@redocly/portal-plugin-async-api/"))){x.warn("The plugin '@redocly/portal-plugin-async-api' is deprecated. Please remove it from your config to use built-in AsyncAPI docs.");return}const c=e.createTemplate(v,b("../../../client/templates/asyncapi-docs/template.js")),g=e.registerServerPropsGetter(v,b("./get-server-props.js"));for(const l of await o.fs.scan(/(\.ya?ml|\.json)$/))if(!await o.isPathIgnored(l.relativePath))try{const{data:r,compoundHash:w}=await o.cache.load(l.realRelativePath,"asyncapi-doc");if(!r?.length)continue;p=r.map(({markdocChunks:t,relativePath:s,isVirtual:m,customOutputRelativeFile:f,realRelativePath:y})=>({chunks:t,relativePath:s,realRelativePath:y,isVirtual:f!=null||l.isVirtual||m})),O(r,e.outdir,w);for(const t of r){const s=`${_}${t.relativePath}`,m=T(t.document),{navItems:f,apiItems:y}=$({asyncApiDoc:t.document,protocol:m||""}),I=[{url:D(R,`${C(t.relativePath,".json")}?download`)},{url:D(R,`${C(t.relativePath,".yaml")}?download`)}];await e.createSharedData(s,{document:t.document,apiItems:y,protocol:m,downloadUrls:I}),f.forEach(i=>{const n={fsPath:t.relativePath,slugSuffix:`/${i.link}`,templateId:c,sharedData:[{key:"AsyncApiDefinition",id:s}],getStaticData:S(o.withPathPrefix,i.label),serverPropsGetterIds:[g]};e.addRoute(n),i.items&&i.items.forEach(a=>{e.addRoute({...n,slugSuffix:`/${a.link}`,getStaticData:S(o.withPathPrefix,a.label)}),a.items&&a.items.forEach(h=>{e.addRoute({...n,slugSuffix:`/${h.link}`,getStaticData:S(o.withPathPrefix,a.label)})})})}),e.addRoute({fsPath:t.customOutputRelativeFile||t.relativePath,templateId:c,hasClientRoutes:!0,getSidebar:i=>{const n=a=>{const h={...a};return a.link&&(h.routeSlug=D(i.slug,a.link),h.link=D(i.slug,a.link)),a.items&&(h.items=a.items.map(n)),h};return[{type:"link",label:t.document.info?.title??"AsyncAPI Overview",routeSlug:i.slug,link:i.slug},...f.map(n)]},getSearchDocuments:L(e,t.document),getStaticData:S(o.withPathPrefix,t.document.info?.title??"AsyncAPI Docs"),getAiDocumentsStore:G({actions:e,document:t.document,metadata:{type:"asyncapi",title:t.document.info?.title??"AsyncAPI Docs",description:t.document.info?.description??"",...t.document.info?.["x-metadata"]??{}}}),metadata:{type:"asyncapi",title:t.document.info?.title??"AsyncAPI Docs",description:t.document.info?.description??"",...t.document.info?.["x-metadata"]??{}},sharedData:[{key:"AsyncApiDefinition",id:s}]})}}catch(r){console.error(r)}})},afterRoutesCreated:async(e,o)=>{const P=new Set;for(const{chunks:c,relativePath:g,isVirtual:l,realRelativePath:r}of p){const w=F(e.getAllRoutes(),g),t=(await o.cache.load(r,"asyncapi-doc")).compoundHash;await o.cache.load(g,{loader:async function(){for(const{node:m,markdown:f,pointer:y,key:I,relativePath:i}of c){const{ast:n}=await e.parseMarkdoc({input:{content:f,relativePath:y,isVirtual:l},context:o,deps:{sharedDataIds:[`${_}${i}`],routeSlugs:w}});m[`x-parsed-md-${I}`]={result:E(n)}}},name:"asyncapi-markdoc-inline-parser"},[t]);for(const{pointer:s}of c)P.add(s)}const k=u.difference(P);for(const c of k)o.cache.delete(c);u=P}}}function S(d,p){return async function(u,e){return{props:{settings:{baseUrlPath:d(u.baseSlug)},disableAutoScroll:!0,seo:{title:p}}}}}function C(d,p){const u=A.posix.dirname(d),e=A.posix.basename(d,A.posix.extname(d))+p;return A.posix.join(u,e)}export{ot as asyncAPIDocsPlugin};
@@ -1 +1 @@
1
- import{isTruthy as n}from"../../../utils/guards/is-truthy.js";import{normalizeRouteSlug as g}from"../../../utils/path/normalize-route-slug.js";import{telemetryTraceStep as u}from"../../../cli/telemetry/helpers/trace-step.js";async function d(){return{id:"CatalogClassic",requiredEntitlements:["catalogClassic"],async processContent(a,{getConfig:l}){await u("build.plugin.catalog_classic",async o=>{const c=a.createTemplate("catalogClassic","@redocly/theme/components/CatalogClassic/CatalogClassic"),e=await l(),i=e.catalogClassic??{};o?.setAttribute("config",JSON.stringify(e.catalogClassic));for(const[r,t]of Object.entries(i)){const s=g(t.slug);a.addRoute({duplicateInAllLocales:!0,slug:s,fsPath:s,templateId:c,excludeFromSidebar:!0,serverPropsGetterIds:[],getNavText:()=>Promise.resolve(t.title||"API Catalog"),getStaticData:async()=>({props:{catalogId:r,catalogConfig:{...t,filters:t.filters?.filter(n),items:void 0},seo:{title:t.title||"API Catalog"}}})})}})}}}export{d as catalogClassicPlugin};
1
+ import{isTruthy as n}from"../../../utils/guards/is-truthy.js";import{normalizeRouteSlug as g}from"../../../utils/path/normalize-route-slug.js";import{telemetryTraceStep as u}from"../../../cli/telemetry/helpers/trace-step.js";async function f(){return{id:"CatalogClassic",requiredEntitlements:["catalogClassic"],async processContent(a,{getConfig:o}){await u("com.redocly.build.plugin.catalogClassic",async s=>{const c=a.createTemplate("catalogClassic","@redocly/theme/components/CatalogClassic/CatalogClassic"),e=await o(),i=e.catalogClassic??{};s?.setAttribute("config",JSON.stringify(e.catalogClassic));for(const[r,t]of Object.entries(i)){const l=g(t.slug);a.addRoute({duplicateInAllLocales:!0,slug:l,fsPath:l,templateId:c,excludeFromSidebar:!0,serverPropsGetterIds:[],getNavText:()=>Promise.resolve(t.title||"API Catalog"),getStaticData:async()=>({props:{catalogId:r,catalogConfig:{...t,filters:t.filters?.filter(n),items:void 0},seo:{title:t.title||"API Catalog"}}})})}})}}}export{f as catalogClassicPlugin};
@@ -10,7 +10,7 @@ export type PublishDiffResult = {
10
10
  };
11
11
  export declare class CatalogEntitiesDiffPublisher {
12
12
  #private;
13
- static publishDiff({ runId, localConnection, remoteConnection, scopeFiles, chunkSize }: {
13
+ static publishDiff({ runId, localConnection, remoteConnection, scopeFiles, chunkSize, }: {
14
14
  runId: string;
15
15
  localConnection: DatabaseConnection;
16
16
  remoteConnection: DatabaseConnection;
@@ -2,17 +2,19 @@ import type { DatabaseConnection } from './types';
2
2
  export type PruneLocalRevisionsResult = {
3
3
  prunedEntities: number;
4
4
  prunedRelations: number;
5
+ legacyRelationsHealed: number;
6
+ legacyRelationsDeleted: number;
5
7
  affectedSourceFiles: string[];
6
8
  vacuumed: boolean;
7
9
  };
8
10
  export declare class CatalogEntitiesRevisionsPruner {
9
11
  #private;
10
- static pruneLocalRevisions({ localConnection, maxRevisions, vacuumThreshold }: {
12
+ static pruneLocalRevisions({ localConnection, maxRevisions, vacuumThreshold, }: {
11
13
  localConnection: DatabaseConnection;
12
14
  maxRevisions: number;
13
15
  vacuumThreshold?: number;
14
16
  }): Promise<PruneLocalRevisionsResult>;
15
- static confirmPrunedFiles({ localConnection, sourceFiles }: {
17
+ static confirmPrunedFiles({ localConnection, sourceFiles, }: {
16
18
  localConnection: DatabaseConnection;
17
19
  sourceFiles: string[];
18
20
  }): Promise<void>;
@@ -1,4 +1,24 @@
1
- import{and as h,eq as m,inArray as l,sql as S}from"drizzle-orm";import{entitiesRelationsTable as O}from"../../../providers/database/databases/sqlite-db/schemas/entities-relations-table.js";import{entitiesTable as R}from"../../../providers/database/databases/sqlite-db/schemas/entities-table.js";import{fileHashesTable as a}from"../../../providers/database/databases/sqlite-db/schemas/file-hashes-table.js";import{FileHashStatus as T}from"../../../persistence/file-hashes/types.js";import{DELETE_IDS_CHUNK_SIZE as d,VACUUM_AFTER_PRUNED_ROWS as w}from"./consts.js";const p={prunedEntities:0,prunedRelations:0,affectedSourceFiles:[],vacuumed:!1};class u{static async pruneLocalRevisions({localConnection:i,maxRevisions:r,vacuumThreshold:n=w}){if(!Number.isFinite(r)||r<=0)return p;const t=i.client.client,o=await t.transaction(async s=>{const c=await s.all(S`
1
+ import{and as U,eq as F,inArray as E,isNull as v,sql as a}from"drizzle-orm";import{entitiesRelationsTable as d}from"../../../providers/database/databases/sqlite-db/schemas/entities-relations-table.js";import{entitiesTable as w}from"../../../providers/database/databases/sqlite-db/schemas/entities-table.js";import{fileHashesTable as l}from"../../../providers/database/databases/sqlite-db/schemas/file-hashes-table.js";import{FileHashStatus as A}from"../../../persistence/file-hashes/types.js";import{DELETE_IDS_CHUNK_SIZE as _,VACUUM_AFTER_PRUNED_ROWS as g}from"./consts.js";const y={prunedEntities:0,prunedRelations:0,legacyRelationsHealed:0,legacyRelationsDeleted:0,affectedSourceFiles:[],vacuumed:!1};class c{static async pruneLocalRevisions({localConnection:n,maxRevisions:r,vacuumThreshold:s=g}){if(!Number.isFinite(r)||r<=0)return y;const t=n.client.client,S=await t.transaction(async i=>{const C=await i.all(a`
2
+ SELECT DISTINCT e.source_file
3
+ FROM entities_relations r
4
+ JOIN entities e ON e.key = r.source_key AND e.source_file IS NOT NULL
5
+ WHERE r.source_file IS NULL
6
+ `),h=await i.run(a`
7
+ UPDATE entities_relations
8
+ SET source_file = (
9
+ SELECT e.source_file FROM entities e
10
+ WHERE e.key = entities_relations.source_key
11
+ AND e.source_file IS NOT NULL
12
+ ORDER BY e.is_current DESC, e.revision DESC
13
+ LIMIT 1
14
+ )
15
+ WHERE source_file IS NULL
16
+ AND EXISTS (
17
+ SELECT 1 FROM entities e
18
+ WHERE e.key = entities_relations.source_key
19
+ AND e.source_file IS NOT NULL
20
+ )
21
+ `),N=Number(h.rowsAffected??0),k=await i.delete(d).where(v(d.sourceFile)).run(),T=Number(k.rowsAffected??0),u=await i.all(a`
2
22
  SELECT id, source_file
3
23
  FROM (
4
24
  SELECT id,
@@ -15,7 +35,7 @@ import{and as h,eq as m,inArray as l,sql as S}from"drizzle-orm";import{entitiesR
15
35
  WHERE revision_rank > ${r}
16
36
  AND COALESCE(is_current, 1) = 0
17
37
  AND COALESCE(is_default_version, 0) = 0
18
- `);if(c.length===0)return null;const f=new Set;for(const e of c)e.source_file&&f.add(e.source_file);for(const e of u.#e(c.map(_=>_.id),d))await s.delete(R).where(l(R.id,e)).run();const E=await s.all(S`
38
+ `),f=new Set(C.map(e=>e.source_file));for(const e of u)e.source_file&&f.add(e.source_file);if(u.length===0&&N===0&&T===0)return{legacyRelationsHealed:N,legacyRelationsDeleted:T,prune:null};for(const e of c.#e(u.map(O=>O.id),_))await i.delete(w).where(E(w.id,e)).run();const D=await i.all(a`
19
39
  SELECT id, source_file
20
40
  FROM entities_relations r
21
41
  WHERE r.source_file IS NOT NULL
@@ -39,4 +59,4 @@ import{and as h,eq as m,inArray as l,sql as S}from"drizzle-orm";import{entitiesR
39
59
  )
40
60
  )
41
61
  )
42
- `);for(const e of E)e.source_file&&f.add(e.source_file);for(const e of u.#e(E.map(_=>_.id),d))await s.delete(O).where(l(O.id,e)).run();const N=new Date().toISOString();for(const e of u.#e(Array.from(f),d))await s.update(a).set({status:T.OUTDATED,updatedAt:N}).where(l(a.filePath,e)).run();return{prunedEntities:c.length,prunedRelations:E.length,affectedSourceFiles:Array.from(f)}});if(!o)return p;const D=o.prunedEntities+o.prunedRelations;let A=!1;return D>=n&&(await t.run(S`VACUUM`),A=!0),{...o,vacuumed:A}}static async confirmPrunedFiles({localConnection:i,sourceFiles:r}){if(r.length===0)return;const n=i.client.client,t=new Date().toISOString();for(const o of u.#e(r,d))await n.update(a).set({status:T.UP_TO_DATE,updatedAt:t}).where(h(l(a.filePath,o),m(a.status,T.OUTDATED))).run()}static#e(i,r){const n=[];for(let t=0;t<i.length;t+=r)n.push(i.slice(t,t+r));return n}}export{u as CatalogEntitiesRevisionsPruner};
62
+ `);for(const e of D)e.source_file&&f.add(e.source_file);for(const e of c.#e(D.map(O=>O.id),_))await i.delete(d).where(E(d.id,e)).run();const I=new Date().toISOString();for(const e of c.#e(Array.from(f),_))await i.update(l).set({status:A.OUTDATED,updatedAt:I}).where(E(l.filePath,e)).run();return{legacyRelationsHealed:N,legacyRelationsDeleted:T,prune:{prunedEntities:u.length,prunedRelations:D.length,affectedSourceFiles:Array.from(f)}}}),{legacyRelationsHealed:p,legacyRelationsDeleted:R,prune:o}=S;if(!o&&p===0&&R===0)return y;const m=(o?.prunedEntities??0)+(o?.prunedRelations??0)+R;let L=!1;return m>=s&&(await t.run(a`VACUUM`),L=!0),{prunedEntities:o?.prunedEntities??0,prunedRelations:o?.prunedRelations??0,legacyRelationsHealed:p,legacyRelationsDeleted:R,affectedSourceFiles:o?.affectedSourceFiles??[],vacuumed:L}}static async confirmPrunedFiles({localConnection:n,sourceFiles:r}){if(r.length===0)return;const s=n.client.client,t=new Date().toISOString();for(const S of c.#e(r,_))await s.update(l).set({status:A.UP_TO_DATE,updatedAt:t}).where(U(E(l.filePath,S),F(l.status,A.OUTDATED))).run()}static#e(n,r){const s=[];for(let t=0;t<n.length;t+=r)s.push(n.slice(t,t+r));return s}}export{c as CatalogEntitiesRevisionsPruner};
@@ -18,7 +18,7 @@ export declare class CatalogEntitiesService extends BaseService<CatalogEntitiesR
18
18
  static getInstance(options: ServiceInstanceOptions): Promise<CatalogEntitiesService>;
19
19
  sync(): Promise<void>;
20
20
  transaction<T>(...args: Parameters<TransactionsManager['transaction']>): Promise<T>;
21
- getEntities({ paginationParams, rbacTeams, excludedTypes, excludedEntities }: {
21
+ getEntities({ paginationParams, rbacTeams, excludedTypes, excludedEntities, }: {
22
22
  paginationParams: PaginationParams;
23
23
  rbacTeams?: string[];
24
24
  excludedTypes?: string[];
@@ -33,13 +33,13 @@ export declare class CatalogEntitiesService extends BaseService<CatalogEntitiesR
33
33
  getCatalogFilters(params: CatalogFiltersParams): Promise<Record<string, import("./repositories/types.js").FilterOption[]>>;
34
34
  getEntityRelationById(id: string): Promise<EntityRelationReadModelSchema | null>;
35
35
  getEntitiesRelations(paginationParams?: PaginationParams): Promise<ListResponseResult<EntityRelationReadModelSchema>>;
36
- getEntitiesWithRelations({ paginationParams, rbacTeams, excludedTypes, excludedEntities }: {
36
+ getEntitiesWithRelations({ paginationParams, rbacTeams, excludedTypes, excludedEntities, }: {
37
37
  paginationParams: PaginationParams;
38
38
  rbacTeams?: string[];
39
39
  excludedTypes?: string[];
40
40
  excludedEntities?: string[];
41
41
  }): Promise<BffCatalogEntityList>;
42
- getEntityWithRelationsByKey({ entityKey, filter, rbacTeams, excludedTypes, excludedEntities }: {
42
+ getEntityWithRelationsByKey({ entityKey, filter, rbacTeams, excludedTypes, excludedEntities, }: {
43
43
  entityKey: string;
44
44
  filter?: {
45
45
  revision?: string | null;
@@ -49,7 +49,7 @@ export declare class CatalogEntitiesService extends BaseService<CatalogEntitiesR
49
49
  excludedTypes?: string[];
50
50
  excludedEntities?: string[];
51
51
  }): Promise<BffCatalogEntity | null>;
52
- getRelatedEntities({ entityKey, paginationParams, rbacTeams, excludedTypes, excludedEntities }: {
52
+ getRelatedEntities({ entityKey, paginationParams, rbacTeams, excludedTypes, excludedEntities, }: {
53
53
  entityKey: string;
54
54
  paginationParams: PaginationParams;
55
55
  rbacTeams?: string[];
@@ -76,7 +76,7 @@ export declare class CatalogEntitiesService extends BaseService<CatalogEntitiesR
76
76
  createEntitiesRelations(entities: EntityRelationDtoSchema[]): Promise<BulkSyncResult<EntityRelationReadModelSchema>>;
77
77
  updateEntityRelation(incomingRelationData: Partial<EntityRelationDtoSchema>, relationToBeUpdated: EntityRelationReadModelSchema): Promise<EntityRelationReadModelSchema | null>;
78
78
  deleteEntityRelation(id: string): Promise<string | null>;
79
- softDeleteEntitiesWithRelations({ filter, revision, fileHash }: {
79
+ softDeleteEntitiesWithRelations({ filter, revision, fileHash, }: {
80
80
  filter: Filter;
81
81
  revision: string;
82
82
  fileHash: string;
@@ -1,5 +1,5 @@
1
1
  import type { DatabaseEntityAttributesDto } from '../../../../providers/database/databases/sqlite-db/schemas/entities-attributes-table.js';
2
- export declare function createEntityAttributesDbRecord({ rbacTeams, entityKey, organizationId, projectId }: {
2
+ export declare function createEntityAttributesDbRecord({ rbacTeams, entityKey, organizationId, projectId, }: {
3
3
  rbacTeams: string[];
4
4
  entityKey: string;
5
5
  organizationId: string;
@@ -1,6 +1,6 @@
1
1
  import type { EntityBaseFileSchema } from '@redocly/config';
2
2
  import type { DatabaseEntityDto } from '../../../../providers/database/databases/sqlite-db/schemas/entities-table.js';
3
- export declare function createEntityDbRecord({ entity, organizationId, projectId, source, sourceFile, fileHash }: {
3
+ export declare function createEntityDbRecord({ entity, organizationId, projectId, source, sourceFile, fileHash, }: {
4
4
  entity: EntityBaseFileSchema & {
5
5
  id?: string;
6
6
  createdAt?: string;
@@ -10,6 +10,6 @@ type CreateEntityRelationDbRecordFromFileSchemaParams = {
10
10
  organizationId: string;
11
11
  projectId: string;
12
12
  };
13
- export declare function createEntityRelationDbRecordFromFileSchema({ relation, sourceFile, fileHash, sourceKey, sourceVersion, sourceRevision, organizationId, projectId }: CreateEntityRelationDbRecordFromFileSchemaParams): DatabaseEntityRelationDto;
13
+ export declare function createEntityRelationDbRecordFromFileSchema({ relation, sourceFile, fileHash, sourceKey, sourceVersion, sourceRevision, organizationId, projectId, }: CreateEntityRelationDbRecordFromFileSchemaParams): DatabaseEntityRelationDto;
14
14
  export {};
15
15
  //# sourceMappingURL=create-entity-relation-db-record-from-file-schema.d.ts.map
@@ -3,17 +3,17 @@ export declare const INTERNAL_CATALOG_PUBLISH_CACHE_NAMESPACE = "catalog-publish
3
3
  export declare const INTERNAL_CATALOG_PUBLISH_KEY_PREFIX = "catalog-entities::publisher";
4
4
  export declare class RemotePublishLockService {
5
5
  #private;
6
- static getInternalCacheValue({ remoteConnection, key }: {
6
+ static getInternalCacheValue({ remoteConnection, key, }: {
7
7
  remoteConnection: DatabaseConnection;
8
8
  key: string;
9
9
  }): Promise<string | null>;
10
- static upsertInternalCacheValue({ remoteConnection, key, value, ttl }: {
10
+ static upsertInternalCacheValue({ remoteConnection, key, value, ttl, }: {
11
11
  remoteConnection: DatabaseConnection;
12
12
  key: string;
13
13
  value: string;
14
14
  ttl?: number | null;
15
15
  }): Promise<void>;
16
- static runUnderRemotePublishLock<T>({ runId, remoteConnection, run }: {
16
+ static runUnderRemotePublishLock<T>({ runId, remoteConnection, run, }: {
17
17
  runId: string;
18
18
  remoteConnection: DatabaseConnection;
19
19
  run: () => Promise<T>;
@@ -5,13 +5,13 @@ import type { ListResult } from '../types.js';
5
5
  export declare class BffEntitiesReadRepository {
6
6
  #private;
7
7
  constructor(db: DatabaseClient);
8
- getEntitiesWithRelations({ paginationParams, rbacTeams, excludedEntities, excludedTypes }: {
8
+ getEntitiesWithRelations({ paginationParams, rbacTeams, excludedEntities, excludedTypes, }: {
9
9
  paginationParams: PaginationParams;
10
10
  rbacTeams?: string[];
11
11
  excludedEntities?: string[];
12
12
  excludedTypes?: string[];
13
13
  }): Promise<ListResult<BffCatalogEntity>>;
14
- getEntityWithRelationsByKey({ entityKey, filter, rbacTeams, excludedTypes, excludedEntities }: {
14
+ getEntityWithRelationsByKey({ entityKey, filter, rbacTeams, excludedTypes, excludedEntities, }: {
15
15
  entityKey: string;
16
16
  filter?: {
17
17
  revision?: string | null;
@@ -1 +1 @@
1
- import{logger as o}from"../../../../tools/notifiers/logger.js";import{telemetryTraceStep as i}from"../../../../telemetry/helpers/trace-step.js";import{BaseRepository as a}from"../../../../providers/database/base-repository.js";import{createDatabaseRepositoryInstance as n}from"../../../../providers/database/instance-cache-resolver.js";import{RelationsReadRepository as c}from"./relations/relations-read-repository.js";import{RevisionRepository as p}from"./common/revision-repository.js";import{BffEntitiesReadRepository as l}from"./bffEntities/bff-entities-read-repository.js";import{EntitiesReadRepository as m}from"./entities/entities-read-repository.js";import{EntitiesWriteRepository as y}from"./entities/entities-write-repository.js";import{RelationsWriteRepository as R}from"./relations/relations-write-repository.js";import{FiltersRepository as f}from"./common/filters-repository.js";class r extends a{entitiesRead;entitiesWrite;relationsRead;relationsWrite;bffEntitiesRead;filters;revisions;get transactionsManager(){return this.databaseClient.transactionsManager}constructor(t){super(t),this.revisions=new p(t.client),this.bffEntitiesRead=new l(t.client),this.relationsRead=new c(t.client),this.entitiesRead=new m(t.client),this.entitiesWrite=new y(t.client,this.organizationId,this.projectId),this.relationsWrite=new R(t.client,this.organizationId,this.projectId),this.filters=new f(t.client)}async sync(){return i("catalog_entities.repository.sync",async()=>{await this.databaseClient.sync()})}static async create(t){return await i("catalog_entities.repository.get_instance",async s=>{try{return await n(t,"catalog entities",r)}catch(e){throw o.error("Error creating db connection for catalog entities repository",e),s?.error(e),e}})}}export{r as CatalogEntitiesRepository};
1
+ import{logger as s}from"../../../../tools/notifiers/logger.js";import{telemetryTraceStep as r}from"../../../../telemetry/helpers/trace-step.js";import{BaseRepository as a}from"../../../../providers/database/base-repository.js";import{createDatabaseRepositoryInstance as n}from"../../../../providers/database/instance-cache-resolver.js";import{RelationsReadRepository as c}from"./relations/relations-read-repository.js";import{RevisionRepository as l}from"./common/revision-repository.js";import{BffEntitiesReadRepository as p}from"./bffEntities/bff-entities-read-repository.js";import{EntitiesReadRepository as y}from"./entities/entities-read-repository.js";import{EntitiesWriteRepository as R}from"./entities/entities-write-repository.js";import{RelationsWriteRepository as m}from"./relations/relations-write-repository.js";import{FiltersRepository as g}from"./common/filters-repository.js";class o extends a{entitiesRead;entitiesWrite;relationsRead;relationsWrite;bffEntitiesRead;filters;revisions;get transactionsManager(){return this.databaseClient.transactionsManager}constructor(t){super(t),this.revisions=new l(t.client),this.bffEntitiesRead=new p(t.client),this.relationsRead=new c(t.client),this.entitiesRead=new y(t.client),this.entitiesWrite=new R(t.client,this.organizationId,this.projectId),this.relationsWrite=new m(t.client,this.organizationId,this.projectId),this.filters=new g(t.client)}async sync(){return r("com.redocly.catalogEntities.repository.sync",async t=>{t?.setAttribute("id","catalogEntitiesRepositoryId"),t?.setAttribute("object","catalogEntitiesRepository"),t?.setAttribute("uri","urn:redocly:realm:api:catalogEntitiesRepository:catalogEntitiesRepositoryId"),await this.databaseClient.sync()})}static async create(t){return await r("com.redocly.catalogEntities.repository.getInstance",async i=>{i?.setAttribute("id","catalogEntitiesRepositoryId"),i?.setAttribute("object","catalogEntitiesRepository"),i?.setAttribute("uri","urn:redocly:realm:api:catalogEntitiesRepository:catalogEntitiesRepositoryId");try{return await n(t,"catalog entities",o)}catch(e){throw s.error("Error creating db connection for catalog entities repository",e),i?.error(e),e}})}}export{o as CatalogEntitiesRepository};
@@ -3,6 +3,6 @@ import type { CatalogFiltersParams, FilterOption } from '../types.js';
3
3
  export declare class FiltersRepository {
4
4
  #private;
5
5
  constructor(db: DatabaseClient);
6
- getCatalogFilters({ entitiesTypes, emptyFilters, rbacTeams, excludedTypes, excludedEntities }: CatalogFiltersParams): Promise<Record<string, FilterOption[]>>;
6
+ getCatalogFilters({ entitiesTypes, emptyFilters, rbacTeams, excludedTypes, excludedEntities, }: CatalogFiltersParams): Promise<Record<string, FilterOption[]>>;
7
7
  }
8
8
  //# sourceMappingURL=filters-repository.d.ts.map
@@ -3,7 +3,7 @@ import type { EntityRevisionSummary } from '../../../schemas/read-model-schemas.
3
3
  export declare class RevisionRepository {
4
4
  #private;
5
5
  constructor(db: DatabaseClient);
6
- getCurrentRevisionInfo({ key, version, revision }: {
6
+ getCurrentRevisionInfo({ key, version, revision, }: {
7
7
  key: string;
8
8
  version: string | null;
9
9
  revision: string | null;
@@ -7,7 +7,7 @@ import type { GetEntityByIdParams } from '../../../types/params';
7
7
  export declare class EntitiesReadRepository {
8
8
  #private;
9
9
  constructor(db: DatabaseClient);
10
- getEntities({ paginationParams, rbacTeams, excludedTypes, excludedEntities }: {
10
+ getEntities({ paginationParams, rbacTeams, excludedTypes, excludedEntities, }: {
11
11
  paginationParams: PaginationParams;
12
12
  rbacTeams?: string[];
13
13
  excludedTypes?: string[];
@@ -7,10 +7,10 @@ import type { ScorecardsStatus } from '../../../entities/types';
7
7
  export declare class EntitiesWriteRepository {
8
8
  #private;
9
9
  constructor(db: DatabaseClient, organizationId: string, projectId: string);
10
- createEntity({ entity, source, fileHash, sourceFile, isRootEntity, isDeleted, rbacTeams, errorOnSkip, revision }: CreateEntityParams): Promise<EntityReadModelSchema | null>;
10
+ createEntity({ entity, source, fileHash, sourceFile, isRootEntity, isDeleted, rbacTeams, errorOnSkip, revision, }: CreateEntityParams): Promise<EntityReadModelSchema | null>;
11
11
  updateEntity(incomingEntity: Partial<EntityDtoSchema>, entityToBeUpdated: EntityReadModelSchema): Promise<EntityReadModelSchema | null>;
12
12
  setEntitiesAsOutdated(filter: Filter): Promise<void>;
13
- softDeleteEntitiesWithRelations({ filter, revision, fileHash }: {
13
+ softDeleteEntitiesWithRelations({ filter, revision, fileHash, }: {
14
14
  filter: Filter;
15
15
  revision: string;
16
16
  fileHash: string;