@redocly/realm 0.129.1 → 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 (457) hide show
  1. package/CHANGELOG.md +398 -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.js +1 -1
  21. package/dist/client/app/hooks/catalog/useCatalogClassic.d.ts +1 -1
  22. package/dist/client/app/hooks/catalog/useCatalogClassic.js +1 -1
  23. package/dist/client/app/hooks/catalog/useCatalogFilter.js +1 -1
  24. package/dist/client/app/hooks/catalog/useCatalogViewMode.js +1 -1
  25. package/dist/client/app/hooks/catalog/useSearchTracker.js +1 -1
  26. package/dist/client/app/hooks/usePageTimeTracker.js +1 -1
  27. package/dist/client/app/hooks/useRouteChangeTracker.js +1 -1
  28. package/dist/client/app/hooks/useTelemetry.d.ts +2 -2
  29. package/dist/client/app/pages/DevLogin/DevLogin.js +1 -1
  30. package/dist/client/app/search/message-handlers.d.ts +29 -0
  31. package/dist/client/app/search/message-handlers.js +1 -0
  32. package/dist/client/app/search/sse-parser.d.ts +10 -0
  33. package/dist/client/app/search/sse-parser.js +2 -0
  34. package/dist/client/app/search/useAiSearch.d.ts +9 -11
  35. package/dist/client/app/search/useAiSearch.js +1 -1
  36. package/dist/client/app/search/useSearch.js +1 -1
  37. package/dist/client/app/telemetry/index.d.ts +11 -1
  38. package/dist/client/app/telemetry/index.js +1 -1
  39. package/dist/client/browser-entry.js +5 -5
  40. package/dist/client/constants/ai-search.d.ts +30 -0
  41. package/dist/client/constants/ai-search.js +1 -0
  42. package/dist/client/constants/index.d.ts +2 -0
  43. package/dist/client/constants/index.js +1 -0
  44. package/dist/client/providers/hooks.js +1 -1
  45. package/dist/client/runtime/loader.js +1 -1
  46. package/dist/client/types/ai-search.d.ts +73 -0
  47. package/dist/client/types/ai-search.js +0 -0
  48. package/dist/client/types/index.d.ts +1 -0
  49. package/dist/config/env-config.d.ts +17 -0
  50. package/dist/config/env-config.js +1 -0
  51. package/dist/config/env-schema.d.ts +242 -0
  52. package/dist/config/env-schema.js +3 -0
  53. package/dist/config/env-schemas/api-urls.d.ts +24 -0
  54. package/dist/config/env-schemas/api-urls.js +1 -0
  55. package/dist/config/env-schemas/auth.d.ts +42 -0
  56. package/dist/config/env-schemas/auth.js +1 -0
  57. package/dist/config/env-schemas/catalog.d.ts +12 -0
  58. package/dist/config/env-schemas/catalog.js +1 -0
  59. package/dist/config/env-schemas/database.d.ts +15 -0
  60. package/dist/config/env-schemas/database.js +1 -0
  61. package/dist/config/env-schemas/environment-detection.d.ts +24 -0
  62. package/dist/config/env-schemas/environment-detection.js +1 -0
  63. package/dist/config/env-schemas/feature-flags.d.ts +24 -0
  64. package/dist/config/env-schemas/feature-flags.js +1 -0
  65. package/dist/config/env-schemas/organization-project.d.ts +27 -0
  66. package/dist/config/env-schemas/organization-project.js +1 -0
  67. package/dist/config/env-schemas/scorecards.d.ts +12 -0
  68. package/dist/config/env-schemas/scorecards.js +1 -0
  69. package/dist/config/env-schemas/search.d.ts +21 -0
  70. package/dist/config/env-schemas/search.js +1 -0
  71. package/dist/config/env-schemas/server-config.d.ts +51 -0
  72. package/dist/config/env-schemas/server-config.js +1 -0
  73. package/dist/config/env-schemas/site.d.ts +12 -0
  74. package/dist/config/env-schemas/site.js +1 -0
  75. package/dist/config/env-schemas/ssr.d.ts +18 -0
  76. package/dist/config/env-schemas/ssr.js +1 -0
  77. package/dist/config/env-schemas/telemetry.d.ts +15 -0
  78. package/dist/config/env-schemas/telemetry.js +1 -0
  79. package/dist/config/env-schemas/test.d.ts +22 -0
  80. package/dist/config/env-schemas/test.js +1 -0
  81. package/dist/constants/common.d.ts +4 -2
  82. package/dist/constants/common.js +1 -1
  83. package/dist/constants/l10n/langs/ar.js +1 -1
  84. package/dist/constants/l10n/langs/de.js +1 -1
  85. package/dist/constants/l10n/langs/en.js +1 -1
  86. package/dist/constants/l10n/langs/es.js +1 -1
  87. package/dist/constants/l10n/langs/fr.js +1 -1
  88. package/dist/constants/l10n/langs/hi.js +1 -1
  89. package/dist/constants/l10n/langs/it.js +1 -1
  90. package/dist/constants/l10n/langs/ja.js +1 -1
  91. package/dist/constants/l10n/langs/ko.js +1 -1
  92. package/dist/constants/l10n/langs/pl.js +1 -1
  93. package/dist/constants/l10n/langs/pt-BR.js +1 -1
  94. package/dist/constants/l10n/langs/pt.js +1 -1
  95. package/dist/constants/l10n/langs/ru.js +1 -1
  96. package/dist/constants/l10n/langs/uk.js +1 -1
  97. package/dist/constants/l10n/langs/zh.js +1 -1
  98. package/dist/server/api-routes/execute-api-route.js +1 -1
  99. package/dist/server/api-routes/import-api-routes-handlers.js +1 -1
  100. package/dist/server/api-routes/run-api-routes-worker.js +1 -1
  101. package/dist/server/constants/common.js +1 -1
  102. package/dist/server/constants/plugins/catalog-entities.d.ts +1 -0
  103. package/dist/server/constants/plugins/catalog-entities.js +1 -1
  104. package/dist/server/entitlements/entitlements-provider.js +1 -1
  105. package/dist/server/esbuild/esbuild-logger.js +2 -2
  106. package/dist/server/esbuild/esbuild.js +3 -3
  107. package/dist/server/esbuild/plugins/assets-resolver.js +1 -1
  108. package/dist/server/esbuild/plugins/esbuild-compile-resolver.js +1 -1
  109. package/dist/server/esbuild/plugins/styled-components-ssr.js +1 -1
  110. package/dist/server/fs/cache.js +1 -1
  111. package/dist/server/fs/content-fs.d.ts +1 -0
  112. package/dist/server/fs/content-fs.js +1 -1
  113. package/dist/server/fs/last-modified-tracker.js +1 -1
  114. package/dist/server/fs/utils/is-loader-cache-enabled.js +1 -1
  115. package/dist/server/node-bundle-entry.js +1 -1
  116. package/dist/server/persistence/kv/repositories/kv-remote-repository.d.ts +1 -0
  117. package/dist/server/persistence/kv/repositories/kv-remote-repository.js +2 -1
  118. package/dist/server/persistence/kv/services/kv-service.js +1 -1
  119. package/dist/server/plugins/analytics/adobe/index.js +1 -1
  120. package/dist/server/plugins/analytics/amplitude/index.js +1 -1
  121. package/dist/server/plugins/analytics/fullstory/index.js +1 -1
  122. package/dist/server/plugins/analytics/ga/index.js +1 -1
  123. package/dist/server/plugins/analytics/gtm/browser-hooks.js +1 -1
  124. package/dist/server/plugins/analytics/gtm/index.js +1 -1
  125. package/dist/server/plugins/analytics/heap/index.js +1 -1
  126. package/dist/server/plugins/analytics/rudderstack/index.js +1 -1
  127. package/dist/server/plugins/analytics/segment/index.js +1 -1
  128. package/dist/server/plugins/asyncapi-docs/asyncapi-doc-loader.js +3 -3
  129. package/dist/server/plugins/asyncapi-docs/get-server-props.js +1 -1
  130. package/dist/server/plugins/asyncapi-docs/index.js +1 -1
  131. package/dist/server/plugins/asyncapi-docs/search/schema-processor.js +1 -1
  132. package/dist/server/plugins/asyncapi-docs/search/search-resolver.js +1 -1
  133. package/dist/server/plugins/asyncapi-docs/store-definition-bundles.js +1 -1
  134. package/dist/server/plugins/asyncapi-docs/template/AsyncApiDocs.d.ts +2 -1
  135. package/dist/server/plugins/asyncapi-docs/template/AsyncApiDocs.js +9 -3
  136. package/dist/server/plugins/catalog-classic/get-server-props.d.ts +8 -3
  137. package/dist/server/plugins/catalog-classic/get-server-props.js +1 -1
  138. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +38 -64
  139. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.js +1 -1
  140. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.d.ts +8 -0
  141. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.js +1 -0
  142. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-db-record.d.ts +2 -1
  143. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-read-model.js +1 -1
  144. package/dist/server/plugins/catalog-entities/database/mappers/{create-entity-relation.d.ts → create-entity-relation-read-model.d.ts} +2 -2
  145. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.js +1 -0
  146. package/dist/server/plugins/catalog-entities/database/mappers/map-entity-relation-row.js +1 -1
  147. package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.d.ts +27 -0
  148. package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.js +1 -0
  149. package/dist/server/plugins/catalog-entities/database/repositories/common/version-repository.d.ts +36 -0
  150. package/dist/server/plugins/catalog-entities/database/repositories/common/version-repository.js +1 -0
  151. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-bff-repository.d.ts +15 -4
  152. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-bff-repository.js +38 -27
  153. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.d.ts +36 -9
  154. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.js +37 -21
  155. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.d.ts +41 -42
  156. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.js +1 -1
  157. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.d.ts +3 -1
  158. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.js +1 -1
  159. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-relations-repository.d.ts +7 -1
  160. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-relations-repository.js +1 -1
  161. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.d.ts +5 -9
  162. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.js +1 -1
  163. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-entities-exclusion-filter.d.ts +13 -0
  164. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-entities-exclusion-filter.js +1 -0
  165. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-rbac-filter.d.ts +31 -0
  166. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-rbac-filter.js +9 -0
  167. package/dist/server/plugins/catalog-entities/database/repositories/utils/create-merged-entity-fields-for-select.d.ts +34 -0
  168. package/dist/server/plugins/catalog-entities/database/repositories/utils/create-merged-entity-fields-for-select.js +13 -0
  169. package/dist/server/plugins/catalog-entities/database/repositories/utils/normalize-revision-flags.d.ts +23 -0
  170. package/dist/server/plugins/catalog-entities/database/repositories/utils/normalize-revision-flags.js +1 -0
  171. package/dist/server/plugins/catalog-entities/database/repositories/utils/semantic-version-sort.d.ts +78 -0
  172. package/dist/server/plugins/catalog-entities/database/repositories/utils/semantic-version-sort.js +34 -0
  173. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/arazzo-entities-extractor.js +1 -1
  174. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.js +1 -1
  175. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.d.ts +6 -4
  176. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.js +1 -1
  177. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.js +2 -2
  178. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.d.ts +1 -1
  179. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.js +1 -1
  180. package/dist/server/plugins/catalog-entities/extensions/extractors/fs-entities-extractor.js +1 -1
  181. package/dist/server/plugins/catalog-entities/get-server-props.js +1 -1
  182. package/dist/server/plugins/catalog-entities/plugin.js +1 -1
  183. package/dist/server/plugins/catalog-entities/schemas/database-schemas.d.ts +3 -0
  184. package/dist/server/plugins/catalog-entities/schemas/database-schemas.js +1 -1
  185. package/dist/server/plugins/catalog-entities/schemas/dto-schemas.d.ts +15 -1
  186. package/dist/server/plugins/catalog-entities/schemas/dto-schemas.js +1 -1
  187. package/dist/server/plugins/catalog-entities/schemas/read-model-schemas.d.ts +26 -164
  188. package/dist/server/plugins/catalog-entities/schemas/read-model-schemas.js +0 -1
  189. package/dist/server/plugins/catalog-entities/types/extractors.d.ts +4 -4
  190. package/dist/server/plugins/catalog-entities/types/openapi.d.ts +11 -0
  191. package/dist/server/plugins/catalog-entities/types/openapi.js +0 -0
  192. package/dist/server/plugins/catalog-entities/types/params.d.ts +6 -0
  193. package/dist/server/plugins/catalog-entities/types/params.js +0 -0
  194. package/dist/server/plugins/catalog-entities/utils/ajv-validator.js +1 -1
  195. package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.js +1 -1
  196. package/dist/server/plugins/catalog-entities/utils/get-not-accessible-catalog-resources.d.ts +11 -0
  197. package/dist/server/plugins/catalog-entities/utils/get-not-accessible-catalog-resources.js +1 -0
  198. package/dist/server/plugins/config-parser/index.js +1 -1
  199. package/dist/server/plugins/config-parser/loaders/content-slugs-loader.js +1 -1
  200. package/dist/server/plugins/config-parser/loaders/nearest-redocly-config-loader.js +1 -1
  201. package/dist/server/plugins/config-parser/loaders/utils/read-and-validate-config.js +1 -1
  202. package/dist/server/plugins/default-theme/index.js +1 -1
  203. package/dist/server/plugins/entitlements/index.js +1 -1
  204. package/dist/server/plugins/graphql-docs/graphql-doc-loader.js +1 -1
  205. package/dist/server/plugins/graphql-docs/index.js +1 -1
  206. package/dist/server/plugins/graphql-docs/search/search-resolver.js +1 -1
  207. package/dist/server/plugins/graphql-docs/template/GraphQLDocs.js +6 -2
  208. package/dist/server/plugins/lifecycle.js +2 -2
  209. package/dist/server/plugins/markdown/attribute-resolvers/resolve-link.js +1 -1
  210. package/dist/server/plugins/markdown/compiler.d.ts +1 -0
  211. package/dist/server/plugins/markdown/compiler.js +1 -1
  212. package/dist/server/plugins/markdown/index.js +1 -1
  213. package/dist/server/plugins/markdown/is-partial.d.ts +1 -1
  214. package/dist/server/plugins/markdown/is-partial.js +1 -1
  215. package/dist/server/plugins/markdown/markdoc/import-user-tags.js +1 -1
  216. package/dist/server/plugins/markdown/markdoc/plugins/render-mermaid.js +1 -1
  217. package/dist/server/plugins/markdown/markdoc/resolve-raw-partials.d.ts +1 -1
  218. package/dist/server/plugins/markdown/markdoc/resolve-raw-partials.js +2 -2
  219. package/dist/server/plugins/markdown/markdown-static-data-loader.js +1 -1
  220. package/dist/server/plugins/mcp/auth/auth-handlers.js +1 -1
  221. package/dist/server/plugins/mcp/docs-mcp/tools/docs-mcp-tool.d.ts +54 -0
  222. package/dist/server/plugins/mcp/docs-mcp/tools/docs-mcp-tool.js +1 -0
  223. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.d.ts +9 -8
  224. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.js +1 -1
  225. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.d.ts +9 -8
  226. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.js +1 -1
  227. package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.d.ts +9 -8
  228. package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.js +1 -1
  229. package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.d.ts +9 -8
  230. package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.js +1 -1
  231. package/dist/server/plugins/mcp/docs-mcp/tools/index.d.ts +7 -13
  232. package/dist/server/plugins/mcp/docs-mcp/tools/index.js +1 -1
  233. package/dist/server/plugins/mcp/docs-mcp/tools/list-apis.d.ts +9 -6
  234. package/dist/server/plugins/mcp/docs-mcp/tools/list-apis.js +1 -1
  235. package/dist/server/plugins/mcp/docs-mcp/tools/search.d.ts +9 -2
  236. package/dist/server/plugins/mcp/docs-mcp/tools/search.js +1 -1
  237. package/dist/server/plugins/mcp/docs-mcp/tools/utils.d.ts +2 -1
  238. package/dist/server/plugins/mcp/docs-mcp/tools/utils.js +6 -6
  239. package/dist/server/plugins/mcp/docs-mcp/tools/whoami.d.ts +9 -2
  240. package/dist/server/plugins/mcp/docs-mcp/tools/whoami.js +1 -1
  241. package/dist/server/plugins/mcp/handlers/docs-mcp-handler.js +1 -1
  242. package/dist/server/plugins/mcp/handlers/errors.js +1 -1
  243. package/dist/server/plugins/mcp/handlers/handle-mcp-request.d.ts +5 -0
  244. package/dist/server/plugins/mcp/handlers/handle-mcp-request.js +1 -0
  245. package/dist/server/plugins/mcp/handlers/mcp-request-handler.d.ts +0 -1
  246. package/dist/server/plugins/mcp/handlers/mcp-request-handler.js +1 -1
  247. package/dist/server/plugins/mcp/servers/base-server.js +1 -1
  248. package/dist/server/plugins/mcp/types.d.ts +40 -0
  249. package/dist/server/plugins/mcp/workers/execute-mcp-tool.d.ts +3 -0
  250. package/dist/server/plugins/mcp/workers/execute-mcp-tool.js +1 -0
  251. package/dist/server/plugins/nav-utils.d.ts +1 -1
  252. package/dist/server/plugins/nav-utils.js +1 -1
  253. package/dist/server/plugins/openapi-docs/decorators.d.ts +3 -0
  254. package/dist/server/plugins/openapi-docs/decorators.js +1 -1
  255. package/dist/server/plugins/openapi-docs/get-server-props-custom-fields.d.ts +2 -4
  256. package/dist/server/plugins/openapi-docs/get-server-props-custom-fields.js +1 -1
  257. package/dist/server/plugins/openapi-docs/get-server-props.js +1 -1
  258. package/dist/server/plugins/openapi-docs/index.js +1 -1
  259. package/dist/server/plugins/openapi-docs/load-definition.d.ts +1 -0
  260. package/dist/server/plugins/openapi-docs/load-definition.js +3 -3
  261. package/dist/server/plugins/openapi-docs/openrpc-converter.d.ts +2 -0
  262. package/dist/server/plugins/openapi-docs/openrpc-converter.js +1 -0
  263. package/dist/server/plugins/openapi-docs/search/search-resolver.js +1 -1
  264. package/dist/server/plugins/openapi-docs/search-indexer.js +1 -1
  265. package/dist/server/plugins/openapi-docs/store-definition-bundles.js +1 -1
  266. package/dist/server/plugins/openapi-docs/template/OpenAPIDocs.js +8 -4
  267. package/dist/server/plugins/openapi-docs/template/helpers.d.ts +2 -2
  268. package/dist/server/plugins/openapi-docs/template/helpers.js +3 -3
  269. package/dist/server/plugins/openapi-docs/utils.d.ts +1 -0
  270. package/dist/server/plugins/scorecard-classic/compute-scorecard.d.ts +2 -1
  271. package/dist/server/plugins/scorecard-classic/compute-scorecard.js +4 -4
  272. package/dist/server/plugins/scorecard-classic/get-scorecard-config.d.ts +2 -1
  273. package/dist/server/plugins/scorecard-classic/index.js +1 -1
  274. package/dist/server/plugins/scorecard-classic/lint.d.ts +1 -1
  275. package/dist/server/plugins/scorecard-classic/lint.js +1 -1
  276. package/dist/server/plugins/scorecard-classic/loaders/scorecard-config.js +1 -1
  277. package/dist/server/plugins/scorecard-classic/loaders/scorecard.d.ts +6 -4
  278. package/dist/server/plugins/scorecard-classic/loaders/scorecard.js +1 -1
  279. package/dist/server/plugins/scorecard-classic/shared-utils.d.ts +1 -1
  280. package/dist/server/plugins/scorecard-classic/shared-utils.js +1 -1
  281. package/dist/server/plugins/scorecard-classic/template/Grid/Grid.d.ts +2 -1
  282. package/dist/server/plugins/scorecard-classic/template/Grid/Grid.js +3 -3
  283. package/dist/server/plugins/scorecard-classic/template/LevelIndicator.d.ts +1 -0
  284. package/dist/server/plugins/scorecard-classic/template/LevelIndicator.js +3 -3
  285. package/dist/server/plugins/scorecard-classic/template/components.js +1 -1
  286. package/dist/server/plugins/scorecard-classic/template/index.styles.d.ts +1 -0
  287. package/dist/server/plugins/scorecard-classic/template/index.styles.js +93 -19
  288. package/dist/server/plugins/scorecard-classic/template/index.types.d.ts +5 -1
  289. package/dist/server/plugins/scorecard-classic/template/useData.js +1 -1
  290. package/dist/server/plugins/scorecard-classic/template/views.js +1 -1
  291. package/dist/server/plugins/scorecard-classic/types.d.ts +5 -3
  292. package/dist/server/plugins/scorecard-classic/types.js +1 -1
  293. package/dist/server/plugins/scorecards/database/repositories/local/scorecards-config-local-repository.d.ts +12 -0
  294. package/dist/server/plugins/scorecards/database/repositories/local/scorecards-config-local-repository.js +1 -0
  295. package/dist/server/plugins/scorecards/database/scorecards-config-service.d.ts +11 -0
  296. package/dist/server/plugins/scorecards/database/scorecards-config-service.js +1 -0
  297. package/dist/server/plugins/scorecards/plugin.js +1 -1
  298. package/dist/server/plugins/scorecards/workers/run-scorecards-worker.d.ts +2 -1
  299. package/dist/server/plugins/scorecards/workers/run-scorecards-worker.js +1 -1
  300. package/dist/server/plugins/scorecards/workers/scorecards.d.ts +1 -12
  301. package/dist/server/plugins/scorecards/workers/scorecards.js +1 -1
  302. package/dist/server/plugins/search/ai-indexer/prepare-ai-search-documents.js +1 -1
  303. package/dist/server/plugins/search/documents/search-documents.js +1 -1
  304. package/dist/server/plugins/search/engines/flexsearch/index.js +1 -1
  305. package/dist/server/plugins/search/engines/typesense/index.js +1 -1
  306. package/dist/server/plugins/search/index.js +1 -1
  307. package/dist/server/plugins/search/llmstxt/index.js +5 -5
  308. package/dist/server/plugins/search/utils.js +2 -2
  309. package/dist/server/plugins/sidebars/index.d.ts +0 -2
  310. package/dist/server/plugins/sidebars/index.js +3 -3
  311. package/dist/server/plugins/sso/index.js +1 -1
  312. package/dist/server/providers/database/base-repository.d.ts +1 -0
  313. package/dist/server/providers/database/base-repository.js +1 -1
  314. package/dist/server/providers/database/database-connection-factory.js +1 -1
  315. package/dist/server/providers/database/database-preconnect-service.js +1 -1
  316. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0005_catalog-relations-constraint-fix.sql +2 -0
  317. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0006_add-catalog-entitities-attributes-table.sql +11 -0
  318. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0005_snapshot.json +393 -0
  319. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0006_snapshot.json +458 -0
  320. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/_journal.json +14 -0
  321. package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-attributes-table.d.ts +143 -0
  322. package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-attributes-table.js +1 -0
  323. package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js +1 -1
  324. package/dist/server/providers/database/databases/main-sqlite/migrations/0006_change-scorecards-config-timestamps-field-types.sql +19 -0
  325. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0006_snapshot.json +261 -0
  326. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/_journal.json +7 -0
  327. package/dist/server/providers/database/databases/main-sqlite/schemas/scorecards-config-table.d.ts +24 -18
  328. package/dist/server/providers/database/databases/main-sqlite/schemas/scorecards-config-table.js +1 -1
  329. package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.js +1 -1
  330. package/dist/server/providers/database/databases/sqld-sqlite/migrations/0007_catalog-relations-constraint-fix.sql +2 -0
  331. package/dist/server/providers/database/databases/sqld-sqlite/migrations/0008_add-catalog-entitities-attributes-table.sql +11 -0
  332. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0007_snapshot.json +833 -0
  333. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0008_snapshot.json +898 -0
  334. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/_journal.json +14 -0
  335. package/dist/server/providers/database/pagination/entities-to-filter.d.ts +15 -0
  336. package/dist/server/providers/database/pagination/entities-to-filter.js +1 -0
  337. package/dist/server/providers/database/pagination/utils/index.d.ts +4 -0
  338. package/dist/server/providers/database/pagination/utils/index.js +1 -1
  339. package/dist/server/providers/database/pagination/utils/is-nested-condition.d.ts +16 -0
  340. package/dist/server/providers/database/pagination/utils/is-nested-condition.js +1 -0
  341. package/dist/server/providers/database/pagination/utils/is-simple-condition.d.ts +18 -0
  342. package/dist/server/providers/database/pagination/utils/is-simple-condition.js +1 -0
  343. package/dist/server/providers/database/pagination/utils/map-operator.d.ts +10 -0
  344. package/dist/server/providers/database/pagination/utils/map-operator.js +1 -0
  345. package/dist/server/providers/database/pagination/utils/transform-condition.d.ts +12 -0
  346. package/dist/server/providers/database/pagination/utils/transform-condition.js +1 -0
  347. package/dist/server/ssr/render.js +1 -1
  348. package/dist/server/ssr/server-side-props/get-server-props-from-user-handler.js +1 -1
  349. package/dist/server/ssr/utils.js +8 -8
  350. package/dist/server/store.d.ts +14 -6
  351. package/dist/server/store.js +1 -1
  352. package/dist/server/telemetry/index.js +1 -1
  353. package/dist/server/tools/notifiers/formatter.js +3 -3
  354. package/dist/server/tools/notifiers/helpers/colors.js +1 -1
  355. package/dist/server/tools/notifiers/logger.js +2 -2
  356. package/dist/server/tools/notifiers/reporter.js +9 -9
  357. package/dist/server/tools/notifiers/terminal-manager.js +4 -4
  358. package/dist/server/types/plugins/common.d.ts +7 -1
  359. package/dist/server/types/plugins/markdown.d.ts +2 -0
  360. package/dist/server/types/plugins/scorecards.d.ts +30 -0
  361. package/dist/server/types/plugins/scorecards.js +0 -0
  362. package/dist/server/utils/envs/get-api-route-allowed-env-variables.js +1 -1
  363. package/dist/server/utils/envs/load-env-variables.d.ts +1 -1
  364. package/dist/server/utils/envs/load-env-variables.js +1 -1
  365. package/dist/server/utils/envs/sanitize-branch-name.d.ts +6 -0
  366. package/dist/server/utils/envs/sanitize-branch-name.js +1 -0
  367. package/dist/server/utils/globs.js +1 -1
  368. package/dist/server/utils/is-catalog-entities-enabled.js +1 -1
  369. package/dist/server/utils/is-scorecards-enabled.js +1 -1
  370. package/dist/server/utils/lifecycle-hooks.js +1 -1
  371. package/dist/server/utils/rbac.d.ts +76 -7
  372. package/dist/server/utils/rbac.js +1 -1
  373. package/dist/server/utils/report-all-errors.js +1 -1
  374. package/dist/server/utils/set-execution-mode.d.ts +5 -0
  375. package/dist/server/utils/set-execution-mode.js +1 -0
  376. package/dist/server/utils/time/with-timestamp.d.ts +42 -10
  377. package/dist/server/utils/time/with-timestamp.js +1 -1
  378. package/dist/server/version.js +1 -1
  379. package/dist/server/web-server/auth.js +3 -3
  380. package/dist/server/web-server/dev-server.js +1 -1
  381. package/dist/server/web-server/handle-api-route-request.js +1 -1
  382. package/dist/server/web-server/http.js +2 -2
  383. package/dist/server/web-server/middleware/apiKeyMiddleware.js +1 -1
  384. package/dist/server/web-server/middleware/catalogAuthMiddleware.d.ts +4 -6
  385. package/dist/server/web-server/middleware/catalogAuthMiddleware.js +1 -1
  386. package/dist/server/web-server/middleware/corsMiddleware.js +1 -1
  387. package/dist/server/web-server/middleware/dynamic-middleware/dynamic-middleware.js +1 -1
  388. package/dist/server/web-server/middleware/idleTimeoutMiddleware.js +1 -1
  389. package/dist/server/web-server/routes/ask-ai.js +1 -1
  390. package/dist/server/web-server/routes/auth.js +1 -1
  391. package/dist/server/web-server/routes/catalog/bff-catalog-related-entities.js +1 -1
  392. package/dist/server/web-server/routes/catalog/bff-catalog.js +1 -1
  393. package/dist/server/web-server/routes/catalog/catalog-relations.js +1 -1
  394. package/dist/server/web-server/routes/catalog/catalog.js +1 -1
  395. package/dist/server/web-server/routes/catalog/dto/read-entity-dto.d.ts +3 -0
  396. package/dist/server/web-server/routes/catalog/dto/read-entity-dto.js +0 -0
  397. package/dist/server/web-server/routes/catalog/helpers/create-entity-relation-update-schema.d.ts +43 -0
  398. package/dist/server/web-server/routes/catalog/helpers/create-entity-relation-update-schema.js +1 -0
  399. package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.d.ts +6823 -0
  400. package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.js +1 -0
  401. package/dist/server/web-server/routes/catalog/helpers/create-entity-update-schema.d.ts +1102 -0
  402. package/dist/server/web-server/routes/catalog/helpers/create-entity-update-schema.js +1 -0
  403. package/dist/server/web-server/routes/catalog/helpers/has-access-to-entity.d.ts +10 -0
  404. package/dist/server/web-server/routes/catalog/helpers/has-access-to-entity.js +1 -0
  405. package/dist/server/web-server/routes/catalog/mappers/map-entity-read-model-schema-to-entity-read-dto.d.ts +4 -0
  406. package/dist/server/web-server/routes/catalog/mappers/map-entity-read-model-schema-to-entity-read-dto.js +1 -0
  407. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entities.d.ts +4 -0
  408. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entities.js +1 -0
  409. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity-update-data.d.ts +4 -0
  410. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity-update-data.js +1 -0
  411. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity.d.ts +4 -0
  412. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity.js +1 -0
  413. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.d.ts +13 -0
  414. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.js +1 -0
  415. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.d.ts +13 -0
  416. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.js +1 -0
  417. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.d.ts +13 -0
  418. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.js +1 -0
  419. package/dist/server/web-server/routes/dynamic-route.js +1 -1
  420. package/dist/server/web-server/routes/error.js +1 -1
  421. package/dist/server/web-server/routes/helpers/get-current-rbac-teams.d.ts +3 -0
  422. package/dist/server/web-server/routes/helpers/get-current-rbac-teams.js +1 -0
  423. package/dist/server/web-server/routes/helpers/get-rbac-restrictions-data-for-catalog.d.ts +11 -0
  424. package/dist/server/web-server/routes/helpers/get-rbac-restrictions-data-for-catalog.js +1 -0
  425. package/dist/server/web-server/routes/index.js +1 -1
  426. package/dist/server/web-server/routes/info.js +1 -1
  427. package/dist/server/web-server/routes/mcp-oauth.js +1 -1
  428. package/dist/server/web-server/routes/otel/otel.js +1 -1
  429. package/dist/server/web-server/routes/page-data.js +1 -1
  430. package/dist/server/web-server/routes/path-prefix-redirect.js +1 -1
  431. package/dist/server/web-server/utils.d.ts +2 -2
  432. package/dist/server/workers/mcp-tool-worker-pool.d.ts +4 -0
  433. package/dist/server/workers/mcp-tool-worker-pool.js +1 -0
  434. package/dist/server/workers/mcp-tool-worker.d.ts +2 -0
  435. package/dist/server/workers/mcp-tool-worker.js +1 -0
  436. package/dist/server/workers/types.d.ts +7 -1
  437. package/dist/server/workers/worker-pool.js +1 -1
  438. package/package.json +19 -21
  439. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation.js +0 -1
  440. package/dist/server/plugins/catalog-entities/entities/validate-entity.d.ts +0 -6
  441. package/dist/server/plugins/catalog-entities/entities/validate-entity.js +0 -1
  442. package/dist/server/plugins/mcp/workers/run-api-routes-worker.d.ts +0 -5
  443. package/dist/server/plugins/mcp/workers/run-api-routes-worker.js +0 -1
  444. package/dist/server/utils/envs/is-build-mode.d.ts +0 -2
  445. package/dist/server/utils/envs/is-build-mode.js +0 -1
  446. package/dist/server/utils/envs/is-develop-mode.d.ts +0 -7
  447. package/dist/server/utils/envs/is-develop-mode.js +0 -1
  448. package/dist/server/utils/envs/is-production-mode.d.ts +0 -10
  449. package/dist/server/utils/envs/is-production-mode.js +0 -1
  450. package/dist/server/workers/mcp-worker-pool.d.ts +0 -4
  451. package/dist/server/workers/mcp-worker-pool.js +0 -1
  452. package/dist/utils/env/is-local-development.d.ts +0 -13
  453. package/dist/utils/env/is-local-development.js +0 -1
  454. package/dist/utils/env/is-production.d.ts +0 -13
  455. package/dist/utils/env/is-production.js +0 -1
  456. package/dist/utils/env/is-web-view.d.ts +0 -14
  457. package/dist/utils/env/is-web-view.js +0 -1
