@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.
- package/CHANGELOG.md +398 -83
- package/dist/bin.d.ts +1 -0
- package/dist/bin.js +1 -1
- package/dist/cli/develop.js +1 -1
- package/dist/cli/eject/resolveEjectParams.js +1 -1
- package/dist/cli/prepare/copy-env-files.js +1 -1
- package/dist/cli/prepare/index.js +1 -1
- package/dist/cli/stats/collectors/openapi.d.ts +3 -0
- package/dist/cli/stats/collectors/openapi.js +1 -0
- package/dist/cli/stats/index.d.ts +7 -0
- package/dist/cli/stats/index.js +1 -0
- package/dist/cli/stats/options.d.ts +3 -0
- package/dist/cli/stats/options.js +1 -0
- package/dist/cli/telemetry/index.d.ts +2 -2
- package/dist/cli/telemetry/index.js +1 -1
- package/dist/client/App.js +1 -1
- package/dist/client/ErrorBoundary.js +1 -1
- package/dist/client/app/Sidebar/RequestAccessButton.js +2 -2
- package/dist/client/app/Sidebar/Sidebar.js +2 -2
- package/dist/client/app/Sidebar/helpers/filter-out-versioned-items.js +1 -1
- package/dist/client/app/hooks/catalog/useCatalogClassic.d.ts +1 -1
- package/dist/client/app/hooks/catalog/useCatalogClassic.js +1 -1
- package/dist/client/app/hooks/catalog/useCatalogFilter.js +1 -1
- package/dist/client/app/hooks/catalog/useCatalogViewMode.js +1 -1
- package/dist/client/app/hooks/catalog/useSearchTracker.js +1 -1
- package/dist/client/app/hooks/usePageTimeTracker.js +1 -1
- package/dist/client/app/hooks/useRouteChangeTracker.js +1 -1
- package/dist/client/app/hooks/useTelemetry.d.ts +2 -2
- package/dist/client/app/pages/DevLogin/DevLogin.js +1 -1
- package/dist/client/app/search/message-handlers.d.ts +29 -0
- package/dist/client/app/search/message-handlers.js +1 -0
- package/dist/client/app/search/sse-parser.d.ts +10 -0
- package/dist/client/app/search/sse-parser.js +2 -0
- package/dist/client/app/search/useAiSearch.d.ts +9 -11
- package/dist/client/app/search/useAiSearch.js +1 -1
- package/dist/client/app/search/useSearch.js +1 -1
- package/dist/client/app/telemetry/index.d.ts +11 -1
- package/dist/client/app/telemetry/index.js +1 -1
- package/dist/client/browser-entry.js +5 -5
- package/dist/client/constants/ai-search.d.ts +30 -0
- package/dist/client/constants/ai-search.js +1 -0
- package/dist/client/constants/index.d.ts +2 -0
- package/dist/client/constants/index.js +1 -0
- package/dist/client/providers/hooks.js +1 -1
- package/dist/client/runtime/loader.js +1 -1
- package/dist/client/types/ai-search.d.ts +73 -0
- package/dist/client/types/ai-search.js +0 -0
- package/dist/client/types/index.d.ts +1 -0
- package/dist/config/env-config.d.ts +17 -0
- package/dist/config/env-config.js +1 -0
- package/dist/config/env-schema.d.ts +242 -0
- package/dist/config/env-schema.js +3 -0
- package/dist/config/env-schemas/api-urls.d.ts +24 -0
- package/dist/config/env-schemas/api-urls.js +1 -0
- package/dist/config/env-schemas/auth.d.ts +42 -0
- package/dist/config/env-schemas/auth.js +1 -0
- package/dist/config/env-schemas/catalog.d.ts +12 -0
- package/dist/config/env-schemas/catalog.js +1 -0
- package/dist/config/env-schemas/database.d.ts +15 -0
- package/dist/config/env-schemas/database.js +1 -0
- package/dist/config/env-schemas/environment-detection.d.ts +24 -0
- package/dist/config/env-schemas/environment-detection.js +1 -0
- package/dist/config/env-schemas/feature-flags.d.ts +24 -0
- package/dist/config/env-schemas/feature-flags.js +1 -0
- package/dist/config/env-schemas/organization-project.d.ts +27 -0
- package/dist/config/env-schemas/organization-project.js +1 -0
- package/dist/config/env-schemas/scorecards.d.ts +12 -0
- package/dist/config/env-schemas/scorecards.js +1 -0
- package/dist/config/env-schemas/search.d.ts +21 -0
- package/dist/config/env-schemas/search.js +1 -0
- package/dist/config/env-schemas/server-config.d.ts +51 -0
- package/dist/config/env-schemas/server-config.js +1 -0
- package/dist/config/env-schemas/site.d.ts +12 -0
- package/dist/config/env-schemas/site.js +1 -0
- package/dist/config/env-schemas/ssr.d.ts +18 -0
- package/dist/config/env-schemas/ssr.js +1 -0
- package/dist/config/env-schemas/telemetry.d.ts +15 -0
- package/dist/config/env-schemas/telemetry.js +1 -0
- package/dist/config/env-schemas/test.d.ts +22 -0
- package/dist/config/env-schemas/test.js +1 -0
- package/dist/constants/common.d.ts +4 -2
- package/dist/constants/common.js +1 -1
- package/dist/constants/l10n/langs/ar.js +1 -1
- package/dist/constants/l10n/langs/de.js +1 -1
- package/dist/constants/l10n/langs/en.js +1 -1
- package/dist/constants/l10n/langs/es.js +1 -1
- package/dist/constants/l10n/langs/fr.js +1 -1
- package/dist/constants/l10n/langs/hi.js +1 -1
- package/dist/constants/l10n/langs/it.js +1 -1
- package/dist/constants/l10n/langs/ja.js +1 -1
- package/dist/constants/l10n/langs/ko.js +1 -1
- package/dist/constants/l10n/langs/pl.js +1 -1
- package/dist/constants/l10n/langs/pt-BR.js +1 -1
- package/dist/constants/l10n/langs/pt.js +1 -1
- package/dist/constants/l10n/langs/ru.js +1 -1
- package/dist/constants/l10n/langs/uk.js +1 -1
- package/dist/constants/l10n/langs/zh.js +1 -1
- package/dist/server/api-routes/execute-api-route.js +1 -1
- package/dist/server/api-routes/import-api-routes-handlers.js +1 -1
- package/dist/server/api-routes/run-api-routes-worker.js +1 -1
- package/dist/server/constants/common.js +1 -1
- package/dist/server/constants/plugins/catalog-entities.d.ts +1 -0
- package/dist/server/constants/plugins/catalog-entities.js +1 -1
- package/dist/server/entitlements/entitlements-provider.js +1 -1
- package/dist/server/esbuild/esbuild-logger.js +2 -2
- package/dist/server/esbuild/esbuild.js +3 -3
- package/dist/server/esbuild/plugins/assets-resolver.js +1 -1
- package/dist/server/esbuild/plugins/esbuild-compile-resolver.js +1 -1
- package/dist/server/esbuild/plugins/styled-components-ssr.js +1 -1
- package/dist/server/fs/cache.js +1 -1
- package/dist/server/fs/content-fs.d.ts +1 -0
- package/dist/server/fs/content-fs.js +1 -1
- package/dist/server/fs/last-modified-tracker.js +1 -1
- package/dist/server/fs/utils/is-loader-cache-enabled.js +1 -1
- package/dist/server/node-bundle-entry.js +1 -1
- package/dist/server/persistence/kv/repositories/kv-remote-repository.d.ts +1 -0
- package/dist/server/persistence/kv/repositories/kv-remote-repository.js +2 -1
- package/dist/server/persistence/kv/services/kv-service.js +1 -1
- package/dist/server/plugins/analytics/adobe/index.js +1 -1
- package/dist/server/plugins/analytics/amplitude/index.js +1 -1
- package/dist/server/plugins/analytics/fullstory/index.js +1 -1
- package/dist/server/plugins/analytics/ga/index.js +1 -1
- package/dist/server/plugins/analytics/gtm/browser-hooks.js +1 -1
- package/dist/server/plugins/analytics/gtm/index.js +1 -1
- package/dist/server/plugins/analytics/heap/index.js +1 -1
- package/dist/server/plugins/analytics/rudderstack/index.js +1 -1
- package/dist/server/plugins/analytics/segment/index.js +1 -1
- package/dist/server/plugins/asyncapi-docs/asyncapi-doc-loader.js +3 -3
- package/dist/server/plugins/asyncapi-docs/get-server-props.js +1 -1
- package/dist/server/plugins/asyncapi-docs/index.js +1 -1
- package/dist/server/plugins/asyncapi-docs/search/schema-processor.js +1 -1
- package/dist/server/plugins/asyncapi-docs/search/search-resolver.js +1 -1
- package/dist/server/plugins/asyncapi-docs/store-definition-bundles.js +1 -1
- package/dist/server/plugins/asyncapi-docs/template/AsyncApiDocs.d.ts +2 -1
- package/dist/server/plugins/asyncapi-docs/template/AsyncApiDocs.js +9 -3
- package/dist/server/plugins/catalog-classic/get-server-props.d.ts +8 -3
- package/dist/server/plugins/catalog-classic/get-server-props.js +1 -1
- package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +38 -64
- package/dist/server/plugins/catalog-entities/database/catalog-entities-service.js +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.d.ts +8 -0
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.js +1 -0
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-db-record.d.ts +2 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-read-model.js +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/{create-entity-relation.d.ts → create-entity-relation-read-model.d.ts} +2 -2
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.js +1 -0
- package/dist/server/plugins/catalog-entities/database/mappers/map-entity-relation-row.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.d.ts +27 -0
- package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/common/version-repository.d.ts +36 -0
- package/dist/server/plugins/catalog-entities/database/repositories/common/version-repository.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-bff-repository.d.ts +15 -4
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-bff-repository.js +38 -27
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.d.ts +36 -9
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.js +37 -21
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.d.ts +41 -42
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.d.ts +3 -1
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-relations-repository.d.ts +7 -1
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-relations-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.d.ts +5 -9
- package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/utils/build-entities-exclusion-filter.d.ts +13 -0
- package/dist/server/plugins/catalog-entities/database/repositories/utils/build-entities-exclusion-filter.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/utils/build-rbac-filter.d.ts +31 -0
- package/dist/server/plugins/catalog-entities/database/repositories/utils/build-rbac-filter.js +9 -0
- package/dist/server/plugins/catalog-entities/database/repositories/utils/create-merged-entity-fields-for-select.d.ts +34 -0
- package/dist/server/plugins/catalog-entities/database/repositories/utils/create-merged-entity-fields-for-select.js +13 -0
- package/dist/server/plugins/catalog-entities/database/repositories/utils/normalize-revision-flags.d.ts +23 -0
- package/dist/server/plugins/catalog-entities/database/repositories/utils/normalize-revision-flags.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/utils/semantic-version-sort.d.ts +78 -0
- package/dist/server/plugins/catalog-entities/database/repositories/utils/semantic-version-sort.js +34 -0
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/arazzo-entities-extractor.js +1 -1
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.js +1 -1
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.d.ts +6 -4
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.js +1 -1
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.js +2 -2
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.js +1 -1
- package/dist/server/plugins/catalog-entities/extensions/extractors/fs-entities-extractor.js +1 -1
- package/dist/server/plugins/catalog-entities/get-server-props.js +1 -1
- package/dist/server/plugins/catalog-entities/plugin.js +1 -1
- package/dist/server/plugins/catalog-entities/schemas/database-schemas.d.ts +3 -0
- package/dist/server/plugins/catalog-entities/schemas/database-schemas.js +1 -1
- package/dist/server/plugins/catalog-entities/schemas/dto-schemas.d.ts +15 -1
- package/dist/server/plugins/catalog-entities/schemas/dto-schemas.js +1 -1
- package/dist/server/plugins/catalog-entities/schemas/read-model-schemas.d.ts +26 -164
- package/dist/server/plugins/catalog-entities/schemas/read-model-schemas.js +0 -1
- package/dist/server/plugins/catalog-entities/types/extractors.d.ts +4 -4
- package/dist/server/plugins/catalog-entities/types/openapi.d.ts +11 -0
- package/dist/server/plugins/catalog-entities/types/openapi.js +0 -0
- package/dist/server/plugins/catalog-entities/types/params.d.ts +6 -0
- package/dist/server/plugins/catalog-entities/types/params.js +0 -0
- package/dist/server/plugins/catalog-entities/utils/ajv-validator.js +1 -1
- package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.js +1 -1
- package/dist/server/plugins/catalog-entities/utils/get-not-accessible-catalog-resources.d.ts +11 -0
- package/dist/server/plugins/catalog-entities/utils/get-not-accessible-catalog-resources.js +1 -0
- package/dist/server/plugins/config-parser/index.js +1 -1
- package/dist/server/plugins/config-parser/loaders/content-slugs-loader.js +1 -1
- package/dist/server/plugins/config-parser/loaders/nearest-redocly-config-loader.js +1 -1
- package/dist/server/plugins/config-parser/loaders/utils/read-and-validate-config.js +1 -1
- package/dist/server/plugins/default-theme/index.js +1 -1
- package/dist/server/plugins/entitlements/index.js +1 -1
- package/dist/server/plugins/graphql-docs/graphql-doc-loader.js +1 -1
- package/dist/server/plugins/graphql-docs/index.js +1 -1
- package/dist/server/plugins/graphql-docs/search/search-resolver.js +1 -1
- package/dist/server/plugins/graphql-docs/template/GraphQLDocs.js +6 -2
- package/dist/server/plugins/lifecycle.js +2 -2
- package/dist/server/plugins/markdown/attribute-resolvers/resolve-link.js +1 -1
- package/dist/server/plugins/markdown/compiler.d.ts +1 -0
- package/dist/server/plugins/markdown/compiler.js +1 -1
- package/dist/server/plugins/markdown/index.js +1 -1
- package/dist/server/plugins/markdown/is-partial.d.ts +1 -1
- package/dist/server/plugins/markdown/is-partial.js +1 -1
- package/dist/server/plugins/markdown/markdoc/import-user-tags.js +1 -1
- package/dist/server/plugins/markdown/markdoc/plugins/render-mermaid.js +1 -1
- package/dist/server/plugins/markdown/markdoc/resolve-raw-partials.d.ts +1 -1
- package/dist/server/plugins/markdown/markdoc/resolve-raw-partials.js +2 -2
- package/dist/server/plugins/markdown/markdown-static-data-loader.js +1 -1
- package/dist/server/plugins/mcp/auth/auth-handlers.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/docs-mcp-tool.d.ts +54 -0
- package/dist/server/plugins/mcp/docs-mcp/tools/docs-mcp-tool.js +1 -0
- package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.d.ts +9 -8
- package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.d.ts +9 -8
- package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.d.ts +9 -8
- package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.d.ts +9 -8
- package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/index.d.ts +7 -13
- package/dist/server/plugins/mcp/docs-mcp/tools/index.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/list-apis.d.ts +9 -6
- package/dist/server/plugins/mcp/docs-mcp/tools/list-apis.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/search.d.ts +9 -2
- package/dist/server/plugins/mcp/docs-mcp/tools/search.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/utils.d.ts +2 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/utils.js +6 -6
- package/dist/server/plugins/mcp/docs-mcp/tools/whoami.d.ts +9 -2
- package/dist/server/plugins/mcp/docs-mcp/tools/whoami.js +1 -1
- package/dist/server/plugins/mcp/handlers/docs-mcp-handler.js +1 -1
- package/dist/server/plugins/mcp/handlers/errors.js +1 -1
- package/dist/server/plugins/mcp/handlers/handle-mcp-request.d.ts +5 -0
- package/dist/server/plugins/mcp/handlers/handle-mcp-request.js +1 -0
- package/dist/server/plugins/mcp/handlers/mcp-request-handler.d.ts +0 -1
- package/dist/server/plugins/mcp/handlers/mcp-request-handler.js +1 -1
- package/dist/server/plugins/mcp/servers/base-server.js +1 -1
- package/dist/server/plugins/mcp/types.d.ts +40 -0
- package/dist/server/plugins/mcp/workers/execute-mcp-tool.d.ts +3 -0
- package/dist/server/plugins/mcp/workers/execute-mcp-tool.js +1 -0
- package/dist/server/plugins/nav-utils.d.ts +1 -1
- package/dist/server/plugins/nav-utils.js +1 -1
- package/dist/server/plugins/openapi-docs/decorators.d.ts +3 -0
- package/dist/server/plugins/openapi-docs/decorators.js +1 -1
- package/dist/server/plugins/openapi-docs/get-server-props-custom-fields.d.ts +2 -4
- package/dist/server/plugins/openapi-docs/get-server-props-custom-fields.js +1 -1
- package/dist/server/plugins/openapi-docs/get-server-props.js +1 -1
- package/dist/server/plugins/openapi-docs/index.js +1 -1
- package/dist/server/plugins/openapi-docs/load-definition.d.ts +1 -0
- package/dist/server/plugins/openapi-docs/load-definition.js +3 -3
- package/dist/server/plugins/openapi-docs/openrpc-converter.d.ts +2 -0
- package/dist/server/plugins/openapi-docs/openrpc-converter.js +1 -0
- package/dist/server/plugins/openapi-docs/search/search-resolver.js +1 -1
- package/dist/server/plugins/openapi-docs/search-indexer.js +1 -1
- package/dist/server/plugins/openapi-docs/store-definition-bundles.js +1 -1
- package/dist/server/plugins/openapi-docs/template/OpenAPIDocs.js +8 -4
- package/dist/server/plugins/openapi-docs/template/helpers.d.ts +2 -2
- package/dist/server/plugins/openapi-docs/template/helpers.js +3 -3
- package/dist/server/plugins/openapi-docs/utils.d.ts +1 -0
- package/dist/server/plugins/scorecard-classic/compute-scorecard.d.ts +2 -1
- package/dist/server/plugins/scorecard-classic/compute-scorecard.js +4 -4
- package/dist/server/plugins/scorecard-classic/get-scorecard-config.d.ts +2 -1
- package/dist/server/plugins/scorecard-classic/index.js +1 -1
- package/dist/server/plugins/scorecard-classic/lint.d.ts +1 -1
- package/dist/server/plugins/scorecard-classic/lint.js +1 -1
- package/dist/server/plugins/scorecard-classic/loaders/scorecard-config.js +1 -1
- package/dist/server/plugins/scorecard-classic/loaders/scorecard.d.ts +6 -4
- package/dist/server/plugins/scorecard-classic/loaders/scorecard.js +1 -1
- package/dist/server/plugins/scorecard-classic/shared-utils.d.ts +1 -1
- package/dist/server/plugins/scorecard-classic/shared-utils.js +1 -1
- package/dist/server/plugins/scorecard-classic/template/Grid/Grid.d.ts +2 -1
- package/dist/server/plugins/scorecard-classic/template/Grid/Grid.js +3 -3
- package/dist/server/plugins/scorecard-classic/template/LevelIndicator.d.ts +1 -0
- package/dist/server/plugins/scorecard-classic/template/LevelIndicator.js +3 -3
- package/dist/server/plugins/scorecard-classic/template/components.js +1 -1
- package/dist/server/plugins/scorecard-classic/template/index.styles.d.ts +1 -0
- package/dist/server/plugins/scorecard-classic/template/index.styles.js +93 -19
- package/dist/server/plugins/scorecard-classic/template/index.types.d.ts +5 -1
- package/dist/server/plugins/scorecard-classic/template/useData.js +1 -1
- package/dist/server/plugins/scorecard-classic/template/views.js +1 -1
- package/dist/server/plugins/scorecard-classic/types.d.ts +5 -3
- package/dist/server/plugins/scorecard-classic/types.js +1 -1
- package/dist/server/plugins/scorecards/database/repositories/local/scorecards-config-local-repository.d.ts +12 -0
- package/dist/server/plugins/scorecards/database/repositories/local/scorecards-config-local-repository.js +1 -0
- package/dist/server/plugins/scorecards/database/scorecards-config-service.d.ts +11 -0
- package/dist/server/plugins/scorecards/database/scorecards-config-service.js +1 -0
- package/dist/server/plugins/scorecards/plugin.js +1 -1
- package/dist/server/plugins/scorecards/workers/run-scorecards-worker.d.ts +2 -1
- package/dist/server/plugins/scorecards/workers/run-scorecards-worker.js +1 -1
- package/dist/server/plugins/scorecards/workers/scorecards.d.ts +1 -12
- package/dist/server/plugins/scorecards/workers/scorecards.js +1 -1
- package/dist/server/plugins/search/ai-indexer/prepare-ai-search-documents.js +1 -1
- package/dist/server/plugins/search/documents/search-documents.js +1 -1
- package/dist/server/plugins/search/engines/flexsearch/index.js +1 -1
- package/dist/server/plugins/search/engines/typesense/index.js +1 -1
- package/dist/server/plugins/search/index.js +1 -1
- package/dist/server/plugins/search/llmstxt/index.js +5 -5
- package/dist/server/plugins/search/utils.js +2 -2
- package/dist/server/plugins/sidebars/index.d.ts +0 -2
- package/dist/server/plugins/sidebars/index.js +3 -3
- package/dist/server/plugins/sso/index.js +1 -1
- package/dist/server/providers/database/base-repository.d.ts +1 -0
- package/dist/server/providers/database/base-repository.js +1 -1
- package/dist/server/providers/database/database-connection-factory.js +1 -1
- package/dist/server/providers/database/database-preconnect-service.js +1 -1
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/0005_catalog-relations-constraint-fix.sql +2 -0
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/0006_add-catalog-entitities-attributes-table.sql +11 -0
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0005_snapshot.json +393 -0
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0006_snapshot.json +458 -0
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/_journal.json +14 -0
- package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-attributes-table.d.ts +143 -0
- package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-attributes-table.js +1 -0
- package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js +1 -1
- package/dist/server/providers/database/databases/main-sqlite/migrations/0006_change-scorecards-config-timestamps-field-types.sql +19 -0
- package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0006_snapshot.json +261 -0
- package/dist/server/providers/database/databases/main-sqlite/migrations/meta/_journal.json +7 -0
- package/dist/server/providers/database/databases/main-sqlite/schemas/scorecards-config-table.d.ts +24 -18
- package/dist/server/providers/database/databases/main-sqlite/schemas/scorecards-config-table.js +1 -1
- package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.js +1 -1
- package/dist/server/providers/database/databases/sqld-sqlite/migrations/0007_catalog-relations-constraint-fix.sql +2 -0
- package/dist/server/providers/database/databases/sqld-sqlite/migrations/0008_add-catalog-entitities-attributes-table.sql +11 -0
- package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0007_snapshot.json +833 -0
- package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0008_snapshot.json +898 -0
- package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/_journal.json +14 -0
- package/dist/server/providers/database/pagination/entities-to-filter.d.ts +15 -0
- package/dist/server/providers/database/pagination/entities-to-filter.js +1 -0
- package/dist/server/providers/database/pagination/utils/index.d.ts +4 -0
- package/dist/server/providers/database/pagination/utils/index.js +1 -1
- package/dist/server/providers/database/pagination/utils/is-nested-condition.d.ts +16 -0
- package/dist/server/providers/database/pagination/utils/is-nested-condition.js +1 -0
- package/dist/server/providers/database/pagination/utils/is-simple-condition.d.ts +18 -0
- package/dist/server/providers/database/pagination/utils/is-simple-condition.js +1 -0
- package/dist/server/providers/database/pagination/utils/map-operator.d.ts +10 -0
- package/dist/server/providers/database/pagination/utils/map-operator.js +1 -0
- package/dist/server/providers/database/pagination/utils/transform-condition.d.ts +12 -0
- package/dist/server/providers/database/pagination/utils/transform-condition.js +1 -0
- package/dist/server/ssr/render.js +1 -1
- package/dist/server/ssr/server-side-props/get-server-props-from-user-handler.js +1 -1
- package/dist/server/ssr/utils.js +8 -8
- package/dist/server/store.d.ts +14 -6
- package/dist/server/store.js +1 -1
- package/dist/server/telemetry/index.js +1 -1
- package/dist/server/tools/notifiers/formatter.js +3 -3
- package/dist/server/tools/notifiers/helpers/colors.js +1 -1
- package/dist/server/tools/notifiers/logger.js +2 -2
- package/dist/server/tools/notifiers/reporter.js +9 -9
- package/dist/server/tools/notifiers/terminal-manager.js +4 -4
- package/dist/server/types/plugins/common.d.ts +7 -1
- package/dist/server/types/plugins/markdown.d.ts +2 -0
- package/dist/server/types/plugins/scorecards.d.ts +30 -0
- package/dist/server/types/plugins/scorecards.js +0 -0
- package/dist/server/utils/envs/get-api-route-allowed-env-variables.js +1 -1
- package/dist/server/utils/envs/load-env-variables.d.ts +1 -1
- package/dist/server/utils/envs/load-env-variables.js +1 -1
- package/dist/server/utils/envs/sanitize-branch-name.d.ts +6 -0
- package/dist/server/utils/envs/sanitize-branch-name.js +1 -0
- package/dist/server/utils/globs.js +1 -1
- package/dist/server/utils/is-catalog-entities-enabled.js +1 -1
- package/dist/server/utils/is-scorecards-enabled.js +1 -1
- package/dist/server/utils/lifecycle-hooks.js +1 -1
- package/dist/server/utils/rbac.d.ts +76 -7
- package/dist/server/utils/rbac.js +1 -1
- package/dist/server/utils/report-all-errors.js +1 -1
- package/dist/server/utils/set-execution-mode.d.ts +5 -0
- package/dist/server/utils/set-execution-mode.js +1 -0
- package/dist/server/utils/time/with-timestamp.d.ts +42 -10
- package/dist/server/utils/time/with-timestamp.js +1 -1
- package/dist/server/version.js +1 -1
- package/dist/server/web-server/auth.js +3 -3
- package/dist/server/web-server/dev-server.js +1 -1
- package/dist/server/web-server/handle-api-route-request.js +1 -1
- package/dist/server/web-server/http.js +2 -2
- package/dist/server/web-server/middleware/apiKeyMiddleware.js +1 -1
- package/dist/server/web-server/middleware/catalogAuthMiddleware.d.ts +4 -6
- package/dist/server/web-server/middleware/catalogAuthMiddleware.js +1 -1
- package/dist/server/web-server/middleware/corsMiddleware.js +1 -1
- package/dist/server/web-server/middleware/dynamic-middleware/dynamic-middleware.js +1 -1
- package/dist/server/web-server/middleware/idleTimeoutMiddleware.js +1 -1
- package/dist/server/web-server/routes/ask-ai.js +1 -1
- package/dist/server/web-server/routes/auth.js +1 -1
- package/dist/server/web-server/routes/catalog/bff-catalog-related-entities.js +1 -1
- package/dist/server/web-server/routes/catalog/bff-catalog.js +1 -1
- package/dist/server/web-server/routes/catalog/catalog-relations.js +1 -1
- package/dist/server/web-server/routes/catalog/catalog.js +1 -1
- package/dist/server/web-server/routes/catalog/dto/read-entity-dto.d.ts +3 -0
- package/dist/server/web-server/routes/catalog/dto/read-entity-dto.js +0 -0
- package/dist/server/web-server/routes/catalog/helpers/create-entity-relation-update-schema.d.ts +43 -0
- package/dist/server/web-server/routes/catalog/helpers/create-entity-relation-update-schema.js +1 -0
- package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.d.ts +6823 -0
- package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.js +1 -0
- package/dist/server/web-server/routes/catalog/helpers/create-entity-update-schema.d.ts +1102 -0
- package/dist/server/web-server/routes/catalog/helpers/create-entity-update-schema.js +1 -0
- package/dist/server/web-server/routes/catalog/helpers/has-access-to-entity.d.ts +10 -0
- package/dist/server/web-server/routes/catalog/helpers/has-access-to-entity.js +1 -0
- package/dist/server/web-server/routes/catalog/mappers/map-entity-read-model-schema-to-entity-read-dto.d.ts +4 -0
- package/dist/server/web-server/routes/catalog/mappers/map-entity-read-model-schema-to-entity-read-dto.js +1 -0
- package/dist/server/web-server/routes/catalog/parsers/entities/parse-entities.d.ts +4 -0
- package/dist/server/web-server/routes/catalog/parsers/entities/parse-entities.js +1 -0
- package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity-update-data.d.ts +4 -0
- package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity-update-data.js +1 -0
- package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity.d.ts +4 -0
- package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity.js +1 -0
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.d.ts +13 -0
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.js +1 -0
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.d.ts +13 -0
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.js +1 -0
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.d.ts +13 -0
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.js +1 -0
- package/dist/server/web-server/routes/dynamic-route.js +1 -1
- package/dist/server/web-server/routes/error.js +1 -1
- package/dist/server/web-server/routes/helpers/get-current-rbac-teams.d.ts +3 -0
- package/dist/server/web-server/routes/helpers/get-current-rbac-teams.js +1 -0
- package/dist/server/web-server/routes/helpers/get-rbac-restrictions-data-for-catalog.d.ts +11 -0
- package/dist/server/web-server/routes/helpers/get-rbac-restrictions-data-for-catalog.js +1 -0
- package/dist/server/web-server/routes/index.js +1 -1
- package/dist/server/web-server/routes/info.js +1 -1
- package/dist/server/web-server/routes/mcp-oauth.js +1 -1
- package/dist/server/web-server/routes/otel/otel.js +1 -1
- package/dist/server/web-server/routes/page-data.js +1 -1
- package/dist/server/web-server/routes/path-prefix-redirect.js +1 -1
- package/dist/server/web-server/utils.d.ts +2 -2
- package/dist/server/workers/mcp-tool-worker-pool.d.ts +4 -0
- package/dist/server/workers/mcp-tool-worker-pool.js +1 -0
- package/dist/server/workers/mcp-tool-worker.d.ts +2 -0
- package/dist/server/workers/mcp-tool-worker.js +1 -0
- package/dist/server/workers/types.d.ts +7 -1
- package/dist/server/workers/worker-pool.js +1 -1
- package/package.json +19 -21
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation.js +0 -1
- package/dist/server/plugins/catalog-entities/entities/validate-entity.d.ts +0 -6
- package/dist/server/plugins/catalog-entities/entities/validate-entity.js +0 -1
- package/dist/server/plugins/mcp/workers/run-api-routes-worker.d.ts +0 -5
- package/dist/server/plugins/mcp/workers/run-api-routes-worker.js +0 -1
- package/dist/server/utils/envs/is-build-mode.d.ts +0 -2
- package/dist/server/utils/envs/is-build-mode.js +0 -1
- package/dist/server/utils/envs/is-develop-mode.d.ts +0 -7
- package/dist/server/utils/envs/is-develop-mode.js +0 -1
- package/dist/server/utils/envs/is-production-mode.d.ts +0 -10
- package/dist/server/utils/envs/is-production-mode.js +0 -1
- package/dist/server/workers/mcp-worker-pool.d.ts +0 -4
- package/dist/server/workers/mcp-worker-pool.js +0 -1
- package/dist/utils/env/is-local-development.d.ts +0 -13
- package/dist/utils/env/is-local-development.js +0 -1
- package/dist/utils/env/is-production.d.ts +0 -13
- package/dist/utils/env/is-production.js +0 -1
- package/dist/utils/env/is-web-view.d.ts +0 -14
- package/dist/utils/env/is-web-view.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import f from"path";import{combineUrls as
|
|
1
|
+
import f from"path";import{combineUrls as m}from"@redocly/theme/core/utils";import{VERSION_SEPARATOR as p}from"../../../constants/common.js";import{removeTrailingSlash as d}from"../../../../utils/url/remove-trailing-slash.js";import{slash as b}from"../../../../utils/path/slash.js";import{logger as h}from"../../../tools/notifiers/logger.js";import{parsePathVersions as D}from"../../../../utils/path/parse-path-versions.js";import{getDefaultVersionByPath as N}from"./versions-config-loader.js";import{GithubSlugger as E,slug as v}from"../../../utils/index.js";import{parseBaseName as I}from"../../utils.js";const V=new Set([".jpg",".jpeg",".png",".gif",".webp",".svg",".ico",".avif",".mp3",".wav",".ogg",".m4a",".mp4",".avi",".mov",".webm",".pdf",".doc",".docx",".zip",".rar",".gz",".ttf",".woff",".woff2"]),M=async(i,{fs:e,cache:o})=>{const l=h.startTiming(),s=(await o.load("versions-config","versions-config")).data,g=new Map,r=new Map,n=new Set,a=new E;r.set(".","/"),r.set("/","/");const t=e.scan().sort((u,S)=>S.relativePath.localeCompare(u.relativePath));for(const{relativePath:u}of t){if(V.has(f.posix.extname(u)))continue;const{data:S}=await o.load(u,"is-ignored");if(S)continue;const w=b(u).replace(new RegExp("^(@i18n|@l10n)\\/"),""),F=N(u,s);z(w,{defaultVersion:F,fileSlugs:g,dirSlugs:r,allFileSlugsList:n,githubSlugger:a})}return h.verboseTime(l,"Calculated slugs. Number of file paths processed: "+t.length),{fileSlugs:g,dirSlugs:r}};function z(i,e){const o=e.fileSlugs.get(i);if(o)return o;const l=D(i);let s=f.posix.dirname(i);const g=c(s,e)||"",{baseName:r,isIndexFile:n}=I(i),a=e.dirSlugs.has(f.posix.join(s,r));let t;if(!n&&a){const u=v(m(g,r,"/"));e.allFileSlugsList.has(u)||(t=u)}t||(t=L({isIndexFile:n,baseName:r,dirPath:s,fileVersionProps:l,ctx:e})),t=d(t),e.fileSlugs.set(i,t),e.allFileSlugsList.add(t)}function L({isIndexFile:i,baseName:e,dirPath:o,fileVersionProps:l,ctx:s}){const g=s.dirSlugs.get(o),r=c(o,s)||"";if(i&&g)return g;const n=d(v(m(r,e)));if(l&&s.defaultVersion&&l.versionName===s.defaultVersion&&s.allFileSlugsList.has(n)){const a=d(l.versionFolderPath)||"/",t=c(a,s)||"/";return s.githubSlugger.slug(m(t,l.versionName,e))}return n}function c(i,e){if(e.dirSlugs.has(i))return e.dirSlugs.get(i);const o=d(f.posix.normalize(i)).split("/");let l="/",s="";for(const g of o){s=f.posix.join(s,g);const r=T(g,e.defaultVersion);let n=e.dirSlugs.get(s)||e.githubSlugger.slug(m("/",l,r));n.endsWith("/")||(n=n+"/"),e.dirSlugs.set(s,n),l=n}return e.dirSlugs.get(i)}function T(i,e){if(!i.startsWith(p))return i;const o=i.substring(p.length);return o===e?"":o}export{V as IGNORED_EXTS,M as contentSlugsLoader};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import i from"path";import{CONFIG_FILE_NAME as r}from"../../../../constants/common.js";const g=async(l,{fs:t,cache:c,isPathIgnored:d})=>{let a=l,e=i.posix.join(a,r),o=t.getFileInfo(e);for(;a!=="."&&!o;)a=i.posix.dirname(a),e=i.posix.join(a,r),!await d(e)&&(o=t.getFileInfo(e));const n=await c.load(o?.realRelativePath||e,"redocly-config",t.localeFolders);return{...n.data,configPath:o?.relativePath||e,realConfigPath:o?.realRelativePath||e,hash:n.compoundHash}};export{g as nearestRedoclyConfigLoader};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import P from"path";import{lintConfig as C,loadConfig as T,createConfigTypes as A}from"@redocly/openapi-core";import{deepMerge as U}from"../../../../../utils/object/deep-merge.js";import{logger as d}from"../../../../tools/notifiers/logger.js";import{BRANCH_ENV_PREFIX as $}from"../../../../../constants/common.js";import{sanitizeBranchName as L}from"../../../../utils/envs/sanitize-branch-name.js";import{safeParsePartial as E}from"../../safe-parse.js";import{formatConfigProblem as q}from"../../format-error.js";import{ExternalResolver as x}from"../../../../fs/utils/external-ref-resolver.js";import{resolveMutuallyExclusiveProps as B}from"../../resolve-mutual-exclusion.js";function g(s,e,t,r){e in s&&s[e]&&typeof s[e]=="string"&&(/^https?:\/\/.*/.test(s[e])||r(new Error(`Invalid ${t} URL: "${s[e]}". ${t} must start with "http://" or "https://".`)))}function j(s,e){if("access"in s&&s.access&&typeof s.access=="object"){const t=s.access;g(t,"logoutReturnUrl","access.logoutReturnUrl",e),g(t,"residency","access.residency",e);const r=["requiresLogin","logoutReturnUrl","residency","sso","rbac"];for(const n of r)n in t&&t[n]!==void 0&&n in s&&s[n]!==void 0&&e(new Error(`Property '${n}' is defined both at root level and in 'access' object. Please use 'access.${n}' to define this configuration.`))}}async function X(s,e,t,r){const h=e.getFileInfo(s)?.realRelativePath||s;async function l(){const a=new x(e),u=P.join(e.cwd,h),i=await T({configPath:u,externalRefResolver:a}),p=await r(i.resolvedConfig);if(p===void 0)return i.resolvedConfig;const m=[...i.document?.source?await C({config:i,externalConfigTypes:A(p,i)}):[],...i.document?.source?B(i.resolvedConfig,i.document?.source):[]];if(m.length>0)for(const b of m)t(new Error(q(b,e.cwd)));return i.resolvedConfig}const c=await e.exists(s)?await l():{},R=M(c),w=await r(c);g(c,"residency","Residency",t),g(c,"logoutReturnUrl","Logout return URL",t),j(c,t);let f=w?E(w,c):c;const{env:y}=f;if(y){const{envConfig:a}=await import("../../../../../config/env-config.js"),u=a.redoclyEnv,i=y[u]||{},p=a.PUBLIC_REDOCLY_BRANCH_NAME||"",v=p?L(p):"",m=v&&y[`${$}${v}`]||{};f=U(f,m,i)}const o=N(f,R);if(o.imports&&o.imports.length>0){d.warn("The 'imports' property is deprecated. Please use 'plugins' property instead.");const a=new Set([...o.plugins||[],...o.imports.map(u=>P.posix.join(u,"plugin.js"))]);o.plugins=Array.from(a),delete o.imports}if(o.catalog&&(d.warn("The 'catalog' property is deprecated. Please use 'catalogClassic' property instead."),o.catalogClassic={...o.catalog},delete o.catalog),o.scorecard&&(d.warn("The 'scorecard' property is deprecated. Please use 'scorecardClassic' property instead."),o.scorecardClassic=o.scorecard,delete o.scorecard),o.search?.ai){d.warn("The 'search.ai' property is deprecated. Please use 'aiAssistant' property instead.");const a={...o.search?.ai,...o.aiAssistant,suggestions:o.aiAssistant?.suggestions?.length?o.aiAssistant.suggestions:o.search?.ai.suggestions||[]};o.aiAssistant=a,delete o.search.ai}return I(o)}function I(s){const e="access"in s?s.access:void 0;if(!e||typeof e!="object")return s;const t={...s},r=[{name:"requiresLogin",type:"boolean"},{name:"logoutReturnUrl",type:"string"},{name:"residency",type:"string"},{name:"sso",type:"string | string[]"},{name:"rbac",type:"object"}],n=[];for(const h of r){const l=h.name;l in t&&t[l]!==void 0&&!(l in e)&&n.push(l)}return n.length>0&&d.warn(`The following properties at root level are deprecated: ${n.join(", ")}. Please move them to the 'access' object.`),"requiresLogin"in e&&e.requiresLogin!==void 0&&(t.requiresLogin=e.requiresLogin),"logoutReturnUrl"in e&&e.logoutReturnUrl!==void 0&&(t.logoutReturnUrl=e.logoutReturnUrl),"residency"in e&&e.residency!==void 0&&(t.residency=e.residency),"sso"in e&&e.sso!==void 0&&(t.sso=e.sso),"rbac"in e&&e.rbac!==void 0&&(t.rbac=e.rbac),delete t.access,t}function M(s){if(!s.theme)return[];const e=[];for(const t of Object.keys(s.theme))s[t]==null?e.push(t):d.warn(`Detected both '${t}' and 'theme.${t}' properties in redocly.yaml. The 'theme.${t}' property will be ignored and needs to be removed or merged into the '${t}'.`);return e}function N(s,e){if(!s.theme||e.length===0)return s;const t={...s};for(const r of e)t[r]=s.theme[r];return delete t.theme,t}export{X as readAndValidateConfig};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{REDOCLY_TEAMS_RBAC as c}from"@redocly/config";import{
|
|
1
|
+
import{REDOCLY_TEAMS_RBAC as c}from"@redocly/config";import{DEV_LOGIN_SLUG as g,INVITE_SLUG as h,PUBLIC_RBAC_SCOPE_ITEM as m,UI_ACCESSIBLE_CONFIG_PROPS as P,CONFIG_FILE_NAME as n,DEFAULT_SSO_IDP_TITLE as _}from"../../../constants/common.js";import{envConfig as T}from"../../../config/env-config.js";import{getTemplatePath as s}from"./get-template-path.js";import{resolveLinksFromConfig as p}from"../nav-utils.js";import{resolveLogoConfig as F}from"./resolve-logo.js";import{extractTeamNames as E}from"./extract-team-names.js";import{resolveProductsConfig as O}from"./resolve-products-config.js";import{getExcludedFromLinkCheckerPatterns as y}from"../sidebars/utils.js";import{resolveEntitiesCatalogConfig as A}from"./resolve-catalog-entities.js";import{telemetryTraceStep as j}from"../../../cli/telemetry/helpers/trace-step.js";async function q(r){return{id:"Default Theme",async processContent(e){await j("build.plugin.default_theme",async()=>{const t=v(e),o=Object.keys(e.getConfig()?.ssoDirect||{}).length>0,a=e.createTemplate("invite",s("../../../../dist/client/app/pages/Invite/Invite.js"));if(e.addRoute({duplicateInAllLocales:!0,excludeFromSidebar:!0,excludeFromSearch:!0,slug:h,[c]:m,fsPath:h,templateId:a}),r.devLogin&&o){const i={frontmatter:{},seo:{title:"Login page"},authIdps:S(t),rbac:{teams:E(e.getConfig().rbac)}},l=e.createTemplate("dev-login",s("../../../../dist/client/app/pages/DevLogin/DevLogin.js"));e.addRoute({duplicateInAllLocales:!0,excludeFromSidebar:!0,excludeFromSearch:!0,slug:g,[c]:m,fsPath:g,templateId:l,getStaticData:async()=>({props:i})})}else if(t.length>1){const i={frontmatter:{},seo:{title:"Login page"},authIdps:S(t)},l=e.createTemplate("login",s("../../../../dist/client/app/pages/Login/Login.js"));e.addRoute({duplicateInAllLocales:!0,excludeFromSidebar:!0,slug:g,[c]:m,fsPath:g,templateId:l,getStaticData:async()=>({props:i})})}e.createTemplate("404",s("../../../../dist/client/app/pages/404/404.js")),e.createTemplate("403",s("../../../../dist/client/app/pages/403/403.js")),e.createTemplate("403OIDC",s("../../../../dist/client/app/pages/403/403OIDC.js")),T.isDevelopMode&&e.createTemplate("compilation-error",s("../../../../dist/client/app/pages/CompilationError/CompilationError.js"))})},async afterRoutesCreated(e,t){const{contentDir:o,outdir:a}=e,i=e.getConfig(),{navbar:l,footer:D,userMenu:u,search:f,breadcrumbs:I,products:b}=i,C=Object.keys(i?.ssoDirect||{}).length>0,d=y(i),L={navFile:n,excludedFromLinkCheckerPatterns:d};e.setGlobalData({...k(i),navbar:await p(l,o,e,t,L),footer:await p(D,o,e,t,L),breadcrumbs:{...I,prefixItems:await p(I?.prefixItems||[],o,e,t,{navFile:n,excludedFromLinkCheckerPatterns:d})},userMenu:{...u,hide:u?.hide??!C,menu:await p(u?.items,o,e,t,{navFile:n,excludedFromLinkCheckerPatterns:d})},logo:await F(i.logo,n,a,t.fs),auth:{idpsInfo:v(e),devLogin:r.devLogin&&C},products:await O(b,e,t),search:{...f,suggestedPages:await p(f?.suggestedPages,o,e,t,{navFile:n,excludedFromLinkCheckerPatterns:d})},entitiesCatalog:await A(i.entitiesCatalog,n,a,t.fs),headScriptTags:void 0,linkTags:void 0,postBodyScriptTags:void 0,preBodyScriptTags:void 0})}}}function v(r){const e=r.getConfig().ssoDirect;return Object.entries(e||{}).map(([o,a])=>({idpId:o,type:a.type,title:a.title}))}function S(r){return T.LOCALHOST_LOGIN==="true"?r:r.filter(t=>t.title!==_)}function k(r){const e={};for(const t of P)r[t]&&(e[t]=r[t]);return e}export{q as defaultThemePlugin,k as pickUiAccessibleConfig};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{writeFileSync as P}from"node:fs";import T from"path";import{PAGE_COUNT_OUTPUT_FILE_NAME as y}from"../../constants/common.js";import{
|
|
1
|
+
import{writeFileSync as P}from"node:fs";import T from"path";import{PAGE_COUNT_OUTPUT_FILE_NAME as y}from"../../constants/common.js";import{envConfig as F}from"../../../config/env-config.js";import{logger as o}from"../../tools/notifiers/logger.js";import{isReactPage as S}from"../../utils/content/is-react-page.js";import{EntitlementsProvider as b}from"../../entitlements/entitlements-provider.js";import{getBilledPagesCount as O,isPathIgnored as R}from"../../utils/index.js";import{isGraphqlDoc as $}from"../graphql-docs/is-graphql-doc.js";import{isMarkdownPage as M}from"../markdown/is-markdown-page.js";import{isOpenapiDoc as k}from"../openapi-docs/is-openapi-doc.js";import{PRODUCT_NAME as l}from"../../../config/product-gates.js";import{isAsyncapiDoc as E}from"../asyncapi-docs/is-asyncapi-doc.js";import{telemetryTraceStep as _}from"../../../cli/telemetry/helpers/trace-step.js";async function z(){return{id:"entitlements",async afterRoutesCreated(w,u){await _("build.plugin.entitlements",async t=>{const i=b.instance(),n=[],r=[],s=[],a=[],p=[];for(const{relativePath:e}of u.fs.scan())R(e)||(M(e)?n.push(e):$(e)?s.push(e):S(e)?a.push(e):await k(e,u)?r.push(e):await E(e,u)&&p.push(e));const g=i.canAccessFeature("markdown");t?.setAttribute("totalMarkdownFiles",n.length.toString()),t?.setAttribute("isMarkdownSupported",(!!g).toString()),n.length>0&&!g&&o.warn(`The product you are using ("${l}") does not support Markdown pages. The following Markdown files were detected but will be ignored: ${n.map(()=>"%rp").join(", ")}`,...n);const c=i.canAccessFeature("openapi");t?.setAttribute("totalOpenApiFiles",r.length.toString()),t?.setAttribute("isOpenApiSupported",(!!c).toString()),r.length>0&&!c&&o.warn(`The product you are using ("${l}") does not support OpenAPI documents. The following files are ignored: ${r.map(()=>"%rp").join(", ")}`,...r);const d=i.canAccessFeature("asyncapi");t?.setAttribute("totalAsyncApiFiles",p.length.toString()),t?.setAttribute("isAsyncApiSupported",(!!d).toString()),p.length>0&&!d&&o.warn(`The product you are using ("${l}") does not support AsyncAPI documents. The following files are ignored: ${p.map(()=>"%rp").join(", ")}`,...p);const m=i.canAccessFeature("graphql");t?.setAttribute("totalGraphqlFiles",s.length.toString()),t?.setAttribute("isGraphqlSupported",(!!m).toString()),s.length>0&&!m&&o.warn(`The product you are using ("${l}") does not support GraphQL documents. The following files are ignored: ${s.map(()=>"%rp").join(", ")}`,...s);const f=i.canAccessFeature("reactPages");t?.setAttribute("totalReactFiles",a.length.toString()),t?.setAttribute("isReactPagesSupported",(!!f).toString()),a.length>0&&!f&&o.warn(`The product you are using ("${l}") does not support React pages. The following files are ignored: ${a.map(()=>"%rp").join(", ")}`,...a);const A=O(w.getAllRoutes());t?.setAttribute("totalBilledPages",A.toString());const h=F.REDOCLY_METADATA_OUTPUT_FOLDER;h&&(o.info("Save total pages..."),P(T.join(h,y),JSON.stringify({totalPages:A},null)))})}}}export{z as entitlementsPlugin};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{buildSchema as
|
|
1
|
+
import{buildSchema as w}from"graphql";import{MenuStore as b,AppStore as h}from"@redocly/graphql-docs";import s from"node:path";import{combineUrls as q}from"@redocly/theme/core/utils";import{GRAPHQL_SPEC_SLUG as u}from"../../../constants/common.js";import{deepMerge as S}from"../../../utils/object/deep-merge.js";import{reporter as x}from"../../tools/notifiers/reporter.js";import{getApiConfigByPath as U}from"../get-api-config.js";import{replaceFileExtension as k}from"../openapi-docs/store-definition-bundles.js";const _=async(o,{getConfig:n,fs:l})=>{const a=await n(),e=a?.graphql??{},m=await l.read(o),{graphql:g={},metadata:f}=U(a.apis,o),r=await n(s.posix.dirname(o)),p={...r?.metadata,...f},i=S(e||{},g,r.graphql||{},{feedback:r.graphql?.feedback||e.feedback||a.feedback,downloadUrls:r.graphql?.downloadUrls||e.downloadUrls||[{url:q(u,`${k(o,s.posix.extname(o))}?download`)}],metadata:p});let c,d;try{const t=w(m);d=new h(t),c=new b(t,i)}catch(t){await x.panicOnBuild(t);return}return{menu:c,store:d,settings:i,metadata:p,content:m}};export{_ as graphqlDocLoader};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{writeFileSync as C}from"node:fs";import $ from"node:path";import{REDOCLY_TEAMS_RBAC as v}from"@redocly/config";import{combineUrls as I}from"@redocly/theme/core/utils";import{PUBLIC_API_DEFINITIONS_FOLDER as w}from"../../constants/common.js";import{GRAPHQL_TEMPLATE_ID as H,GRAPHQL_SPEC_SLUG as N,PUBLIC_RBAC_SCOPE_ITEM as O}from"../../../constants/common.js";import{removeTrailingSlash as _}from"../../../utils/url/remove-trailing-slash.js";import{getTemplatePath as Q}from"./get-template-path.js";import{searchResolver as F}from"./search/search-resolver.js";import{graphqlDocLoader as M}from"./graphql-doc-loader.js";import{getAiDocumentsStore as A}from"./search/ai/get-ai-search-document.js";import{fromCurrentDir as U}from"../../utils/paths.js";import{ensureDir as k}from"../../utils/fs.js";import{telemetryTraceStep as x}from"../../../cli/telemetry/helpers/trace-step.js";const B="graphql-docs-",
|
|
1
|
+
import{writeFileSync as C}from"node:fs";import $ from"node:path";import{REDOCLY_TEAMS_RBAC as v}from"@redocly/config";import{combineUrls as I}from"@redocly/theme/core/utils";import{PUBLIC_API_DEFINITIONS_FOLDER as w}from"../../constants/common.js";import{GRAPHQL_TEMPLATE_ID as H,GRAPHQL_SPEC_SLUG as N,PUBLIC_RBAC_SCOPE_ITEM as O}from"../../../constants/common.js";import{removeTrailingSlash as _}from"../../../utils/url/remove-trailing-slash.js";import{getTemplatePath as Q}from"./get-template-path.js";import{searchResolver as F}from"./search/search-resolver.js";import{graphqlDocLoader as M}from"./graphql-doc-loader.js";import{getAiDocumentsStore as A}from"./search/ai/get-ai-search-document.js";import{fromCurrentDir as U}from"../../utils/paths.js";import{ensureDir as k}from"../../utils/fs.js";import{telemetryTraceStep as x}from"../../../cli/telemetry/helpers/trace-step.js";const B="graphql-docs-",L="graphql-spec-download";async function nt(){return{id:"graphql",requiredEntitlements:["graphql"],loaders:{"graphql-doc":M},processContent:async(t,{fs:l,cache:i,isPathIgnored:u,withPathPrefix:p})=>{await x("build.plugin.graphql_docs",async()=>{t.createRequestHandler(L,U(import.meta.url,"./spec-download.api.js")),t.addApiRoute({slug:N+"/*",requestHandlerId:L,httpMethod:"all",[v]:O,getStaticData:async()=>({props:{}})});const m=t.createTemplate(H,Q("./template/GraphQLDocs.js"));for(const{relativePath:s}of l.scan(/(\.gql|\.graphql)$/)){if(await u(s))continue;const D=await i.load(s,"graphql-doc");if(!D.data)continue;j(D.data.content,t.outdir,s);const{menu:q,content:T,settings:n,metadata:y,store:d}=D.data,R=`${B}${s}`;await t.createSharedData(R,T);const c=[{key:"graphQlSettings",id:R}],b=q.getGroups(),G=q.getSidebarItems(),g={type:"graphql",title:n.metadata?.title||b[0].name,...y},e=[{slugSuffix:"",fsPath:s,templateId:m,getStaticData:h(void 0,n,p),sharedData:c,getAiDocumentsStore:A({label:n.info?.title??"GraphQL Overview",groupName:"overview",metadata:g,actions:t,store:d,includeInLLMsTxt:!0})}];for(const o of b){const S=`${o.id}`;e.push({slugSuffix:S,fsPath:s,templateId:m,getStaticData:h(o,n,p),sharedData:c});for(const a of o.typeGroups){const r=`${a.id}`;e.push({slugSuffix:r,fsPath:s,templateId:m,getStaticData:h(a,n,p),sharedData:c,getAiDocumentsStore:A({label:a.name,groupName:a.name,metadata:g,actions:t,store:d,isTypeGroup:!0,items:new Set(a.items)})});for(const E of a.items){const P=`${a.id}/${E}`;e.push({slugSuffix:P,fsPath:s,templateId:m,getStaticData:h(a,n,p),sharedData:c,getAiDocumentsStore:A({label:E,groupName:a.name,metadata:g,actions:t,store:d})})}}}if(!e.length)return;const f=e[0];e[0]=e[e.length-1],e[e.length-1]=f,f.metadata=g,f.getSidebar=o=>{function S(a){return a.map(r=>({...r,slug:r.slug&&_(I(o.baseSlug,r.slug)),routeSlug:r.routeSlug&&_(I(o.baseSlug,r.routeSlug)),link:r.link&&_(I(o.baseSlug,r.link)),items:r.items&&S(r.items)}))}return S(G)},f.getSearchDocuments=F(t,d);for(const o of e)t.addRoute(o)}})}}}function h(t,l,i){return async function(u){return{props:{seo:{title:t?.name},settings:{...l,location:{section:t?.id},sidebar:{hide:!0},baseUrlPath:i(u.baseSlug)},disableAutoScroll:!0}}}}function j(t,l,i){const u=w.slice(1);C(k($.resolve(l,`${u}/${i}`)),t,"utf8")}export{nt as graphqlDocsPlugin,j as storeGqlSchema};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{REDOCLY_ROUTE_RBAC as m,REDOCLY_TEAMS_RBAC as l}from"@redocly/config";import{removeMarkdownLinks as
|
|
1
|
+
import{REDOCLY_ROUTE_RBAC as m,REDOCLY_TEAMS_RBAC as l}from"@redocly/config";import{removeMarkdownLinks as b}from"../../openapi-docs/utils.js";import{extractDocumentSearchFacets as R,setDocumentSearchFacets as S}from"./search-facets.js";function v(c,e){return async(t,r)=>{const s=t.getSidebar?.(t)||[];return f(c,r,t,s,e)}}function f(c,e,t,r,s,p,d){const a=[];for(const n of r)if(n.type==="group")a.push(...f(c,e,t,n.items??[],s,p,n.label));else{const i=F(n,s,d||"");if(i){const o=n.link||n.slug,g={slug:t.slug,fsPath:t.fsPath},h=t.metadata||{},u=R(c,h);S(c,u),a.push({id:o,url:o,text:b(i.description||""),title:i.name,facets:u,[l]:e[l],[m]:e[m]||g})}}return a}function F(c,e,t){const r=t.toLowerCase(),{label:s}=c;switch(r){case"queries":return e.getQueryField(s);case"mutations":return e.getMutationField(s);case"subscriptions":return e.getSubscriptionField(s);case"directives":return e.getDirective(s);case"objects":case"interfaces":case"unions":case"enums":case"inputs":case"scalars":return e.getType(s)}}export{v as searchResolver};
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import a from"react";import m from"styled-components";import{RedoclyGraphQLDocs as h}from"@redocly/graphql-docs";import{buildSchema as p}from"graphql";import{LayoutVariant as l}from"@redocly/theme/components/SidebarActions/SidebarActions";import{useThemeConfig as g}from"@redocly/theme/core/hooks";import{ThreePanelLayout as f}from"@redocly/theme/layouts/ThreePanelLayout";import{CatalogClassicInfoBlock as u}from"@redocly/theme/components/CatalogClassic/CatalogClassicInfoBlock";import{usePageSharedData as d}from"../../../../client/providers/page-data/hooks.js";import{useCodeHighlight as E}from"../../../../client/app/hooks/codeHighlight/useCodeHighlight.js";function y({pageProps:t}){const o=d("graphQlSettings"),{settings:e}=t,{graphql:r}=g(),{highlight:n}=E(),s=a.useMemo(()=>({graphql:p(o)}),[o]),c=a.useMemo(()=>{const i={...r,...e};return{layout:t.apiOptions?.layout??l.THREE_PANEL,...i,markdown:{...i.markdown,highlight:n},navigation:{contentPrefix:""}}},[r,e,n,t.apiOptions?.layout]);return a.createElement(v,null,a.createElement(S,{layout:t.apiOptions?.layout},a.createElement(u,{metadata:t.metadata})),a.createElement(h,{schema:s,settings:c}))}const S=m(f)`
|
|
2
|
+
&& {
|
|
3
|
+
padding-right: ${({layout:t})=>t===l.THREE_PANEL?"calc(var(--panel-gap-horizontal) * 2)":"var(--panel-gap-horizontal)"};
|
|
4
|
+
}
|
|
5
|
+
`,v=m.div`
|
|
2
6
|
--navigation-anchor-offset: var(--navbar-height);
|
|
3
7
|
--sidebar-width: 0px;
|
|
4
|
-
`;export{
|
|
8
|
+
`;export{y as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
`+s.stack;
|
|
1
|
+
import x from"@redocly/portal-plugin-mock-server";import O from"path";import{REDOCLY_ROUTE_RBAC as N}from"@redocly/config";import{combineUrls as E,withPathPrefix as L}from"@redocly/theme/core/utils";import{VERSION_SEPARATOR as V}from"../constants/common.js";import{removeTrailingSlash as F}from"../../utils/url/remove-trailing-slash.js";import{removeLeadingSlash as j}from"../../utils/url/remove-leading-slash.js";import{isTruthy as k}from"../../utils/guards/is-truthy.js";import{normalizeRouteSlug as T}from"../../utils/path/normalize-route-slug.js";import{slash as $}from"../../utils/path/slash.js";import{parsePathVersions as M}from"../../utils/path/parse-path-versions.js";import{reporter as b}from"../tools/notifiers/reporter.js";import{logger as P}from"../tools/notifiers/logger.js";import{envConfig as A}from"../../config/env-config.js";import{shaDirPathShort as z}from"../utils/crypto/sha-dir-path-short.js";import{customPagesPlugin as q}from"../../server/plugins/pages/index.js";import{openAPIDocsPlugin as I}from"../../server/plugins/openapi-docs/index.js";import{asyncAPIDocsPlugin as U}from"../../server/plugins/asyncapi-docs/index.js";import{configParserPlugin as G}from"./config-parser/index.js";import{markdownPlugin as W}from"./markdown/index.js";import{generateBrowserPluginsModule as K,generateClientRoutes as H,generateTemplatesModule as Y}from"../esbuild/generate.js";import{graphqlDocsPlugin as J}from"./graphql-docs/index.js";import{searchPlugin as Q}from"./search/index.js";import{defaultThemePlugin as X}from"./default-theme/index.js";import{apiKeyMgmtPlugin as Z}from"./dev-onboarding/index.js";import{apiFunctionsPlugin as ee}from"./api-functions/index.js";import{scorecardClassicPlugin as te}from"./scorecard-classic/index.js";import{lintPlugin as oe}from"./lint/index.js";import{resolvePlugins as ie}from"../config/external-plugins.js";import{sidebarsPlugin as ne}from"./sidebars/index.js";import{l10nPlugin as re}from"./l10n/index.js";import{analyticsPlugins as se}from"./analytics/index.js";import{sitemapPlugin as ae}from"./sitemap/index.js";import{entitlementsPlugin as le}from"./entitlements/index.js";import{getBilledPagesCount as ce,slug as ue}from"../utils/index.js";import{telemetry as fe}from"../../cli/telemetry/index.js";import{telemetryTraceStep as D}from"../../cli/telemetry/helpers/trace-step.js";import{EntitlementsProvider as B}from"../entitlements/entitlements-provider.js";import{ssoPlugin as me}from"./sso/index.js";import{Cache as de}from"../fs/cache.js";import{ContentFs as pe}from"../fs/content-fs.js";import{findProductBySlug as ge}from"../utils/product.js";import{parseBaseName as Pe}from"./utils.js";import{isRouteReserved as he}from"./get-reserved-routes.js";import{catalogClassicPlugin as ye}from"./catalog-classic/index.js";import{arazzoDocsPlugin as we}from"./arazzo-docs/index.js";const Ce=[G,me,X,re,W,I,U,we,te,oe,ee,q,J,Z,ye,{importPath:"./catalog-entities/plugin.js",loadCondition:()=>A.NEW_CATALOG_ENABLED==="true"},{importPath:"./scorecards/plugin.js",loadCondition:()=>A.NEW_SCORECARDS_ENABLED==="true"},{importPath:"./mcp/index.js",loadCondition:()=>B.instance().canAccessFeature("mcp")},ne,ae,le,Q,x,...se];async function Pt(t,o=Ce){return await D("build.plugins_init",async()=>{const r=[],v=B.instance(),h={};for(const d of o){let a;if("loadCondition"in d){if(!d.loadCondition())continue;const e=await import(d.importPath);if(!e.default||typeof e.default!="function"){await b.panicOnBuild(`Dynamic plugin ${d.importPath} does not export a default export or it is not a function`);continue}a=e.default}else a=d;const p=await a(t);for(const[e,i]of Object.entries(p.loaders||{}))h[e]&&await b.panicOnBuild(`Duplicate loader with name ${e}`),h[e]=i;(!p.requiredEntitlements||p.requiredEntitlements?.every(e=>v.canAccessFeature(e)))&&r.push(p)}const s=new pe(t.contentDir);await s.ready;const m=new de(s);return m.setLoaders(h),P.verbose("All plugins instantiated"),{pluginInstances:r,lifecycleContext:Ee(s,m)}})}function _(t){P.verbose("Generating templates"),D("build.write_client_entries",()=>{Y(t),K(t),H(t)})}async function Re(t){const o=t.getAllRoutes();ce(o)||await b.panicOnBuild("No routes created by plugins. Please check your project configuration.")}async function ht(t,o,r,v={}){const h=B.instance();try{await D("build.plugins_run",async()=>{o.startPluginsRun();let s=[];await D("build.plugins_process_content",async a=>{for(const e of t){const i=P.startTiming();await e.processContent?.(o,r),P.verboseTime(i,`processContent for ${e.id}`)}s=(await ie(o.contentDir,o.config.plugins)).map(e=>e.lifecyclePlugin).filter(e=>k(e)&&(!e.requiredEntitlements||e.requiredEntitlements?.every(i=>h.canAccessFeature(i)))),r.cache.setLoaders(Object.fromEntries(s.flatMap(e=>Object.entries(e.loaders||{}))));for(const e of s){const i=P.startTiming();await e.processContent?.(o,r),P.verboseTime(i,`processContent for ${e.id}`)}a?.setAttribute("externalPluginsProcessed",s.length.toString())});const m=await ve(o,r),d=[...t,...s];_(o),A.isDevelopMode?await o.userCodeReady:o.buildRevision++,await D("build.plugins_after_routes_created",async()=>{for(const a of d){const p=P.startTiming();await a.afterRoutesCreated?.(o,m),P.verboseTime(p,`afterRoutesCreated for ${a.id}`)}}),await o.reportUnsetEnvVars(),await Re(o),_(o)})}catch(s){const m="Unhandled error in plugin. "+s.message+`
|
|
2
|
+
`+s.stack;fe.sendCliErrorCaughtMessage({message:m}),v.failFast?await b.panic(m):await b.panicOnBuild(m)}finally{o.finishPluginsRun()}}async function ve(t,o){const{cache:r,fs:v}=o,h=await o.getConfig(),s=Object.values(h.products||{}),m=(await r.load("versions-config","versions-config")).data,d=(await r.load("content-slugs","content-slugs")).data;t.routesByDir=new Map;for(const{duplicateInAllLocales:e,slugSuffix:i,sharedData:y=[],redirectFrom:w=[],...c}of t.newRoutes){const u=T(c.slug?c.slug:a(c.fsPath)),g=F(i?E(u,i):u),n={...c,[N]:{slug:g,fsPath:c.fsPath},slug:g,baseSlug:u,versions:p(c.fsPath,i),product:ge(s,g,a)};he(g,h)&&await b.panicOnBuildContentError(`Route "${g}" is reserved and cannot be used. Please choose a different slug for "${c.fsPath}".`),t.routesByFsPath.set(n.fsPath,n.slug),t.routesBySlug.set(n.slug,n);let C="";for(const f of c.fsPath.split("/")){const l=t.routesByDir.get(C),R=l||[];R.push(n),l||t.routesByDir.set(C,R),C=(C&&C+"/"||"")+f}for(const{key:f,id:l}of y)t.addRouteSharedData(n.slug,f,l);for(const f of w)t.addRedirect(f.from,{type:f.type,to:n.slug});if(e)for(const f of v.localeFolders){const l={...n,slug:"/"+f.toLowerCase()+n.slug};t.routesByFsPath.set(l.fsPath,l.slug),t.routesBySlug.set(l.slug,l);for(const{key:R,id:S}of y)t.addRouteSharedData(l.slug,R,S);for(const R of w){const S=E(v.localizationFolder,f,R.from);t.addRedirect(S,{type:R.type,to:l.slug})}}}return t.newRoutes=[],{...o,slugify:a};function a(e){const i=$(e).replace(new RegExp("^(@i18n|@l10n)\\/"),""),y=d.fileSlugs.get(i)||d.dirSlugs.get(F(i));if(y)return y;const{baseName:w,isIndexFile:c}=Pe(e);let u=O.dirname(e.replace(new RegExp("^(@i18n|@l10n)\\/"),""));return u=u==="."?"/":u,E("/",ue(c?u:E(u,w)),"/")}function p(e,i=""){const y=M(e);if(!y?.versionName)return;const{versionFolderPath:w,filePathInVersion:c,versionName:u}=y,g=m.get(w);if(g)return g.versions.map(n=>{const C=g.defaultVersion===n.version,f=j(E(w,V+n.version,c)),l=a(f);return{version:n.version,label:n.name||n.version,link:T(E(l,i)),default:C,active:u===n.version,folderId:z(`${w}`)}})}}function Ee(t,o){return{fs:t,cache:o,getConfig:async(r=".")=>(await o.load(r,"nearest-redocly-config",t.localeFolders)).data,isPathIgnored:async r=>(await o.load(r,"is-ignored")).data,withPathPrefix:L,logger:P}}export{Ce as INTERNAL_PLUGINS,Ee as createLifecycleContext,Pt as initPlugins,ht as runPlugins,_ as writeClientEntries};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import o from"node:path";import{ASYNC_API_DOCS_TEMPLATE_ID as F,GRAPHQL_SPEC_SLUG as T,GRAPHQL_TEMPLATE_ID as d,OPENAPI_DOCS_TEMPLATE_ID as v}from"../../../../constants/common.js";import{isLocalLink as U}from"../../../../utils/path/is-local-link.js";import{normalizeRouteSlug as P}from"../../../../utils/path/normalize-route-slug.js";import{removeFragment as y}from"../../../../utils/path/remove-fragment.js";import{PUBLIC_API_DEFINITIONS_FOLDER as C,DEPRECATED_PUBLIC_API_DEFINITIONS_FOLDER as M}from"../../../constants/common.js";import{getInnerText as N}from"../markdoc/helpers/get-inner-text.js";import{getNodeAttribute as W}from"../markdoc/helpers/get-node-attribute.js";import{setNodeAttributeValue as p}from"../markdoc/helpers/set-node-attribute-value.js";import{MdResolveError as g}from"./md-resolve-error.js";import{getLinkOriginalAttrName as B}from"./utils.js";import{isOpenApiURL as j}from"../../openapi-docs/is-openapi-doc.js";import{parseBaseName as G}from"../../utils.js";import{isMarkdownPage as $}from"../is-markdown-page.js";import{copyStaticFile as H}from"../../../utils/fs.js";const V=i=>[C,M,T].some(r=>i.startsWith(r));async function lt(i,r,k,{actions:L,context:c}){const{contentDir:w,outdir:D,getRouteByFsPath:A,slugHasRouteOrRedirect:E}=L,_=B(r),s=i[_]||W(i,r);if(i[_]=s,!U(s)||V(s))return;const[b,t="",R,h]=/^([^\?#]+)?([^#]+)?(.+)?/.exec(s)||[],f=i.type==="image"?"IMAGE":"LINK",u=String(i.attributes.title||i.attributes.alt||N([i])||""),n=y(k);if(i.type!=="image"){const{isOpenapiDetected:e,isOpenapiValid:m}=await j(t,n,L,c);if(e&&!m)throw new g(`OpenAPI route ${s} does not exist`,{rawLink:s,link:t,title:u,brokenLinkType:f})}if(o.extname(t)===""){if(t.startsWith("/")){if(!E(P(t)))throw new g(`Route ${t} does not exist`,{rawLink:s,link:t,title:u,brokenLinkType:f});p(i,r,t+(R||"")+(h||""))}if(!s.startsWith("#")&&!t.startsWith("/")&&$(n)){const e=A(n)?.slug;if(!e)return;const{isIndexFile:m}=G(n),I=m?P(o.posix.join(e,t)):P(o.posix.join(e,"../",t));if(!E(P(I)))throw new g(`Route ${t} does not exist`,{rawLink:s,link:I,title:u,brokenLinkType:f});p(i,r,I+(R||"")+(h||""))}return}const a=t.startsWith("/")?t.substring(1):o.posix.join(o.posix.dirname(n),decodeURI(t)),O=t.startsWith("/")?o.posix.join("static",t.substring(1)):"",x=c.fs.exists(a),S=c.fs.exists(O),l=A(a);if(!x&&!l&&!S)throw p(i,r,"#"),new g(`File ${a} does not exist`,{rawLink:s,link:a,title:u,brokenLinkType:f});if(l){const e=[v,d,F].includes(l.templateId);p(i,r,(e?l.baseSlug:l.slug)+(h||""))}else if(x){const e=c.fs.getFileInfo(a);if(!e||e.isVirtual)return;const m=await H(w,e.realRelativePath,D);p(i,r,m)}}export{lt as resolveLink};
|
|
1
|
+
import o from"node:path";import{ASYNC_API_DOCS_TEMPLATE_ID as F,GRAPHQL_SPEC_SLUG as T,GRAPHQL_TEMPLATE_ID as d,OPENAPI_DOCS_TEMPLATE_ID as v}from"../../../../constants/common.js";import{isLocalLink as U}from"../../../../utils/path/is-local-link.js";import{normalizeRouteSlug as P}from"../../../../utils/path/normalize-route-slug.js";import{removeFragment as y}from"../../../../utils/path/remove-fragment.js";import{PUBLIC_API_DEFINITIONS_FOLDER as C,DEPRECATED_PUBLIC_API_DEFINITIONS_FOLDER as M}from"../../../constants/common.js";import{getInnerText as N}from"../markdoc/helpers/get-inner-text.js";import{getNodeAttribute as W}from"../markdoc/helpers/get-node-attribute.js";import{setNodeAttributeValue as p}from"../markdoc/helpers/set-node-attribute-value.js";import{MdResolveError as g}from"./md-resolve-error.js";import{getLinkOriginalAttrName as B}from"./utils.js";import{isOpenApiURL as j}from"../../openapi-docs/is-openapi-doc.js";import{parseBaseName as G}from"../../utils.js";import{isMarkdownPage as $}from"../is-markdown-page.js";import{copyStaticFile as H}from"../../../utils/fs.js";const V=i=>[C,M,T].some(r=>i.startsWith(r));async function lt(i,r,k,{actions:L,context:c}){const{contentDir:w,outdir:D,getRouteByFsPath:A,slugHasRouteOrRedirect:E}=L,_=B(r),s=i[_]||W(i,r);if(i[_]=s,!U(s)||V(s))return;const[b,t="",R,h]=/^([^\?#]+)?([^#]+)?(.+)?/.exec(s)||[],f=i.type==="image"?"IMAGE":"LINK",u=()=>String(i.attributes.title||i.attributes.alt||N([i])||""),n=y(k);if(i.type!=="image"){const{isOpenapiDetected:e,isOpenapiValid:m}=await j(t,n,L,c);if(e&&!m)throw new g(`OpenAPI route ${s} does not exist`,{rawLink:s,link:t,title:u(),brokenLinkType:f})}if(o.extname(t)===""){if(t.startsWith("/")){if(!E(P(t)))throw new g(`Route ${t} does not exist`,{rawLink:s,link:t,title:u(),brokenLinkType:f});p(i,r,t+(R||"")+(h||""))}if(!s.startsWith("#")&&!t.startsWith("/")&&$(n)){const e=A(n)?.slug;if(!e)return;const{isIndexFile:m}=G(n),I=m?P(o.posix.join(e,t)):P(o.posix.join(e,"../",t));if(!E(P(I)))throw new g(`Route ${t} does not exist`,{rawLink:s,link:I,title:u(),brokenLinkType:f});p(i,r,I+(R||"")+(h||""))}return}const a=t.startsWith("/")?t.substring(1):o.posix.join(o.posix.dirname(n),decodeURI(t)),O=t.startsWith("/")?o.posix.join("static",t.substring(1)):"",x=c.fs.exists(a),S=c.fs.exists(O),l=A(a);if(!x&&!l&&!S)throw p(i,r,"#"),new g(`File ${a} does not exist`,{rawLink:s,link:a,title:u(),brokenLinkType:f});if(l){const e=[v,d,F].includes(l.templateId);p(i,r,(e?l.baseSlug:l.slug)+(h||""))}else if(x){const e=c.fs.getFileInfo(a);if(!e||e.isVirtual)return;const m=await H(w,e.realRelativePath,D);p(i,r,m)}}export{lt as resolveLink};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import L from"@markdoc/markdoc";import*as M from"path";import{GATED_MARKDOC_TAGS as
|
|
1
|
+
import L from"@markdoc/markdoc";import*as M from"path";import{GATED_MARKDOC_TAGS as O}from"../../constants/entitlements.js";import{logger as F}from"../../tools/notifiers/logger.js";import{reporter as N}from"../../tools/notifiers/reporter.js";import{sha1 as j}from"../../utils/crypto/sha1.js";import{formatMarkdocError as H}from"./errors.js";import{extractFirstHeading as x,visit as K}from"./markdoc/plugins/utils.js";import{attributeResolvers as y}from"./attribute-resolvers/index.js";import{MdResolveError as $}from"./attribute-resolvers/md-resolve-error.js";import{processHtmlTokens as U}from"./html/process-html-tokens.js";import{resolveRawPartials as W}from"./markdoc/resolve-raw-partials.js";import{EntitlementsProvider as Y}from"../../entitlements/entitlements-provider.js";import{MARKDOC_PARTIALS_DEPS_KEY as B}from"../../store.js";import{getLinkOriginalAttrName as V}from"./attribute-resolvers/utils.js";const q="EMPTY";async function C(a,s,e){const c=Y.instance(),{actions:g}=e,{relativePath:o,resolveErrors:S}=a,f=new Set,u=new Set,l=new Set,w=new Set,n={},k=new Set,b={},_={};function E(t,P){const D=P||q;t[D]=(t[D]||0)+1}const A=[];return a.resolveErrors.length=0,K(a.ast,t=>{const P=D();A.push(P.then(r=>{r?.sharedDataIds&&r.sharedDataIds.forEach(d=>f.add(d))}).catch(G));async function D(){const r=[];switch(t.type){case"fence":E(b,t.attributes.language);break;case"link":case"image":await y.nativeMdLink(t,t.type==="link"?"href":"src",o,e);break;case"tag":if(!t.tag)break;const d=s?.tags?.[t.tag];if(!d){O[t.tag]&&!c.canAccessFeature(O[t.tag])&&(t.errors.push({level:"warning",id:"invalid-tag",message:`Undefined tag: ${t.tag}`}),t.tag="",t.type="error",t.attributes={});break}const p=t.tag==="html"?t.attributes.name:t.tag;if((t.tag==="html"?k:w).add(p),n[p]=(n[p]||0)+1,p==="code-snippet"&&E(b,t.attributes.language),d.attributes?.__idx&&(t.attributes.__idx=n[t.tag]),d.dynamicComponentLib&&u.add(d.dynamicComponentLib),!d.attributes)break;if(p==="partial"&&t.attributes?.file){const i=V("file"),m=t[i]||t.attributes.file,h=m.startsWith("/")?m.slice(1):M.posix.normalize(M.posix.join(M.posix.dirname(o),m));l.add(h);const v=(g.getGlobalConfig(B)||{})[h];if(v?.dynamicComponents)for(const R of v.dynamicComponents)u.add(R);if(v?.sharedDataDeps)for(const R of v.sharedDataDeps)f.add(R)}for(const[i,m]of Object.entries(d.attributes)){const h=m.type;if(h&&(h.resolver||m.resolver)){const T=y[h.resolver||m.resolver],v=await T?.(t,i,o,e);v?.sharedDataId&&r.push(v.sharedDataId)}}if(p==="code-walkthrough")for(const i of t.attributes.resolvedFilesets||[])for(const m of i.files||[])E(_,m.language);const I=t.attributes?.attrs;if(I&&t.tag==="html")for(const i of Object.keys(I))i==="src"||i==="srcSet"?await y.htmlSourceAttribute(t,i,o,e):i==="href"&&await y.htmlHref(t,i,o,e);break}return{sharedDataIds:r}}async function G(r){if(!(r instanceof $)){await N.panicOnBuild(r.message);return}S.push(H({type:"resolve_link",meta:{...r.meta,link:r.meta.link??r.meta.rawLink},lines:t.lines,location:t.location,error:{id:"",level:"error",message:r.message,location:t.location}},a.relativePath,a.rawContent))}}),await Promise.all(A),a.sharedDataDeps=f,a.dynamicMarkdocComponents=u,a.validatedAtRevision<g.buildRevision&&(a.markdocErrors=L.validate(a.ast,s).map(t=>H(t,o,a.rawContent)),a.validatedAtRevision=g.buildRevision),{sharedDataDeps:a.sharedDataDeps,dynamicMarkdocComponents:Array.from(a.dynamicMarkdocComponents?.values()??[]),partials:Array.from(l),tagList:Array.from(w),htmlTagsList:Array.from(k),tagOccurrence:n,codeSnippetLanguages:b,codeWalkthroughLanguages:_}}const z=new L.Tokenizer({html:!0,allowIndentation:!0,allowComments:!0});z.parser.block.ruler.getRules("reference").length=0;function J(a,s){const e=z.tokenize(s),c=U(e);return{ast:L.parse(c,{file:a,slots:!0}),rawContent:s,resolveErrors:[],markdocErrors:[],relativePath:a,sharedDataDeps:void 0,validatedAtRevision:-1}}async function dt(a,s){const{data:e}=await s.cache.load(a,"markdown-ast");return x(e.ast)}async function gt(a,s){N.clearMarkdocProblems();const e=a.getAllRoutes();let c=0;const g=F.isInteractive();for(const o of e)await a.resolveRouteStaticData(o,s,!0),c++,g&&c%100===0&&F.logInFooter("validate",` \u{1F50D} Status: validating markdoc (${c}/${e.length})`)}async function vt(a,s,e){const c=a.content?j(a.content):"";return await e.context.cache.load(a.relativePath,{loader:o,name:"markdown-inline-parser"},[c,String(e.actions.buildRevision)]);async function o(S,f,u){let l;if(a.content){const n=a.content?a.content:await f.fs.read(a.relativePath),k=await f.getConfig(),b=await W(n,a.relativePath,k.markdown?.partialsFolders,f);l=J(a.relativePath,b)}else l=(await f.cache.load(a.relativePath,"markdown-ast")).data;let w={};if(e.actions.buildRevision!==0&&(w=await C(l,s,e)),!a.isVirtual){for(const n of l.markdocErrors)u(n);for(const n of l.resolveErrors)u(n)}return{ast:l.ast,info:w}}}export{dt as extractMdFirstHeading,J as getAst,vt as parseAndResolveMarkdoc,C as resolveAndValidateMarkdoc,gt as validateAllMarkdowns};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import d from"path";import{REDOCLY_TEAMS_RBAC as y}from"@redocly/config";import{MARKDOC_PARTIALS_DATA_KEY as D}from"../../store.js";import{reporter as R}from"../../tools/notifiers/reporter.js";import{canAccessFeature as A}from"../../utils/entitlements/can-access-feature.js";import{extractMdFirstHeading as C,getAst as M}from"./compiler.js";import{getTemplatePath as w}from"./get-template-path.js";import{prepareMarkdocPartials as T}from"./markdoc/partials.js";import{searchResolver as E}from"./search/search-resolver.js";import{markdownStaticDataLoader as I}from"./markdown-static-data-loader.js";import{makeErrorRoute as _}from"../error-route.js";import{validateRbacConfig as O}from"../validate-rbac-config.js";import{findFrontmatterSlugs as G,getSidebarSharedDataId as L,resolveFrontmatterSlugs as j}from"../utils.js";import{isPartial as z}from"./is-partial.js";import{markdownFrontmatterLoader as B}from"./markdown-frontmatter-loader.js";import{resolveRawPartials as K}from"./markdoc/resolve-raw-partials.js";import{getAiDocumentsStore as N}from"./search/get-ai-search-documents.js";import{registerPageProps as W}from"../register-page-props.js";import{sanitizeMalformedMdContent as Y}from"./utils/sanitize-malformed-md-content.js";import{telemetryTraceStep as q}from"../../../cli/telemetry/helpers/trace-step.js";async function fe(h){return{id:"markdoc",requiredEntitlements:["markdown"],loaders:{"markdown-frontmatter":B,"markdown-ast":async(t,r)=>{const i=await r.fs.read(t),n=await r.getConfig(),l=await K(i,t,n?.markdown?.partialsFolders,r),c=Y(l);return M(t,c)}},processContent:async(t,r)=>{await q("build.plugin.markdown",async i=>{const{markdown:n}=await r.getConfig();i?.setAttribute("config",JSON.stringify(n||{}));const l=n?.partialsFolders??[],c=t.createTemplate("markdown","@redocly/theme/core/templates/Markdown"),S=t.registerServerPropsGetter("markdown",w("./get-server-props.js"));t.createTemplate("error",w("../../../client/app/Error/ErrorDetails.js"));for(const o of r.fs.scan(/\.md$/))if(!await r.isPathIgnored(o.relativePath)&&!z(o.relativePath,l))try{await k(o)}catch(a){t.addRoute(_(o.relativePath,a)),i?.error(a),await R.panicOnBuild("Failed to create route for markdown file: %s",a.message)}async function k(o){const{relativePath:a,realRelativePath:P}=o,{data:{frontmatter:e}}=await r.cache.load(a,"markdown-frontmatter"),b=e?.metadata||{},F=(await r.getConfig(d.dirname(a)))?.metadata||{},v=await G(a,"markdown-frontmatter",e,r),g=j(v,a);let f=null;e?.sidebar&&(f=await L(e.sidebar,a,r.fs));let u=c;if(e?.template){const p=e.template.startsWith("./")||e.template.startsWith("../");let m=e.template;if(p){const s=d.posix.dirname(P);m=d.resolve(h.contentDir,s,e.template)}u=t.createTemplate(e.template,m)}e?.rbac&&(A("rbac")?O({content:{[a]:e.rbac}}):e.rbac=void 0),await W(o,r.fs,t),(g.length?g.reverse():[void 0]).forEach(p=>{t.addRoute({excludeFromSearch:e?.excludeFromSearch||!1,slug:p,fsPath:a,templateId:u,sharedData:f?[{id:f,key:"sidebar"}]:void 0,redirectFrom:Object.entries(e.redirects||{}).map(([m,{type:s}])=>({type:s||301,from:m})),[y]:e?.rbac,getNavText:async()=>(e?.seo?.title||await C(a,r)||"").toString(),metadata:{type:"markdown",__basename:d.basename(a),...F,...b},async getStaticData(m,s){return I(o,m,r,e,s)},getSearchDocuments:E(e,a,t.getSearchFacets,t.setSearchFacets),getAiDocumentsStore:N(t.getSearchFacets,e),serverPropsGetterIds:[S]})})}})},afterRoutesCreated:async(t,r)=>{const i=await T(r,t);t.setGlobalConfig({[D]:i})}}}export{fe as markdownPlugin};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const isPartial: (relativePath: string,
|
|
1
|
+
export declare const isPartial: (relativePath: string, _partialsFolders: string[]) => boolean;
|
|
2
2
|
//# sourceMappingURL=is-partial.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import t from"path";import{isPathInFolder as a}from"../../../utils/path/is-path-in-folder.js";const e=(r,i)=>["_partials"].some(o=>a(r,t.posix.normalize(o)));export{e as isPartial};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{pathToFileURL as o}from"url";import{
|
|
1
|
+
import{pathToFileURL as o}from"url";import{envConfig as r}from"../../../../config/env-config.js";async function n(t){if(r.isRuntimeMode)return await import("@redocly-markdoc/schema");try{const e=r.isDevelopMode?"js":"mjs";return await import(o(`${t}/user-tags-entry.${e}`)+"?"+new Date)}catch(e){if(r.isDevelopMode)return{schema:{}};throw e}}export{n as importUserTags};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{nanoid as
|
|
1
|
+
import{nanoid as R}from"nanoid";import{envConfig as i}from"../../../../../config/env-config.js";import{logger as h}from"../../../../tools/notifiers/logger.js";import{sha as g}from"../../../../utils/crypto/sha.js";const s={};function c(t){if(t.toLowerCase().includes("gantt")&&!t.toLowerCase().includes("todaymarker off")){const o=new Date().toISOString().split("T")[0];return g(t+o)}return g(t)}async function O(t,d="default"){if(t.length===0)return[];const r=[];for(let e=0;e<t.length;e++){const n=c(t[e]);s[n]||r.push(t[e])}if(r.length){const e=i.REDOCLY_MERMAID_MICROSERVICE_URL||"https://api.redocly.com/mermaid",n=h.startTiming(),f=R(),m=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json","x-request-id":i.REQUEST_ID||""},body:JSON.stringify({definitions:r,rayId:f,theme:d,organizationId:i.ORGANIZATION_ID})});if(m.status!==200)throw new Error(`Something went wrong during remote rendering. Please, save this Ray ID: ${f} and contact Redocly team.`);h.verboseTime(n,"Rendered mermaid diagrams (%s)",r.length);const l=await m.json();for(let a=0;a<r.length;a++){const p=c(r[a]);s[p]=l[a]}}const o=[];for(let e=0;e<t.length;e++){const n=c(t[e]);o.push(s[n])}return o}export{s as cache,c as generateDiagramHash,O as renderMermaid};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { LifecycleContext } from '../../../types';
|
|
2
|
-
export declare const resolveRawPartials: (content: string, relativePath: string,
|
|
2
|
+
export declare const resolveRawPartials: (content: string, relativePath: string, _partialsFolders: string[] | undefined, context: LifecycleContext, referenceChain?: string[]) => Promise<string>;
|
|
3
3
|
//# sourceMappingURL=resolve-raw-partials.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import p from"node:path";import
|
|
2
|
-
`).length],meta:{rawLink:
|
|
1
|
+
import p from"node:path";import{slash as v}from"../../../../utils/path/slash.js";import{reporter as d}from"../../../tools/notifiers/reporter.js";import{formatMarkdocError as R}from"../errors.js";import{isPartial as $}from"../is-partial.js";const h=/\{\% ?raw-partial file="([^"]+)" ?\/?\%\}/gm,k=async(t,o,E=[],e,i=[o])=>{for(const s of["_partials"])await e.fs.scan(new RegExp(`^${s}/`));const l=[],f=t.replace(h,(s,a)=>(l.push(w(s,a)),"_$redocly$"+(l.length-1)+"$")),m=await Promise.all(l);return f.replace(/_\$redocly\$(\d+)\$/g,(s,a)=>m[+a]);async function w(s,a){const r=a.startsWith("/")?a.slice(1):v(p.relative(e.fs.cwd,p.resolve(e.fs.cwd,p.dirname(o),a)));if(i.includes(r)){const n=[...i,r];return await d.panicOnBuildContentError(`Circular reference chain detected when processing raw partials: ${n.map(()=>"%rp").join(" -> ")}`,...n),""}const c=!e.fs.exists(r),u=!r.endsWith(".md")||await e.isPathIgnored(r)||!$(r,["_partials"]);if(c||u){const g={type:"resolve_link",lines:[1,t.split(`
|
|
2
|
+
`).length],meta:{rawLink:a,link:r},error:{id:"error",level:"error",message:c?"Raw partial file does not exist":"Could not resolve raw partial. Starting with 0.73.0 version all partials should be placed in partials folders"}};return d.reportMarkdocProblem(R(g,o,t)),""}const _=await e.fs.read(r);return await k(_,r,["_partials"],e,[...i,r])}};export{k as resolveRawPartials};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import R from"path";import{REDOCLY_TEAMS_RBAC as b,REDOCLY_ROUTE_RBAC as C}from"@redocly/config";import{removeTrailingSlash as S}from"../../../utils/url/remove-trailing-slash.js";import{addLeadingSlash as T}from"../../../utils/url/add-leading-slash.js";import{resolveFrontmatterKeys as m}from"../resolve-frontmatter-keys.js";import{resolveItem as B}from"../nav-utils.js";const A=new WeakMap;async function F(l,i,s,e,a){const d=await s.getConfig(),{ast:t,compoundHash:n,info:c}=await a.parseMarkdoc(l,s),g={...d.markdown?.editPage,...e.markdown?.editPage},o=i.fsPath!=null?s.fs.getFileInfo(i.fsPath):null,f=!g?.hide&&g?.baseUrl?{to:S(g.baseUrl)+T(o?.realRelativePath||i.fsPath||"")}:void 0,u={...d.feedback,...e.feedback},w=e.feedback?{type:u.type||"sentiment",settings:u.settings||{},hide:e.feedback?.hide}:void 0;Array.isArray(e.banner)&&(e.banner=e.banner.map(r=>r&&r.rbac?{...r,[b]:r.rbac}:r));let v=A.get(t),h=v?.ast;(!h||v?.compoundHash!==n)&&(h=JSON.stringify(t),A.set(t,{ast:h,compoundHash:n}));let p;e.navigation&&(p={...e.navigation,nextButton:await L(e.navigation.nextButton,i,a,s),previousButton:await L(e.navigation.previousButton,i,a,s)});const k=e?.seo?await m(e.seo,["image"],i.fsPath||"",a,s):void 0,y=c.tagList;Array.isArray(y)&&y.includes("code-walkthrough")&&(e.markdown=e.markdown||{},e.markdown.toc={hide:!0},e.footer=e.footer||{},e.footer={hide:!0});const P=e?.seo?.title||await i.getNavText?.();return{ast:h,frontmatter:await m({...e,...w!==void 0?{feedback:w}:{},...k!==void 0?{seo:k}:{},...p!==void 0?{navigation:p}:{}},d.markdown?.frontMatterKeysToResolve||["image","links"],i.fsPath||"",a,s),editPage:f,props:{metadata:{markdoc:{tagList:c.tagList}},seo:{...k,...P?{title:P}:{}}},[b]:i[b],[C]:i[C]}}async function L(l,i,s,e){if(!l||typeof l!="object")return;let a=l,d,t;if("page"in a&&typeof a.page=="string"){const{page:o,...f}=a;a=f,d=o}if("label"in a&&typeof a.label=="string"){const{label:o,...f}=a;a=f,t=o}let n;if(d){const o=await B({page:d},i.fsPath?R.dirname(i.fsPath):".",s,e,{navFile:i.fsPath||""});n=Array.isArray(o)?o[0]:o,n=n?.type!=="error"?n:void 0}const c=n?.routeSlug,g=t??n?.label;return{...a,label:g,link:c}}export{F as markdownStaticDataLoader};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{extractTokenFromAuthHeader as u}from"
|
|
1
|
+
import{extractTokenFromAuthHeader as u}from"../../../plugins/mcp/utils/jwt.js";import{getUserParamsFromCookies as d}from"../../../web-server/auth.js";import{DEFAULT_ANONYMOUS_VISITOR_TEAM as o,RBAC_ALL_OTHER_TEAMS as a,ServerRoutes as l}from"../../../../constants/common.js";import{withPathPrefix as h}from"@redocly/theme/core/utils";function c(e){return!e||typeof e!="object"||Object.keys(e).length===0?!1:!(e[o]&&e[o]!=="none"||e[a]&&e[a]!=="none")}function k(e,t){if(!t||Object.keys(t).length===0)return e;const r=t.content;if(r&&Object.keys(r).length>0&&Object.values(r).some(c))return!0;const s=t.teamFoldersBaseRoles;return c(s)?!0:e}async function R(e,t){const r=e.headers.get("Authorization");if(!r)return{isAuthenticated:!1};const s=u(r),i=t?.config?.ssoDirect||{},n=s?await d(i,{authorization:s,idp_access_token:s}):{};return s&&n&&n.isAuthenticated?{isAuthenticated:!0,isTokenValid:!0,currentUser:{teams:n.teams||[],email:n.email||"",claims:n,isAuthenticated:!0,idpAccessToken:n.idpAccessToken||void 0,idpId:n.idpId||void 0}}:{isAuthenticated:!1,isTokenValid:!1}}function O(e){return new Response(JSON.stringify({error:"unauthorized",message:"Authentication required"}),{status:401,headers:{"Content-Type":"application/json","WWW-Authenticate":`Bearer realm="${e}${l.MCP_OAUTH_PROTECTED_RESOURCE}${h("/mcp")}"`,"Access-Control-Allow-Origin":"*"}})}function _(){return new Response(JSON.stringify({error:"invalid_token",message:"Invalid or expired token"}),{status:401,headers:{"Content-Type":"application/json","WWW-Authenticate":'Bearer error="invalid_token", error_description="Invalid or expired token"',"Access-Control-Allow-Origin":"*"}})}export{_ as constructInvalidTokenResponse,O as constructUnauthorizedResponse,R as handleMcpAuth,k as shouldHandleMcpAuth};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { JSONSchemaType } from '@redocly/ajv';
|
|
2
|
+
import type { McpServer } from '@redocly/mcp-typescript-sdk/server/mcp.js';
|
|
3
|
+
import type { OpenAPIDefinition } from '@redocly/openapi-docs';
|
|
4
|
+
import type { AccessInfo, ApiDescriptionInfo, McpToolWorkerParams, McpToolWorkerResponse, ToolArgsMap } from '../../types.js';
|
|
5
|
+
export type DocsMcpToolRegistrationOptions = {
|
|
6
|
+
server: McpServer;
|
|
7
|
+
baseUrl: string;
|
|
8
|
+
outdir: string;
|
|
9
|
+
apiDescriptionsMap: Record<string, ApiDescriptionInfo>;
|
|
10
|
+
headers?: Record<string, string | string[] | undefined>;
|
|
11
|
+
accessInfo: AccessInfo;
|
|
12
|
+
};
|
|
13
|
+
/** Keys that can be passed to the tool context (excludes 'server' which is not serializable) */
|
|
14
|
+
export type ContextKey = Exclude<keyof DocsMcpToolRegistrationOptions, 'server'>;
|
|
15
|
+
export type ApiDefinitionResult = {
|
|
16
|
+
success: true;
|
|
17
|
+
definition: OpenAPIDefinition;
|
|
18
|
+
} | {
|
|
19
|
+
success: false;
|
|
20
|
+
response: McpToolWorkerResponse;
|
|
21
|
+
};
|
|
22
|
+
export declare abstract class DocsMcpTool<TName extends keyof ToolArgsMap> {
|
|
23
|
+
abstract readonly name: TName;
|
|
24
|
+
abstract readonly description: string;
|
|
25
|
+
readonly schema: JSONSchemaType<ToolArgsMap[TName]>;
|
|
26
|
+
/**
|
|
27
|
+
* Array of context keys that this tool requires.
|
|
28
|
+
* The base class will extract these from DocsMcpToolRegistrationOptions
|
|
29
|
+
* and pass them to executeAction.
|
|
30
|
+
*/
|
|
31
|
+
abstract readonly requiredContext: readonly ContextKey[];
|
|
32
|
+
constructor(schema: JSONSchemaType<ToolArgsMap[TName]>);
|
|
33
|
+
/**
|
|
34
|
+
* Builds the context object by picking only the required keys from options.
|
|
35
|
+
*/
|
|
36
|
+
protected getContext(options: DocsMcpToolRegistrationOptions): McpToolWorkerParams['context'];
|
|
37
|
+
register(options: DocsMcpToolRegistrationOptions): void;
|
|
38
|
+
/**
|
|
39
|
+
* Wraps the tool execution with telemetry and error handling.
|
|
40
|
+
* Subclasses should call this method and implement executeAction for the actual logic.
|
|
41
|
+
*/
|
|
42
|
+
execute(args: ToolArgsMap[TName], context: McpToolWorkerParams['context']): Promise<McpToolWorkerResponse>;
|
|
43
|
+
/**
|
|
44
|
+
* Implement the actual tool logic here. Called by execute() which handles telemetry.
|
|
45
|
+
*/
|
|
46
|
+
protected abstract executeAction(args: ToolArgsMap[TName], context: McpToolWorkerParams['context']): Promise<McpToolWorkerResponse>;
|
|
47
|
+
/**
|
|
48
|
+
* Helper method for tools that need to load an API definition.
|
|
49
|
+
* Handles finding the API by name and loading the definition from the file system.
|
|
50
|
+
* Requires 'outdir' and 'accessInfo' in requiredContext.
|
|
51
|
+
*/
|
|
52
|
+
protected getApiDefinition(name: string, context: McpToolWorkerParams['context']): Promise<ApiDefinitionResult>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=docs-mcp-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{telemetry as i}from"../../../../telemetry/index.js";import{mcpToolWorkers as n,MCP_TOOL_WORKER_KEY as a}from"../../../../workers/mcp-tool-worker-pool.js";import{findApiDescriptionByName as p}from"../utils.js";import{getApiDescriptionFromFs as u}from"./utils.js";function f(o,t,s){return{toolName:o,args:t,context:s}}class g{schema;constructor(t){this.schema=t}getContext(t){const s={};for(const e of this.requiredContext)s[e]=t[e];return{...s,apiDescriptionsMap:t.apiDescriptionsMap}}register(t){const s=async(e,r)=>{const c=f(this.name,e,this.getContext(t));return await n.exec(a,[c],{timeout:6e4})};t.server.tool(this.name,this.description,this.schema,s)}async execute(t,s){try{const e=await this.executeAction(t,s);return i.sendMcpToolCalledMessage([{object:"mcp_server",server_type:"docs",tool:this.name}]),e}catch(e){throw i.sendMcpErrorMessage([{object:"mcp_server",server_type:"docs",tool:this.name,message:e instanceof Error?e.message:String(e),stack:e instanceof Error&&e.stack||""}]),e}}async getApiDefinition(t,s){if(!s.outdir||!s.accessInfo)throw new Error("Missing required context: outdir and accessInfo");const e=p(s.apiDescriptionsMap,t);if(!e)return{success:!1,response:{content:[{type:"text",text:`No API found matching "${t}".`}]}};const r=await u({relativePath:e.relativePath||"",outdir:s.outdir,accessInfo:s.accessInfo});return r?{success:!0,definition:r}:{success:!1,response:{content:[{type:"text",text:`Spec not found from the file system with "${t}".`}]}}}}export{g as DocsMcpTool};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import
|
|
3
|
-
export declare
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import type { McpToolWorkerParams, McpToolWorkerResponse, ToolArgsMap } from '../../types.js';
|
|
2
|
+
import { DocsMcpTool, type ContextKey } from './docs-mcp-tool.js';
|
|
3
|
+
export declare class GetEndpointInfoTool extends DocsMcpTool<'get-endpoint-info'> {
|
|
4
|
+
readonly name = "get-endpoint-info";
|
|
5
|
+
readonly description = "Get comprehensive information about specific endpoint including parameters, security, and examples";
|
|
6
|
+
readonly requiredContext: readonly ContextKey[];
|
|
7
|
+
constructor();
|
|
8
|
+
protected executeAction(args: ToolArgsMap['get-endpoint-info'], context: McpToolWorkerParams['context']): Promise<McpToolWorkerResponse>;
|
|
9
|
+
}
|
|
9
10
|
//# sourceMappingURL=get-endpoint-info.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{resolveParameters as T,resolveRequestBody as y,resolveResponses as P}from"../utils.js";import{isMcpEndpoint as g}from"./utils.js";import{DocsMcpTool as x}from"./docs-mcp-tool.js";import{checkEndpointAndDeleteXMcp as v}from"../../utils/xmcp-utils.js";const p=["GET","POST","PUT","DELETE","PATCH","OPTIONS","HEAD","TRACE"],S={type:"object",required:["name","path","method"],additionalProperties:!1,properties:{name:{type:"string",description:"API name",minLength:1},path:{type:"string",description:"Endpoint path (e.g. /api/v1/users)",minLength:1},method:{type:"string",description:"HTTP method (GET, POST, PUT, DELETE, etc.)",enum:[...p,...p.map(r=>r.toLowerCase())],minLength:1}}};class D extends x{name="get-endpoint-info";description="Get comprehensive information about specific endpoint including parameters, security, and examples";requiredContext=["outdir","accessInfo"];constructor(){super(S)}async executeAction(c,a){const{name:d,path:o,method:i}=c,n=await this.getApiDefinition(d,a);if(!n.success)return n.response;const{definition:e}=n,m=o.startsWith("/")?o:`/${o}`,{title:u=""}=e.info||{},s=e.paths?.[m],h=i.toLowerCase();if(!s)return{content:[{type:"text",text:"Endpoint not found"}],isError:!0};const t=s[h];if(!g(t)||!v(t,"docs"))return{content:[{type:"text",text:"Endpoint not found"}],isError:!0};const l=s?.parameters||[],E=t.parameters||[],f={...t,parameters:T({pathParams:l,opParams:E,definition:e}),requestBody:y(t.requestBody,e),responses:P(t.responses,e)};return{content:[{type:"text",text:JSON.stringify({api:u,version:e.info?.version||"",servers:e.servers||[],endpoint:{path:o,method:i.toUpperCase(),...f},globalSecurity:e.security||[],securitySchemes:e.components?.securitySchemes||[]},null,2)}]}}}export{D as GetEndpointInfoTool};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import
|
|
3
|
-
export declare
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import type { McpToolWorkerParams, McpToolWorkerResponse, ToolArgsMap } from '../../types.js';
|
|
2
|
+
import { DocsMcpTool, type ContextKey } from './docs-mcp-tool.js';
|
|
3
|
+
export declare class GetEndpointsTool extends DocsMcpTool<'get-endpoints'> {
|
|
4
|
+
readonly name = "get-endpoints";
|
|
5
|
+
readonly description = "Get all endpoints for a specific API";
|
|
6
|
+
readonly requiredContext: readonly ContextKey[];
|
|
7
|
+
constructor();
|
|
8
|
+
protected executeAction(args: ToolArgsMap['get-endpoints'], context: McpToolWorkerParams['context']): Promise<McpToolWorkerResponse>;
|
|
9
|
+
}
|
|
9
10
|
//# sourceMappingURL=get-endpoints.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{DocsMcpTool as r}from"./docs-mcp-tool.js";import{getEndpointsFromPaths as c}from"./utils.js";const p={type:"object",required:["name"],additionalProperties:!1,properties:{name:{type:"string",description:"API name",minLength:1}}};class u extends r{name="get-endpoints";description="Get all endpoints for a specific API";requiredContext=["outdir","accessInfo"];constructor(){super(p)}async executeAction(o,i){const{name:s}=o,t=await this.getApiDefinition(s,i);if(!t.success)return t.response;const{definition:e}=t,n=c(e);return n.length===0?{content:[{type:"text",text:"No endpoints found"}]}:{content:[{type:"text",text:JSON.stringify({api:e.info?.title||"",version:e.info?.version||"",servers:e.servers||[],endpoints:n},null,2)}]}}}export{u as GetEndpointsTool};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import
|
|
3
|
-
export declare
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import type { McpToolWorkerParams, McpToolWorkerResponse, ToolArgsMap } from '../../types.js';
|
|
2
|
+
import { DocsMcpTool, type ContextKey } from './docs-mcp-tool.js';
|
|
3
|
+
export declare class GetFullApiDescriptionTool extends DocsMcpTool<'get-full-api-description'> {
|
|
4
|
+
readonly name = "get-full-api-description";
|
|
5
|
+
readonly description = "Get the complete OpenAPI description";
|
|
6
|
+
readonly requiredContext: readonly ContextKey[];
|
|
7
|
+
constructor();
|
|
8
|
+
protected executeAction(args: ToolArgsMap['get-full-api-description'], context: McpToolWorkerParams['context']): Promise<McpToolWorkerResponse>;
|
|
9
|
+
}
|
|
9
10
|
//# sourceMappingURL=get-full-api-description.d.ts.map
|