@redocly/realm 0.129.2 → 0.130.0-custom.1

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 (464) hide show
  1. package/CHANGELOG.md +392 -83
  2. package/dist/bin.d.ts +1 -0
  3. package/dist/bin.js +1 -1
  4. package/dist/cli/develop.js +1 -1
  5. package/dist/cli/eject/resolveEjectParams.js +1 -1
  6. package/dist/cli/prepare/copy-env-files.js +1 -1
  7. package/dist/cli/prepare/index.js +1 -1
  8. package/dist/cli/stats/collectors/openapi.d.ts +3 -0
  9. package/dist/cli/stats/collectors/openapi.js +1 -0
  10. package/dist/cli/stats/index.d.ts +7 -0
  11. package/dist/cli/stats/index.js +1 -0
  12. package/dist/cli/stats/options.d.ts +3 -0
  13. package/dist/cli/stats/options.js +1 -0
  14. package/dist/cli/telemetry/index.d.ts +2 -2
  15. package/dist/cli/telemetry/index.js +1 -1
  16. package/dist/client/App.js +1 -1
  17. package/dist/client/ErrorBoundary.js +1 -1
  18. package/dist/client/app/Sidebar/RequestAccessButton.js +2 -2
  19. package/dist/client/app/Sidebar/Sidebar.js +2 -2
  20. package/dist/client/app/Sidebar/helpers/filter-out-versioned-items.d.ts +23 -0
  21. package/dist/client/app/Sidebar/helpers/filter-out-versioned-items.js +1 -0
  22. package/dist/client/app/Sidebar/useSidebarItems.d.ts +2 -2
  23. package/dist/client/app/Sidebar/useSidebarItems.js +1 -1
  24. package/dist/client/app/hooks/catalog/useCatalogClassic.d.ts +1 -1
  25. package/dist/client/app/hooks/catalog/useCatalogClassic.js +1 -1
  26. package/dist/client/app/hooks/catalog/useCatalogFilter.js +1 -1
  27. package/dist/client/app/hooks/catalog/useCatalogViewMode.js +1 -1
  28. package/dist/client/app/hooks/catalog/useSearchTracker.js +1 -1
  29. package/dist/client/app/hooks/codeHighlight/useCodeHighlight.js +1 -1
  30. package/dist/client/app/hooks/usePageTimeTracker.js +1 -1
  31. package/dist/client/app/hooks/useRouteChangeTracker.js +1 -1
  32. package/dist/client/app/hooks/useTelemetry.d.ts +2 -2
  33. package/dist/client/app/pages/DevLogin/DevLogin.js +1 -1
  34. package/dist/client/app/search/message-handlers.d.ts +29 -0
  35. package/dist/client/app/search/message-handlers.js +1 -0
  36. package/dist/client/app/search/sse-parser.d.ts +10 -0
  37. package/dist/client/app/search/sse-parser.js +2 -0
  38. package/dist/client/app/search/useAiSearch.d.ts +9 -11
  39. package/dist/client/app/search/useAiSearch.js +1 -1
  40. package/dist/client/app/search/useSearch.js +1 -1
  41. package/dist/client/app/telemetry/index.d.ts +11 -1
  42. package/dist/client/app/telemetry/index.js +1 -1
  43. package/dist/client/browser-entry.js +5 -5
  44. package/dist/client/constants/ai-search.d.ts +30 -0
  45. package/dist/client/constants/ai-search.js +1 -0
  46. package/dist/client/constants/index.d.ts +2 -0
  47. package/dist/client/constants/index.js +1 -0
  48. package/dist/client/providers/hooks.js +1 -1
  49. package/dist/client/runtime/loader.js +1 -1
  50. package/dist/client/types/ai-search.d.ts +73 -0
  51. package/dist/client/types/ai-search.js +0 -0
  52. package/dist/client/types/index.d.ts +1 -0
  53. package/dist/config/env-config.d.ts +17 -0
  54. package/dist/config/env-config.js +1 -0
  55. package/dist/config/env-schema.d.ts +242 -0
  56. package/dist/config/env-schema.js +3 -0
  57. package/dist/config/env-schemas/api-urls.d.ts +24 -0
  58. package/dist/config/env-schemas/api-urls.js +1 -0
  59. package/dist/config/env-schemas/auth.d.ts +42 -0
  60. package/dist/config/env-schemas/auth.js +1 -0
  61. package/dist/config/env-schemas/catalog.d.ts +12 -0
  62. package/dist/config/env-schemas/catalog.js +1 -0
  63. package/dist/config/env-schemas/database.d.ts +15 -0
  64. package/dist/config/env-schemas/database.js +1 -0
  65. package/dist/config/env-schemas/environment-detection.d.ts +24 -0
  66. package/dist/config/env-schemas/environment-detection.js +1 -0
  67. package/dist/config/env-schemas/feature-flags.d.ts +24 -0
  68. package/dist/config/env-schemas/feature-flags.js +1 -0
  69. package/dist/config/env-schemas/organization-project.d.ts +27 -0
  70. package/dist/config/env-schemas/organization-project.js +1 -0
  71. package/dist/config/env-schemas/scorecards.d.ts +12 -0
  72. package/dist/config/env-schemas/scorecards.js +1 -0
  73. package/dist/config/env-schemas/search.d.ts +21 -0
  74. package/dist/config/env-schemas/search.js +1 -0
  75. package/dist/config/env-schemas/server-config.d.ts +51 -0
  76. package/dist/config/env-schemas/server-config.js +1 -0
  77. package/dist/config/env-schemas/site.d.ts +12 -0
  78. package/dist/config/env-schemas/site.js +1 -0
  79. package/dist/config/env-schemas/ssr.d.ts +18 -0
  80. package/dist/config/env-schemas/ssr.js +1 -0
  81. package/dist/config/env-schemas/telemetry.d.ts +15 -0
  82. package/dist/config/env-schemas/telemetry.js +1 -0
  83. package/dist/config/env-schemas/test.d.ts +22 -0
  84. package/dist/config/env-schemas/test.js +1 -0
  85. package/dist/constants/common.d.ts +4 -2
  86. package/dist/constants/common.js +1 -1
  87. package/dist/constants/l10n/langs/ar.js +1 -1
  88. package/dist/constants/l10n/langs/de.js +1 -1
  89. package/dist/constants/l10n/langs/en.js +1 -1
  90. package/dist/constants/l10n/langs/es.js +1 -1
  91. package/dist/constants/l10n/langs/fr.js +1 -1
  92. package/dist/constants/l10n/langs/hi.js +1 -1
  93. package/dist/constants/l10n/langs/it.js +1 -1
  94. package/dist/constants/l10n/langs/ja.js +1 -1
  95. package/dist/constants/l10n/langs/ko.js +1 -1
  96. package/dist/constants/l10n/langs/pl.js +1 -1
  97. package/dist/constants/l10n/langs/pt-BR.js +1 -1
  98. package/dist/constants/l10n/langs/pt.js +1 -1
  99. package/dist/constants/l10n/langs/ru.js +1 -1
  100. package/dist/constants/l10n/langs/uk.js +1 -1
  101. package/dist/constants/l10n/langs/zh.js +1 -1
  102. package/dist/server/api-routes/execute-api-route.js +1 -1
  103. package/dist/server/api-routes/import-api-routes-handlers.js +1 -1
  104. package/dist/server/api-routes/run-api-routes-worker.js +1 -1
  105. package/dist/server/constants/common.js +1 -1
  106. package/dist/server/constants/plugins/catalog-entities.d.ts +1 -0
  107. package/dist/server/constants/plugins/catalog-entities.js +1 -1
  108. package/dist/server/entitlements/entitlements-provider.js +1 -1
  109. package/dist/server/esbuild/esbuild-logger.js +2 -2
  110. package/dist/server/esbuild/esbuild.js +3 -3
  111. package/dist/server/esbuild/plugins/assets-resolver.js +1 -1
  112. package/dist/server/esbuild/plugins/esbuild-compile-resolver.js +1 -1
  113. package/dist/server/esbuild/plugins/styled-components-ssr.js +1 -1
  114. package/dist/server/fs/cache.js +1 -1
  115. package/dist/server/fs/content-fs.d.ts +1 -0
  116. package/dist/server/fs/content-fs.js +1 -1
  117. package/dist/server/fs/last-modified-tracker.js +1 -1
  118. package/dist/server/fs/utils/is-loader-cache-enabled.js +1 -1
  119. package/dist/server/node-bundle-entry.js +1 -1
  120. package/dist/server/persistence/kv/repositories/kv-remote-repository.d.ts +1 -0
  121. package/dist/server/persistence/kv/repositories/kv-remote-repository.js +2 -1
  122. package/dist/server/persistence/kv/services/kv-service.js +1 -1
  123. package/dist/server/plugins/analytics/adobe/index.js +1 -1
  124. package/dist/server/plugins/analytics/amplitude/index.js +1 -1
  125. package/dist/server/plugins/analytics/fullstory/index.js +1 -1
  126. package/dist/server/plugins/analytics/ga/index.js +1 -1
  127. package/dist/server/plugins/analytics/gtm/browser-hooks.js +1 -1
  128. package/dist/server/plugins/analytics/gtm/index.js +1 -1
  129. package/dist/server/plugins/analytics/heap/index.js +1 -1
  130. package/dist/server/plugins/analytics/rudderstack/index.js +1 -1
  131. package/dist/server/plugins/analytics/segment/index.js +1 -1
  132. package/dist/server/plugins/asyncapi-docs/asyncapi-doc-loader.js +3 -3
  133. package/dist/server/plugins/asyncapi-docs/get-server-props.js +1 -1
  134. package/dist/server/plugins/asyncapi-docs/index.js +1 -1
  135. package/dist/server/plugins/asyncapi-docs/search/schema-processor.js +1 -1
  136. package/dist/server/plugins/asyncapi-docs/search/search-resolver.js +1 -1
  137. package/dist/server/plugins/asyncapi-docs/store-definition-bundles.js +1 -1
  138. package/dist/server/plugins/asyncapi-docs/template/AsyncApiDocs.d.ts +2 -1
  139. package/dist/server/plugins/asyncapi-docs/template/AsyncApiDocs.js +9 -3
  140. package/dist/server/plugins/catalog-classic/get-server-props.d.ts +8 -3
  141. package/dist/server/plugins/catalog-classic/get-server-props.js +1 -1
  142. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +38 -64
  143. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.js +1 -1
  144. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.d.ts +8 -0
  145. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.js +1 -0
  146. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-db-record.d.ts +2 -1
  147. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-read-model.js +1 -1
  148. package/dist/server/plugins/catalog-entities/database/mappers/{create-entity-relation.d.ts → create-entity-relation-read-model.d.ts} +2 -2
  149. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.js +1 -0
  150. package/dist/server/plugins/catalog-entities/database/mappers/map-entity-relation-row.js +1 -1
  151. package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.d.ts +27 -0
  152. package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.js +1 -0
  153. package/dist/server/plugins/catalog-entities/database/repositories/common/version-repository.d.ts +36 -0
  154. package/dist/server/plugins/catalog-entities/database/repositories/common/version-repository.js +1 -0
  155. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-bff-repository.d.ts +15 -4
  156. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-bff-repository.js +38 -27
  157. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.d.ts +36 -9
  158. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.js +37 -21
  159. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.d.ts +41 -42
  160. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.js +1 -1
  161. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.d.ts +3 -1
  162. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.js +1 -1
  163. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-relations-repository.d.ts +7 -1
  164. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-relations-repository.js +1 -1
  165. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.d.ts +5 -9
  166. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.js +1 -1
  167. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-entities-exclusion-filter.d.ts +13 -0
  168. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-entities-exclusion-filter.js +1 -0
  169. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-rbac-filter.d.ts +31 -0
  170. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-rbac-filter.js +9 -0
  171. package/dist/server/plugins/catalog-entities/database/repositories/utils/create-merged-entity-fields-for-select.d.ts +34 -0
  172. package/dist/server/plugins/catalog-entities/database/repositories/utils/create-merged-entity-fields-for-select.js +13 -0
  173. package/dist/server/plugins/catalog-entities/database/repositories/utils/normalize-revision-flags.d.ts +23 -0
  174. package/dist/server/plugins/catalog-entities/database/repositories/utils/normalize-revision-flags.js +1 -0
  175. package/dist/server/plugins/catalog-entities/database/repositories/utils/semantic-version-sort.d.ts +78 -0
  176. package/dist/server/plugins/catalog-entities/database/repositories/utils/semantic-version-sort.js +34 -0
  177. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/arazzo-entities-extractor.js +1 -1
  178. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.js +1 -1
  179. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.d.ts +6 -4
  180. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.js +1 -1
  181. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.js +2 -2
  182. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.d.ts +1 -1
  183. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.js +1 -1
  184. package/dist/server/plugins/catalog-entities/extensions/extractors/fs-entities-extractor.js +1 -1
  185. package/dist/server/plugins/catalog-entities/get-server-props.js +1 -1
  186. package/dist/server/plugins/catalog-entities/plugin.js +1 -1
  187. package/dist/server/plugins/catalog-entities/schemas/database-schemas.d.ts +3 -0
  188. package/dist/server/plugins/catalog-entities/schemas/database-schemas.js +1 -1
  189. package/dist/server/plugins/catalog-entities/schemas/dto-schemas.d.ts +15 -1
  190. package/dist/server/plugins/catalog-entities/schemas/dto-schemas.js +1 -1
  191. package/dist/server/plugins/catalog-entities/schemas/read-model-schemas.d.ts +26 -164
  192. package/dist/server/plugins/catalog-entities/schemas/read-model-schemas.js +0 -1
  193. package/dist/server/plugins/catalog-entities/types/extractors.d.ts +4 -4
  194. package/dist/server/plugins/catalog-entities/types/openapi.d.ts +11 -0
  195. package/dist/server/plugins/catalog-entities/types/openapi.js +0 -0
  196. package/dist/server/plugins/catalog-entities/types/params.d.ts +6 -0
  197. package/dist/server/plugins/catalog-entities/types/params.js +0 -0
  198. package/dist/server/plugins/catalog-entities/utils/ajv-validator.js +1 -1
  199. package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.js +1 -1
  200. package/dist/server/plugins/catalog-entities/utils/get-not-accessible-catalog-resources.d.ts +11 -0
  201. package/dist/server/plugins/catalog-entities/utils/get-not-accessible-catalog-resources.js +1 -0
  202. package/dist/server/plugins/config-parser/index.js +1 -1
  203. package/dist/server/plugins/config-parser/loaders/content-slugs-loader.js +1 -1
  204. package/dist/server/plugins/config-parser/loaders/nearest-redocly-config-loader.js +1 -1
  205. package/dist/server/plugins/config-parser/loaders/utils/read-and-validate-config.js +1 -1
  206. package/dist/server/plugins/default-theme/index.js +1 -1
  207. package/dist/server/plugins/entitlements/index.js +1 -1
  208. package/dist/server/plugins/graphql-docs/graphql-doc-loader.js +1 -1
  209. package/dist/server/plugins/graphql-docs/index.js +1 -1
  210. package/dist/server/plugins/graphql-docs/search/search-resolver.js +1 -1
  211. package/dist/server/plugins/graphql-docs/template/GraphQLDocs.js +6 -2
  212. package/dist/server/plugins/lifecycle.js +2 -2
  213. package/dist/server/plugins/markdown/attribute-resolvers/resolve-link.js +1 -1
  214. package/dist/server/plugins/markdown/compiler.d.ts +1 -0
  215. package/dist/server/plugins/markdown/compiler.js +1 -1
  216. package/dist/server/plugins/markdown/index.js +1 -1
  217. package/dist/server/plugins/markdown/is-partial.d.ts +1 -1
  218. package/dist/server/plugins/markdown/is-partial.js +1 -1
  219. package/dist/server/plugins/markdown/markdoc/import-user-tags.js +1 -1
  220. package/dist/server/plugins/markdown/markdoc/plugins/render-mermaid.js +1 -1
  221. package/dist/server/plugins/markdown/markdoc/resolve-raw-partials.d.ts +1 -1
  222. package/dist/server/plugins/markdown/markdoc/resolve-raw-partials.js +2 -2
  223. package/dist/server/plugins/markdown/markdown-static-data-loader.js +1 -1
  224. package/dist/server/plugins/mcp/auth/auth-handlers.js +1 -1
  225. package/dist/server/plugins/mcp/docs-mcp/tools/docs-mcp-tool.d.ts +54 -0
  226. package/dist/server/plugins/mcp/docs-mcp/tools/docs-mcp-tool.js +1 -0
  227. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.d.ts +9 -8
  228. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.js +1 -1
  229. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.d.ts +9 -8
  230. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.js +1 -1
  231. package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.d.ts +9 -8
  232. package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.js +1 -1
  233. package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.d.ts +9 -8
  234. package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.js +1 -1
  235. package/dist/server/plugins/mcp/docs-mcp/tools/index.d.ts +7 -13
  236. package/dist/server/plugins/mcp/docs-mcp/tools/index.js +1 -1
  237. package/dist/server/plugins/mcp/docs-mcp/tools/list-apis.d.ts +9 -6
  238. package/dist/server/plugins/mcp/docs-mcp/tools/list-apis.js +1 -1
  239. package/dist/server/plugins/mcp/docs-mcp/tools/search.d.ts +9 -2
  240. package/dist/server/plugins/mcp/docs-mcp/tools/search.js +1 -1
  241. package/dist/server/plugins/mcp/docs-mcp/tools/utils.d.ts +2 -1
  242. package/dist/server/plugins/mcp/docs-mcp/tools/utils.js +6 -6
  243. package/dist/server/plugins/mcp/docs-mcp/tools/whoami.d.ts +9 -2
  244. package/dist/server/plugins/mcp/docs-mcp/tools/whoami.js +1 -1
  245. package/dist/server/plugins/mcp/handlers/docs-mcp-handler.js +1 -1
  246. package/dist/server/plugins/mcp/handlers/errors.js +1 -1
  247. package/dist/server/plugins/mcp/handlers/handle-mcp-request.d.ts +5 -0
  248. package/dist/server/plugins/mcp/handlers/handle-mcp-request.js +1 -0
  249. package/dist/server/plugins/mcp/handlers/mcp-request-handler.d.ts +0 -1
  250. package/dist/server/plugins/mcp/handlers/mcp-request-handler.js +1 -1
  251. package/dist/server/plugins/mcp/servers/base-server.js +1 -1
  252. package/dist/server/plugins/mcp/types.d.ts +40 -0
  253. package/dist/server/plugins/mcp/workers/execute-mcp-tool.d.ts +3 -0
  254. package/dist/server/plugins/mcp/workers/execute-mcp-tool.js +1 -0
  255. package/dist/server/plugins/nav-utils.d.ts +1 -1
  256. package/dist/server/plugins/nav-utils.js +1 -1
  257. package/dist/server/plugins/openapi-docs/decorators.d.ts +3 -0
  258. package/dist/server/plugins/openapi-docs/decorators.js +1 -1
  259. package/dist/server/plugins/openapi-docs/get-server-props-custom-fields.d.ts +2 -4
  260. package/dist/server/plugins/openapi-docs/get-server-props-custom-fields.js +1 -1
  261. package/dist/server/plugins/openapi-docs/get-server-props.js +1 -1
  262. package/dist/server/plugins/openapi-docs/index.js +1 -1
  263. package/dist/server/plugins/openapi-docs/load-definition.d.ts +1 -0
  264. package/dist/server/plugins/openapi-docs/load-definition.js +3 -3
  265. package/dist/server/plugins/openapi-docs/openrpc-converter.d.ts +2 -0
  266. package/dist/server/plugins/openapi-docs/openrpc-converter.js +1 -0
  267. package/dist/server/plugins/openapi-docs/search/search-resolver.js +1 -1
  268. package/dist/server/plugins/openapi-docs/search-indexer.js +1 -1
  269. package/dist/server/plugins/openapi-docs/store-definition-bundles.js +1 -1
  270. package/dist/server/plugins/openapi-docs/template/OpenAPIDocs.js +8 -4
  271. package/dist/server/plugins/openapi-docs/template/helpers.d.ts +2 -2
  272. package/dist/server/plugins/openapi-docs/template/helpers.js +3 -3
  273. package/dist/server/plugins/openapi-docs/utils.d.ts +1 -0
  274. package/dist/server/plugins/scorecard-classic/compute-scorecard.d.ts +2 -1
  275. package/dist/server/plugins/scorecard-classic/compute-scorecard.js +4 -4
  276. package/dist/server/plugins/scorecard-classic/get-scorecard-config.d.ts +2 -1
  277. package/dist/server/plugins/scorecard-classic/index.js +1 -1
  278. package/dist/server/plugins/scorecard-classic/lint.d.ts +1 -1
  279. package/dist/server/plugins/scorecard-classic/lint.js +1 -1
  280. package/dist/server/plugins/scorecard-classic/loaders/scorecard-config.js +1 -1
  281. package/dist/server/plugins/scorecard-classic/loaders/scorecard.d.ts +6 -4
  282. package/dist/server/plugins/scorecard-classic/loaders/scorecard.js +1 -1
  283. package/dist/server/plugins/scorecard-classic/shared-utils.d.ts +1 -1
  284. package/dist/server/plugins/scorecard-classic/shared-utils.js +1 -1
  285. package/dist/server/plugins/scorecard-classic/template/Grid/Grid.d.ts +2 -1
  286. package/dist/server/plugins/scorecard-classic/template/Grid/Grid.js +3 -3
  287. package/dist/server/plugins/scorecard-classic/template/LevelIndicator.d.ts +1 -0
  288. package/dist/server/plugins/scorecard-classic/template/LevelIndicator.js +3 -3
  289. package/dist/server/plugins/scorecard-classic/template/components.js +1 -1
  290. package/dist/server/plugins/scorecard-classic/template/index.styles.d.ts +1 -0
  291. package/dist/server/plugins/scorecard-classic/template/index.styles.js +93 -19
  292. package/dist/server/plugins/scorecard-classic/template/index.types.d.ts +5 -1
  293. package/dist/server/plugins/scorecard-classic/template/useData.js +1 -1
  294. package/dist/server/plugins/scorecard-classic/template/views.js +1 -1
  295. package/dist/server/plugins/scorecard-classic/types.d.ts +5 -3
  296. package/dist/server/plugins/scorecard-classic/types.js +1 -1
  297. package/dist/server/plugins/scorecards/database/repositories/local/scorecards-config-local-repository.d.ts +12 -0
  298. package/dist/server/plugins/scorecards/database/repositories/local/scorecards-config-local-repository.js +1 -0
  299. package/dist/server/plugins/scorecards/database/scorecards-config-service.d.ts +11 -0
  300. package/dist/server/plugins/scorecards/database/scorecards-config-service.js +1 -0
  301. package/dist/server/plugins/scorecards/plugin.js +1 -1
  302. package/dist/server/plugins/scorecards/workers/run-scorecards-worker.d.ts +2 -1
  303. package/dist/server/plugins/scorecards/workers/run-scorecards-worker.js +1 -1
  304. package/dist/server/plugins/scorecards/workers/scorecards.d.ts +1 -12
  305. package/dist/server/plugins/scorecards/workers/scorecards.js +1 -1
  306. package/dist/server/plugins/search/ai-indexer/prepare-ai-search-documents.js +1 -1
  307. package/dist/server/plugins/search/documents/search-documents.js +1 -1
  308. package/dist/server/plugins/search/engines/flexsearch/index.js +1 -1
  309. package/dist/server/plugins/search/engines/typesense/index.js +1 -1
  310. package/dist/server/plugins/search/index.js +1 -1
  311. package/dist/server/plugins/search/llmstxt/index.js +5 -5
  312. package/dist/server/plugins/search/utils.js +2 -2
  313. package/dist/server/plugins/sidebars/index.d.ts +0 -2
  314. package/dist/server/plugins/sidebars/index.js +3 -3
  315. package/dist/server/plugins/sso/index.js +1 -1
  316. package/dist/server/providers/database/base-repository.d.ts +1 -0
  317. package/dist/server/providers/database/base-repository.js +1 -1
  318. package/dist/server/providers/database/database-connection-factory.js +1 -1
  319. package/dist/server/providers/database/database-initialization-strategy.js +1 -1
  320. package/dist/server/providers/database/database-preconnect-service.js +1 -1
  321. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0005_catalog-relations-constraint-fix.sql +2 -0
  322. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0006_add-catalog-entitities-attributes-table.sql +11 -0
  323. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0005_snapshot.json +393 -0
  324. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0006_snapshot.json +458 -0
  325. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/_journal.json +14 -0
  326. package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-attributes-table.d.ts +143 -0
  327. package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-attributes-table.js +1 -0
  328. package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js +1 -1
  329. package/dist/server/providers/database/databases/main-sqlite/migrations/0006_change-scorecards-config-timestamps-field-types.sql +19 -0
  330. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0006_snapshot.json +261 -0
  331. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/_journal.json +7 -0
  332. package/dist/server/providers/database/databases/main-sqlite/schemas/scorecards-config-table.d.ts +24 -18
  333. package/dist/server/providers/database/databases/main-sqlite/schemas/scorecards-config-table.js +1 -1
  334. package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.js +1 -1
  335. package/dist/server/providers/database/databases/sqld-sqlite/migrations/0007_catalog-relations-constraint-fix.sql +2 -0
  336. package/dist/server/providers/database/databases/sqld-sqlite/migrations/0008_add-catalog-entitities-attributes-table.sql +11 -0
  337. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0007_snapshot.json +833 -0
  338. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0008_snapshot.json +898 -0
  339. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/_journal.json +14 -0
  340. package/dist/server/providers/database/pagination/entities-to-filter.d.ts +15 -0
  341. package/dist/server/providers/database/pagination/entities-to-filter.js +1 -0
  342. package/dist/server/providers/database/pagination/utils/index.d.ts +4 -0
  343. package/dist/server/providers/database/pagination/utils/index.js +1 -1
  344. package/dist/server/providers/database/pagination/utils/is-nested-condition.d.ts +16 -0
  345. package/dist/server/providers/database/pagination/utils/is-nested-condition.js +1 -0
  346. package/dist/server/providers/database/pagination/utils/is-simple-condition.d.ts +18 -0
  347. package/dist/server/providers/database/pagination/utils/is-simple-condition.js +1 -0
  348. package/dist/server/providers/database/pagination/utils/map-operator.d.ts +10 -0
  349. package/dist/server/providers/database/pagination/utils/map-operator.js +1 -0
  350. package/dist/server/providers/database/pagination/utils/transform-condition.d.ts +12 -0
  351. package/dist/server/providers/database/pagination/utils/transform-condition.js +1 -0
  352. package/dist/server/providers/database/sqld-not-running-error.d.ts +5 -0
  353. package/dist/server/providers/database/sqld-not-running-error.js +1 -0
  354. package/dist/server/ssr/render.js +1 -1
  355. package/dist/server/ssr/server-side-props/get-server-props-from-user-handler.js +1 -1
  356. package/dist/server/ssr/utils.js +8 -8
  357. package/dist/server/store.d.ts +14 -6
  358. package/dist/server/store.js +1 -1
  359. package/dist/server/telemetry/index.js +1 -1
  360. package/dist/server/tools/notifiers/formatter.js +3 -3
  361. package/dist/server/tools/notifiers/helpers/colors.js +1 -1
  362. package/dist/server/tools/notifiers/logger.js +2 -2
  363. package/dist/server/tools/notifiers/reporter.js +9 -9
  364. package/dist/server/tools/notifiers/terminal-manager.js +4 -4
  365. package/dist/server/types/plugins/common.d.ts +7 -1
  366. package/dist/server/types/plugins/markdown.d.ts +2 -0
  367. package/dist/server/types/plugins/scorecards.d.ts +30 -0
  368. package/dist/server/types/plugins/scorecards.js +0 -0
  369. package/dist/server/utils/envs/get-api-route-allowed-env-variables.js +1 -1
  370. package/dist/server/utils/envs/load-env-variables.d.ts +1 -1
  371. package/dist/server/utils/envs/load-env-variables.js +1 -1
  372. package/dist/server/utils/envs/sanitize-branch-name.d.ts +6 -0
  373. package/dist/server/utils/envs/sanitize-branch-name.js +1 -0
  374. package/dist/server/utils/globs.js +1 -1
  375. package/dist/server/utils/is-catalog-entities-enabled.js +1 -1
  376. package/dist/server/utils/is-scorecards-enabled.js +1 -1
  377. package/dist/server/utils/lifecycle-hooks.js +1 -1
  378. package/dist/server/utils/rbac.d.ts +76 -7
  379. package/dist/server/utils/rbac.js +1 -1
  380. package/dist/server/utils/report-all-errors.js +1 -1
  381. package/dist/server/utils/set-execution-mode.d.ts +5 -0
  382. package/dist/server/utils/set-execution-mode.js +1 -0
  383. package/dist/server/utils/time/with-timestamp.d.ts +42 -10
  384. package/dist/server/utils/time/with-timestamp.js +1 -1
  385. package/dist/server/version.js +1 -1
  386. package/dist/server/web-server/auth.js +3 -3
  387. package/dist/server/web-server/dev-server.js +1 -1
  388. package/dist/server/web-server/handle-api-route-request.js +1 -1
  389. package/dist/server/web-server/http.js +2 -2
  390. package/dist/server/web-server/middleware/apiKeyMiddleware.js +1 -1
  391. package/dist/server/web-server/middleware/catalogAuthMiddleware.d.ts +4 -6
  392. package/dist/server/web-server/middleware/catalogAuthMiddleware.js +1 -1
  393. package/dist/server/web-server/middleware/corsMiddleware.js +1 -1
  394. package/dist/server/web-server/middleware/dynamic-middleware/dynamic-middleware.js +1 -1
  395. package/dist/server/web-server/middleware/idleTimeoutMiddleware.js +1 -1
  396. package/dist/server/web-server/routes/ask-ai.js +1 -1
  397. package/dist/server/web-server/routes/auth.js +1 -1
  398. package/dist/server/web-server/routes/catalog/bff-catalog-related-entities.js +1 -1
  399. package/dist/server/web-server/routes/catalog/bff-catalog.js +1 -1
  400. package/dist/server/web-server/routes/catalog/catalog-relations.js +1 -1
  401. package/dist/server/web-server/routes/catalog/catalog.js +1 -1
  402. package/dist/server/web-server/routes/catalog/dto/read-entity-dto.d.ts +3 -0
  403. package/dist/server/web-server/routes/catalog/dto/read-entity-dto.js +0 -0
  404. package/dist/server/web-server/routes/catalog/helpers/create-entity-relation-update-schema.d.ts +43 -0
  405. package/dist/server/web-server/routes/catalog/helpers/create-entity-relation-update-schema.js +1 -0
  406. package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.d.ts +6823 -0
  407. package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.js +1 -0
  408. package/dist/server/web-server/routes/catalog/helpers/create-entity-update-schema.d.ts +1102 -0
  409. package/dist/server/web-server/routes/catalog/helpers/create-entity-update-schema.js +1 -0
  410. package/dist/server/web-server/routes/catalog/helpers/has-access-to-entity.d.ts +10 -0
  411. package/dist/server/web-server/routes/catalog/helpers/has-access-to-entity.js +1 -0
  412. package/dist/server/web-server/routes/catalog/mappers/map-entity-read-model-schema-to-entity-read-dto.d.ts +4 -0
  413. package/dist/server/web-server/routes/catalog/mappers/map-entity-read-model-schema-to-entity-read-dto.js +1 -0
  414. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entities.d.ts +4 -0
  415. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entities.js +1 -0
  416. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity-update-data.d.ts +4 -0
  417. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity-update-data.js +1 -0
  418. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity.d.ts +4 -0
  419. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity.js +1 -0
  420. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.d.ts +13 -0
  421. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.js +1 -0
  422. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.d.ts +13 -0
  423. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.js +1 -0
  424. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.d.ts +13 -0
  425. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.js +1 -0
  426. package/dist/server/web-server/routes/dynamic-route.js +1 -1
  427. package/dist/server/web-server/routes/error.js +1 -1
  428. package/dist/server/web-server/routes/helpers/get-current-rbac-teams.d.ts +3 -0
  429. package/dist/server/web-server/routes/helpers/get-current-rbac-teams.js +1 -0
  430. package/dist/server/web-server/routes/helpers/get-rbac-restrictions-data-for-catalog.d.ts +11 -0
  431. package/dist/server/web-server/routes/helpers/get-rbac-restrictions-data-for-catalog.js +1 -0
  432. package/dist/server/web-server/routes/index.js +1 -1
  433. package/dist/server/web-server/routes/info.js +1 -1
  434. package/dist/server/web-server/routes/mcp-oauth.js +1 -1
  435. package/dist/server/web-server/routes/otel/otel.js +1 -1
  436. package/dist/server/web-server/routes/page-data.js +1 -1
  437. package/dist/server/web-server/routes/path-prefix-redirect.js +1 -1
  438. package/dist/server/web-server/utils.d.ts +2 -2
  439. package/dist/server/workers/mcp-tool-worker-pool.d.ts +4 -0
  440. package/dist/server/workers/mcp-tool-worker-pool.js +1 -0
  441. package/dist/server/workers/mcp-tool-worker.d.ts +2 -0
  442. package/dist/server/workers/mcp-tool-worker.js +1 -0
  443. package/dist/server/workers/types.d.ts +7 -1
  444. package/dist/server/workers/worker-pool.js +1 -1
  445. package/package.json +21 -23
  446. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation.js +0 -1
  447. package/dist/server/plugins/catalog-entities/entities/validate-entity.d.ts +0 -6
  448. package/dist/server/plugins/catalog-entities/entities/validate-entity.js +0 -1
  449. package/dist/server/plugins/mcp/workers/run-api-routes-worker.d.ts +0 -5
  450. package/dist/server/plugins/mcp/workers/run-api-routes-worker.js +0 -1
  451. package/dist/server/utils/envs/is-build-mode.d.ts +0 -2
  452. package/dist/server/utils/envs/is-build-mode.js +0 -1
  453. package/dist/server/utils/envs/is-develop-mode.d.ts +0 -7
  454. package/dist/server/utils/envs/is-develop-mode.js +0 -1
  455. package/dist/server/utils/envs/is-production-mode.d.ts +0 -10
  456. package/dist/server/utils/envs/is-production-mode.js +0 -1
  457. package/dist/server/workers/mcp-worker-pool.d.ts +0 -4
  458. package/dist/server/workers/mcp-worker-pool.js +0 -1
  459. package/dist/utils/env/is-local-development.d.ts +0 -13
  460. package/dist/utils/env/is-local-development.js +0 -1
  461. package/dist/utils/env/is-production.d.ts +0 -13
  462. package/dist/utils/env/is-production.js +0 -1
  463. package/dist/utils/env/is-web-view.d.ts +0 -14
  464. package/dist/utils/env/is-web-view.js +0 -1