@@ -50,6 +50,20 @@
50
50
  "when": 1766391516611,
51
51
  "tag": "0006_catalog-versions-and-revisions-relations",
52
52
  "breakpoints": true
53
+ },
54
+ {
55
+ "idx": 7,
56
+ "version": "6",
57
+ "when": 1768307646039,
58
+ "tag": "0007_catalog-relations-constraint-fix",
59
+ "breakpoints": true
60
+ },
61
+ {
62
+ "idx": 8,
63
+ "version": "6",
64
+ "when": 1768558795586,
65
+ "tag": "0008_add-catalog-entitities-attributes-table",
66
+ "breakpoints": true
53
67
  }
54
68
  ]
55
69
  }
@@ -0,0 +1,15 @@
1
+ import type { ScorecardsConfig } from '@redocly/config';
2
+ import type { Filter } from '../../../providers/database/pagination/types.js';
3
+ type ScorecardConfig = ScorecardsConfig[number];
4
+ type EntitiesConfig = ScorecardConfig['entities'];
5
+ /**
6
+ * Transforms scorecards entities config (array or `{ operator, conditions }`) into a {@link Filter}
7
+ * used by the pagination layer. Handles AND/OR, nested conditions, and simple field conditions.
8
+ *
9
+ * @param entities - Entities config: array of conditions (AND) or `{ operator: 'and'|'or', conditions }`
10
+ * @returns A filter tree with `op` and `conditions`
11
+ * @throws Error when config is empty array, invalid structure, or unsupported operator
12
+ */
13
+ export declare function transformEntitiesToFilter(entities: EntitiesConfig): Filter;
14
+ export {};
15
+ //# sourceMappingURL=entities-to-filter.d.ts.map
@@ -0,0 +1 @@
1
+ import{OPERATORS as n}from"../../../providers/database/pagination/constants.js";import{isNestedCondition as a}from"../../../providers/database/pagination/utils/is-nested-condition.js";import{isSimpleCondition as f}from"../../../providers/database/pagination/utils/is-simple-condition.js";import{transformCondition as s}from"../../../providers/database/pagination/utils/transform-condition.js";function t(o){if(Array.isArray(o)){if(o.length===0)throw new Error("Entities config cannot be an empty array");if(o.length===1){const r=o[0];if(f(r))return{op:n.AND,conditions:[s(r)]};if(a(r))return{op:n.AND,conditions:[t(r)]};throw new Error("Invalid condition structure")}return{op:n.AND,conditions:o.map(r=>{if(f(r))return s(r);if(a(r))return t(r);throw new Error("Invalid condition structure")})}}const{operator:i,conditions:e}=o;if(!["and","or"].includes(i))throw new Error(`Unsupported operator: ${i}`);const p=Array.isArray(e)?e.map(r=>{if(a(r))return t(r);if(f(r))return s(r);throw new Error("Invalid condition structure")}):[t(e)];return{op:i==="and"?n.AND:n.OR,conditions:p}}export{t as transformEntitiesToFilter};
@@ -1,6 +1,10 @@
1
1
  export * from './create-cursor.js';