@@ -1 +1 @@
1
- import*as g from"@redocly/openapi-docs";import{REDOCLY_TEAMS_RBAC as d}from"@redocly/config";import{combineUrls as l}from"@redocly/theme/core/utils";import{SEARCH_DOCUMENT_METADATA_KEY as y}from"../../constants/plugins/search.js";import{removeMarkdownLinks as c,stripFormatting as a}from"./utils.js";import{normalizeFrontmatterKeywords as x}from"../helpers/normalize-frontmatter-keywords.js";const u=g.default||g;class T{#n=[];#r;#s;#e;#i;constructor(e,t,n){this.#r=e,this.#s=t,this.#e=n}addItem(e){const{result:t}=x(e.keywords||e.operationDefinition?.keywords);t?.excludes&&e.type==="section"&&e.id===""&&(this.#i=t.excludes);try{let n;switch(e.type){case"tag":n=this.#c(e);break;case"operation":const o=this.getOperation(e);n=this.#d(o,e[d]);break;case"section":n=this.#p(e);break;case"rsrc":case"prompt":case"tool":n=this.#o(e);break}if(!n)return;const s=[...new Set([...t?.excludes?t.excludes:[],...this.#i?this.#i:[]])];return(t||s.length)&&(n[y]={curated:!0,...t,excludes:s}),this.#n.push(n),n}catch(n){console.error("Cannot add item to search indexer",n.message)}}addInfo(e,t){const n=this.#e,s={id:n,url:n,text:a(c(e.description||"")),title:a(`${e.title} (${e.version})`),metadata:t};return this.#n.push(s),s}#o(e){const t=l(this.#e,e.href);return{id:t,url:t,text:a(c(e.description||"")),title:e.name}}getResult(){return this.#n}getOperation(e){return u.getOperation(this.#r,e.operationDefinition,e.parent,{...this.#s,internal_skipSamples:!0},e.href)}#a(e){return e.name.toString()+e.description+e.place}#d(e,t){if(e.type!=="operation")return;let n={};for(let i of e.parameters){if(i[d])continue;const r=i.schema?.example||i.example,p={name:i.name,description:a(c(i.description)),place:i.in+" parameters",mediaType:void 0,type:i.schema?.type.toString()||"unknown",deepLink:u.generateDeepLink(i),[d]:i[d],required:i.required,example:r?JSON.stringify(r):void 0,enum:i.schema?.enum?.length?i.schema.enum:void 0};n[this.#a(p)]=p}this.#t(n,e.requestBody?.content?.mediaTypes[0]?.schema,e.requestBody?.content?.mediaTypes[0]?.name,"request fields",!1);for(let i of e.responses){const r=`response ${i.code} fields`;this.#t(n,i.content?.mediaTypes[0]?.schema,i.content?.mediaTypes[0]?.name,r,!0)}let s=l(this.#e,e.href);return{id:s,url:s,title:a(e.name),text:a(c(e.description||"")),httpMethod:e.httpVerb,httpPath:e.path,deprecated:e.deprecated,isAdditionalOperation:e.isAdditionalOperation,security:e.security.map(i=>i.schemes.map(r=>r.id)).flat().filter(Boolean),parameters:Object.values(n),badges:e.badges.length?e.badges:void 0,[d]:t}}#t(e,t,n,s,o,i=[]){if(!(!t||t.isCircular)){if(t?.fields)for(let r of t.fields){if(t[d]||r.kind==="additionalProperties"||r.schema?.readOnly&&!o||r.schema?.writeOnly&&o)continue;const p=r.schema?.example||r.example,m=r.schema?.enum,h={name:r.name,description:a(r.description),place:s,mediaType:n,path:i,deepLink:u.generateDeepLink(r),type:r.schema?.type.toString()||"unknown",required:r.required||t.schema.required?.includes(r.name)||!1,example:p?JSON.stringify(p):void 0,enum:m?.length?m:void 0},f=this.#a(h);e[f]==null&&(e[f]=h,this.#t(e,r.schema,n,s,o,i.concat([r.name])))}t?.items&&this.#t(e,t.items,n,s,o,i)}}#c(e){const t=l(this.#e,e.href);return{id:t,url:t,text:a(c(e.description||"")),title:a(e.name)}}#p(e){const t=l(this.#e,e.href);return{id:t,url:t,text:a(c(e.description||"")),title:a(e.name)}}}export{T as SearchIndexer};
1
+ import*as g from"@redocly/openapi-docs";import{REDOCLY_TEAMS_RBAC as d}from"@redocly/config";import{combineUrls as u}from"@redocly/theme/core/utils";import{SEARCH_DOCUMENT_METADATA_KEY as y}from"../../constants/plugins/search.js";import{removeMarkdownLinks as c,stripFormatting as a}from"./utils.js";import{normalizeFrontmatterKeywords as x}from"../helpers/normalize-frontmatter-keywords.js";const l=g.default||g;class T{#n=[];#r;#s;#e;#i;constructor(e,t,n){this.#r=e,this.#s=t,this.#e=n}addItem(e){const{result:t}=x(e.keywords||e.operationDefinition?.keywords);t?.excludes&&e.type==="section"&&e.id===""&&(this.#i=t.excludes);try{let n;switch(e.type){case"tag":n=this.#c(e);break;case"operation":const o=this.getOperation(e);n=this.#d(o,e[d]);break;case"section":n=this.#p(e);break;case"rsrc":case"prompt":case"tool":n=this.#o(e);break}if(!n)return;const s=[...new Set([...t?.excludes?t.excludes:[],...this.#i?this.#i:[]])];return(t||s.length)&&(n[y]={curated:!0,...t,excludes:s}),this.#n.push(n),n}catch(n){console.error("Cannot add item to search indexer",n.message)}}addInfo(e,t){const n=this.#e,s={id:n,url:n,text:a(c(e.description||"")),title:a(`${e.title} (${e.version})`),metadata:t};return this.#n.push(s),s}#o(e){const t=u(this.#e,e.href);return{id:t,url:t,text:a(c(e.description||"")),title:e.name}}getResult(){return this.#n}getOperation(e){return l.getOperation(this.#r,e.operationDefinition,e.parent,{...this.#s,unstable_skipSamples:!0},e.href)}#a(e){return e.name.toString()+e.description+e.place}#d(e,t){if(e.type!=="operation")return;let n={};for(let i of e.parameters){if(i[d]||!i.name)continue;const r=i.schema?.example||i.example,p={name:i.name,description:a(c(i.description)),place:i.in+" parameters",mediaType:void 0,type:i.schema?.type.toString()||"unknown",deepLink:l.generateDeepLink(i),[d]:i[d],required:i.required,example:r?JSON.stringify(r):void 0,enum:i.schema?.enum?.length?i.schema.enum:void 0};n[this.#a(p)]=p}this.#t(n,e.requestBody?.content?.mediaTypes[0]?.schema,e.requestBody?.content?.mediaTypes[0]?.name,"request fields",!1);for(let i of e.responses){const r=`response ${i.code} fields`;this.#t(n,i.content?.mediaTypes[0]?.schema,i.content?.mediaTypes[0]?.name,r,!0)}let s=u(this.#e,e.href);return{id:s,url:s,title:a(e.name),text:a(c(e.description||"")),httpMethod:e.httpVerb,httpPath:e.path,deprecated:e.deprecated,isAdditionalOperation:e.isAdditionalOperation,security:e.security.map(i=>i.schemes.map(r=>r.id)).flat().filter(Boolean),parameters:Object.values(n),badges:e.badges.length?e.badges:void 0,[d]:t}}#t(e,t,n,s,o,i=[]){if(!(i.length>3)&&!(!t||t.isCircular)){if(t?.fields)for(let r of t.fields){if(t[d]||r.kind==="additionalProperties"||r.schema?.readOnly&&!o||r.schema?.writeOnly&&o)continue;const p=r.schema?.example||r.example,m=r.schema?.enum,h={name:r.name,description:a(r.description),place:s,mediaType:n,path:i,deepLink:l.generateDeepLink(r),type:r.schema?.type.toString()||"unknown",required:r.required||t.schema.required?.includes(r.name)||!1,example:p?JSON.stringify(p):void 0,enum:m?.length?m:void 0},f=this.#a(h);e[f]==null&&(e[f]=h,this.#t(e,r.schema,n,s,o,i.concat([r.name])))}t?.items&&this.#t(e,t.items,n,s,o,i)}}#c(e){const t=u(this.#e,e.href);return{id:t,url:t,text:a(c(e.description||"")),title:a(e.name)}}#p(e){const t=u(this.#e,e.href);return{id:t,url:t,text:a(c(e.description||"")),title:a(e.name)}}}export{T as SearchIndexer};
@@ -1 +1 @@
1
- import{writeFileSync as l}from"fs";import o from"path";import{dump as d}from"js-yaml";import{PUBLIC_API_DEFINITIONS_FOLDER as u,PUBLIC_STATIC_FOLDER as c}from"../../constants/common.js";import{logger as x}from"../../tools/notifiers/logger.js";import{ensureDir as g}from"../../utils/fs.js";const a=new Map;function O(i,t){const r=u.slice(1);try{for(const e of i){const{definition:s,relativePath:n,hash:f}=e;if(a.get(n)!==f){if(n.startsWith(c+"/")){const p=o.posix.extname(n);m({outDir:t,definitionFolder:".",relativePath:n.replace(c+"/",""),definitionString:p===".json"?JSON.stringify(s,null,2):d(s)}),a.set(n,f);continue}m({outDir:t,definitionFolder:r,relativePath:h(n,".json"),definitionString:JSON.stringify(s,null,2)}),a.set(n,f)}}}catch(e){x.error("failed to store definition bundles",e)}}function h(i,t){const r=o.posix.dirname(i),e=o.posix.basename(i,o.posix.extname(i))+t;return o.posix.join(r,e)}function m({outDir:i,definitionString:t,relativePath:r,definitionFolder:e}){l(g(o.resolve(i,`${e}/${r}`)),t,"utf8")}export{h as replaceFileExtension,O as storeDefinitionBundles};
1
+ import{writeFileSync as u}from"fs";import o from"path";import{dump as x}from"js-yaml";import{PUBLIC_API_DEFINITIONS_FOLDER as g,PUBLIC_STATIC_FOLDER as c}from"../../constants/common.js";import{logger as h}from"../../tools/notifiers/logger.js";import{ensureDir as D}from"../../utils/fs.js";const a=new Map;function j(i,t){const r=g.slice(1);try{for(const n of i){const{definition:m,originalDefinition:p,relativePath:e,hash:s}=n,f=p||m;if(a.get(e)!==s){if(e.startsWith(c+"/")){const d=o.posix.extname(e);l({outDir:t,definitionFolder:".",relativePath:e.replace(c+"/",""),definitionString:d===".json"?JSON.stringify(f,null,2):x(f)}),a.set(e,s);continue}l({outDir:t,definitionFolder:r,relativePath:F(e,".json"),definitionString:JSON.stringify(f,null,2)}),a.set(e,s)}}}catch(n){h.error("failed to store definition bundles",n)}}function F(i,t){const r=o.posix.dirname(i),n=o.posix.basename(i,o.posix.extname(i))+t;return o.posix.join(r,n)}function l({outDir:i,definitionString:t,relativePath:r,definitionFolder:n}){u(D(o.resolve(i,`${n}/${r}`)),t,"utf8")}export{F as replaceFileExtension,j as storeDefinitionBundles};
@@ -1,14 +1,18 @@
1
- import*as a from"react";import i from"styled-components";import{RedoclyOpenAPIDocs as c}from"@redocly/openapi-docs";import{LayoutVariant as s}from"@redocly/config";import{ThreePanelLayout as m}from"@redocly/theme/layouts/ThreePanelLayout";import{CatalogClassicInfoBlock as p}from"@redocly/theme/components/CatalogClassic/CatalogClassicInfoBlock";import{useUserClaims as u}from"../../../../client/app/hooks";import{usePageSharedData as d}from"../../../../client/providers/page-data/hooks";import{usePatchedStore as f}from"./helpers.js";function h({pageProps:t}){const o=u(),e=d("openAPIDocsStore"),n=a.useMemo(()=>({layout:t.apiOptions?.layout,userClaims:o}),[t.apiOptions?.layout,o]),r=f(e,t);if(!e)return"Something went wrong";const l=t.apiOptions?.layout;return a.createElement(g,null,a.createElement(v,{layout:l},a.createElement(p,{metadata:t.metadata})),a.createElement(c,{store:{options:r.options,definition:r.definition,withState:n}}))}const v=i(m)`
1
+ import*as a from"react";import i from"styled-components";import{RedoclyOpenAPIDocs as c}from"@redocly/openapi-docs";import{LayoutVariant as s}from"@redocly/config";import{ThreePanelLayout as m}from"@redocly/theme/layouts/ThreePanelLayout";import{CatalogClassicInfoBlock as p}from"@redocly/theme/components/CatalogClassic/CatalogClassicInfoBlock";import{useUserClaims as h}from"../../../../client/app/hooks";import{usePageSharedData as u}from"../../../../client/providers/page-data/hooks";import{usePatchedStore as d}from"./helpers.js";function f({pageProps:t}){const o=h(),e=u("openAPIDocsStore"),n=a.useMemo(()=>({layout:t.apiOptions?.layout,userClaims:o}),[t.apiOptions?.layout,o]),r=d(e,t);if(!e)return"Something went wrong";const l=t.apiOptions?.layout;return a.createElement(g,null,a.createElement(v,{layout:l},a.createElement(p,{metadata:t.metadata})),a.createElement(c,{store:{options:r.options,definition:r.definition,withState:n}}))}const v=i(m)`
2
2
  && {
3
3
  padding-right: ${({layout:t})=>t===s.THREE_PANEL?"calc(var(--panel-gap-horizontal) * 2)":"var(--panel-gap-horizontal)"};
4
4
  }
5
5
  `,g=i.div`
6
6
  div[id] {
7
- scroll-margin-top: calc(var(--navbar-height) - var(--panel-gap-vertical));
7
+ scroll-margin-top: calc(
8
+ var(--navbar-height) + var(--banner-height) - var(--panel-gap-vertical)
9
+ );
8
10
  }
9
11
  a[id] {
10
- scroll-margin-top: calc(var(--navbar-height) + var(--panel-gap-vertical));
12
+ scroll-margin-top: calc(
13
+ var(--navbar-height) + var(--banner-height) + var(--panel-gap-vertical)
14
+ );
11
15
  }
12
16
 
13
17
  --sidebar-width: 0px;
14
- `;export{h as default};
18
+ `;export{f as default};
@@ -11,8 +11,8 @@ type OpenAPIDocsStore = {
11
11
  };
12
12
  export declare function joinWithSeparator(base?: string, path?: string, sep?: string): string;
13
13
  export declare function parsePartials(partials?: Record<string, any>): Record<string, Node | Node[]> | undefined;
14
- export declare function usePatchedStore(storeJs: OpenAPIDocsStore, { markdown, baseSlug }: PageProps): OpenAPIDocsStore;
14
+ export declare function usePatchedStore(storeJs: OpenAPIDocsStore, { markdown, baseSlug, customFields }: PageProps): OpenAPIDocsStore;
15
15
  export declare function safeParseFunction(fnInput: EventFunctionInput): ((event: EventType) => void) | null;
16
- export declare function mergeEvents(userFunction: ((event: EventType) => void) | null, telemetryEvent?: AsyncApiRealmUI.GetEventData<'openapi_docs'>['eventType']): (event: EventType) => void;
16
+ export declare function mergeEvents(userFunction: ((event: EventType) => void) | null, telemetryEvent?: AsyncApiRealmUI.GetEventData<'openapi_docs'>[number]['eventType']): (event: EventType) => void;
17
17
  export {};
18
18
  //# sourceMappingURL=helpers.d.ts.map
@@ -1,5 +1,5 @@
1
- import{useMemo as u}from"react";import{components as l}from"@redocly-markdoc/components";import{Ast as f}from"@markdoc/markdoc";import{PageNavigation as g}from"@redocly/theme/components/PageNavigation/PageNavigation";import{tags as d,components as h}from"@redocly/theme/markdoc/default";import{Breadcrumbs as _}from"@redocly/theme/components/Breadcrumbs/Breadcrumbs";import{withPathPrefix as m}from"@redocly/theme/core/utils";import{OPENAPI_DOCS_TEMPLATE_ID as y,ServerRoutes as w}from"../../../../constants/common.js";import{isBrowser as P}from"../../../../utils/env/is-browser.js";import*as S from"../../markdown/markdoc/custom-components/index.js";import*as v from"../../markdown/markdoc/nodes/index.js";import O from"../../markdown/markdoc/tags/index.js";import{usePageData as C,useSidebarSiblingsData as A}from"../../../../client/providers/page-data/hooks";import{telemetry as E}from"../../../../client/app/telemetry/index.js";import{getMockServerDocsConfig as T}from"./mock-server-config";function V(t="",r="",o="/"){return t.endsWith(o)&&(t=t.slice(0,-o.length)),r.startsWith(o)&&(r=r.slice(o.length)),!t||!r?t+r:t+o+r}function b(t){if(t)return Object.entries(t).reduce((r,[o,e])=>(r[o]=f.fromJSON(JSON.stringify(e)),r),{})}function Y(t,{markdown:r,baseSlug:o}){return u(()=>{const n=P();t.options.oAuth2RedirectURI=n?`${window.location.origin}${m(w.REPLAY_OAUTH2_CALLBACK)}`:null,t.options.routingBasePath=m(o),t.options.mockServer=T(t.options.mockServer,o),t.options.scrollYOffset=n?parseInt(getComputedStyle(document.documentElement).getPropertyValue("--navbar-height"),10):0,t.options.markdocOptions={tags:{...O,...d},nodes:{...v},components:{...S,...h,...l,...globalThis.__LOADER.markdocComponents},...r,partials:b(r?.partials)},t.options.unstable_hooks={...t.options.unstable_hooks,MiddlePanelFooter:()=>{const{templateId:i}=C()||{},{nextPage:s,prevPage:a}=A()||{};return i===y?null:g({nextPage:s,prevPage:a})},MiddlePanelHeader:()=>_({})};const p={codeSamplesLanguageSwitch:"samples_language_switch",codeSamplesCopy:"code_samples_copy",panelToggle:"panel_toggle",targetServerSwitch:"target_server_switch",tryItOpen:"try_it_toggle",tryItSent:"try_it_sent"},c={};for(const[i,s]of Object.entries(p)){const a=F(t.options.events?.[i]);c[i]=I(a,s)}return t.options.events=c,t},[t,r,o])}function F(t){if(typeof window>"u")return null;if(typeof t=="function")return t;if(typeof t!="string")return null;try{const r=t.trim();if(!r.match(/^(\([^)]*\)\s*=>\s*.+|[a-zA-Z_$][\w$]*\s*=>\s*.+)$/))throw new Error("Invalid function format. Only arrow functions allowed.");if(["eval","Function","constructor","prototype","__proto__","import","require","process","global","window","document"].some(n=>r.includes(n)))throw new Error("Function contains prohibited keywords");return new Function("event",`
1
+ import{useMemo as h}from"react";import{components as v}from"@redocly-markdoc/components";import{Ast as _}from"@markdoc/markdoc";import{PageNavigation as S}from"@redocly/theme/components/PageNavigation/PageNavigation";import{tags as y,components as w}from"@redocly/theme/markdoc/default";import{Breadcrumbs as P}from"@redocly/theme/components/Breadcrumbs/Breadcrumbs";import{withPathPrefix as f}from"@redocly/theme/core/utils";import{OPENAPI_DOCS_TEMPLATE_ID as O,ServerRoutes as b}from"../../../../constants/common.js";import{isBrowser as C}from"../../../../utils/env/is-browser.js";import*as E from"../../markdown/markdoc/custom-components/index.js";import*as x from"../../markdown/markdoc/nodes/index.js";import A from"../../markdown/markdoc/tags/index.js";import{usePageData as T,useSidebarSiblingsData as D}from"../../../../client/providers/page-data/hooks";import{telemetry as I}from"../../../../client/app/telemetry/index.js";import{getMockServerDocsConfig as $}from"./mock-server-config";function K(e="",o="",t="/"){return e.endsWith(t)&&(e=e.slice(0,-t.length)),o.startsWith(t)&&(o=o.slice(t.length)),!e||!o?e+o:e+t+o}function F(e){if(e)return Object.entries(e).reduce((o,[t,s])=>(o[t]=_.fromJSON(JSON.stringify(s)),o),{})}function Z(e,{markdown:o,baseSlug:t,customFields:s}){return h(()=>{const u=C();function m(n,i){return n?.replace(/\/$/,"")===i?.replace(/\/$/,"")}function d(n){return e.definition.servers?.find(i=>m(i.url,n.host))?.description||(n.environment?n.environment+" server":null)||"Computed server"}const a=s?.computedServers||e.definition["x-computed-servers"];if(a){const n=e.definition.servers?.filter(r=>!a.some(c=>m(c.host,r.url))),i=a.map(r=>{const c=d(r);return{...r,url:r.host,"x-isLive":!0,description:c,"x-labels":[r.tenant?{label:"Gateway Name",color:"gold",value:r.tenant}:null,r.environment?{label:"Env",color:"blue",value:r.environment}:null,r.version?{label:"Version",color:"green",value:r.version}:null].filter(Boolean)}});e.definition.servers=[...i||[],...n||[]]}e.options.oAuth2RedirectURI=u?`${window.location.origin}${f(b.REPLAY_OAUTH2_CALLBACK)}`:null,e.options.routingBasePath=f(t),e.options.mockServer=$(e.options.mockServer,t),e.options.scrollYOffset=u?parseInt(getComputedStyle(document.documentElement).getPropertyValue("--navbar-height"),10):0,e.options.markdocOptions={tags:{...A,...y},nodes:{...x},components:{...E,...w,...v,...globalThis.__LOADER.markdocComponents},...o,partials:F(o?.partials)},e.options.unstable_hooks={...e.options.unstable_hooks,MiddlePanelFooter:()=>{const{templateId:n}=T()||{},{nextPage:i,prevPage:r}=D()||{};return n===O?null:S({nextPage:i,prevPage:r})},MiddlePanelHeader:()=>P({})};const g={codeSamplesLanguageSwitch:"samples_language_switch",codeSamplesCopy:"code_samples_copy",panelToggle:"panel_toggle",targetServerSwitch:"target_server_switch",tryItOpen:"try_it_toggle",tryItSent:"try_it_sent"},p={};for(const[n,i]of Object.entries(g)){const r=L(e.options.events?.[n]);p[n]=N(r,i)}return e.options.events=p,e},[e,o,t,s])}function L(e){if(typeof window>"u")return null;if(typeof e=="function")return e;if(typeof e!="string")return null;try{const o=e.trim();if(!o.match(/^(\([^)]*\)\s*=>\s*.+|[a-zA-Z_$][\w$]*\s*=>\s*.+)$/))throw new Error("Invalid function format. Only arrow functions allowed.");if(["eval","Function","constructor","prototype","__proto__","import","require","process","global","window","document"].some(l=>o.includes(l)))throw new Error("Function contains prohibited keywords");return new Function("event",`
2
2
  'use strict';
3
- const userFn = ${r};
3
+ const userFn = ${o};
4
4
  return userFn(event);
5
- `)}catch(r){return console.error("Function parsing error:",r),null}}function I(t,r){return o=>{if(t)try{t(o)}catch(e){console.error("User event handler error:",e)}if(r)try{E.sendOpenapiDocsMessage({eventType:r,operationHttpVerb:o.operationHttpVerb,operationPath:o.operationPath,lang:"lang"in o?o.lang:void 0,action:o.action,state:"state"in o?o.state:void 0,serverUrl:"serverUrl"in o?o.serverUrl:void 0})}catch{}}}export{V as joinWithSeparator,I as mergeEvents,b as parsePartials,F as safeParseFunction,Y as usePatchedStore};
5
+ `)}catch(o){return console.error("Function parsing error:",o),null}}function N(e,o){return t=>{if(e)try{e(t)}catch(s){console.error("User event handler error:",s)}if(o)try{I.sendOpenapiDocsMessage([{object:"openapi_docs",eventType:o,operationHttpVerb:t.operationHttpVerb,operationPath:t.operationPath,lang:"lang"in t?t.lang:void 0,action:t.action,state:"state"in t?t.state:void 0,serverUrl:"serverUrl"in t?t.serverUrl:void 0}])}catch{}}}export{K as joinWithSeparator,N as mergeEvents,F as parsePartials,L as safeParseFunction,Z as usePatchedStore};
@@ -3,6 +3,7 @@ import type { ItemBadge, NavItem, ResolvedNavItem } from '@redocly/config';
3
3
  export type IMenuItemExtended = {
4
4
  httpVerb?: string;
5
5
  isWebhook?: boolean;
6
+ isRpc?: boolean;
6
7
  badges?: ItemBadge[];
7
8
  } & IMenuItem;
8
9
  export declare function convertOpenAPIDocs2Sidebar(data: {
@@ -1,10 +1,11 @@
1
1
  import type { LifecycleContext, ProcessContentActions } from '../../types';
2
2
  import type { DetailedScorecardData } from './types.js';
3
3
  import { type ScorecardConfig, type RedoclyConfig } from '@redocly/theme/config';
4
- export declare function computeScorecard({ actions, context, scorecardConfig, reuniteConfig, }: {
4
+ export declare function computeScorecard({ actions, context, scorecardConfig, reuniteConfig, configHash, }: {
5
5
  actions: ProcessContentActions;
6
6
  context: LifecycleContext;
7
7
  scorecardConfig: ScorecardConfig;
8
8
  reuniteConfig: RedoclyConfig['reunite'];
9
+ configHash: string;
9
10
  }): Promise<Record<string, DetailedScorecardData>>;
10
11
  //# sourceMappingURL=compute-scorecard.d.ts.map
@@ -1,4 +1,4 @@
1
- import w from"picomatch";import{removeLeadingSlash as S}from"@redocly/theme/core/utils";import{parsePathVersions as O}from"../../../utils/path/parse-path-versions.js";import{logger as c}from"../../tools/notifiers/logger.js";import{ScorecardStatus as p}from"./types.js";import{getTarget as R}from"./loaders/scorecard.js";const P=15;async function x({actions:e,context:t,scorecardConfig:a,reuniteConfig:n}){c.info("Computing scorecard...");const o=a.levels||[],r=o[0],l=await e.loadOpenApiDefinitions(t),i=a.ignore||[],m=w(i),f=new Set,g=c.startTiming(),d={},u={};for(const s of l){if(!L(s,m,f))continue;const h=s.customOutputRelativeFile||s.realRelativePath;f.add(h);const v=await D(s,t,a,o,r);d[s.realRelativePath]=v,u[v.relativePath]=v}return c.infoTime(g,"Scorecard processed"),T(d,n,a),u}function L(e,t,a){if(e.isVirtual||!e.definition)return!1;const n=e.customOutputRelativeFile||e.realRelativePath,o=S(e.realRelativePath);return t(o)?(c.info(`Skipping scorecard calculation for ignored file: ${e.realRelativePath}`),!1):!a.has(n)}function M(e,t,a){return e-1<t?p.BelowMinimum:t<a-1?p.Minimum:p.Highest}async function D(e,t,a,n,o){const r=e.definition.info?.["x-metadata"]||{},l=await N(a,r)||o.name,{data:{levels:i,scorecardLevelIdx:m,scorecardLevel:f}}=await t.cache.load(e.realRelativePath,"scorecard"),g=n.findIndex(h=>h.name===l),d=M(m,g,n.length),u=e.customOutputRelativeFile||e.realRelativePath,s=O(u)?.versionName;return{levels:i,status:d,targetLevel:l,scorecardLevel:f,scorecardLevelIdx:m,relativePath:u,title:e.definition.info?.title,version:s}}function T(e,t,a){const n=Object.values(e).filter(i=>i.status===p.BelowMinimum);if(n.length===0)return;const o=n.map(i=>i.relativePath);let r=`Detected OpenAPI definitions with score below minimum level:
2
- - ${o.slice(0,P).map(()=>"%rp").join(`
3
- - `)}`;o.length>P&&(r+=`
4
- ... and ${o.length-P} more`),t?.ignoreLint??a.ignoreNonCompliant?c.warn(r,...o):c.error(r,...o)}async function N(e,t){return(await R(e.targets,t))?.minimumLevel}export{x as computeScorecard};
1
+ import u from"node:path";import{existsSync as V,readFileSync as L}from"node:fs";import $ from"picomatch";import{removeLeadingSlash as b}from"@redocly/theme/core/utils";import{parsePathVersions as E}from"../../../utils/path/parse-path-versions.js";import{logger as a}from"../../tools/notifiers/logger.js";import{envConfig as M}from"../../../config/env-config.js";import{ScorecardStatus as m}from"./types.js";import{getTarget as k}from"./loaders/scorecard.js";import{sha1 as z}from"../../utils/crypto/sha1.js";const h=15;async function ie({actions:n,context:s,scorecardConfig:r,reuniteConfig:l,configHash:i}){a.info("Computing scorecard...");const o=r.levels||[],p=o[0];let t=await n.loadOpenApiDefinitions(s);const N=r.ignore||[],_=$(N),D=new Set,x=a.startTiming(),c={};let g={};V(u.resolve(n.outdir,"_scorecard","meta.json"))&&(g=JSON.parse(L(u.resolve(n.outdir,"_scorecard","meta.json"),"utf-8")));let v=0;M.isDevelopMode&&!M.DEV_FULL_SCORECARD&&(t=t.slice(0,50));for(const e of t){if(e.definition?.["x-redocly-openrpc"]||e.isVirtual||!e.definition)continue;const P=e.definition.info?.["x-metadata"]||{},y=b(e.realRelativePath);if(c[e.realRelativePath])continue;const T=e.customOutputRelativeFile||e.realRelativePath;D.add(T);const A=k(r.targets,P),{minimumLevel:S=p.name,ignore:B}=A||{};if(B||_(y)){a.info(`Skipping scorecard calculation for ignored file: ${e.realRelativePath}`);continue}let d;const f=g[e.realRelativePath],O=z(e.hash+i+JSON.stringify(P));f&&f.hash===O?(v++,d=JSON.parse(L(u.resolve(n.outdir,f.filename),"utf-8"))):{data:d}=await s.cache.load(e.realRelativePath,"scorecard");const{levels:C,scorecardLevelIdx:R,scorecardLevel:I}=d,w=o.findIndex(J=>J.name===S),j=R-1<w?m.BelowMinimum:w<o.length-1?m.Minimum:m.Highest,F=E(e.realRelativePath)?.versionName,H={levels:C,status:j,targetLevel:S,scorecardLevel:I,scorecardLevelIdx:R,relativePath:e.realRelativePath,title:e.definition.info?.title,version:F,hash:O};c[e.realRelativePath]=H}return a.infoTime(x,"Scorecard processed, reused: %s/%s",v,t.length),U(c,l,r),c}function U(n,s,r){const l=Object.values(n).filter(t=>t.status===m.BelowMinimum);if(l.length===0)return;const i=l.map(t=>t.relativePath);let o=`Detected OpenAPI definitions with score below minimum level:
2
+ - ${i.slice(0,h).map(()=>"%rp").join(`
3
+ - `)}`;i.length>h&&(o+=`
4
+ ... and ${i.length-h} more`),s?.ignoreLint??r.ignoreNonCompliant?a.warn(o,...i):a.error(o,...i)}export{ie as computeScorecard};
@@ -124,13 +124,14 @@ export declare const getScorecardConfig: (config: Partial<RedoclyConfig>) => {
124
124
  property?: string | undefined;
125
125
  } | undefined;
126
126
  targets?: {
127
+ ignore?: boolean | undefined;
127
128
  rules?: {
128
129
  [x: string]: unknown;
129
130
  } | undefined;
130
131
  minimumLevel?: string | undefined;
131
132
  where: {
132
133
  metadata: {
133
- [x: string]: string;
134
+ [x: string]: unknown;
134
135
  };
135
136
  };
136
137
  }[] | undefined;
@@ -1 +1 @@
1
- import{writeFileSync as h}from"node:fs";import D from"path";import{SCORECARD_OUTPUT_FILE_NAME as b}from"../../constants/common.js";import{mapObject as T}from"../../../utils/object/map-object.js";import{readEnvVariable as w}from"../../utils/envs/read-env-variable.js";import{removeLeadingSlash as A}from"../../../utils/url/remove-leading-slash.js";import{combineUrls as O}from"@redocly/theme/core/utils";import{logger as j}from"../../tools/notifiers/logger.js";import{getRouteSlugToCatalogSlugMap as F}from"../../utils/catalog-classic/get-route-slug-to-catalog-slug-map.js";import{deepEqual as I}from"../../../utils/object/deep-equal.js";import{ensureDir as N}from"../../utils/index.js";import{getTemplatePath as U}from"./get-template-path.js";import{getAllRuleNames as q}from"./lint.js";import{getScorecardConfig as L}from"./get-scorecard-config.js";import{CUSTOM_FIELDS_SERVER_PROPS_GETTER_ID as M}from"../catalog-classic/index.js";import{getScorecardSlug as k}from"./shared-utils.js";import{scorecardConfigLoader as W}from"./loaders/scorecard-config.js";import{scorecardLoader as B}from"./loaders/scorecard.js";import{computeScorecard as J}from"./compute-scorecard.js";import{telemetryTraceStep as $}from"../../../cli/telemetry/helpers/trace-step.js";const G="scorecardClassic";let u={},R={};async function ue({id:P,requiredEntitlements:_,loadersPrefix:v=""}){let p=null,y=null,E=!1;return{id:P??"scorecardClassic",requiredEntitlements:_??["scorecard"],loaders:{[`${v}scorecard-config`]:W,[`${v}scorecard`]:B},async processContent(r,l){await $("build.plugin.scorecard_classic",async S=>{const a=r.createTemplate(G,U("./template/index.js")),g=await l.getConfig(),m=L(g),f=g?.reunite??{},i=[()=>p===null,()=>!I(u,m),()=>!I(R,f)].some(e=>e());u=m,S?.setAttribute("config",JSON.stringify(u||{})),R=f;const n=g.catalogClassic??{},c=u.levels||[];if(c.length<1)throw Error("Invalid configuration of levels config");i&&(p=await J({actions:r,context:l,scorecardConfig:u,reuniteConfig:R}));const{data:{configs:t}}=await l.cache.load("",`${v}scorecard-config`),{perLevel:d,all:s}=q(t);y={levelNames:c.map(e=>e.name),rules:s,rulesPerLevel:d};for(const[e,o]of Object.entries(n)){const C=O(o.slug,"scorecard/");r.addRoute({duplicateInAllLocales:!0,slug:C,fsPath:O(o.slug,"scorecard/"),templateId:a,hasClientRoutes:!0,excludeFromSidebar:!0,serverPropsGetterIds:[M],sharedData:[{id:"scorecard",key:"scorecard"},{key:"catalog",id:"catalog-"+e}],getNavText:()=>Promise.resolve(o.title||"API design scorecard"),getStaticData:async()=>({props:{catalogId:e,catalogConfig:{...o,items:void 0},scorecardConfig:u,scorecardInfo:y}})})}})},afterRoutesCreated:async(r,l)=>{const S=await l.getConfig(),a=S.catalogClassic??{},g=L(S);if(Object.keys(a).length){const i=Object.keys(a).length>1?await F(r,l,a):null,n={};for(const[c,t]of Object.entries(p||{})){const d=r.getRouteByFsPath(c),s=d?.slug;if(s){if(d&&!g.ignoreMetadata){const e=i?i.get(s)??Object.values(a)[0].slug:Object.values(a)[0].slug,o=O(e,"scorecard/");d.metadata={...d.metadata,scorecardStatus:t.status,scorecardLevel:t.scorecardLevel,scorecardLevelIdx:t.scorecardLevelIdx,scorecardLevels:T(t.levels,C=>({uniqueErrors:C.uniqueErrors,uniqueWarnings:C.uniqueWarnings})),scoreCardSlug:o+"apis/"+encodeURIComponent(A(s))}}if(n[s]={...t,levels:T(t.levels,e=>({...e,problems:e.problems.map(o=>({ruleId:o.ruleId,severity:o.severity}))}))},!E){const e=D.resolve(r.outdir,"_scorecard",k(s));h(N(e),JSON.stringify(t))}}}await r.createSharedData("scorecard",n)}const m={};for(const[i,n]of Object.entries(p||{})){const c=r.getRouteByFsPath(i)?.slug;c&&(m[c]=n)}const f=w("REDOCLY_METADATA_OUTPUT_FOLDER");!E&&f&&(j.info("Writing scorecard data..."),h(D.join(f,b),JSON.stringify({scorecardData:m,...y}))),E=!0}}}export{ue as scorecardClassicPlugin};
1
+ import{writeFileSync as I}from"node:fs";import v from"path";import{SCORECARD_OUTPUT_FILE_NAME as N}from"../../constants/common.js";import{mapObject as P}from"../../../utils/object/map-object.js";import{envConfig as F}from"../../../config/env-config.js";import{removeLeadingSlash as U}from"../../../utils/url/remove-leading-slash.js";import{combineUrls as D}from"@redocly/theme/core/utils";import{logger as O}from"../../tools/notifiers/logger.js";import{getRouteSlugToCatalogSlugMap as k}from"../../utils/catalog-classic/get-route-slug-to-catalog-slug-map.js";import{deepEqual as j}from"../../../utils/object/deep-equal.js";import{ensureDir as q}from"../../utils/index.js";import{getTemplatePath as M}from"./get-template-path.js";import{getAllRuleNames as J}from"./lint.js";import{getScorecardConfig as b}from"./get-scorecard-config.js";import{CUSTOM_FIELDS_SERVER_PROPS_GETTER_ID as W}from"../catalog-classic/index.js";import{getScorecardSlug as $}from"./shared-utils.js";import{scorecardConfigLoader as G}from"./loaders/scorecard-config.js";import{scorecardLoader as H}from"./loaders/scorecard.js";import{computeScorecard as x}from"./compute-scorecard.js";import{telemetryTraceStep as B}from"../../../cli/telemetry/helpers/trace-step.js";const V="scorecardClassic";let n={},L={};async function fe({id:w,requiredEntitlements:A,loadersPrefix:y=""}){let g=null,E=null,R=!1;return{id:w??"scorecardClassic",requiredEntitlements:A??["scorecard"],loaders:{[`${y}scorecard-config`]:G,[`${y}scorecard`]:H},async processContent(t,c){await B("build.plugin.scorecard_classic",async m=>{const a=t.createTemplate(V,M("./template/index.js")),s=await c.getConfig(),l=b(s),f=s?.reunite??{},d=[()=>g===null,()=>!j(n,l),()=>!j(L,f)].some(e=>e());n=l,m?.setAttribute("config",JSON.stringify(n||{})),L=f;const p=s.catalogClassic??{},u=n.levels||[];if(u.length<1)throw Error("Invalid configuration of levels config");d&&(g=await x({actions:t,context:c,scorecardConfig:n,reuniteConfig:L,configHash:s.hash||""}));const{data:{configs:S}}=await c.cache.load("",`${y}scorecard-config`),{perLevel:r,all:i}=J(S);E={levelNames:u.map(e=>e.name),rules:i,rulesPerLevel:r};for(const[e,o]of Object.entries(p)){const T=D(o.slug,"scorecard/");t.addRoute({duplicateInAllLocales:!0,slug:T,fsPath:D(o.slug,"scorecard/"),templateId:a,hasClientRoutes:!0,excludeFromSidebar:!0,serverPropsGetterIds:[W],sharedData:[{id:"scorecard",key:"scorecard"},{key:"catalog",id:"catalog-"+e}],getNavText:()=>Promise.resolve(o.title||"API design scorecard"),getStaticData:async()=>({props:{catalogId:e,catalogConfig:{...o,items:void 0},scorecardConfig:n,scorecardInfo:E}})})}})},afterRoutesCreated:async(t,c)=>{const m=await c.getConfig(),a=m.catalogClassic??{},s=b(m),l={},f=O.startTiming("Injecting scorecard data into routes..."),d={};if(Object.keys(a).length){const u=Object.keys(a).length>1?await k(t,c,a):null;for(const[S,r]of Object.entries(g||{})){const i=t.getRouteByFsPath(S),e=i?.slug;if(!e)continue;if(i&&!s.ignoreMetadata){const C=u?u.get(e)??Object.values(a)[0].slug:Object.values(a)[0].slug,h=D(C,"scorecard/");i.metadata={...i.metadata,scorecardStatus:r.status,scorecardLevel:r.scorecardLevel,scorecardLevelIdx:r.scorecardLevelIdx,scorecardLevels:P(r.levels,_=>({uniqueErrors:_.uniqueErrors,uniqueWarnings:_.uniqueWarnings})),scoreCardSlug:h+"apis/"+encodeURIComponent(U(e))}}const o=v.join("_scorecard",$(e)),T=v.resolve(t.outdir,o);d[e]={detailsChunkPath:o,...r,levels:P(r.levels,C=>({...C,problems:C.problems.map(h=>({ruleId:h.ruleId,severity:h.severity}))}))},R||(I(q(T),JSON.stringify(r)),l[S]={hash:r.hash,filename:o})}I(v.resolve(t.outdir,"_scorecard","meta.json"),JSON.stringify(l)),await t.createSharedData("scorecard",d)}O.infoTime(f,"Injecting scorecard data into routes...");const p=F.REDOCLY_METADATA_OUTPUT_FOLDER;!R&&p&&(O.info("Writing scorecard data..."),I(v.join(p,N),JSON.stringify({scorecardData:d,...E})),g=null,O.info("Scorecard data written...")),R=!0}}}export{fe as scorecardClassicPlugin};
@@ -5,7 +5,7 @@ export declare function lintDefinition(content: {
5
5
  relativePath: string;
6
6
  content: string;
7
7
  parsed: any;
8
- }, config: Config, context: LifecycleContext, externalRefResolver: ExternalResolver): Promise<{
8
+ }, config: Config, context: LifecycleContext, externalRefResolver: ExternalResolver, ignoreStructRule?: boolean): Promise<{
9
9
  uniqueErrors: number;
10
10
  uniqueWarnings: number;
11
11
  problems: ProblemWithCodeframe[];
@@ -1 +1 @@
1
- import*as l from"path";import{lintDocument as p,getTotals as b,getLineColLocation as y,Source as g,getCodeframe as v}from"@redocly/openapi-core";import{slash as d}from"../../../utils/path/slash.js";import{getUniqueProblemsCount as P}from"./shared-utils.js";const m=20;async function R(f,o,t,e){const s=l.resolve(t.fs.cwd,f.relativePath),r=o.resolvedConfig.apis??{},n=Object.keys(r).find(c=>l.resolve(o.configPath?l.dirname(o.configPath):t.fs.cwd,r[c].root)===s),i={config:o.forAlias(n),base:l.dirname(s),document:{source:new g(s,f.content),parsed:f.parsed},externalRefResolver:e},a=await p(i),u=P(a);return{...b(a),uniqueErrors:u.errors,uniqueWarnings:u.warnings,problems:h(a,t.fs.cwd).filter(c=>!c.ignored)}}function C(f){const o=new Set,t={};for(const[e,s]of Object.entries(f)){const r=t[e]=t[e]||new Set,n=s.rules.oas3_0;for(const i of Object.keys(n))if(!(n[i]==="off"||n[i]?.severity==="off"))if(i==="assertions"){if(!Array.isArray(n[i]))continue;for(const a of n[i])!a||a.severity==="off"||(r.add(a.assertionId),o.add(a.assertionId))}else o.add(i),r.add(i)}return{perLevel:Object.fromEntries(Object.entries(t).map(([e,s])=>[e,Array.from(s)])),all:Array.from(o)}}function h(f,o){const t={};return f.map(e=>{const s=t[e.ruleId]||0;t[e.ruleId]=s+1;const r=e.location[0];if(s>m)return{...e,codeframe:`Code frame skipped due to too many errors of this type. Only first ${m} errors are shown.`,location:{...r,source:{absoluteRef:d(l.relative(o,r.source.absoluteRef))}},from:void 0};const n=y(r);return{...e,codeframe:v(n,!1),location:{...r,source:{absoluteRef:d(l.relative(o,r.source.absoluteRef))}},from:void 0}})}export{C as getAllRuleNames,R as lintDefinition};
1
+ import*as l from"path";import{lintDocument as b,getTotals as g,getLineColLocation as P,Source as v,getCodeframe as h}from"@redocly/openapi-core";import{slash as m}from"../../../utils/path/slash.js";import{getUniqueProblemsCount as w}from"./shared-utils.js";const p=10;async function C(a,r,t,e,s=!1){const o=l.resolve(t.fs.cwd,a.relativePath),n=r.resolvedConfig.apis??{},i=Object.keys(n).find(f=>l.resolve(r.configPath?l.dirname(r.configPath):t.fs.cwd,n[f].root)===o),c={config:r.forAlias(i),base:l.dirname(o),document:{source:new v(o,a.content),parsed:a.parsed},externalRefResolver:e},u=await b(c),d=w(u);return{...g(u),uniqueErrors:d.errors,uniqueWarnings:d.warnings,problems:y(u,t.fs.cwd).filter(f=>!f.ignored||s&&f.ruleId!=="struct")}}function E(a){const r=new Set,t={};for(const[e,s]of Object.entries(a)){const o=t[e]=t[e]||new Set,n=s.rules.oas3_0;for(const i of Object.keys(n))if(i==="assertions"){if(!Array.isArray(n[i]))continue;for(const c of n[i])c&&(o.add(c.assertionId),r.add(c.assertionId))}else r.add(i),o.add(i)}return{perLevel:Object.fromEntries(Object.entries(t).map(([e,s])=>[e,Array.from(s)])),all:Array.from(r)}}function y(a,r){const t={};return a.map(e=>{const s=t[e.ruleId]||0;t[e.ruleId]=s+1;const o=e.location[0];if(s>p)return{...e,codeframe:`Only first ${p} code frames are shown.`,location:{...o,source:{absoluteRef:m(l.relative(r,o.source.absoluteRef))}},from:void 0};const n=P(o);return{...e,codeframe:h(n,!1),location:{...o,source:{absoluteRef:m(l.relative(r,o.source.absoluteRef))}},from:void 0}})}export{E as getAllRuleNames,C as lintDefinition};
@@ -1 +1 @@
1
- import a from"node:path";import{createConfig as g}from"@redocly/openapi-core";import{ruleTypes as l}from"@redocly/config";import{deepMerge as u}from"../../../../utils/object/deep-merge.js";import{CONFIG_FILE_NAME as m}from"../../../../constants/common.js";import{getScorecardConfig as p}from"../get-scorecard-config.js";async function E(t,n){const o=await n.getConfig(),e=p(o),r=e.levels??[],i=a.join(n.fs.cwd,m),s=await c(r,o.plugins,i),f=await d(e.targets,r,o.plugins,i);return{levelsConfig:r,configs:s,targets:f}}async function c(t,n=[],o){const e={};for(const r of t)e[r.name]=await g({...r,plugins:n},{configPath:o});return e}async function d(t,n,o=[],e){return t?Promise.all(t?.filter(r=>!!r.rules).map(async r=>{const i=n.map(s=>({...s,...C(s,r.rules)}));return{...r,configs:await c(i,o,e)}})||[]):[]}function C(t,n){return l.reduce((o,e)=>(o[e]=u(t[e]??{},n??{}),o),{})}export{E as scorecardConfigLoader};
1
+ import g from"node:path";import{createConfig as u,loadIgnoreConfig as m}from"@redocly/openapi-core";import{ruleTypes as p}from"@redocly/config";import{ExternalResolver as C}from"../../../fs/utils/external-ref-resolver.js";import{deepMerge as d}from"../../../../utils/object/deep-merge.js";import{CONFIG_FILE_NAME as v}from"../../../../constants/common.js";import{getScorecardConfig as w}from"../get-scorecard-config.js";async function N(t,o){const e=await o.getConfig(),n=w(e),s=n.levels??[],r=g.join(o.fs.cwd,v),a=new C(o.fs),i=await m(r,a),c=await f(s,e.plugins,r,i),l=await y(n.targets,s,e.plugins,r,i);return{levelsConfig:s,configs:c,targets:l}}async function f(t,o=[],e,n){const s={};for(const r of t)r.name!=="Baseline"&&(r.rules=r.rules??{struct:"error"},r.rules.struct="error"),s[r.name]=await u({...r,plugins:o},{configPath:e,ignore:n});return s}async function y(t,o,e=[],n,s){return t?Promise.all(t?.filter(r=>!!r.rules).map(async r=>{const a=o.map(i=>({name:i.name,...L(i,r.rules)}));return{...r,configs:await f(a,e,n,s)}})||[]):[]}function L(t,o){return p.reduce((e,n)=>(e[n]=d(t[n]??{},o??{}),e),{})}export{N as scorecardConfigLoader};
@@ -8,11 +8,13 @@ export type ScorecardLoaderResult = {
8
8
  export declare function scorecardLoader(relativePath: string, context: LifecycleContext): Promise<ScorecardLoaderResult>;
9
9
  export declare function getTarget<T extends object>(targets: Array<{
10
10
  where: {
11
- metadata: Record<string, string>;
11
+ metadata: Record<string, unknown>;
12
12
  };
13
- } & T> | undefined, metadata: Record<string, unknown>): Promise<({
13
+ minimumLevel?: string;
14
+ } & T> | undefined, metadata: Record<string, unknown>): ({
14
15
  where: {
15
- metadata: Record<string, string>;
16
+ metadata: Record<string, unknown>;
16
17
  };
17
- } & T) | undefined>;
18
+ minimumLevel?: string;
19
+ } & T) | undefined;
18
20
  //# sourceMappingURL=scorecard.d.ts.map
@@ -1 +1 @@
1
- import w from"node:path";import{reporter as x}from"../../../tools/notifiers/reporter.js";import{lintDefinition as h}from"../lint.js";import{ExternalResolver as b}from"../../../fs/utils/external-ref-resolver.js";const v="Non-conformant";async function O(o,e){const{data:{levelsConfig:s,configs:n,targets:t}}=await e.cache.load("","scorecard-config"),a={};let i=v,f=!1;const c=await e.fs.read(o),{data:l}=await e.cache.load(o,"yaml"),m=new b(e.fs);let g={};if(t.length){const r=await e.getConfig(w.posix.dirname(o)),d=l?.info?.["x-metadata"],p={title:l.info.title,version:l.info.version,...d,...r.metadata};g=(await k(t,p))?.configs||{}}for(const r of s){const d=await h({parsed:l,content:c,relativePath:o},g[r.name]||n[r.name],e,m);a[r.name]=d,d.errors===0&&!f?i=r.name:f=!0}let u=s.findIndex(r=>r.name===i);return{levels:a,scorecardLevel:i,scorecardLevelIdx:u+1}}async function k(o,e){if(o)for(const s of o){let n=!0;for(const[t,a]of Object.entries(s.where?.metadata||{}))if(String(a).match(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}Z)?\/(\d{4}-\d{2}-\d{2})?$/)){if(!e[t]){n=!1;break}const[i,f]=a.split("/"),c=new Date(e[t]);if(c<new Date(i)||f&&c>new Date(f)){n=!1;break}}else if(String(a).match(/^\/.*\//)){if(!e[t]){n=!1;break}try{if(!new RegExp(a.slice(1,-1)).test(e[t])){n=!1;break}}catch{await x.panicOnBuild(`Invalid regex in scorecard target "${t}": ${a}`),n=!1;break}}else if(e[t]!==a){n=!1;break}if(n)return s}}export{k as getTarget,O as scorecardLoader};
1
+ import b from"node:path";import{reporter as v}from"../../../tools/notifiers/reporter.js";import{lintDefinition as k}from"../lint.js";import{ExternalResolver as C}from"../../../fs/utils/external-ref-resolver.js";const I="Non-conformant";async function R(r,e){const{data:{levelsConfig:s,configs:n,targets:t}}=await e.cache.load("","scorecard-config"),a={};let o=I,f=!1;const d=await e.fs.read(r),{data:c}=await e.cache.load(r,"yaml"),p=new C(e.fs);let l={};const u=await e.getConfig(b.posix.dirname(r)),x=c?.info?.["x-metadata"],g={title:c.info?.title,version:c.info?.version,...x,...u.metadata};t.length&&(l=M(t,g)?.configs||{});for(const i of s){const h=i.name!=="Baseline",m=await k({parsed:{...c,info:{...c?.info,"x-metadata":g}},content:d,relativePath:r},l[i.name]||n[i.name],e,p,h);a[i.name]=m,m.errors===0&&!f?o=i.name:f=!0}let w=s.findIndex(i=>i.name===o);return{levels:a,scorecardLevel:o,scorecardLevelIdx:w+1}}function M(r,e){if(r)for(const s of r){let n=!0;for(const[t,a]of Object.entries(s.where?.metadata||{}))if(String(a).match(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}Z)?\/(\d{4}-\d{2}-\d{2})?$/)){if(!e[t]){n=!1;break}const[o,f]=String(a).split("/"),d=new Date(e[t]);if(d<new Date(o)||f&&d>new Date(f)){n=!1;break}}else if(String(a).match(/^\/.*\//)){if(!e[t]){n=!1;break}try{if(!new RegExp(String(a).slice(1,-1)).test(e[t])){n=!1;break}}catch{v.panicOnBuild(`Invalid regex in scorecard target "${t}": ${a}`),n=!1;break}}else if(e[t]!==a){n=!1;break}if(n)return s}}export{M as getTarget,R as scorecardLoader};
@@ -1,5 +1,5 @@
1
1
  import type { NormalizedProblem } from '@redocly/openapi-core';
2
- export declare function getUniqueProblemsCount<T extends Pick<NormalizedProblem, 'severity' | 'ruleId'>>(problems: T[]): {
2
+ export declare function getUniqueProblemsCount<T extends Pick<NormalizedProblem, 'severity' | 'ruleId'>>(problems: T[], ignoreSpecRule?: boolean): {
3
3
  errors: number;
4
4
  warnings: number;
5
5
  };
@@ -1 +1 @@
1
- function o(r){const e={error:new Set,warn:new Set};for(const n of r)e[n.severity]?.add(n.ruleId);return{errors:e.error.size,warnings:e.warn.size}}function t(r){return r==="/"?"index.json":r.substring(1,r.length-1)+".json"}export{t as getScorecardSlug,o as getUniqueProblemsCount};
1
+ function t(e,o){const r={error:new Set,warn:new Set};for(const n of e)o&&n.ruleId==="spec"||r[n.severity]?.add(n.ruleId);return{errors:r.error.size,warnings:r.warn.size}}function s(e){return e==="/"?"index.json":e.substring(1,e.length-1)+".json"}export{s as getScorecardSlug,t as getUniqueProblemsCount};
@@ -10,11 +10,12 @@ export type GridProps = {
10
10
  data: PossibleRowData[];
11
11
  columns: ColumnDef<PossibleRowData>[];
12
12
  };
13
- export declare const Grid: ({ data, columns, sortBy, empty, subRowKey, slug, groupHeaderTitle, }: GridProps & {
13
+ export declare const Grid: ({ data, columns, sortBy, empty, subRowKey, slug, groupHeaderTitle, virtualized, }: GridProps & {
14
14
  sortBy?: SortingState;
15
15
  empty?: ReactElement | string;
16
16
  subRowKey?: string;
17
17
  slug?: string;
18
18
  groupHeaderTitle?: string;
19
+ virtualized?: boolean;
19
20
  }) => React.JSX.Element;
20
21
  //# sourceMappingURL=Grid.d.ts.map
@@ -1,8 +1,8 @@
1
- import t,{useMemo as u,useState as b,useEffect as z}from"react";import{useReactTable as G,getCoreRowModel as $,getSortedRowModel as k,getExpandedRowModel as A}from"@tanstack/react-table";import g from"styled-components";import{useWindowVirtualizer as I}from"@tanstack/react-virtual";import{SpinnerLoader as H}from"@redocly/theme/components/Loaders/SpinnerLoader";import{GridRow as p}from"./GridRow";import{GridHeader as L}from"./GridHeader";const O=({data:i,columns:n,sortBy:l,empty:w,subRowKey:s="subrows",slug:f,groupHeaderTitle:E})=>{const R=u(()=>l||[],[l]),h=G({columns:n,data:i,getCoreRowModel:$(),getSortedRowModel:k(),getExpandedRowModel:A(),getSubRows:e=>{const o=e?.[s];return Array.isArray(o)?o:[]},...l?{initialState:{sorting:R}}:{},autoResetExpanded:!1}),{getHeaderGroups:v,getRowModel:y}=h,x=v(),{rows:C}=y(),r=C.filter(e=>e.depth===0),[d,M]=b(!1);z(()=>{M(!0)},[]);const m=I({count:r.length,estimateSize:()=>54,overscan:15,getItemKey(e){return`vi-row-${r[e].id}-${r.length}`}}),S=d?m.getVirtualItems():[],T=r.slice(0,50),a=u(()=>i.some(o=>{const c=o[s];return Array.isArray(c)&&c.length>0})?`50px repeat(${n.length-1}, 1fr)`:`25% repeat(${n.length-1}, 1fr)`,[n.length,i,s]);return t.createElement("div",{role:"table"},t.createElement(L,{headerGroups:x,gridTemplateColumns:a,groupHeaderTitle:E}),t.createElement(V,{style:{height:d?m.getTotalSize():"auto"},role:"rowgroup"},r.length>0?d?S.map(e=>{const o=r[e.index];return t.createElement(p,{key:e.key,variant:"virtualized",row:o,slug:f,virtualRow:e,virtualizer:m,gridTemplateColumns:a})}):t.createElement(t.Fragment,null,T.map(e=>t.createElement(p,{key:`ssr-row-${e.id}`,variant:"ssr",row:e,gridTemplateColumns:a})),t.createElement(j,null,t.createElement(H,{color:"var(--link-color-primary)",size:"20px"}))):t.createElement(p,{variant:"noData",empty:w,gridTemplateColumns:a})))},V=g.div`
1
+ import t,{useMemo as c,useState as z,useEffect as G}from"react";import{useReactTable as $,getCoreRowModel as k,getSortedRowModel as A,getExpandedRowModel as I}from"@tanstack/react-table";import g from"styled-components";import{useWindowVirtualizer as H}from"@tanstack/react-virtual";import{SpinnerLoader as L}from"@redocly/theme/components/Loaders/SpinnerLoader";import{GridRow as p}from"./GridRow";import{GridHeader as V}from"./GridHeader";const P=({data:i,columns:n,sortBy:l,empty:w,subRowKey:s="subrows",slug:f,groupHeaderTitle:E,virtualized:R=!0})=>{const h=c(()=>l||[],[l]),v=$({columns:n,data:i,getCoreRowModel:k(),getSortedRowModel:A(),getExpandedRowModel:I(),getSubRows:e=>{const o=e?.[s];return Array.isArray(o)?o:[]},...l?{initialState:{sorting:h}}:{},autoResetExpanded:!1}),{getHeaderGroups:y,getRowModel:x}=v,C=y(),{rows:M}=x(),r=M.filter(e=>e.depth===0),[d,S]=z(!1);G(()=>{S(!0)},[]);const m=H({count:r.length,estimateSize:()=>54,overscan:R?15:9999,getItemKey(e){return`vi-row-${r[e].id}-${r.length}`}}),T=d?m.getVirtualItems():[],b=r.slice(0,50),a=c(()=>i.some(o=>{const u=o[s];return Array.isArray(u)&&u.length>0})?`50px repeat(${n.length-1}, 1fr)`:`25% repeat(${n.length-1}, 1fr)`,[n.length,i,s]);return t.createElement("div",{role:"table"},t.createElement(V,{headerGroups:C,gridTemplateColumns:a,groupHeaderTitle:E}),t.createElement(j,{style:{height:d?m.getTotalSize():"auto"},role:"rowgroup"},r.length>0?d?T.map(e=>{const o=r[e.index];return t.createElement(p,{key:e.key,variant:"virtualized",row:o,slug:f,virtualRow:e,virtualizer:m,gridTemplateColumns:a})}):t.createElement(t.Fragment,null,b.map(e=>t.createElement(p,{key:`ssr-row-${e.id}`,variant:"ssr",row:e,gridTemplateColumns:a})),t.createElement(D,null,t.createElement(L,{color:"var(--link-color-primary)",size:"20px"}))):t.createElement(p,{variant:"noData",empty:w,gridTemplateColumns:a})))},j=g.div`
2
2
  position: relative;
3
- `,j=g.div`
3
+ `,D=g.div`
4
4
  display: flex;
5
5
  justify-content: center;
6
6
  align-items: center;
7
7
  margin: 10px;
8
- `;export{O as Grid};
8
+ `;export{P as Grid};
@@ -16,6 +16,7 @@ export declare const SEVERITY_TO_COLOR_ICON: {
16
16
  type LevelIndicatorProps = {
17
17
  uniqueErrors: number;
18
18
  uniqueWarnings: number;
19
+ customDisplay?: string;
19
20
  id: string;
20
21
  };
21
22
  export declare const LevelIndicator: React.FC<LevelIndicatorProps>;
@@ -1,4 +1,4 @@
1
- import*as r from"react";import a from"styled-components";import{CloseFilledIcon as p}from"@redocly/theme/icons/CloseFilledIcon/CloseFilledIcon";import{WarningAltFilled as s}from"@redocly/theme/icons/WarningAltFilled/WarningAltFilled";import{CheckboxFilledIcon as m}from"@redocly/theme/icons/CheckboxFilledIcon/CheckboxFilledIcon";const o={Pass:{background:"--color-green-1",icon:"--color-green-6"},Warn:{background:"--color-carrot-1",icon:"--color-carrot-6"},Error:{background:"--color-raspberry-1",icon:"--color-raspberry-6"}},$=({uniqueErrors:e,uniqueWarnings:l,id:n})=>{const c=[];return e===0&&c.push(r.createElement(t,{key:`${n}-pass`,color:`var(${o.Pass.background})`},r.createElement(m,{size:"13px",color:`var(${o.Pass.icon})`}))),e>0&&c.push(r.createElement(t,{key:`${n}-error`,color:`var(${o.Error.background})`},r.createElement(p,{size:"12px",color:`var(${o.Error.icon})`}),r.createElement(i,{color:`var(${o.Error.icon})`},e))),l>0&&c.push(r.createElement(t,{key:`${n}-warning`,color:`var(${o.Warn.background})`},r.createElement(s,{size:"12px",color:`var(${o.Warn.icon})`}),r.createElement(i,{color:`var(${o.Warn.icon})`},l))),r.createElement(d,null,c)},d=a.div`
1
+ import*as r from"react";import a from"styled-components";import{CloseFilledIcon as s}from"@redocly/theme/icons/CloseFilledIcon/CloseFilledIcon";import{WarningAltFilled as m}from"@redocly/theme/icons/WarningAltFilled/WarningAltFilled";import{CheckboxFilledIcon as d}from"@redocly/theme/icons/CheckboxFilledIcon/CheckboxFilledIcon";const o={Pass:{background:"--color-green-1",icon:"--color-green-6"},Warn:{background:"--color-carrot-1",icon:"--color-carrot-6"},Error:{background:"--color-raspberry-1",icon:"--color-raspberry-6"}},b=({uniqueErrors:e,uniqueWarnings:l,customDisplay:i,id:n})=>{const c=[];return e===0&&c.push(r.createElement(t,{key:`${n}-pass`,color:`var(${o.Pass.background})`},r.createElement(d,{size:"13px",color:`var(${o.Pass.icon})`}))),e>0&&c.push(r.createElement(t,{key:`${n}-error`,color:`var(${o.Error.background})`},r.createElement(s,{size:"12px",color:`var(${o.Error.icon})`}),r.createElement(p,{color:`var(${o.Error.icon})`},i||e))),l>0&&c.push(r.createElement(t,{key:`${n}-warning`,color:`var(${o.Warn.background})`},r.createElement(m,{size:"12px",color:`var(${o.Warn.icon})`}),r.createElement(p,{color:`var(${o.Warn.icon})`},i||l))),r.createElement(g,null,c)},g=a.div`
2
2
  display: flex;
3
3
  align-items: center;
4
4
  gap: 4px;
@@ -10,8 +10,8 @@ import*as r from"react";import a from"styled-components";import{CloseFilledIcon
10
10
  padding: 4px;
11
11
  border-radius: 4px;
12
12
  height: 20px;
13
- `,i=a.span`
13
+ `,p=a.span`
14
14
  color: ${({color:e})=>e};
15
15
  font-size: 12px;
16
16
  margin-left: 4px;
17
- `;export{$ as LevelIndicator,o as SEVERITY_TO_COLOR_ICON};
17
+ `;export{b as LevelIndicator,o as SEVERITY_TO_COLOR_ICON};
@@ -1 +1 @@
1
- import*as t from"react";import{useState as i}from"react";import{getScorecardColorVariable as s}from"@redocly/theme/core/utils";import{Button as m}from"@redocly/theme/components/Button/Button";import{SubtractIcon as u}from"@redocly/theme/icons/SubtractIcon/SubtractIcon";import{AddIcon as p}from"@redocly/theme/icons/AddIcon/AddIcon";import{Gauge as E}from"./Gauge";import{Code as f,Dot as o,FilePreview as d,InstanceControlsWrap as v,InstanceMessage as x,InstanceReference as C,InstanceWrap as I,ContentWithDotWrap as a,EmojiWrap as b}from"./index.styles";import{SEVERITY_TO_COLOR as g,severityColor as S,severityIcon as R}from"./utils";function D({level:e,colorVariable:r}){return t.createElement(a,null,t.createElement(o,{colorVariable:r}),t.createElement("span",null,e))}function L({summary:e}){const r=Object.keys(e.levels).length;return t.createElement(E,{chunks:Object.entries(e.levels).map(([l,n],c)=>({share:n/e.total*100,colorVariable:s(c,r),title:`${n} ${l}`}))})}function P({severity:e}){return t.createElement(o,{colorVariable:g[e]})}function A({errors:e,warnings:r}){return t.createElement(a,null,t.createElement(o,{colorVariable:`--scorecard-color-${e>0?"error":r>0?"warning":"success"}`}),e>0?"Problem":r>0?"Warning":"Normal")}function N({errors:e,warnings:r}){return t.createElement(o,{colorVariable:`--scorecard-color-${e>0?"error":r>0?"warning":"success"}`})}function V({problem:e}){const[r,l]=i(!1);return t.createElement(v,{onClick:()=>l(n=>!n),className:r?"expanded":""},t.createElement(m,{variant:"text",size:"medium",icon:r?t.createElement(u,null):t.createElement(p,null)}),t.createElement(I,{borderColor:S(e.severity)},t.createElement("div",null,t.createElement(x,null,t.createElement(b,null,R(e.severity))," ",e.message)),r?t.createElement(d,{onClick:n=>n.stopPropagation()},t.createElement(C,null,t.createElement("strong",null,e.location.source.absoluteRef),e.location.pointer),t.createElement(f,null,e.codeframe)):null))}const T=e=>t.createElement(V,{problem:e});export{D as ApiLevel,V as Instance,P as InstanceStatus,N as LevelStatus,A as RuleStatus,L as StatusDistribution,T as renderRowSubComponent};
1
+ import*as t from"react";import{useState as s}from"react";import{getScorecardColorVariable as i}from"@redocly/theme/core/utils";import{Button as m}from"@redocly/theme/components/Button/Button";import{SubtractIcon as u}from"@redocly/theme/icons/SubtractIcon/SubtractIcon";import{AddIcon as E}from"@redocly/theme/icons/AddIcon/AddIcon";import{Gauge as p}from"./Gauge";import{Code as f,Dot as l,FilePreview as d,InstanceControlsWrap as I,InstanceMessage as v,InstanceReference as x,InstanceWrap as C,ContentWithDotWrap as c,EmojiWrap as g}from"./index.styles";import{SEVERITY_TO_COLOR as S,severityColor as b,severityIcon as R}from"./utils";function j({level:e,colorVariable:r}){return t.createElement(c,null,t.createElement(l,{colorVariable:r}),t.createElement("span",null,e))}function w({summary:e}){const r=Object.keys(e.levels).length;return t.createElement(p,{chunks:Object.entries(e.levels).map(([a,n],o)=>({share:n/e.total*100,colorVariable:i(o,r),title:`${n} ${a}`}))})}function D({severity:e}){return t.createElement(l,{colorVariable:S[e]})}function P({errors:e,warnings:r}){return t.createElement(c,null,t.createElement(l,{colorVariable:`--scorecard-color-${e>0?"error":r>0?"warning":"success"}`}),e>0?"Problem":r>0?"Warning":"Normal")}function T({errors:e,warnings:r}){return t.createElement(l,{colorVariable:`--scorecard-color-${e>0?"error":r>0?"warning":"success"}`})}function V({problem:e}){const[r,a]=s(!1),n=!!e.codeframe;return t.createElement(I,{onClick:()=>a(o=>!o),className:r?"expanded":""},n?t.createElement(m,{variant:"text",size:"medium",icon:r?t.createElement(u,null):t.createElement(E,null)}):null,t.createElement(C,{borderColor:b(e.severity)},t.createElement("div",null,t.createElement(v,null,t.createElement(g,null,R(e.severity))," ",t.createElement("span",{dangerouslySetInnerHTML:{__html:e.message}}))),r&&n?t.createElement(d,{onClick:o=>o.stopPropagation()},t.createElement(x,null,t.createElement("strong",null,e.location.source.absoluteRef),e.location.pointer),t.createElement(f,null,e.codeframe)):null))}const A=e=>t.createElement(V,{problem:e});export{j as ApiLevel,V as Instance,D as InstanceStatus,T as LevelStatus,P as RuleStatus,w as StatusDistribution,A as renderRowSubComponent};
@@ -11,6 +11,7 @@ export declare const CardsWrapper: import("styled-components").StyledComponent<"
11
11
  export declare const Dot: import("styled-components").StyledComponent<"span", any, {
12
12
  colorVariable: string;
13
13
  }, never>;
14
+ export declare const StyledTable: import("styled-components").StyledComponent<"table", any, {}, never>;
14
15
  export declare const CatalogDescription: import("styled-components").StyledComponent<"p", any, {}, never>;
15
16
  export declare const CatalogPageWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
16
17
  export declare const StyledInput: import("styled-components").StyledComponent<"input", any, {}, never>;
@@ -1,4 +1,4 @@
1
- import r from"styled-components";import{Popup as t}from"reactjs-popup";import{Button as e}from"@redocly/theme/components/Button/Button";const c=r.div.attrs({"data-component-name":"Scorecard/Card"})`
1
+ import r from"styled-components";import{Popup as e}from"reactjs-popup";import{Button as t}from"@redocly/theme/components/Button/Button";const c=r.div.attrs({"data-component-name":"Scorecard/Card"})`
2
2
  color: var(--text-color-primary);
3
3
  background-color: var(--bg-color-raised);
4
4
  border-radius: 4px;
@@ -24,7 +24,7 @@ import r from"styled-components";import{Popup as t}from"reactjs-popup";import{Bu
24
24
  display: flex;
25
25
  flex-direction: column;
26
26
  gap: 5px;
27
- `,f=r.div`
27
+ `,b=r.div`
28
28
  display: flex;
29
29
  flex-direction: row;
30
30
  gap: 10px;
@@ -38,11 +38,11 @@ import r from"styled-components";import{Popup as t}from"reactjs-popup";import{Bu
38
38
  `,a=r.span`
39
39
  vertical-align: middle;
40
40
  display: inline-block;
41
- `,g=r(a)`
41
+ `,f=r(a)`
42
42
  margin-right: 0;
43
43
  text-align: right;
44
44
  width: 65px;
45
- `,b=r.div`
45
+ `,g=r.div`
46
46
  display: flex;
47
47
  flex-wrap: wrap;
48
48
  gap: 20px;
@@ -55,6 +55,80 @@ import r from"styled-components";import{Popup as t}from"reactjs-popup";import{Bu
55
55
  border: 1px solid var(--border-color-primary);
56
56
  background-color: var(${o=>o.colorVariable});
57
57
  margin-top: 1px;
58
+ `,h=r.table`
59
+ width: 100%;
60
+ border-spacing: 0;
61
+ border-radius: var(--border-radius);
62
+ overflow: auto;
63
+
64
+ table-layout: fixed;
65
+
66
+ thead {
67
+ display: block;
68
+ border-top: 1px solid var(--border-color-primary);
69
+ border-bottom: 1px solid var(--border-color-primary);
70
+ position: sticky;
71
+ top: 0;
72
+ z-index: 1;
73
+ }
74
+
75
+ thead tr {
76
+ display: flex;
77
+ width: 100%;
78
+ }
79
+
80
+ thead th {
81
+ padding: 5px 15px;
82
+ background-color: var(--bg-color-raised);
83
+
84
+ &:first-child {
85
+ flex-basis: 25%;
86
+ flex-grow: 0;
87
+ }
88
+ &:last-child {
89
+ flex-grow: 1;
90
+ }
91
+ }
92
+
93
+ tr.toggle {
94
+ cursor: pointer;
95
+ }
96
+
97
+ th,
98
+ td {
99
+ padding: 5px 15px;
100
+ text-align: left;
101
+ flex: 1;
102
+ }
103
+
104
+ th:has(${t}),
105
+ td:has(${t}) {
106
+ padding: 2px 4px;
107
+ }
108
+
109
+ th {
110
+ font-weight: bold;
111
+ color: var(--text-color-secondary);
112
+ cursor: pointer;
113
+ white-space: nowrap;
114
+ }
115
+
116
+ tr.nested-hide {
117
+ display: none;
118
+ }
119
+
120
+ th.controls-col {
121
+ width: 20px;
122
+ }
123
+
124
+ tbody tr {
125
+ border-bottom: 1px solid var(--border-color-primary);
126
+ align-items: center;
127
+ }
128
+
129
+ tbody tr td:first-child {
130
+ flex-grow: 0;
131
+ }
58
132
  `,v=r.p`
59
133
  margin: 16px 0 32px 0;
60
134
  font-size: 16px;
@@ -119,20 +193,20 @@ import r from"styled-components";import{Popup as t}from"reactjs-popup";import{Bu
119
193
  &:-webkit-autofill {
120
194
  background-color: var(--filter-input-bg-color);
121
195
  }
122
- `,h=r.div`
196
+ `,y=r.div`
123
197
  display: flex;
124
198
  flex-direction: row;
125
199
  margin-bottom: 10px;
126
200
  border-radius: 4px;
127
201
  justify-content: flex-start;
128
- `,y=r.div`
202
+ `,w=r.div`
129
203
  padding: 5px 10px;
130
204
  cursor: pointer;
131
205
  font-weight: bold;
132
206
  background-color: ${({isActive:o})=>o?"var(--bg-color-raised)":"transparent"};
133
207
  margin-left: 2px;
134
208
  border-bottom: ${({isActive:o})=>o?"1px solid var(--text-color-secondary);":"1px solid transparent"};
135
- `,w=r.div`
209
+ `,C=r.div`
136
210
  max-width: 100%;
137
211
  overflow: auto;
138
212
  visibility: ${({isActive:o})=>o?"visible":"hidden"};
@@ -140,10 +214,10 @@ import r from"styled-components";import{Popup as t}from"reactjs-popup";import{Bu
140
214
  opacity: ${({isActive:o})=>o?"1":"0"};
141
215
  position: ${({isActive:o})=>o?"static":"absolute"};
142
216
  pointer-events: ${({isActive:o})=>o?"auto":"none"};
143
- `,C=r(n)`
217
+ `,k=r(n)`
144
218
  padding: 20px 40px;
145
219
  display: block;
146
- `,k=r(t)`
220
+ `,S=r(e)`
147
221
  &-content {
148
222
  border-radius: var(--border-radius);
149
223
  background-color: var(--button-bg-color-secondary-hover);
@@ -156,18 +230,18 @@ import r from"styled-components";import{Popup as t}from"reactjs-popup";import{Bu
156
230
  fill: var(--button-bg-color-secondary);
157
231
  }
158
232
  }
159
- `,S=r.span`
233
+ `,$=r.span`
160
234
  font-family: monospace;
161
235
  `,j=r.div`
162
236
  width: 100%;
163
237
  padding: 0 10px;
164
238
  border-left: 2px solid ${o=>o.borderColor||"var(--bg-color-raised)"};
165
239
  margin: 5px 0;
166
- `,$=r.div``,z=r.div`
240
+ `,z=r.div``,W=r.div`
167
241
  padding: 5px 10px;
168
242
  background: var(--bg-color-raised);
169
243
  border-bottom: 1px solid var(--border-color-primary);
170
- `,W=r.pre`
244
+ `,T=r.pre`
171
245
  font-size: 12px;
172
246
  margin: 0;
173
247
  padding: 10px;
@@ -177,7 +251,7 @@ import r from"styled-components";import{Popup as t}from"reactjs-popup";import{Bu
177
251
  margin-top: 10px;
178
252
  margin-left: 22px;
179
253
  cursor: text;
180
- `,T=r.div`
254
+ `,P=r.div`
181
255
  display: flex;
182
256
  flex-direction: row;
183
257
  cursor: pointer;
@@ -187,29 +261,29 @@ import r from"styled-components";import{Popup as t}from"reactjs-popup";import{Bu
187
261
  align-items: flex-start;
188
262
  }
189
263
 
190
- ${e} {
264
+ ${t} {
191
265
  margin-right: 10px;
192
266
  align-items: flex-start;
193
267
  }
194
- `,P=r.th`
268
+ `,E=r.th`
195
269
  border-bottom: 0 !important;
196
270
  span {
197
271
  text-align: center;
198
272
  display: block;
199
273
  }
200
- `,E=r(i)`
274
+ `,B=r(i)`
201
275
  display: flex;
202
276
  flex-direction: row;
203
277
  justify-content: space-between;
204
278
  gap: 10px;
205
- `,B=r.div`
279
+ `,M=r.div`
206
280
  display: flex;
207
281
  flex-direction: row;
208
282
  align-items: center;
209
283
  gap: 5px;
210
284
  white-space: nowrap;
211
285
  justify-content: flex-end;
212
- `,M=r.span`
286
+ `,D=r.span`
213
287
  font-family:
214
288
  'Twemoji Mozilla',
215
289
  Apple Color Emoji,
@@ -217,4 +291,4 @@ import r from"styled-components";import{Popup as t}from"reactjs-popup";import{Bu
217
291
  'Noto Color Emoji',
218
292
  'EmojiOne Color';
219
293
  vertical-align: middle;
220
- `;export{C as AppPageWrapper,f as CardRow,a as CardValue,b as CardsWrapper,v as CatalogDescription,n as CatalogPageWrapper,W as Code,B as ContentWithDotWrap,m as Dot,M as EmojiWrap,I as FilePreview,g as GaugeNumber,P as GroupTh,T as InstanceControlsWrap,$ as InstanceMessage,z as InstanceReference,j as InstanceWrap,E as LevelComplianceCardTitle,y as ModeSwitcherTab,h as ModeSwitcherTabs,x as ProblemsByStatusCardBody,s as ScoreCardStatusCardBody,c as ScorecardCard,i as ScorecardCardTitle,S as SortIcon,u as StyledInput,k as StyledPopup,w as TableWrap};
294
+ `;export{k as AppPageWrapper,b as CardRow,a as CardValue,g as CardsWrapper,v as CatalogDescription,n as CatalogPageWrapper,T as Code,M as ContentWithDotWrap,m as Dot,D as EmojiWrap,I as FilePreview,f as GaugeNumber,E as GroupTh,P as InstanceControlsWrap,z as InstanceMessage,W as InstanceReference,j as InstanceWrap,B as LevelComplianceCardTitle,w as ModeSwitcherTab,y as ModeSwitcherTabs,x as ProblemsByStatusCardBody,s as ScoreCardStatusCardBody,c as ScorecardCard,i as ScorecardCardTitle,$ as SortIcon,u as StyledInput,S as StyledPopup,h as StyledTable,C as TableWrap};
@@ -15,7 +15,11 @@ export type Problem = {
15
15
  };
16
16
  export type Levels = keyof ScorecardData['levels'];
17
17
  export type RuleProblem = {
18
- apis: CatalogItem[];
18
+ apis: Record<string, CatalogItem & {
19
+ count: number;
20
+ problems: ProblemSummary[];
21
+ severity: 'error' | 'warning';
22
+ }>;
19
23
  ruleId: string;
20
24
  count: number;
21
25
  status: number;