2
2
  export * from './decode-cursor.js';
3
3
  export * from './is-base-64.js';
4
+ export * from './is-nested-condition.js';
5
+ export * from './is-simple-condition.js';
6
+ export * from './map-operator.js';
7
+ export * from './transform-condition.js';
4
8
  export * from './transform-to-camel-case.js';
5
9
  export * from './transform-to-snake-case.js';
6
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- export*from"./create-cursor.js";export*from"./decode-cursor.js";export*from"./is-base-64.js";export*from"./transform-to-camel-case.js";export*from"./transform-to-snake-case.js";
1
+ export*from"./create-cursor.js";export*from"./decode-cursor.js";export*from"./is-base-64.js";export*from"./is-nested-condition.js";export*from"./is-simple-condition.js";export*from"./map-operator.js";export*from"./transform-condition.js";export*from"./transform-to-camel-case.js";export*from"./transform-to-snake-case.js";
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Nested condition shape: has `operator` and `conditions`, no `field`.
3
+ */
4
+ type NestedCondition = {
5
+ operator: string;
6
+ conditions: unknown;
7
+ };
8
+ /**
9
+ * Type guard: checks if the value is a nested condition (operator + conditions, no field).
10
+ *
11
+ * @param condition - Value to check
12
+ * @returns `true` when condition has `operator` and `conditions` and no `field`; otherwise `false`
13
+ */
14
+ export declare function isNestedCondition(condition: unknown): condition is NestedCondition;
15
+ export {};
16
+ //# sourceMappingURL=is-nested-condition.d.ts.map
@@ -0,0 +1 @@
1
+ function r(e){return typeof e=="object"&&e!==null&&"operator"in e&&"conditions"in e&&!("field"in e)}export{r as isNestedCondition};
@@ -0,0 +1,18 @@
1
+ /**
2
+ * A simple entity condition from scorecards config: has `field` and `operator`, optional `value`, `match`, `modifier`.
3
+ */
4
+ export type SimpleEntityCondition = {
5
+ field: string;
6
+ operator: string;
7
+ value?: unknown;
8
+ match?: unknown;
9
+ modifier?: 'not';
10
+ };
11
+ /**
12
+ * Type guard: checks if the value is a simple entity condition (field + operator shape).
13
+ *
14
+ * @param condition - Value to check
15
+ * @returns `true` when condition has `field` (string) and `operator`; otherwise `false`
16
+ */
17
+ export declare function isSimpleCondition(condition: unknown): condition is SimpleEntityCondition;
18
+ //# sourceMappingURL=is-simple-condition.d.ts.map
@@ -0,0 +1 @@
1
+ function r(e){return typeof e=="object"&&e!==null&&"field"in e&&typeof e.field=="string"&&"operator"in e}export{r as isSimpleCondition};
@@ -0,0 +1,10 @@
1
+ import type { FilterClause } from '../../../../providers/database/pagination/types.js';
2
+ /**
3
+ * Maps a config operator string to the corresponding {@link FilterClause} operator.
4
+ *
5
+ * @param operator - Config operator: `'eq' | 'in' | 'contains' | 'between'`
6
+ * @returns The filter clause operator: `'equal' | 'in' | 'contains' | 'between'`
7
+ * @throws Error when operator is not supported
8
+ */
9
+ export declare function mapOperator(operator: string): FilterClause['operator'];
10
+ //# sourceMappingURL=map-operator.d.ts.map
@@ -0,0 +1 @@
1
+ function n(e){switch(e){case"eq":return"equal";case"in":return"in";case"contains":return"contains";case"between":return"between";default:throw new Error(`Unsupported operator "${e}". Supported operators: eq, in, contains, between`)}}export{n as mapOperator};
@@ -0,0 +1,12 @@
1
+ import type { FilterClause } from '../../../../providers/database/pagination/types.js';
2
+ import type { SimpleEntityCondition } from './is-simple-condition.js';
3
+ /**
4
+ * Transforms a simple entity condition from scorecards config into a {@link FilterClause}.
5
+ * Handles operator mapping, optional `modifier: 'not'`, and rejects unsupported `match` / array operators.
6
+ *
7
+ * @param cond - Simple entity condition (must pass {@link isSimpleCondition})
8
+ * @returns A filter clause ready for the pagination layer
9
+ * @throws Error when `match` is used or when operator is an array operator (some, every, none)
10
+ */
11
+ export declare function transformCondition(cond: SimpleEntityCondition): FilterClause;
12
+ //# sourceMappingURL=transform-condition.d.ts.map
@@ -0,0 +1 @@
1
+ import{mapOperator as n}from"./map-operator.js";function a(e){const r=e;if(r.match)throw["some","every","none"].includes(r.operator)?new Error("Array query operators (some, every, none) are not yet supported in Filter type"):new Error("match property is only supported with array query operators");const t=n(r.operator),o={field:r.field,operator:t,value:r.value};return r.modifier==="not"&&(o.modifier="not"),o}export{a as transformCondition};
@@ -1 +1 @@
1
- import{pathToFileURL as F}from"url";import{HelmetProvider as q}from"@dr.pogodin/react-helmet";import{renderToString as l}from"react-dom/server";import{StaticRouterProvider as Y,createStaticHandler as z,createStaticRouter as G}from"react-router-dom/server.js";import r from"react";import{readFile as J}from"fs/promises";import{join as K}from"path";import{withPathPrefix as m,getLocaleFromPathname as Q,withoutPathPrefix as V,removeTrailingSlash as W}from"@redocly/theme/core/utils";import{RUNTIME_RESOURCES_DIR as T}from"../constants/common.js";import{slash as X}from"../../utils/path/slash.js";import{reporter as Z}from"../tools/notifiers/reporter.js";import{isDevelopMode as tt}from"../utils/envs/is-develop-mode.js";import{slug as et}from"../utils/slugger.js";import{htmlTemplate as rt}from"./template.js";import{detectColorSchemaScript as ot,generatePreloadPageData as st}from"./utils.js";import"./hijack-console.js";import{getSitemapLinkTag as nt}from"./get-sitemap-link-tag.js";let p="";async function at(t){return process.env.REDOCLY_STATIC_BUNDLE?await import("../../client/server-entry.js"):await import(F(`${X(t)}/server-entry.js`)+"?"+new Date)}async function vt(t){if(!process.env.REDOCLY_STATIC_BUNDLE){const e=Z.getCompilationProblems();if(e.length>0){const{renderCompilationError:n}=await import("./render-compilation-error.js");return n(e)}}const{Loader:g,App:d,routes:E,ServerStyleSheet:R,StyleSheetManager:C,ErrorDetails:w,initL10n:D}=await at(t.serverOutDir),{page:u,store:{globalData:S,hasSitemap:y},sharedData:P,ssrHref:v}=t,h=S?.l10n,i=Q(V(u.slug),h?.defaultLocale,h?.locales),f=t.page.request?.url||"http://localhost/";await g.prepare({...u,slug:W(new URL(f).pathname)},P,S,i),await D(i);const c=new R,{query:L,dataRoutes:_}=z([{Component:d,path:m("*"),children:E}]),s=await L(new Request(f));if(s instanceof Response)throw s;const B=G(_,s);try{globalThis.SSR_HOSTNAME=v,globalThis.SSR_USER_AGENT=t.userAgent,globalThis.SSR_OMIT_SUSPENSE=t.omitSuspense;const e={},n=l(r.createElement(q,{context:e},r.createElement(C,{sheet:c.instance},r.createElement(Y,{router:B,context:s})))),b=y?nt():"",a=e.helmet,x=a?.title.toString()||"",U=t.store.globalData?.logo?.favicon,o=t.store.config,k=`<link rel="preload" as="fetch" crossorigin="anonymous" href="${m("/app-data.json")}" />`,A=st(t.page.slug),M=ot(o),j=t.page.product?.name?`product-${et(t.page.product.name)}`:"",H=t.store.ssr.headTags.join(""),N=t.store.ssr.postBodyTags.join(""),O=t.store.ssr.preBodyTags.join(""),I=`<link rel="stylesheet" href="${m(T)}/browser-entry.css" />`;!tt()&&!p&&(p=`<style>${await J(K(t.outdir,T,"browser-entry.css"),"utf-8")}</style>`);const $={bodyHtml:n,linkTags:o.linkTags+c.getStyleTags()+(a?.link.toString()||""),title:x,favicon:U,headScriptTags:b+M+o.headScriptTags+H+(a?.script.toString()||"")+(a?.meta.toString()||""),preload:[k,A],postBodyScriptTags:o.postBodyScriptTags+N,preBodyScriptTags:o.preBodyScriptTags||""+O,lang:i,productClass:j,runtimeCss:p||I};return{html:rt($),statusCode:200}}catch(e){return t.telemetry.sendSsrErrorCaughtMessage({message:e.message}),{html:l(r.createElement(w,{error:e})),statusCode:500,error:e}}finally{c.seal(),g.clear()}}function Lt(t){return l(r.createElement(r.Fragment,null,...t))}export{vt as render,Lt as renderComponents};
1
+ import{pathToFileURL as I}from"url";import{HelmetProvider as z}from"@dr.pogodin/react-helmet";import{renderToString as m}from"react-dom/server";import{StaticRouterProvider as G,createStaticHandler as J,createStaticRouter as K}from"react-router-dom/server.js";import r from"react";import{readFile as Q}from"fs/promises";import{join as V}from"path";import{withPathPrefix as l,getLocaleFromPathname as W,withoutPathPrefix as X,removeTrailingSlash as Y}from"@redocly/theme/core/utils";import{RUNTIME_RESOURCES_DIR as T}from"../constants/common.js";import{slash as Z}from"../../utils/path/slash.js";import{reporter as tt}from"../tools/notifiers/reporter.js";import{envConfig as p}from"../../config/env-config.js";import{slug as et}from"../utils/slugger.js";import{htmlTemplate as rt}from"./template.js";import{detectColorSchemaScript as ot,generatePreloadPageData as st}from"./utils.js";import"./hijack-console.js";import{getSitemapLinkTag as nt}from"./get-sitemap-link-tag.js";let g="";async function at(t){return p.isRuntimeMode?await import("../../client/server-entry.js"):await import(I(`${Z(t)}/server-entry.js`)+"?"+new Date)}async function vt(t){if(!p.isRuntimeMode){const e=tt.getCompilationProblems();if(e.length>0){const{renderCompilationError:n}=await import("./render-compilation-error.js");return n(e)}}const{Loader:u,App:R,routes:E,ServerStyleSheet:w,StyleSheetManager:C,ErrorDetails:y,initL10n:P}=await at(t.serverOutDir),{page:h,store:{globalData:S,hasSitemap:D},sharedData:v,ssrHref:b}=t,f=S?.l10n,i=W(X(h.slug),f?.defaultLocale,f?.locales),d=t.page.request?.url||"http://localhost/";await u.prepare({...h,slug:Y(new URL(d).pathname)},v,S,i),await P(i);const c=new w,{query:M,dataRoutes:x}=J([{Component:R,path:l("*"),children:E}]),s=await M(new Request(d));if(s instanceof Response)throw s;const B=K(x,s);try{globalThis.SSR_HOSTNAME=b,globalThis.SSR_USER_AGENT=t.userAgent,globalThis.SSR_OMIT_SUSPENSE=t.omitSuspense;const e={},n=m(r.createElement(z,{context:e},r.createElement(C,{sheet:c.instance},r.createElement(G,{router:B,context:s})))),L=D?nt():"",a=e.helmet,k=a?.title.toString()||"",_=t.store.globalData?.logo?.favicon,o=t.store.config,j=`<link rel="preload" as="fetch" crossorigin="anonymous" href="${l("/app-data.json")}" />`,H=st(t.page.slug),U=ot(o),A=t.page.product?.name?`product-${et(t.page.product.name)}`:"",$=t.store.ssr.headTags.join(""),F=t.store.ssr.postBodyTags.join(""),N=t.store.ssr.preBodyTags.join(""),O=`<link rel="stylesheet" href="${l(T)}/browser-entry.css" />`;!p.isDevelopMode&&!g&&(g=`<style>${await Q(V(t.outdir,T,"browser-entry.css"),"utf-8")}</style>`);const q={bodyHtml:n,linkTags:o.linkTags+c.getStyleTags()+(a?.link.toString()||""),title:k,favicon:_,headScriptTags:L+U+o.headScriptTags+$+(a?.script.toString()||"")+(a?.meta.toString()||""),preload:[j,H],postBodyScriptTags:o.postBodyScriptTags+F,preBodyScriptTags:o.preBodyScriptTags||""+N,lang:i,productClass:A,runtimeCss:g||O};return{html:rt(q),statusCode:200}}catch(e){return t.telemetry.sendSsrErrorCaughtMessage({message:e.message}),{html:m(r.createElement(y,{error:e})),statusCode:500,error:e}}finally{c.seal(),u.clear()}}function bt(t){return m(r.createElement(r.Fragment,null,...t))}export{vt as render,bt as renderComponents};
@@ -1 +1 @@
1
- import{logger as g}from"../../tools/notifiers/logger.js";import{reporter as m}from"../../tools/notifiers/reporter.js";import{enhanceContext as f}from"../../api-routes/helpers/enhance-context.js";import{KvService as l}from"../../persistence/kv/services/kv-service.js";import{enhanceRequest as u}from"../../api-routes/helpers/enhance-request.js";async function S({route:r,ctx:t,staticData:n,serverPropsGetters:a,serverPropsUser:p,actions:s}){try{if(!a[r.fsPath]||!t)return;const e=a[r.fsPath];e||await m.panicOnBuild(`Invalid page props getter id: "${r.fsPath}" for route "${r.slug}"`);const o=async()=>await l.getInstance({baseDbDir:s.serverOutDir,sqldRemoteDatabaseUrl:process.env.SQLD_REMOTE_DATABASE_URL,sqldRemoteDatabaseAuthToken:process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN}),c=f({honoCtx:t,ctx:{user:p,config:s.getConfig()},getKv:o}),i=await u(t);return await(await e()).default(n,i,c)}catch(e){const o=r.fsPath.replace(/\.(page\.tsx?|md)$/,".props.ts");return g.error(`Page prop getter error: ${e.message}`),{pagePropGetterError:{message:`${e.message||"An unknown error occurred"} in ${o}`,name:"ServerPropsGetterError",stack:e.stack}}}}export{S as getServerPropsFromUserHandler};
1
+ import{logger as m}from"../../tools/notifiers/logger.js";import{reporter as f}from"../../tools/notifiers/reporter.js";import{enhanceContext as l}from"../../api-routes/helpers/enhance-context.js";import{KvService as u}from"../../persistence/kv/services/kv-service.js";import{envConfig as n}from"../../../config/env-config.js";import{enhanceRequest as P}from"../../api-routes/helpers/enhance-request.js";async function _({route:r,ctx:t,staticData:p,serverPropsGetters:a,serverPropsUser:i,actions:s}){try{if(!a[r.fsPath]||!t)return;const e=a[r.fsPath];e||await f.panicOnBuild(`Invalid page props getter id: "${r.fsPath}" for route "${r.slug}"`);const o=async()=>u.getInstance({baseDbDir:s.serverOutDir,sqldRemoteDatabaseUrl:n.SQLD_REMOTE_DATABASE_URL,sqldRemoteDatabaseAuthToken:n.SQLD_REMOTE_DATABASE_AUTH_TOKEN}),g=l({honoCtx:t,ctx:{user:i,config:s.getConfig()},getKv:o}),c=await P(t);return await(await e()).default(p,c,g)}catch(e){const o=r.fsPath.replace(/\.(page\.tsx?|md)$/,".props.ts");return m.error(`Page prop getter error: ${e.message}`),{pagePropGetterError:{message:`${e.message||"An unknown error occurred"} in ${o}`,name:"ServerPropsGetterError",stack:e.stack}}}}export{_ as getServerPropsFromUserHandler};
@@ -1,21 +1,21 @@
1
- import{pathToFileURL as d}from"url";import{removeTrailingSlash as u}from"../../utils/url/remove-trailing-slash.js";import{slash as p}from"../../utils/path/slash.js";import{getClientPageDataUrl as f}from"../../utils/url/get-client-page-data-url.js";import{DEFAULT_COLOR_MODES as l}from"@redocly/theme/core/constants";function E(t){const o=t?.colorMode,{modes:e=[l.LIGHT,l.DARK],hide:r,ignoreDetection:n}=o||{},s=e&&`'${e[0]}'`,a=e?.[0],m=e?.some(i=>i===a)?`'${a}'`:void 0;return r||!s?"":`
1
+ import{pathToFileURL as d}from"url";import{removeTrailingSlash as u}from"../../utils/url/remove-trailing-slash.js";import{slash as p}from"../../utils/path/slash.js";import{getClientPageDataUrl as f}from"../../utils/url/get-client-page-data-url.js";import{DEFAULT_COLOR_MODES as m}from"@redocly/theme/core/constants";import{envConfig as h}from"../../config/env-config.js";function C(t){const o=t?.colorMode,{modes:e=[m.LIGHT,m.DARK],hide:r,ignoreDetection:n}=o||{},a=e&&`'${e[0]}'`,s=e?.[0],l=e?.some(c=>c===s)?`'${s}'`:void 0;return r||!a?"":`
2
2
  <script>
3
3
  if(window&&document.documentElement)
4
4
  {
5
5
  const q=new URLSearchParams(window.location.search).get("colorSchema");
6
6
  const e=q || window.localStorage.getItem("colorSchema");
7
7
  if(e) {
8
- const modeToSet = [${e.map(i=>`'${i}'`)}].some((mode) => mode === e) ? e : 'light';
9
- ${c("modeToSet",e)}
8
+ const modeToSet = [${e.map(c=>`'${c}'`)}].some((mode) => mode === e) ? e : 'light';
9
+ ${i("modeToSet",e)}
10
10
  } else {
11
11
  if (window.matchMedia) {
12
- ${h(n,m,s,e)}
12
+ ${g(n,l,a,e)}
13
13
  } else {
14
- ${c(s,e)}
14
+ ${i(a,e)}
15
15
  }
16
16
  }
17
17
  }
18
- </script>`}function h(t,o,e,r=["light","dark"]){return t?o?c(o,r):e?c(e,r):"return":g(o,r)}function c(t=`'${l.LIGHT}'`,o=["light","dark"]){return`(function() {
18
+ </script>`}function g(t,o,e,r=["light","dark"]){return t?o?i(o,r):e?i(e,r):"return":$(o,r)}function i(t=`'${m.LIGHT}'`,o=["light","dark"]){return`(function() {
19
19
  var root = document.documentElement;
20
20
  var modes = [${o.map(r=>`'${r}'`).join(", ")}];
21
21
  var value = ${t};
@@ -23,7 +23,7 @@ import{pathToFileURL as d}from"url";import{removeTrailingSlash as u}from"../../u
23
23
  root.classList.remove(className);
24
24
  });
25
25
  root.classList.add(value);
26
- })();`}function g(t,o=["light","dark"]){const e=o.map(n=>`'${n}'`).join(", "),r=t?`root.classList.add(${t});`:"";return`(function() {
26
+ })();`}function $(t,o=["light","dark"]){const e=o.map(n=>`'${n}'`).join(", "),r=t?`root.classList.add(${t});`:"";return`(function() {
27
27
  var root = document.documentElement;
28
28
  var modes = [${e}];
29
29
  modes.forEach(function(className) {
@@ -36,4 +36,4 @@ import{pathToFileURL as d}from"url";import{removeTrailingSlash as u}from"../../u
36
36
  }${r?` else {
37
37
  ${r}
38
38
  }`:""}
39
- })();`}async function P(t){try{return process.env.REDOCLY_STATIC_BUNDLE?await import("@portal/server-props"):await import(d(`${p(t)}/server-props-entry.js`)+"?"+new Date)}catch{return{}}}function C(t){const o=t.split("/").map(encodeURIComponent).join("/"),e=o==="/"?o:u(o);return`<link rel="preload" as="fetch" crossorigin="anonymous" href="${f(e)}" />`}const M=(t,o)=>{if(!o)return{params:[],queries:{}};const e=t.slug||"",n=o.req.path.split(e.endsWith("/")?e:`${e}/`)[1]||"",s=o.req.query(),a=n.replace("data.json","");return!a||a==="/"?{params:[],queries:s}:{params:a.split("/").filter(Boolean),queries:s}};export{E as detectColorSchemaScript,C as generatePreloadPageData,M as getPathParams,P as importServerProps};
39
+ })();`}async function E(t){try{return h.isRuntimeMode?await import("@portal/server-props"):await import(d(`${p(t)}/server-props-entry.js`)+"?"+new Date)}catch{return{}}}function T(t){const o=t.split("/").map(encodeURIComponent).join("/"),e=o==="/"?o:u(o);return`<link rel="preload" as="fetch" crossorigin="anonymous" href="${f(e)}" />`}const k=(t,o)=>{if(!o)return{params:[],queries:{}};const e=t.slug||"",n=o.req.path.split(e.endsWith("/")?e:`${e}/`)[1]||"",a=o.req.query(),s=n.replace("data.json","");return!s||s==="/"?{params:[],queries:a}:{params:s.split("/").filter(Boolean),queries:a}};export{C as detectColorSchemaScript,T as generatePreloadPageData,k as getPathParams,E as importServerProps};
@@ -1,3 +1,4 @@
1
+ import type { Node } from '@markdoc/markdoc';
1
2
  import type { JSX } from 'react';
2
3
  import type { CommonError, GlobalData } from '../types/index.js';
3
4
  import type { WildcardRedirectsTree } from './types';
@@ -7,6 +8,7 @@ import type { SearchFacet } from '@redocly/theme/core/types';
7
8
  import type { BundledDefinition as OpenApiBundledDefinition } from './plugins/openapi-docs/load-definition.js';
8
9
  import type { BundledDefinition as AsyncApiBundledDefinition } from './plugins/asyncapi-docs/asyncapi-doc-loader.js';
9
10
  import type { SearchEngine } from './plugins/search/engines/search-engine.js';
11
+ import { KvService } from './persistence/kv/services/kv-service.js';
10
12
  export declare const MARKDOC_PARTIALS_DATA_KEY = "markdown/partials";
11
13
  export declare const MARKDOC_PARTIALS_DEPS_KEY = "markdown/partials-deps";
12
14
  export declare const USER_DEFINED_API_FUNCTIONS_COUNTER_KEY = "userDefinedApiFunctions";
@@ -37,12 +39,14 @@ export declare class Store {
37
39
  lifecycleContext: LifecycleContext | undefined;
38
40
  newRoutes: PageRouteInit[];
39
41
  routesByFsPath: Map<string, string>;
42
+ routesByDir: Map<string, PageRouteDetails[]>;
40
43
  apiRoutes: ApiRoute[];
41
44
  middleware: MiddlewareDetails[];
42
45
  routesSharedData: Map<string, Record<string, string>>;
43
46
  sharedDataDeps: Map<string, Set<string>>;
44
47
  sharedDataMarkdocComponents: Map<string, Set<string>>;
45
48
  routesDynamicComponents: Map<string, Set<string>>;
49
+ routesPartials: Map<string, string[]>;
46
50
  ssr: {
47
51
  preBodyTags: string[];
48
52
  postBodyTags: string[];
@@ -89,7 +93,7 @@ export declare class Store {
89
93
  frontMatterKeysToResolve?: string[] | undefined;
90
94
  partialsFolders?: string[] | undefined;
91
95
  lastUpdatedBlock?: {
92
- format?: "short" | "long" | "timeago" | "iso" | undefined;
96
+ format?: "timeago" | "iso" | "long" | "short" | undefined;
93
97
  hide?: boolean | undefined;
94
98
  locale?: string | undefined;
95
99
  } | undefined;
@@ -103,29 +107,31 @@ export declare class Store {
103
107
  baseUrl?: string | undefined;
104
108
  } | undefined;
105
109
  } | undefined;
106
- tags?: any;
107
- nodes?: any;
108
110
  variables?: Record<string, any> | undefined;
109
- functions?: Record<string, import("@markdoc/markdoc").ConfigFunction> | undefined;
110
111
  validation?: {
111
- parents?: import("@markdoc/markdoc").Node[];
112
+ parents?: Node[];
112
113
  validateFunctions?: boolean;
113
114
  environment?: string;
114
115
  };
116
+ tags?: any;
117
+ nodes?: any;
118
+ functions?: Record<string, import("@markdoc/markdoc").ConfigFunction> | undefined;
115
119
  };
116
120
  setGlobalData: (data: GlobalData) => void;
117
121
  getGlobalData: () => GlobalData;
122
+ getKv: () => Promise<KvService>;
118
123
  parseMarkdoc: (input: MarkdownParseInput, context: LifecycleContext, deps?: MarkdocDeps) => Promise<{
119
124
  info: {
120
125
  sharedDataDeps?: Set<string>;
121
126
  dynamicMarkdocComponents?: string[];
127
+ partials?: string[];
122
128
  tagList?: string[];
123
129
  htmlTagsList?: string[];
124
130
  tagOccurrence?: Record<string, number>;
125
131
  codeSnippetLanguages?: Record<string, number>;
126
132
  codeWalkthroughLanguages?: Record<string, number>;
127
133
  };
128
- ast: import("@markdoc/markdoc").Node;
134
+ ast: Node;
129
135
  compoundHash: string;
130
136
  }>;
131
137
  loadOpenApiDefinitions(context: LifecycleContext): Promise<OpenApiBundledDefinition[]>;
@@ -141,6 +147,7 @@ export declare class Store {
141
147
  createSharedData: (id: string, data: unknown, hash?: string) => Promise<string>;
142
148
  addRouteSharedData: (routeSlug: string, dataKey: string, dataId: string) => void;
143
149
  getRouteSharedDataByFsPath: (fsPath: string) => Record<string, string>;
150
+ getPartialsForRoute: (slug: string) => Record<string, Node>;
144
151
  addRoute: (route: PageRouteInit) => void;
145
152
  addRouteSharedDataToAllLocales: (slug: string, dataKey: string, dataId: string) => void;
146
153
  addApiRoute: (route: ApiRoute) => void;
@@ -153,6 +160,7 @@ export declare class Store {
153
160
  getRoutesByTemplateId: (templateId: string) => PageRouteInit[];
154
161
  getAllRoutesForLocale: (locale?: string) => PageRouteDetails[];
155
162
  getAllRoutes: () => PageRouteDetails[];
163
+ getRoutesByDir: (dir: string) => PageRouteDetails[];
156
164
  getAllApiRoutes: () => ApiRoute[];
157
165
  getAllMiddleware: () => MiddlewareDetails[];
158
166
  getTemplate: (id: string) => string | undefined;
@@ -1 +1 @@
1
- import A from"@markdoc/markdoc";import{getPathnameForLocale as C}from"@redocly/theme/core/utils";import{DEFAULT_LOCALE_PLACEHOLDER as u}from"../constants/common.js";import{DEFAULT_TITLE as P}from"./constants/common.js";import{GATED_MARKDOC_TAGS as D}from"./constants/entitlements.js";import{isObject as T}from"../utils/guards/is-object.js";import{mapObject as O}from"../utils/object/map-object.js";import{getValueDeep as w}from"../utils/object/get-value-deep.js";import{removeTrailingSlash as M}from"../utils/url/remove-trailing-slash.js";import{normalizeRouteSlug as f}from"../utils/path/normalize-route-slug.js";import{isLocalLink as k}from"../utils/path/is-local-link.js";import{reporter as S}from"./tools/notifiers/reporter.js";import{logger as p}from"./tools/notifiers/logger.js";import{sha1 as L}from"./utils/crypto/sha1.js";import{writeEnvVariable as _}from"./utils/envs/write-env-variable.js";import{readEnvVariable as F}from"./utils/envs/read-env-variable.js";import{writeSharedData as B}from"./utils/index.js";import{renderComponents as G}from"./ssr/render.js";import{readStaticData as I,writeStaticData as N}from"./utils/static-data.js";import{parseAndResolveMarkdoc as V}from"./plugins/markdown/compiler.js";import{getMarkdocOptions as j}from"./plugins/markdown/markdoc/markdoc-options.js";import{EntitlementsProvider as y}from"./entitlements/entitlements-provider.js";import{isL10nPath as H}from"./fs/utils/is-l10n-path.js";import{resolveMetadataGlobs as J}from"./utils/globs.js";import{replaceEnvVariablesDeep as U}from"./utils/envs/replace-env-variables-deep.js";import{findRedirect as x}from"./utils/redirects/find-redirect.js";import{addWildcardRedirectToTree as K}from"./utils/redirects/add-wildcard-redirect-to-tree.js";import{telemetryTraceStep as q}from"../cli/telemetry/helpers/trace-step.js";const R={routesBySlug:"map",apiRoutes:"object",middleware:"object",routesByFsPath:"map",routesSharedData:"map",globalData:"object",config:"object",ssr:"object",searchFacets:"map"},g="markdown/partials",Ee="markdown/partials-deps",v="PLAN_GATES",$=["OAUTH_CLIENT_ID","OAUTH_CLIENT_SECRET","ORG_ID"],be="userDefinedApiFunctions";class E{routesBySlug=new Map;replacedEnvVars={};unsetEnvVars=new Set;lifecycleContext;newRoutes=[];#e={};routesByFsPath=new Map;apiRoutes=[];middleware=[];routesSharedData=new Map;sharedDataDeps=new Map;sharedDataMarkdocComponents=new Map;routesDynamicComponents=new Map;ssr={preBodyTags:[],postBodyTags:[],headTags:[]};searchFacets=new Map;searchEngine;templates=new Map;browserPlugins=new Set;apiRoutesRequestHandlers=new Map;serverPropsGetters=new Map;pagePropsGetters=new Map;listeners=new Map;globalData={};#s=void 0;config={configFilePath:"",redirects:{},wildcardRedirectsTree:{},rbac:{},directoryPermissions:{},devLogin:!1,ssoDirect:{}};#r;serverMode;serverOutDir;outdir;buildRevision=0;hasSitemap=!1;compilationErrors=[];#a;userCodeReady;#o=Promise.resolve();#i;#n=Promise.resolve();#c;#t=new Map;constructor({outdir:e,contentDir:t,serverMode:s=!1,serverOutDir:r}){this.#r=t,this.outdir=e,this.serverMode=s,this.serverOutDir=r,this.userCodeReady=new Promise(a=>{this.#a=a})}on(e,t){const s=this.listeners.get(e);s?s.add(t):this.listeners.set(e,new Set([t]))}queueEvent=(e,t,...s)=>{this.#t.set(e+String(t),[e,t,...s])};runListeners=(e,t,...s)=>{for(const r of this.listeners.get(e)||new Set)t?r(t,...s):r(...s)};startPluginsRun(){this.clear(),this.#o=new Promise(e=>{this.#i=e})}waitForPluginsLifecycle(){return Promise.all([this.#o,this.#n])}finishPluginsRun(){this.#i?.();for(const e of this.#t.values())this.runListeners(...e);this.#t.clear()}startEsbuildRun(){this.#n=new Promise(e=>{this.#c=e})}finishEsbuildRun(){this.#c?.()}get contentDir(){if(this.serverMode)throw new Error("contentDir should not be used in server mode");return this.#r}markUserCodeReady(){this.#a?.(!0)}async reloadMarkdocOptions(){await q("build.reload_markdoc_options",async()=>{const e=y.instance(),t=await j(this.serverOutDir),s=Object.fromEntries(Object.entries(t.tags).filter(([r])=>D[r]!=null?e.canAccessFeature(D[r]):!0));this.#s={...t,tags:s}})}get markdocOptions(){return{...this.#s,partials:this.getGlobalConfig(g),themeConfig:this.config.markdown}}setGlobalData=e=>{const t=this.globalData,s={...this.globalData,...e};this.globalData=s,JSON.stringify(s)!==JSON.stringify(t)&&this.queueEvent("global-data-updated",void 0,s)};getGlobalData=()=>this.globalData;parseMarkdoc=async(e,t,s)=>{const{data:{info:r,ast:a},compoundHash:i}=await V(e,this.markdocOptions,{actions:this,context:t});for(const o of r.sharedDataDeps||[]){for(const n of s?.routeSlugs||[])this.addRouteSharedData(n,o,o);for(const n of s?.sharedDataIds||[]){const c=this.sharedDataDeps.get(n)||new Set;c.add(o),this.sharedDataDeps.set(n,c)}}for(const o of r.dynamicMarkdocComponents||[]){for(const n of s?.routeSlugs||[]){const c=this.routesDynamicComponents.get(n)||new Set;c.add(o),this.routesDynamicComponents.set(n,c)}for(const n of s?.sharedDataIds||[]){const c=this.sharedDataMarkdocComponents.get(n)||new Set;c.add(o),this.sharedDataMarkdocComponents.set(n,c)}}return{info:r,ast:a,compoundHash:i}};async loadOpenApiDefinitions(e){return(await e.cache.load(".","load-oas-docs")).data}async loadAsyncApiDefinitions(e){return(await e.cache.load(".","asyncapi-docs")).data}setSearchEngine(e){this.searchEngine=e}setSearchFacets=e=>{this.searchFacets=e};setGlobalConfig=e=>{const t=Object.keys(e);for(const i of t)for(const o in this.replacedEnvVars)if(o===i||o.startsWith(`${i}:`)){const n=o.split(":"),{error:c,value:d}=w(e,n);(c||d!==this.replacedEnvVars[o].replaced)&&delete this.replacedEnvVars[o]}const{resolvedObj:s,unsetEnvVars:r,replacedValues:a}=U(e);for(const i of r)this.unsetEnvVars.add(i);Object.assign(this.replacedEnvVars,a),Object.assign(this.config,s)};getConfig=()=>this.config;getGlobalConfig=e=>this.config[e];getSearchFacets=()=>this.searchFacets;addRedirect=(e,t)=>{if(!y.instance().canAccessFeature("redirects")&&e!=="/")return;this.config.redirects||(this.config.redirects={});const a=f(e).toLowerCase();this.config.redirects[a]=t,a.endsWith("*")&&K(this.config.wildcardRedirectsTree,a)};getRedirect=e=>{const t=f(e).toLowerCase();return x(t,this.config.redirects,this.config.wildcardRedirectsTree)};createSharedData=async(e,t,s)=>{if(s&&this.#e[e]===s)return e;const r=JSON.stringify(t),a=s??L(r);return this.#e[e]===a||(this.#e[e]=a,await B(e,r,this.outdir),this.queueEvent("shared-data-updated",e)),e};addRouteSharedData=(e,t,s)=>{const r=M(e),a=this.routesSharedData.get(r)||{};a[t]=s,this.routesSharedData.set(r,a),p.verbose(`Adding shared data to ${e}, ${t}, ${s}`)};getRouteSharedDataByFsPath=e=>{const t=this.routesByFsPath.get(e);return t?this.routesSharedData.get(t)||{}:{}};addRoute=e=>{const s={...J(e.fsPath,this.config.metadataGlobs),...e.metadata||{}};this.newRoutes.push({...e,metadata:s}),p.verbose("Created route %s",e.slug)};addRouteSharedDataToAllLocales=(e,t,s)=>{const r=[u,...this.lifecycleContext?.fs.localeFolders||[]].map(a=>({code:a,name:a}));for(const a of r){const i=C(e,u,a.code,r);this.addRouteSharedData(i,t,s)}};addApiRoute=e=>{this.apiRoutes.push(e),p.verbose("Created API route %s",e.slug)};addMiddleware=e=>{this.middleware.push(e),p.verbose("Created middleware %s",e.id)};getRouteByFsPath=e=>{const t=this.routesByFsPath.get(e);return t?this.getRouteBySlug(t):void 0};getRouteBySlug=(e,t={})=>{const{followRedirect:s=!0}=t,r=this.getRedirect(e);return s&&r?this.routesBySlug.get(f(r.to)):this.routesBySlug.get(e)};slugHasRouteOrRedirect=e=>{if(this.routesBySlug.has(e))return!0;const t=this.getRedirect(e);if(!t)return!1;if(!k(t.to))return!0;const s=f(t.to);return this.routesBySlug.has(s)};getRoutesByTemplateId=e=>this.newRoutes.filter(t=>t.templateId===e);getAllRoutesForLocale=(e=u)=>{const t=Array.from(this.routesBySlug.values()),s=e.toLowerCase();return t.filter(r=>e===u?!H(r.fsPath):r.slug.startsWith(`/${s}`))};getAllRoutes=()=>Array.from(this.routesBySlug.values());getAllApiRoutes=()=>this.apiRoutes;getAllMiddleware=()=>this.middleware;getTemplate=e=>this.templates.get(e);getRequestHandler=e=>this.apiRoutesRequestHandlers.get(e);createTemplate=(e,t)=>(this.templates.set(e,t),e);addBrowserPlugin=e=>{this.browserPlugins.add(e)};createRequestHandler=(e,t)=>(this.apiRoutesRequestHandlers.set(e,t),e);registerServerPropsGetter=(e,t)=>(this.serverPropsGetters.set(e,t),e);registerPagePropsGetter=(e,t)=>{this.pagePropsGetters.set(e,t)};async writeRouteStaticData(e,t){const s=await this.resolveRouteStaticData(e,t,!1);s&&N(e.slug,s,this.outdir)}async resolveRouteStaticData(e,t,s){if(this.serverMode)return I(e.slug,this.outdir);const r={...this,contentDir:this.contentDir,parseMarkdoc:(d,l)=>this.parseMarkdoc(d,l,{routeSlugs:[e.slug]})},a=await e.getStaticData?.(e,r)||{},i=new Set(this.routesDynamicComponents.get(e.slug)),o=this.routesSharedData.get(e.slug)||{};for(const d of Object.values(o)){const l=this.sharedDataMarkdocComponents.get(d);l&&l.forEach(h=>i.add(h));const m=this.sharedDataDeps.get(d);m&&m.forEach(h=>this.addRouteSharedData(e.slug,h,h))}const n=this.getGlobalConfig("seo"),c=a?.frontmatter||{};return{...a,frontmatter:{...c,seo:{...c?.seo,title:c?.seo?.title||await e.getNavText?.()}},props:{...a.props,dynamicMarkdocComponents:Array.from(i),metadata:{...a?.props?.metadata,...e.metadata},seo:{title:P,...n,...a.props?.seo},compilationErrors:this.compilationErrors},lastModified:s||!e.fsPath?null:await this.lifecycleContext?.fs.getLastModified(e.fsPath)}}addSsrComponents(e,t){if(!e?.length)return;const s=typeof e[0]=="string"?e.join(""):G(e);s&&(t==="head"?this.ssr.headTags.push(s):t==="preBody"?this.ssr.preBodyTags.push(s):this.ssr.postBodyTags.push(s))}clear=()=>{this.routesByFsPath.clear(),this.templates.clear(),this.newRoutes=[],this.routesBySlug.clear(),this.apiRoutes=[],this.middleware=[],this.routesSharedData.clear(),this.sharedDataDeps.clear(),this.sharedDataMarkdocComponents.clear(),this.routesDynamicComponents.clear(),this.config.redirects={},this.config.wildcardRedirectsTree={},this.config.directoryPermissions={},this.ssr={preBodyTags:[],postBodyTags:[],headTags:[]}};async toJson(){const e=[];for(const[s,r]of Object.entries(R))switch(r){case"map":const a=Array.from(this[s].entries());e.push([s,a]);break;case"object":s==="config"&&e.push([s,await this.getConfigWithEnvPlaceholders()]),e.push([s,this[s]]);break;default:throw new Error("Invalid format")}const t=Object.fromEntries(e);return t[v]=F("PLAN_GATES"),t}static fromJson(e,t){const s=new E(t);for(const[a,i]of Object.entries(R))switch(i){case"map":s[a]=new Map(e[a]);break;case"object":if(a==="config"){s.setGlobalConfig(e[a]);break}s[a]=e[a];break;default:throw new Error("Invalid format")}s.config[g]=W(s.config[g]||{});const r=e[v];return r&&_("PLAN_GATES",r),s}async getConfigWithEnvPlaceholders(){const e=JSON.parse(JSON.stringify(this.config));for(const t in this.replacedEnvVars){const{original:s}=this.replacedEnvVars[t],r=t.split(":"),a=r.pop(),{error:i,value:o}=w(e,r);if(i||!T(o)&&!Array.isArray(o)){await S.panicOnBuild(`Failed to replace env var with env name for ${t}`);continue}o[a]=s}return e}async reportUnsetEnvVars(){if(this.unsetEnvVars.size===0)return;const e=Array.from(this.unsetEnvVars).filter(s=>!$.includes(s));if(e.length===0)return;const t=`Failed to resolve config. The following environment variables are not set: ${e.join(", ")}`;await S.panicOnBuildContentError(t)}}function W(b){return O(b,e=>A.Ast.fromJSON(JSON.stringify(e)))}export{g as MARKDOC_PARTIALS_DATA_KEY,Ee as MARKDOC_PARTIALS_DEPS_KEY,E as Store,be as USER_DEFINED_API_FUNCTIONS_COUNTER_KEY};
1
+ import b from"@markdoc/markdoc";import{getPathnameForLocale as A}from"@redocly/theme/core/utils";import{DEFAULT_LOCALE_PLACEHOLDER as u}from"../constants/common.js";import{DEFAULT_TITLE as C}from"./constants/common.js";import{GATED_MARKDOC_TAGS as D}from"./constants/entitlements.js";import{isObject as O}from"../utils/guards/is-object.js";import{mapObject as T}from"../utils/object/map-object.js";import{getValueDeep as y}from"../utils/object/get-value-deep.js";import{removeTrailingSlash as M}from"../utils/url/remove-trailing-slash.js";import{normalizeRouteSlug as f}from"../utils/path/normalize-route-slug.js";import{isLocalLink as L}from"../utils/path/is-local-link.js";import{reporter as S}from"./tools/notifiers/reporter.js";import{logger as p}from"./tools/notifiers/logger.js";import{sha1 as k}from"./utils/crypto/sha1.js";import{writeEnvVariable as _}from"./utils/envs/write-env-variable.js";import{envConfig as B}from"../config/env-config.js";import{KvService as F}from"./persistence/kv/services/kv-service.js";import{writeSharedData as G}from"./utils/index.js";import{renderComponents as I}from"./ssr/render.js";import{readStaticData as N,writeStaticData as V}from"./utils/static-data.js";import{parseAndResolveMarkdoc as j}from"./plugins/markdown/compiler.js";import{getMarkdocOptions as H}from"./plugins/markdown/markdoc/markdoc-options.js";import{EntitlementsProvider as w}from"./entitlements/entitlements-provider.js";import{isL10nPath as K}from"./fs/utils/is-l10n-path.js";import{resolveMetadataGlobs as U}from"./utils/globs.js";import{replaceEnvVariablesDeep as x}from"./utils/envs/replace-env-variables-deep.js";import{findRedirect as J}from"./utils/redirects/find-redirect.js";import{addWildcardRedirectToTree as q}from"./utils/redirects/add-wildcard-redirect-to-tree.js";import{telemetryTraceStep as $}from"../cli/telemetry/helpers/trace-step.js";const R={routesBySlug:"map",apiRoutes:"object",middleware:"object",routesByFsPath:"map",routesSharedData:"map",globalData:"object",config:"object",ssr:"object",searchFacets:"map",routesPartials:"map"},g="markdown/partials",bt="markdown/partials-deps",v="PLAN_GATES",W=["OAUTH_CLIENT_ID","OAUTH_CLIENT_SECRET","ORGANIZATION_SLUG","ORGANIZATION_ID","ORG_ID"],At="userDefinedApiFunctions";class E{routesBySlug=new Map;replacedEnvVars={};unsetEnvVars=new Set;lifecycleContext;newRoutes=[];#t={};routesByFsPath=new Map;routesByDir=new Map;apiRoutes=[];middleware=[];routesSharedData=new Map;sharedDataDeps=new Map;sharedDataMarkdocComponents=new Map;routesDynamicComponents=new Map;routesPartials=new Map;ssr={preBodyTags:[],postBodyTags:[],headTags:[]};searchFacets=new Map;searchEngine;templates=new Map;browserPlugins=new Set;apiRoutesRequestHandlers=new Map;serverPropsGetters=new Map;pagePropsGetters=new Map;listeners=new Map;globalData={};#s=void 0;config={configFilePath:"",redirects:{},wildcardRedirectsTree:{},rbac:{},directoryPermissions:{},devLogin:!1,ssoDirect:{}};#r;serverMode;serverOutDir;outdir;buildRevision=0;hasSitemap=!1;compilationErrors=[];#a;userCodeReady;#o=Promise.resolve();#i;#n=Promise.resolve();#c;#e=new Map;constructor({outdir:t,contentDir:e,serverMode:s=!1,serverOutDir:r}){this.#r=e,this.outdir=t,this.serverMode=s,this.serverOutDir=r,this.userCodeReady=new Promise(a=>{this.#a=a})}on(t,e){const s=this.listeners.get(t);s?s.add(e):this.listeners.set(t,new Set([e]))}queueEvent=(t,e,...s)=>{this.#e.set(t+String(e),[t,e,...s])};runListeners=(t,e,...s)=>{for(const r of this.listeners.get(t)||new Set)e?r(e,...s):r(...s)};startPluginsRun(){this.clear(),this.#o=new Promise(t=>{this.#i=t})}waitForPluginsLifecycle(){return Promise.all([this.#o,this.#n])}finishPluginsRun(){this.#i?.();for(const t of this.#e.values())this.runListeners(...t);this.#e.clear()}startEsbuildRun(){this.#n=new Promise(t=>{this.#c=t})}finishEsbuildRun(){this.#c?.()}get contentDir(){if(this.serverMode)throw new Error("contentDir should not be used in server mode");return this.#r}markUserCodeReady(){this.#a?.(!0)}async reloadMarkdocOptions(){await $("build.reload_markdoc_options",async()=>{const t=w.instance(),e=await H(this.serverOutDir),s=Object.fromEntries(Object.entries(e.tags).filter(([r])=>D[r]!=null?t.canAccessFeature(D[r]):!0));this.#s={...e,tags:s}})}get markdocOptions(){return{...this.#s,partials:this.getGlobalConfig(g),themeConfig:this.config.markdown}}setGlobalData=t=>{const e=this.globalData,s={...this.globalData,...t};this.globalData=s,JSON.stringify(s)!==JSON.stringify(e)&&this.queueEvent("global-data-updated",void 0,s)};getGlobalData=()=>this.globalData;getKv=async()=>F.getInstance({baseDbDir:this.serverOutDir});parseMarkdoc=async(t,e,s)=>{const{data:{info:r,ast:a},compoundHash:c}=await j(t,this.markdocOptions,{actions:this,context:e});for(const o of r.sharedDataDeps||[]){for(const i of s?.routeSlugs||[])this.addRouteSharedData(i,o,o);for(const i of s?.sharedDataIds||[]){const n=this.sharedDataDeps.get(i)||new Set;n.add(o),this.sharedDataDeps.set(i,n)}}for(const o of r.dynamicMarkdocComponents||[]){for(const i of s?.routeSlugs||[]){const n=this.routesDynamicComponents.get(i)||new Set;n.add(o),this.routesDynamicComponents.set(i,n)}for(const i of s?.sharedDataIds||[]){const n=this.sharedDataMarkdocComponents.get(i)||new Set;n.add(o),this.sharedDataMarkdocComponents.set(i,n)}}if(s?.routeSlugs&&r.partials?.length)for(const o of s.routeSlugs){const i=this.routesPartials.get(o)||[];for(const n of r.partials)i.includes(n)||i.push(n);this.routesPartials.set(o,i)}return{info:r,ast:a,compoundHash:c}};async loadOpenApiDefinitions(t){return(await t.cache.load(".","load-oas-docs")).data}async loadAsyncApiDefinitions(t){return(await t.cache.load(".","asyncapi-docs")).data}setSearchEngine(t){this.searchEngine=t}setSearchFacets=t=>{this.searchFacets=t};setGlobalConfig=t=>{const e=Object.keys(t);for(const c of e)for(const o in this.replacedEnvVars)if(o===c||o.startsWith(`${c}:`)){const i=o.split(":"),{error:n,value:l}=y(t,i);(n||l!==this.replacedEnvVars[o].replaced)&&delete this.replacedEnvVars[o]}const{resolvedObj:s,unsetEnvVars:r,replacedValues:a}=x(t);for(const c of r)this.unsetEnvVars.add(c);Object.assign(this.replacedEnvVars,a),Object.assign(this.config,s)};getConfig=()=>this.config;getGlobalConfig=t=>this.config[t];getSearchFacets=()=>this.searchFacets;addRedirect=(t,e)=>{if(!w.instance().canAccessFeature("redirects")&&t!=="/")return;this.config.redirects||(this.config.redirects={});const a=f(t).toLowerCase();this.config.redirects[a]=e,a.endsWith("*")&&q(this.config.wildcardRedirectsTree,a)};getRedirect=t=>{const e=f(t).toLowerCase();return J(e,this.config.redirects,this.config.wildcardRedirectsTree)};createSharedData=async(t,e,s)=>{if(s&&this.#t[t]===s)return t;const r=JSON.stringify(e),a=s??k(r);return this.#t[t]===a||(this.#t[t]=a,await G(t,r,this.outdir),this.queueEvent("shared-data-updated",t)),t};addRouteSharedData=(t,e,s)=>{const r=M(t),a=this.routesSharedData.get(r)||{};a[e]=s,this.routesSharedData.set(r,a),p.verbose(`Adding shared data to ${t}, ${e}, ${s}`)};getRouteSharedDataByFsPath=t=>{const e=this.routesByFsPath.get(t);return e?this.routesSharedData.get(e)||{}:{}};getPartialsForRoute=t=>{const e=this.getGlobalConfig(g)||{},s=this.routesPartials.get(t);if(!s||s.length===0)return{};const r={};for(const a of s)e[a]&&(r[a]=e[a]);return r};addRoute=t=>{const s={...U(t.fsPath,this.config.metadataGlobs),...t.metadata||{}};this.newRoutes.push({...t,metadata:s}),p.verbose("Created route %s",t.slug)};addRouteSharedDataToAllLocales=(t,e,s)=>{const r=[u,...this.lifecycleContext?.fs.localeFolders||[]].map(a=>({code:a,name:a}));for(const a of r){const c=A(t,u,a.code,r);this.addRouteSharedData(c,e,s)}};addApiRoute=t=>{this.apiRoutes.push(t),p.verbose("Created API route %s",t.slug)};addMiddleware=t=>{this.middleware.push(t),p.verbose("Created middleware %s",t.id)};getRouteByFsPath=t=>{const e=this.routesByFsPath.get(t);return e?this.getRouteBySlug(e):void 0};getRouteBySlug=(t,e={})=>{const{followRedirect:s=!0}=e,r=this.getRedirect(t);return s&&r?this.routesBySlug.get(f(r.to)):this.routesBySlug.get(t)};slugHasRouteOrRedirect=t=>{if(this.routesBySlug.has(t))return!0;const e=this.getRedirect(t);if(!e)return!1;if(!L(e.to))return!0;const s=f(e.to);return this.routesBySlug.has(s)};getRoutesByTemplateId=t=>this.newRoutes.filter(e=>e.templateId===t);getAllRoutesForLocale=(t=u)=>{if(!this.lifecycleContext?.fs?.isL10nEnabled)return Array.from(this.routesBySlug.values());const e=Array.from(this.routesBySlug.values()),s=t.toLowerCase();return e.filter(r=>t===u?!K(r.fsPath):r.slug.startsWith(`/${s}`))};getAllRoutes=()=>Array.from(this.routesBySlug.values());getRoutesByDir=t=>this.routesByDir.get(t)||[];getAllApiRoutes=()=>this.apiRoutes;getAllMiddleware=()=>this.middleware;getTemplate=t=>this.templates.get(t);getRequestHandler=t=>this.apiRoutesRequestHandlers.get(t);createTemplate=(t,e)=>(this.templates.set(t,e),t);addBrowserPlugin=t=>{this.browserPlugins.add(t)};createRequestHandler=(t,e)=>(this.apiRoutesRequestHandlers.set(t,e),t);registerServerPropsGetter=(t,e)=>(this.serverPropsGetters.set(t,e),t);registerPagePropsGetter=(t,e)=>{this.pagePropsGetters.set(t,e)};async writeRouteStaticData(t,e){const s=await this.resolveRouteStaticData(t,e,!1);s&&V(t.slug,s,this.outdir)}async resolveRouteStaticData(t,e,s){if(this.serverMode)return N(t.slug,this.outdir);const r={...this,contentDir:this.contentDir,parseMarkdoc:(l,d)=>this.parseMarkdoc(l,d,{routeSlugs:[t.slug]})},a=await t.getStaticData?.(t,r)||{},c=new Set(this.routesDynamicComponents.get(t.slug)),o=this.routesSharedData.get(t.slug)||{};for(const l of Object.values(o)){const d=this.sharedDataMarkdocComponents.get(l);d&&d.forEach(h=>c.add(h));const m=this.sharedDataDeps.get(l);m&&m.forEach(h=>this.addRouteSharedData(t.slug,h,h))}const i=this.getGlobalConfig("seo"),n=a?.frontmatter||{};return{...a,frontmatter:{...n,seo:{...n?.seo,title:n?.seo?.title||await t.getNavText?.()}},props:{...a.props,dynamicMarkdocComponents:Array.from(c),metadata:{...a?.props?.metadata,...t.metadata},seo:{title:C,...i,...a.props?.seo},compilationErrors:this.compilationErrors},lastModified:s||!t.fsPath?null:await this.lifecycleContext?.fs.getLastModified(t.fsPath)}}addSsrComponents(t,e){if(!t?.length)return;const s=typeof t[0]=="string"?t.join(""):I(t);s&&(e==="head"?this.ssr.headTags.push(s):e==="preBody"?this.ssr.preBodyTags.push(s):this.ssr.postBodyTags.push(s))}clear=()=>{this.routesByFsPath.clear(),this.templates.clear(),this.newRoutes=[],this.routesBySlug.clear(),this.apiRoutes=[],this.middleware=[],this.routesSharedData.clear(),this.sharedDataDeps.clear(),this.sharedDataMarkdocComponents.clear(),this.routesDynamicComponents.clear(),this.routesPartials.clear(),this.config.redirects={},this.config.wildcardRedirectsTree={},this.config.directoryPermissions={},this.ssr={preBodyTags:[],postBodyTags:[],headTags:[]}};async toJson(){const t=[];for(const[s,r]of Object.entries(R))switch(r){case"map":const a=Array.from(this[s].entries());t.push([s,a]);break;case"object":s==="config"&&t.push([s,await this.getConfigWithEnvPlaceholders()]),t.push([s,this[s]]);break;default:throw new Error("Invalid format")}const e=Object.fromEntries(t);return e[v]=B.PLAN_GATES,e}static fromJson(t,e){const s=new E(e);for(const[a,c]of Object.entries(R))switch(c){case"map":s[a]=new Map(t[a]);break;case"object":if(a==="config"){s.setGlobalConfig(t[a]);break}s[a]=t[a];break;default:throw new Error("Invalid format")}s.config[g]=z(s.config[g]||{});const r=t[v];return r&&_("PLAN_GATES",r),s}async getConfigWithEnvPlaceholders(){const t=JSON.parse(JSON.stringify(this.config));for(const e in this.replacedEnvVars){const{original:s}=this.replacedEnvVars[e],r=e.split(":"),a=r.pop(),{error:c,value:o}=y(t,r);if(c||!O(o)&&!Array.isArray(o)){await S.panicOnBuild(`Failed to replace env var with env name for ${e}`);continue}o[a]=s}return t}async reportUnsetEnvVars(){if(this.unsetEnvVars.size===0)return;const t=Array.from(this.unsetEnvVars).filter(s=>!W.includes(s));if(t.length===0)return;const e=`Failed to resolve config. The following environment variables are not set: ${t.join(", ")}`;await S.panicOnBuildContentError(e)}}function z(P){return T(P,t=>b.Ast.fromJSON(JSON.stringify(t)))}export{g as MARKDOC_PARTIALS_DATA_KEY,bt as MARKDOC_PARTIALS_DEPS_KEY,E as Store,At as USER_DEFINED_API_FUNCTIONS_COUNTER_KEY};
@@ -1 +1 @@
1
- import{AsyncApiRealmAPI as r}from"@redocly/realm-asyncapi-sdk";import{PACKAGE_NAME as s}from"../../config/product-gates.js";import{OTEL_TRACES_DEV_URL as o,TELEMETRY_ENABLED as t}from"../constants/common.js";class c extends r.Telemetry{constructor(){super(),this.updateCloudEventData(()=>({organization:{id:process.env.ORGANIZATION_ID||"",slug:process.env.ORGANIZATION_SLUG||""},project:{id:process.env.PROJECT_ID||"",slug:""},productType:"server",sourceDetails:{user:"Anonymous",object:"user",uri:""},request:{source:"server"}}))}initialize(e=!1){this.init({otel:{serviceName:"realm-server",serviceVersion:`${s}@${process.env.REDOCLY_PORTAL_VERSION}`,collectorTraceUrl:e?o:process.env.OTEL_TRACES_URL||"https://otel.cloud.redocly.com/v1/traces",isProd:process.env.REDOCLY_ENV==="production",version:"1.0",tracerName:"server-telemetry",delayMillis:100},disabled:e?process.env.TELEMETRY_DEV_DEBUG!=="true":!t})}}const p=new c;export{p as telemetry};
1
+ import{AsyncApiRealmAPI as t}from"@redocly/realm-asyncapi-sdk";import{envConfig as e}from"../../config/env-config.js";import{PACKAGE_NAME as o}from"../../config/product-gates.js";import{OTEL_TRACES_DEV_URL as s,TELEMETRY_ENABLED as i}from"../constants/common.js";class l extends t.Telemetry{constructor(){super(),this.updateCloudEventData(()=>({organization:{id:e.ORGANIZATION_ID||"",slug:e.ORGANIZATION_SLUG||""},project:{id:e.PROJECT_ID||"",slug:""},productType:"server",sourceDetails:{user:"Anonymous",object:"user",uri:""},request:{source:"server"}}))}initialize(r=!1){this.init({otel:{serviceName:"realm-server",serviceVersion:`${o}@${e.REDOCLY_PORTAL_VERSION||""}`,collectorTraceUrl:r?s:e.OTEL_TRACES_URL||"https://otel.cloud.redocly.com/v1/traces",isProd:e.isProductionEnv,version:"1.0",tracerName:"server-telemetry",delayMillis:100},disabled:r?e.TELEMETRY_DEV_DEBUG!=="true":!i})}}const u=new l;export{u as telemetry};
@@ -1,3 +1,3 @@
1
- import*as O from"node:path";import{isProductionMode as g}from"../../utils/envs/is-production-mode.js";import{maskEmail as T}from"./helpers/privacy/mask-email.js";import{maskSubject as E}from"./helpers/privacy/mask-subject.js";import{removePii as A}from"./helpers/privacy/remove-pii.js";import{removePiiFromUrl as P}from"./helpers/privacy/remove-pii-from-url.js";import{red as $,green as x,bold as j,blue as p,gray as i,yellow as C,cyan as w}from"./helpers/colors.js";var n;(function(e){e.INFO="INFO",e.WARN="WARN",e.ERROR="ERROR",e.SUCCESS="SUCCESS",e.VERBOSE="VERBOSE",e.HTTP="HTTP"})(n||(n={}));const b={[n.VERBOSE]:0,[n.HTTP]:1,[n.INFO]:2,[n.SUCCESS]:2,[n.WARN]:3,[n.ERROR]:4};function W(e,s){return b[e]>=b[s]}function L(e){if(!e)return;const s=e.toUpperCase();if(s in n)return s}const F={[n.INFO]:p,[n.SUCCESS]:x,[n.WARN]:C,[n.ERROR]:$,[n.HTTP]:w,[n.VERBOSE]:i},I={"%ap":e=>p(O.resolve(e)),"%rp":e=>p(O.relative(process.cwd(),e)),"%s":e=>e?.toString(),"%c":e=>p(e)},v={format(e){switch(process.env.PORTAL_LOG_FORMAT){case"JSON":return U(e);default:return H(e)}},interpolate(e,...s){const a=Object.keys(I).map(t=>`(${t})`).join("|"),m=new RegExp(a,"g");let r,u=e;for(;(r=m.exec(e))!==null;){r.index===m.lastIndex&&m.lastIndex++;const t=s.shift();if(t===void 0)break;const o=r[0];u=u.replace(o,I[o](t))}return u}};var z=v;const H=e=>{const{level:s,message:a,duration:m,context:r}=e,u=g(),t=[F[s](j(`[${s.toLowerCase()}]`))];if(u&&t.push(i(`time="${N()}"`)),r){const{email:o,ipAddress:c,subject:l,method:d,pathname:f,statusCode:S,teams:h,apiFunction:R}=r;R&&t.push(p(`fn="${R}"`)),S&&t.push(y(S)),e.level===n.HTTP&&(d&&t.push(i(`method="${d}"`)),f&&t.push(i(`path="${P(f)}"`))),c&&t.push(i(`ip="${c}"`)),o&&t.push(i(`email="${T(o)}"`)),l&&t.push(i(`sub="${E(l)}"`)),h?.length&&t.push(i(`teams="${h.join(", ")}"`))}if(a){const o=u?`msg="${String(A(a)).replaceAll?.('"','\\"')}"`:String(a);t.push(o)}return e.level===n.HTTP&&r?.userAgent&&t.push(i(`agent="${r.userAgent}"`)),m&&t.push(M(m)),t.join(" ")+`
2
- `},U=({context:e,message:s,...a})=>{const{method:m,pathname:r,statusCode:u,userAgent:t,subject:o,email:c,teams:l,apiFunction:d}=e||{},f={...a,email:c&&T(c),subject:o&&E(o),teams:l,apiFunction:d,...a.level===n.HTTP?{method:m,pathname:String(P(r)),statusCode:u,userAgent:t}:{message:String(A(s))}};return g()&&(f.time=N()),JSON.stringify(f,["time","level","scope","message","duration","method","pathname","statusCode","userAgent","subject","ipAddress","email","apiFunction"])+`
3
- `},y=e=>(e%500<100?$:e%400<100?C:x)(`status="${e}"`),N=()=>{let e=new Date().getTimezoneOffset()*6e4;return new Date(Date.now()-e).toISOString().slice(0,-1)},M=e=>i(`dur="${Math.round(e)}ms"`);export{n as LogLevel,z as default,L as parseLogLevel,W as shouldLog};
1
+ import*as g from"node:path";import{envConfig as R}from"../../../config/env-config.js";import{maskEmail as T}from"./helpers/privacy/mask-email.js";import{maskSubject as E}from"./helpers/privacy/mask-subject.js";import{removePii as A}from"./helpers/privacy/remove-pii.js";import{removePiiFromUrl as C}from"./helpers/privacy/remove-pii-from-url.js";import{red as $,green as x,bold as j,blue as p,gray as i,yellow as P,cyan as w}from"./helpers/colors.js";var n;(function(e){e.INFO="INFO",e.WARN="WARN",e.ERROR="ERROR",e.SUCCESS="SUCCESS",e.VERBOSE="VERBOSE",e.HTTP="HTTP"})(n||(n={}));const b={[n.VERBOSE]:0,[n.HTTP]:1,[n.INFO]:2,[n.SUCCESS]:2,[n.WARN]:3,[n.ERROR]:4};function W(e,s){return b[e]>=b[s]}function L(e){if(!e)return;const s=e.toUpperCase();if(s in n)return s}const F={[n.INFO]:p,[n.SUCCESS]:x,[n.WARN]:P,[n.ERROR]:$,[n.HTTP]:w,[n.VERBOSE]:i},I={"%ap":e=>p(g.resolve(e)),"%rp":e=>p(g.relative(process.cwd(),e)),"%s":e=>e?.toString(),"%c":e=>p(e)},v={format(e){switch(R.PORTAL_LOG_FORMAT){case"JSON":return M(e);default:return H(e)}},interpolate(e,...s){const a=Object.keys(I).map(t=>`(${t})`).join("|"),m=new RegExp(a,"g");let o,u=e;for(;(o=m.exec(e))!==null;){o.index===m.lastIndex&&m.lastIndex++;const t=s.shift();if(t===void 0)break;const r=o[0];u=u.replace(r,I[r](t))}return u}};var z=v;const H=e=>{const{level:s,message:a,duration:m,context:o}=e,u=R.isRuntimeMode,t=[F[s](j(`[${s.toLowerCase()}]`))];if(u&&t.push(i(`time="${N()}"`)),o){const{email:r,ipAddress:f,subject:l,method:d,pathname:c,statusCode:S,teams:h,apiFunction:O}=o;O&&t.push(p(`fn="${O}"`)),S&&t.push(U(S)),e.level===n.HTTP&&(d&&t.push(i(`method="${d}"`)),c&&t.push(i(`path="${C(c)}"`))),f&&t.push(i(`ip="${f}"`)),r&&t.push(i(`email="${T(r)}"`)),l&&t.push(i(`sub="${E(l)}"`)),h?.length&&t.push(i(`teams="${h.join(", ")}"`))}if(a){const r=u?`msg="${String(A(a)).replaceAll?.('"','\\"')}"`:String(a);t.push(r)}return e.level===n.HTTP&&o?.userAgent&&t.push(i(`agent="${o.userAgent}"`)),m&&t.push(y(m)),t.join(" ")+`
2
+ `},M=({context:e,message:s,...a})=>{const{method:m,pathname:o,statusCode:u,userAgent:t,subject:r,email:f,teams:l,apiFunction:d}=e||{},c={...a,email:f&&T(f),subject:r&&E(r),teams:l,apiFunction:d,...a.level===n.HTTP?{method:m,pathname:String(C(o)),statusCode:u,userAgent:t}:{message:String(A(s))}};return R.isRuntimeMode&&(c.time=N()),JSON.stringify(c,["time","level","scope","message","duration","method","pathname","statusCode","userAgent","subject","ipAddress","email","apiFunction"])+`
3
+ `},U=e=>(e%500<100?$:e%400<100?P:x)(`status="${e}"`),N=()=>{let e=new Date().getTimezoneOffset()*6e4;return new Date(Date.now()-e).toISOString().slice(0,-1)},y=e=>i(`dur="${Math.round(e)}ms"`);export{n as LogLevel,z as default,L as parseLogLevel,W as shouldLog};
@@ -1 +1 @@
1
- import{createColors as e}from"colorette";import{readEnvVariable as l}from"../../../utils/envs/read-env-variable.js";const r=l("PORTAL_LOG_FORMAT")!=="JSON",{red:s,green:a,bold:t,blue:c,gray:n,yellow:d,cyan:b}=e({useColor:r}),g=o=>typeof o=="string"?o.replace(/\x1B[[(?);]{0,2}(;?\d)*./g,""):o;export{c as blue,t as bold,r as colorsAreEnabled,b as cyan,n as gray,a as green,s as red,g as stripColors,d as yellow};
1
+ import{createColors as e}from"colorette";import{envConfig as l}from"../../../../config/env-config.js";const r=l.PORTAL_LOG_FORMAT!=="JSON",{red:s,green:t,bold:c,blue:n,gray:a,yellow:g,cyan:d}=e({useColor:r}),f=o=>typeof o=="string"?o.replace(/\x1B[[(?);]{0,2}(;?\d)*./g,""):o;export{n as blue,c as bold,r as colorsAreEnabled,d as cyan,a as gray,t as green,s as red,f as stripColors,g as yellow};
@@ -1,2 +1,2 @@
1
- import{telemetry as a}from"../../telemetry/index.js";import{isProductionMode as c}from"../../utils/envs/is-production-mode.js";import l,{LogLevel as r,shouldLog as h,parseLogLevel as u}from"./formatter.js";import{isVirtualFile as f}from"../../fs/utils/isVirtualFile.js";import{TerminalManager as p}from"./terminal-manager.js";import{isDevelopMode as g}from"../../utils/envs/is-develop-mode.js";class d{#e;#l;#i;#n;#r=new Map;#o=new Map;constructor({context:t,forceNonInteractive:e,minLogLevel:i}={}){this.#e=t,this.#l=c(),this.#i=new p(e),this.#n=i??u(process.env.REDOCLY_LOG_LEVEL)??(g()?r.INFO:r.HTTP)}shouldLog(t){return h(t,this.#n)}info(t,...e){this.#t({level:r.INFO,message:t,args:e})}infoTime(t,e,...i){return this.#s(r.INFO,e,t,...i)}success(t,...e){this.#t({level:r.SUCCESS,message:t,args:e})}logInFooter(t,e,...i){const o=l.interpolate(e,...i)+`
2
- `;this.isInteractive()||this.#i.isFooterChanged(t,o)&&this.#t({level:r.INFO,message:e,args:i}),this.#i.updateFooter(t,o)}successTime(t,e,...i){return this.#s(r.SUCCESS,e,t,...i)}warn(t,...e){this.#t({level:r.WARN,message:t,args:e})}warnProd(t,...e){this.#l?this.warn(t,...e):this.verbose(t,...e)}error(t,...e){this.#t({level:r.ERROR,message:t,args:e})}contentError(t,...e){this.#t({level:r.ERROR,message:t,scope:"content",args:e})}verbose(t,...e){this.#t({level:r.VERBOSE,message:t,args:e})}verboseTime(t,e,...i){return this.#s(r.VERBOSE,e,t,...i)}httpTime(t){return this.#s(r.HTTP,"",t)}startTiming(t){const e=t||Symbol();this.#r.set(e,performance.now());const i=setTimeout(()=>{this.#r.delete(e),this.#o.delete(e)},500*1e3);return this.#o.set(e,i),e}updateContext(t){this.#e={...this.#e,...t}}clearAllTimeouts(){for(const t of this.#o.values())clearTimeout(t);this.#o.clear()}isInteractive(){return this.#i.isInteractive()}warnForRealFile(t,e,i,...o){f(e,i)||this.warn(t,e,...o)}#s(t,e,i,...o){const n=this.#r.get(i);if(!n)return;const s=Math.round(performance.now()-n);return this.#r.delete(i),this.#t({level:t,message:e,duration:s,args:o}),{message:e,timeMs:s}}#t({level:t,message:e,duration:i,scope:o,args:n}){if(!h(t,this.#n))return;let s=e&&l.interpolate(e,...n);s&&i!=null&&t!==r.VERBOSE&&a.sendTimingPerformedMessage({timeMs:i,message:s});const m={level:t,message:s,duration:i,scope:o,context:this.#e};process.stderr.write(l.format(m))}}const O=new d;export{d as Logger,O as logger};
1
+ import{telemetry as c}from"../../telemetry/index.js";import{envConfig as l}from"../../../config/env-config.js";import h,{LogLevel as r,shouldLog as m,parseLogLevel as u}from"./formatter.js";import{isVirtualFile as f}from"../../fs/utils/isVirtualFile.js";import{TerminalManager as g}from"./terminal-manager.js";class p{#e;#l;#i;#n;#r=new Map;#o=new Map;constructor({context:t,forceNonInteractive:e,minLogLevel:i}={}){this.#e=t,this.#l=l.isProductionEnv,this.#i=new g(e),this.#n=i??u(l.REDOCLY_LOG_LEVEL)??(l.isDevelopMode?r.INFO:r.HTTP)}shouldLog(t){return m(t,this.#n)}info(t,...e){this.#t({level:r.INFO,message:t,args:e})}infoTime(t,e,...i){return this.#s(r.INFO,e,t,...i)}success(t,...e){this.#t({level:r.SUCCESS,message:t,args:e})}logInFooter(t,e,...i){const o=h.interpolate(e,...i)+`
2
+ `;this.isInteractive()||this.#i.isFooterChanged(t,o)&&this.#t({level:r.INFO,message:e,args:i}),this.#i.updateFooter(t,o)}successTime(t,e,...i){return this.#s(r.SUCCESS,e,t,...i)}warn(t,...e){this.#t({level:r.WARN,message:t,args:e})}warnProd(t,...e){this.#l?this.warn(t,...e):this.verbose(t,...e)}error(t,...e){this.#t({level:r.ERROR,message:t,args:e})}contentError(t,...e){this.#t({level:r.ERROR,message:t,scope:"content",args:e})}verbose(t,...e){this.#t({level:r.VERBOSE,message:t,args:e})}verboseTime(t,e,...i){return this.#s(r.VERBOSE,e,t,...i)}httpTime(t){return this.#s(r.HTTP,"",t)}startTiming(t){const e=t||Symbol();this.#r.set(e,performance.now());const i=setTimeout(()=>{this.#r.delete(e),this.#o.delete(e)},500*1e3);return this.#o.set(e,i),e}updateContext(t){this.#e={...this.#e,...t}}clearAllTimeouts(){for(const t of this.#o.values())clearTimeout(t);this.#o.clear()}isInteractive(){return this.#i.isInteractive()}warnForRealFile(t,e,i,...o){f(e,i)||this.warn(t,e,...o)}#s(t,e,i,...o){const n=this.#r.get(i);if(!n)return;const s=Math.round(performance.now()-n);return this.#r.delete(i),this.#t({level:t,message:e,duration:s,args:o}),{message:e,timeMs:s}}#t({level:t,message:e,duration:i,scope:o,args:n}){if(!m(t,this.#n))return;let s=e&&h.interpolate(e,...n);s&&i!=null&&t!==r.VERBOSE&&c.sendTimingPerformedMessage([{object:"timing",timeMs:i,message:s}]);const a={level:t,message:s,duration:i,scope:o,context:this.#e};process.stderr.write(h.format(a))}}const R=new p;export{p as Logger,R as logger};
@@ -1,12 +1,12 @@
1
- import{isBuildMode as h}from"../../utils/envs/is-build-mode.js";import{logger as e}from"../../tools/notifiers/logger.js";import P from"./formatter.js";import{blue as g,gray as p,red as a}from"./helpers/colors.js";import{isVirtualFile as b}from"../../fs/utils/isVirtualFile.js";import{telemetry as u}from"../../telemetry/index.js";import{shutdowner as f}from"../shutdowner.js";const c=30;class C{#r=[];#o=[];#e=new Map;#t=[];pushError(r,t,...o){const n=P.interpolate(r,...o);this.#r.push({severity:t,message:n,type:"ERROR"})}reportBrokenLink(r){this.#r.push(r)}reportCompilationError(r){const t=`${r.message}::${r.sourceFileRelativePath}::${r?.sourceFileLocation?.line}`;this.#e.has(t)||this.#e.set(t,r)}reportPageRenderError(r){this.#t.push(r)}async panicOnBuild(r,...t){r instanceof Error&&(r=r.message+`
2
- `+r.stack),h()?await this.panic(r,...t):this.pushError(r,"PANIC",...t)}async panicOnBuildContentErrorForRealFile(r,t,o,...n){b(t,o)||await this.panicOnBuildContentError(r,...n)}async panicOnBuildContentError(r,...t){r instanceof Error&&(r=r.message+`
3
- `+r.stack),h()?await this.panicOnContentError(r,...t):this.pushError(r,"PANIC",...t)}async panic(r,...t){let o;r instanceof Error?(o=r,r=r.message+`
4
- `+r.stack):o=new Error(r),e.error(r,...t),u.sendCliErrorCaughtMessage({message:r}),await f.exitWithCode(1,o)}async panicOnContentError(r,...t){let o;r instanceof Error?(o=r,r=r.message+`
5
- `+r.stack):o=new Error(r),e.contentError(r,...t),u.sendCliErrorCaughtMessage({message:r,scope:"content"}),await f.exitWithCode(1,o)}reportMarkdocProblem(r){this.#o.push(r)}clearErrors(){this.#r=[]}clearMarkdocProblems(){this.#o=[]}clearEsbuildProblems(){this.#e.clear()}clearPageRenderProblems(){this.#t=[]}getCompilationProblem(r){return this.#e.get(r)}getCompilationProblems(){return[...this.#e.values()]}getPageRenderProblems(){return this.#t}getPageRenderProblem(r){return this.#t.find(t=>t.sourceFileRelativePath===r)}getProblems(){return[...this.#r,...this.getCompilationProblems(),...this.#o,...this.#t]}summary(r,t=0){const o=this.getProblems(),n=this.#o.filter(l=>l.type==="BROKEN_LINK").length,s=this.#r.filter(l=>l.type==="BROKEN_LINK").length,m=this.#o.length-n,E=this.#r.length-s+this.getCompilationProblems().length+this.#t.length;return e.logInFooter("validate",o.length?a(" \u274C Status: %s markdoc errors, %s broken links, %s other errors"):" \u2705 Status: No errors found",m,n+s,E),t!==0&&e.logInFooter("pages",` \u{1F4C4} Total pages: ${t}`),e.logInFooter("timing",r),e.logInFooter("validate-sep",""),e.isInteractive()&&(o.length?e.logInFooter("actions","Press (e) to print all errors, (q) to quit"):e.logInFooter("actions",p("Press (q) to quit"))),o}printErrors(r=[]){const t=this.#r.length,o=r.length?r:this.getProblems();let n=0;for(const s of o.slice(0,c))n>=t?e.contentError(a(`[${++n}] `)+d(s)):e.error(a(`[${++n}] `)+d(s));o.length>c&&e.error(`... and ${o.length-c} more errors`)}listenStdin(){if(!e.isInteractive())return;process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.setEncoding("utf8");const r=this.printErrors.bind(this);process.stdin.on("data",function(t){if(t===""&&process.exit(),t==="\x7F"){process.stdout.write("\b \b");return}if(t==="\r"){process.stdout.write(`
6
- `);return}if(t==="e"){r();return}t==="q"&&process.exit(0)})}}const B=new C;function d(i){const r=i.sourceFileLocation,t=r?`:${r.line}:${r.character??1}`:"";return i.message+(i.codeframe?`
1
+ import{envConfig as h}from"../../../config/env-config.js";import{logger as e}from"../../tools/notifiers/logger.js";import P from"./formatter.js";import{blue as g,gray as p,red as c}from"./helpers/colors.js";import{isVirtualFile as b}from"../../fs/utils/isVirtualFile.js";import{telemetry as u}from"../../telemetry/index.js";import{shutdowner as f}from"../shutdowner.js";const a=30;class C{#r=[];#o=[];#e=new Map;#t=[];pushError(r,t,...o){const i=P.interpolate(r,...o);this.#r.push({severity:t,message:i,type:"ERROR"})}reportBrokenLink(r){this.#r.push(r)}reportCompilationError(r){const t=`${r.message}::${r.sourceFileRelativePath}::${r?.sourceFileLocation?.line}`;this.#e.has(t)||this.#e.set(t,r)}reportPageRenderError(r){this.#t.push(r)}async panicOnBuild(r,...t){r instanceof Error&&(r=r.message+`
2
+ `+r.stack),h.isBuildMode?await this.panic(r,...t):this.pushError(r,"PANIC",...t)}async panicOnBuildContentErrorForRealFile(r,t,o,...i){b(t,o)||await this.panicOnBuildContentError(r,...i)}async panicOnBuildContentError(r,...t){r instanceof Error&&(r=r.message+`
3
+ `+r.stack),h.isBuildMode?await this.panicOnContentError(r,...t):this.pushError(r,"PANIC",...t)}async panic(r,...t){let o;r instanceof Error?(o=r,r=r.message+`
4
+ `+r.stack):o=new Error(r),e.error(r,...t),u.sendCliErrorCaughtMessage([{object:"cli",message:r}]),await f.exitWithCode(1,o)}async panicOnContentError(r,...t){let o;r instanceof Error?(o=r,r=r.message+`
5
+ `+r.stack):o=new Error(r),e.contentError(r,...t),u.sendCliErrorCaughtMessage([{object:"cli",message:r,scope:"content"}]),await f.exitWithCode(1,o)}reportMarkdocProblem(r){this.#o.push(r)}clearErrors(){this.#r=[]}clearMarkdocProblems(){this.#o=[]}clearEsbuildProblems(){this.#e.clear()}clearPageRenderProblems(){this.#t=[]}getCompilationProblem(r){return this.#e.get(r)}getCompilationProblems(){return[...this.#e.values()]}getPageRenderProblems(){return this.#t}getPageRenderProblem(r){return this.#t.find(t=>t.sourceFileRelativePath===r)}getProblems(){return[...this.#r,...this.getCompilationProblems(),...this.#o,...this.#t]}summary(r,t=0){const o=this.getProblems(),i=this.#o.filter(l=>l.type==="BROKEN_LINK").length,s=this.#r.filter(l=>l.type==="BROKEN_LINK").length,m=this.#o.length-i,E=this.#r.length-s+this.getCompilationProblems().length+this.#t.length;return e.logInFooter("validate",o.length?c(" \u274C Status: %s markdoc errors, %s broken links, %s other errors"):" \u2705 Status: No errors found",m,i+s,E),t!==0&&e.logInFooter("pages",` \u{1F4C4} Total pages: ${t}`),e.logInFooter("timing",r),e.logInFooter("validate-sep",""),e.isInteractive()&&(o.length?e.logInFooter("actions","Press (e) to print all errors, (q) to quit"):e.logInFooter("actions",p("Press (q) to quit"))),o}printErrors(r=[]){const t=this.#r.length,o=r.length?r:this.getProblems();let i=0;for(const s of o.slice(0,a))i>=t?e.contentError(c(`[${++i}] `)+d(s)):e.error(c(`[${++i}] `)+d(s));o.length>a&&e.error(`... and ${o.length-a} more errors`)}listenStdin(){if(!e.isInteractive())return;process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.setEncoding("utf8");const r=this.printErrors.bind(this);process.stdin.on("data",function(t){if(t===""&&process.exit(),t==="\x7F"){process.stdout.write("\b \b");return}if(t==="\r"){process.stdout.write(`
6
+ `);return}if(t==="e"){r();return}t==="q"&&process.exit(0)})}}const $=new C;function d(n){const r=n.sourceFileLocation,t=r?`:${r.line}:${r.character??1}`:"";return n.message+(n.codeframe?`
7
7
 
8
- `+i.codeframe+`
8
+ `+n.codeframe+`
9
9
 
10
10
  `:`
11
- `)+(i.sourceFileRelativePath?p(`at ${g("./"+i.sourceFileRelativePath)}${t}`)+`
12
- `:"")}export{C as Reporter,B as reporter};
11
+ `)+(n.sourceFileRelativePath?p(`at ${g("./"+n.sourceFileRelativePath)}${t}`)+`
12
+ `:"")}export{C as Reporter,$ as reporter};
@@ -1,5 +1,5 @@
1
- import{isDevelopMode as h}from"../../utils/envs/is-develop-mode.js";import{gray as p}from"./helpers/colors.js";const t="\x1B[",i=`${t}s`,o=`${t}u`,d=`${t}J`,a=c=>`${t}1;${c}r`,f=`${t}r`,w=`${t}?25h`,R=`${t}?25l`,l=()=>`${p("\u2500".repeat(process.stderr.columns||80))}
1
+ import{envConfig as h}from"../../../config/env-config.js";import{gray as p}from"./helpers/colors.js";const t="\x1B[",i=`${t}s`,o=`${t}u`,d=`${t}J`,a=c=>`${t}1;${c}r`,f=`${t}r`,w=`${t}?25h`,R=`${t}?25l`,l=()=>`${p("\u2500".repeat(process.stderr.columns||80))}
2
2
 
3
- `,u=3;class I{#s=new Map;#r=process.stderr.rows;#e=0;#t=!1;#i=!1;constructor(s=!1){this.#i=s}isInteractive(){return!!(!this.#i&&process.stderr&&process.stderr.isTTY&&process.env.TERM!=="dumb"&&!("CI"in process.env)&&h())}isFooterChanged(s,r){return this.#s.get(s)!==r}updateFooter(s,r){const e=!this.#s.has(s);this.#s.set(s,r),this.isInteractive()&&(e?this.#n():this.#c())}get#o(){if(this.#s.size===0)return 0;let s=u;for(const r of this.#s.values())s+=(r.match(/\n/g)||[]).length;return s}#c(){if(!this.isInteractive()||this.#s.size===0)return;this.#h();const s=this.#o,r=process.stderr.rows;if(!(s>r)){process.stderr.write(i),process.stderr.cursorTo(0,r-s+1),process.stderr.write(l());for(const e of this.#s.values())process.stderr.write(e);process.stderr.write(o)}}#n(s=0){if(!this.isInteractive())return;const r=process.stderr.rows;let e=this.#o;e>r&&(e=0);const n=e-this.#e;this.#e=e,n>0&&(process.stderr.write(i),process.stderr.write(`
4
- `.repeat(n)),process.stderr.write(o)),process.stderr.write(i),process.stderr.write(d),s<0&&process.stderr.write(`
5
- `.repeat(e)),process.stderr.write(a(r-e)),process.stderr.write(o),this.#c()}#h(){this.#t||(this.#t=!0,process.stderr.write(R),process.on("exit",this.#p),process.stderr.on("resize",this.#d))}#p=()=>{this.isInteractive()&&(process.stderr.write(f),process.stderr.write(`${t}${process.stderr.rows};1H`),process.stderr.write(w))};#d=()=>{const s=process.stderr.rows-this.#r;this.#r=process.stderr.rows,this.#n(s)}}export{I as TerminalManager};
3
+ `,u=3;class I{#r=new Map;#s=process.stderr.rows;#e=0;#t=!1;#i=!1;constructor(r=!1){this.#i=r}isInteractive(){return!!(!this.#i&&process.stderr&&process.stderr.isTTY&&h.TERM!=="dumb"&&!("CI"in process.env)&&h.isDevelopMode)}isFooterChanged(r,s){return this.#r.get(r)!==s}updateFooter(r,s){const e=!this.#r.has(r);this.#r.set(r,s),this.isInteractive()&&(e?this.#n():this.#c())}get#o(){if(this.#r.size===0)return 0;let r=u;for(const s of this.#r.values())r+=(s.match(/\n/g)||[]).length;return r}#c(){if(!this.isInteractive()||this.#r.size===0)return;this.#h();const r=this.#o,s=process.stderr.rows;if(!(r>s)){process.stderr.write(i),process.stderr.cursorTo(0,s-r+1),process.stderr.write(l());for(const e of this.#r.values())process.stderr.write(e);process.stderr.write(o)}}#n(r=0){if(!this.isInteractive())return;const s=process.stderr.rows;let e=this.#o;e>s&&(e=0);const n=e-this.#e;this.#e=e,n>0&&(process.stderr.write(i),process.stderr.write(`
4
+ `.repeat(n)),process.stderr.write(o)),process.stderr.write(i),process.stderr.write(d),r<0&&process.stderr.write(`
5
+ `.repeat(e)),process.stderr.write(a(s-e)),process.stderr.write(o),this.#c()}#h(){this.#t||(this.#t=!0,process.stderr.write(R),process.on("exit",this.#p),process.stderr.on("resize",this.#d))}#p=()=>{this.isInteractive()&&(process.stderr.write(f),process.stderr.write(`${t}${process.stderr.rows};1H`),process.stderr.write(w))};#d=()=>{const r=process.stderr.rows-this.#s;this.#s=process.stderr.rows,this.#n(r)}}export{I as TerminalManager};
@@ -6,7 +6,7 @@ import type { ProductConfig } from '@redocly/theme/config';
6
6
  import type { SearchFacet } from '@redocly/theme/core/types';
7
7
  import type { GlobalData, Feature } from '../../../types/index.js';
8
8
  import type { SearchDocument } from '../../types';
9
- import type { RbacScopeItems, RedirectConfig, RedoclyConfig, ServerPropsContext, ServerPropsRequest, PageProps, PageStaticData, NavItem, ResolvedNavItem, Version, MdOptions } from '@redocly/config';
9
+ import type { RbacScopeItems, RedirectConfig, RedoclyConfig, ServerPropsContext, ServerPropsRequest, PageProps, PageStaticData, NavItem, ResolvedNavItem, Version, MdOptions, KvService } from '@redocly/config';
10
10
  import type { LoaderFn } from '../fs';
11
11
  import type { MarkdocDeps } from './markdown';
12
12
  import type { BundledDefinition } from '../../plugins/openapi-docs/load-definition';
@@ -36,6 +36,7 @@ export type GetStaticDataContext = {
36
36
  getGlobalData: () => GlobalData;
37
37
  getConfig: () => RedoclyConfig;
38
38
  getAllRoutes: () => PageRouteDetails<PageStaticData, PageProps>[];
39
+ getRoutesByDir: (dir: string) => PageRouteDetails[];
39
40
  getAllApiRoutes: () => ApiRoute[];
40
41
  parseMarkdoc: (input: MarkdownParseInput, context: LifecycleContext, deps?: MarkdocDeps) => Promise<{
41
42
  ast: Node;
@@ -52,6 +53,7 @@ export type GetServerPropsContext = {
52
53
  getGlobalConfig<T = unknown>(key: string): T | undefined;
53
54
  getGlobalData: () => GlobalData;
54
55
  getRouteSharedDataByFsPath: (routeFsPath: string) => Record<string, string> | undefined;
56
+ getPartialsForRoute?: (slug: string) => Record<string, Node>;
55
57
  serverOutDir: string;
56
58
  };
57
59
  export type GetServerPropsFn<TData extends PageStaticData = PageStaticData, TProps extends PageProps = PageProps> = (route: PageRouteDetails<TData, TProps>, data: TData, mdOptions: MdOptions, actions: GetServerPropsContext) => Promise<TProps>;
@@ -147,6 +149,7 @@ export type ProcessContentActions = {
147
149
  registerServerPropsGetter: (id: string, importPath: string) => string;
148
150
  registerPagePropsGetter: (id: string, importPath: string) => void;
149
151
  addSsrComponents: (components: JSX.Element[] | string[], position: 'head' | 'preBody' | 'postBody') => void;
152
+ getKv: () => Promise<KvService>;
150
153
  serverOutDir: string;
151
154
  contentDir: string;
152
155
  outdir: string;
@@ -161,6 +164,7 @@ export type AfterRoutesCreatedActions = {
161
164
  getConfig: () => RedoclyConfig;
162
165
  getGlobalConfig<T = unknown>(key: string): T | undefined;
163
166
  getAllRoutes: () => PageRouteDetails<PageStaticData, PageProps>[];
167
+ getRoutesByDir: (dir: string) => PageRouteDetails[];
164
168
  getAllRoutesForLocale: (locale?: string) => PageRouteDetails<PageStaticData, PageProps>[];
165
169
  getAllApiRoutes: () => ApiRoute[];
166
170
  setGlobalData: (data: GlobalData) => void;
@@ -184,6 +188,7 @@ export type AfterRoutesCreatedActions = {
184
188
  addApiRoute: (route: ApiRoute) => void;
185
189
  loadOpenApiDefinitions(context: LifecycleContext): Promise<BundledDefinition[]>;
186
190
  getRouteSharedDataByFsPath: (routeFsPath: string) => Record<string, string> | undefined;
191
+ getKv: () => Promise<KvService>;
187
192
  };
188
193
  export type LifecycleContext = {
189
194
  fs: ContentFs;
@@ -191,6 +196,7 @@ export type LifecycleContext = {
191
196
  getConfig: (dirPath?: string) => Promise<RedoclyConfig & {
192
197
  configPath?: string;
193
198
  realConfigPath?: string;
199
+ hash?: string;
194
200
  }>;
195
201
  isPathIgnored: (relativePath: string) => Promise<boolean>;
196
202
  withPathPrefix: (url: string) => string;
@@ -9,6 +9,8 @@ export type RoutesInfoActions = {
9
9
  followRedirect?: boolean;
10
10
  }) => PageRouteDetails | undefined;
11
11
  getAllRoutesForLocale: (locale?: string) => PageRouteDetails[];
12
+ getAllRoutes: () => PageRouteDetails[];
13
+ getRoutesByDir: (dir: string) => PageRouteDetails[];
12
14
  slugHasRouteOrRedirect: (slug: string) => boolean;
13
15
  buildRevision: number;
14
16
  };
@@ -0,0 +1,30 @@
1
+ import type { ScorecardsConfig } from '@redocly/config';
2
+ import type { Filter } from '../../providers/database/pagination/types.js';
3
+ import type { CatalogEntitiesService } from '../../plugins/catalog-entities/database/catalog-entities-service.js';
4
+ import type { ScorecardsConfigService } from '../../plugins/scorecards/database/scorecards-config-service.js';
5
+ export type ScorecardsWorkerParams = {
6
+ baseDbDir: string;
7
+ scorecardsConfig: ScorecardsConfig;
8
+ pollingIntervalMs?: number;
9
+ };
10
+ export type PollAndProcessEntitiesParams = {
11
+ scorecardsConfig: ScorecardsConfig;
12
+ pollingIntervalMs: number;
13
+ entitiesFilters: Record<string, Filter>;
14
+ entitiesService: CatalogEntitiesService;
15
+ };
16
+ export type SyncConfigAndUpdateEntitiesParams = {
17
+ scorecardsConfig: ScorecardsConfig;
18
+ entitiesFilters: Record<string, Filter>;
19
+ configService: ScorecardsConfigService;
20
+ entitiesService: CatalogEntitiesService;
21
+ };
22
+ export type ScorecardsWorkerResponse = {
23
+ success: true;
24
+ message: string;
25
+ } | {
26
+ success: false;
27
+ message: string;
28
+ error: string;
29
+ };
30
+ //# sourceMappingURL=scorecards.d.ts.map
File without changes