@redocly/realm 0.138.0-next.1 → 0.138.0-next.11
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 +191 -0
- package/dist/bin.js +0 -0
- package/dist/cli/build/analytics/collect-analytics.js +1 -1
- package/dist/cli/build/analytics/collectors/get-sidebars-usage.d.ts +12 -0
- package/dist/cli/build/analytics/collectors/get-sidebars-usage.js +1 -0
- package/dist/cli/build/index.js +1 -1
- package/dist/cli/develop.js +1 -1
- package/dist/cli/eject/resolveEjectParams.js +1 -1
- package/dist/cli/generate/string-utils.js +1 -1
- package/dist/cli/stats/collectors/extension-sampling.js +1 -1
- package/dist/cli/translations/collect-config-translations.js +1 -1
- package/dist/client/App.js +1 -1
- package/dist/client/TestProvider.d.ts +3 -1
- package/dist/client/TestProvider.js +1 -1
- package/dist/client/app/Link.js +1 -1
- package/dist/client/app/ReviewComments/ReviewComments.js +2 -2
- package/dist/client/app/Sidebar/Sidebar.js +1 -1
- package/dist/client/app/Sidebar/useSidebarItems.js +1 -1
- package/dist/client/app/hooks/codeHighlight/treeview-transformer.js +1 -1
- package/dist/client/app/hooks/codeHighlight/useCodeHighlight.js +1 -1
- package/dist/client/app/hooks/index.d.ts +1 -0
- package/dist/client/app/hooks/index.js +1 -1
- package/dist/client/app/hooks/markdown/useMarkdownText.js +1 -1
- package/dist/client/app/hooks/useConsent.d.ts +11 -0
- package/dist/client/app/hooks/useConsent.js +1 -0
- package/dist/client/app/l10n/L10nContext.d.ts +10 -0
- package/dist/client/app/l10n/L10nContext.js +1 -0
- package/dist/client/app/l10n/hooks/useL10n.js +1 -1
- package/dist/client/app/l10n/hooks/useTranslate.js +1 -1
- package/dist/client/app/l10n/hooks/useTranslationKeys.d.ts +2 -0
- package/dist/client/app/l10n/hooks/useTranslationKeys.js +1 -1
- package/dist/client/app/l10n/ssrL10n.d.ts +4 -0
- package/dist/client/app/l10n/ssrL10n.js +1 -0
- package/dist/client/app/markdoc/custom-components/openapi/openapi-example.js +1 -1
- package/dist/client/app/markdoc/custom-components/openapi/openapi-response-sample.js +1 -1
- package/dist/client/app/markdoc/custom-components/openapi/replay-openapi.js +1 -1
- package/dist/client/app/markdoc/hooks/use-store.d.ts +2 -3
- package/dist/client/app/pages/DevLogin/DevLoginForm.js +1 -1
- package/dist/client/app/pages/Invite/Invite.js +1 -1
- package/dist/client/app/search/index.d.ts +1 -1
- package/dist/client/app/search/index.js +1 -1
- package/dist/client/app/search/useSearch.d.ts +3 -0
- package/dist/client/app/search/useSearch.js +1 -1
- package/dist/client/app/webmcp/index.d.ts +2 -0
- package/dist/client/app/webmcp/index.js +1 -0
- package/dist/client/app/webmcp/tools/api-tools.d.ts +8 -0
- package/dist/client/app/webmcp/tools/api-tools.js +1 -0
- package/dist/client/app/webmcp/tools/shared.d.ts +13 -0
- package/dist/client/app/webmcp/tools/shared.js +1 -0
- package/dist/client/app/webmcp/tools/site-tools.d.ts +5 -0
- package/dist/client/app/webmcp/tools/site-tools.js +3 -0
- package/dist/client/app/webmcp/types.d.ts +36 -0
- package/dist/client/app/webmcp/types.js +0 -0
- package/dist/client/app/webmcp/useWebMcpTools.d.ts +9 -0
- package/dist/client/app/webmcp/useWebMcpTools.js +1 -0
- package/dist/client/providers/page-data/hooks.d.ts +2 -0
- package/dist/client/providers/page-data/hooks.js +1 -1
- package/dist/client/providers/theme/ThemeDataProvider.js +1 -1
- package/dist/client/runtime/loader.js +1 -1
- package/dist/client/server-entry.d.ts +2 -1
- package/dist/client/server-entry.js +1 -1
- package/dist/client/templates/api-docs/helpers.js +1 -1
- package/dist/client/templates/api-docs/template.js +7 -3
- package/dist/client/utils/catalog/parse-filter-query.js +1 -1
- package/dist/client/{app/Sidebar/helpers → utils}/filter-out-versioned-items.d.ts +12 -2
- package/dist/client/utils/filter-out-versioned-items.js +1 -0
- package/dist/client/utils/navigation-tabs.d.ts +14 -0
- package/dist/client/utils/navigation-tabs.js +1 -0
- package/dist/compiled/svgo/svgo-node.js +39 -39
- package/dist/constants/common.d.ts +1 -0
- 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/markdoc/nodes/table.d.ts +2 -0
- package/dist/markdoc/nodes/table.js +1 -1
- package/dist/server/config/env-config.d.ts +0 -6
- package/dist/server/config/env-schema.d.ts +0 -15
- package/dist/server/config/env-schemas/feature-flags.d.ts +0 -12
- package/dist/server/config/env-schemas/feature-flags.js +1 -1
- package/dist/server/constants/common.d.ts +3 -1
- package/dist/server/constants/common.js +1 -1
- package/dist/server/constants/entitlements.js +1 -1
- package/dist/server/constants/plugins/consent.d.ts +3 -0
- package/dist/server/constants/plugins/consent.js +1 -0
- package/dist/server/constants/plugins/search.js +1 -1
- package/dist/server/esbuild/esbuild-logger.js +3 -3
- package/dist/server/plugins/analytics/adobe/index.js +1 -1
- package/dist/server/plugins/analytics/amplitude/browser-hooks.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/browser-hooks.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/api-docs/index.js +1 -1
- package/dist/server/plugins/api-docs/utils/apply-nav-item-to-root.d.ts +9 -0
- package/dist/server/plugins/api-docs/utils/apply-nav-item-to-root.js +1 -0
- package/dist/server/plugins/api-docs/utils/decorators.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/common/version-repository.d.ts +5 -1
- package/dist/server/plugins/catalog-entities/database/repositories/common/version-repository.js +7 -1
- package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/utils/ajv-validator.js +1 -1
- package/dist/server/plugins/catalog-entities/utils/extract-parts-from-components-ref.js +1 -1
- package/dist/server/plugins/catalog-entities/utils/is-valid-tag-name.js +1 -1
- package/dist/server/plugins/catalog-entities/utils/openapi-component-content-extractor.js +1 -1
- package/dist/server/plugins/config-parser/format-custom-tags.d.ts +1 -0
- package/dist/server/plugins/config-parser/format-custom-tags.js +1 -1
- package/dist/server/plugins/config-parser/index.js +1 -1
- package/dist/server/plugins/config-parser/loaders/redocly-config-loader.js +1 -1
- package/dist/server/plugins/config-parser/loaders/versions-config-loader.js +1 -1
- package/dist/server/plugins/config-parser/safe-parse.js +1 -1
- package/dist/server/plugins/consent/build-consent-script.d.ts +6 -0
- package/dist/server/plugins/consent/build-consent-script.js +230 -0
- package/dist/server/plugins/consent/gate-ssr-components.d.ts +5 -0
- package/dist/server/plugins/consent/gate-ssr-components.js +1 -0
- package/dist/server/plugins/consent/index.d.ts +3 -0
- package/dist/server/plugins/consent/index.js +1 -0
- package/dist/server/plugins/consent/is-consent-enabled.d.ts +8 -0
- package/dist/server/plugins/consent/is-consent-enabled.js +1 -0
- package/dist/server/plugins/consent/zone-modes.d.ts +8 -0
- package/dist/server/plugins/consent/zone-modes.js +1 -0
- package/dist/server/plugins/default-theme/extract-team-names.js +1 -1
- package/dist/server/plugins/dev-onboarding/template/App.js +5 -5
- package/dist/server/plugins/dev-onboarding/template/components/ApiKeyOverview.js +3 -3
- package/dist/server/plugins/get-reserved-routes.d.ts +4 -2
- package/dist/server/plugins/get-reserved-routes.js +1 -1
- package/dist/server/plugins/l10n/index.js +1 -1
- package/dist/server/plugins/lifecycle.js +2 -2
- package/dist/server/plugins/markdown/markdoc/markdoc-options.d.ts +2 -0
- package/dist/server/plugins/markdown/search/get-ai-search-documents.js +9 -9
- package/dist/server/plugins/markdown/search/nodes/tag-node.d.ts +1 -1
- package/dist/server/plugins/markdown/search/nodes/tag-node.js +1 -1
- package/dist/server/plugins/markdown/search/to-markdown.js +1 -1
- package/dist/server/plugins/markdown/utils/sanitize-malformed-md-content.js +1 -1
- package/dist/server/plugins/mcp/audit/audit-log.js +1 -1
- package/dist/server/plugins/mcp/audit/secret-patterns.js +1 -1
- package/dist/server/plugins/mcp/auth/assistant-anonymous-token.d.ts +9 -0
- package/dist/server/plugins/mcp/auth/assistant-anonymous-token.js +1 -0
- package/dist/server/plugins/mcp/auth/auth-handlers.d.ts +5 -3
- package/dist/server/plugins/mcp/auth/auth-handlers.js +1 -1
- package/dist/server/plugins/mcp/codemode/build-tool-list.d.ts +6 -1
- package/dist/server/plugins/mcp/codemode/build-tool-list.js +2 -2
- package/dist/server/plugins/mcp/codemode/build-tool-type-declarations.js +4 -4
- package/dist/server/plugins/mcp/codemode/capabilities/fetch/index.js +3 -3
- package/dist/server/plugins/mcp/codemode/capabilities/types.d.ts +0 -1
- package/dist/server/plugins/mcp/codemode/capabilities/utils.d.ts +1 -2
- package/dist/server/plugins/mcp/codemode/capabilities/utils.js +4 -4
- package/dist/server/plugins/mcp/codemode/code-execution-audit.d.ts +3 -2
- package/dist/server/plugins/mcp/codemode/code-execution-audit.js +1 -1
- package/dist/server/plugins/mcp/codemode/code-execution-telemetry.d.ts +3 -4
- package/dist/server/plugins/mcp/codemode/code-execution-telemetry.js +1 -1
- package/dist/server/plugins/mcp/codemode/prompts.js +1 -1
- package/dist/server/plugins/mcp/codemode/tools/describe-tools.js +2 -2
- package/dist/server/plugins/mcp/codemode/tools/execute-schema.d.ts +0 -2
- package/dist/server/plugins/mcp/codemode/tools/execute-schema.js +1 -1
- package/dist/server/plugins/mcp/codemode/tools/execute.js +1 -1
- package/dist/server/plugins/mcp/codemode/tools/manage-credentials.js +2 -2
- package/dist/server/plugins/mcp/custom-tools/scan-custom-tools.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tool-schemas.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/core/create-anonymous-session.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/core/whoami.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/openapi/constants.d.ts +2 -0
- package/dist/server/plugins/mcp/docs-mcp/tools/openapi/constants.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/openapi/endpoint-suggestions.d.ts +6 -0
- package/dist/server/plugins/mcp/docs-mcp/tools/openapi/endpoint-suggestions.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/openapi/get-endpoint-info.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/openapi/get-security-schemes.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/openapi/load-api-description.d.ts +2 -0
- package/dist/server/plugins/mcp/docs-mcp/tools/openapi/load-api-description.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/openapi/utils.d.ts +6 -2
- package/dist/server/plugins/mcp/docs-mcp/tools/openapi/utils.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/utils/resolve-refs.d.ts +20 -14
- package/dist/server/plugins/mcp/docs-mcp/utils/resolve-refs.js +1 -1
- package/dist/server/plugins/mcp/gateway-mcp/credential-validation.js +1 -1
- package/dist/server/plugins/mcp/gateway-mcp/elicitation.d.ts +16 -10
- package/dist/server/plugins/mcp/gateway-mcp/elicitation.js +5 -5
- package/dist/server/plugins/mcp/gateway-mcp/fetch/allowed-hosts.js +1 -1
- package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-bridge.js +1 -1
- package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-guard.js +1 -1
- package/dist/server/plugins/mcp/gateway-mcp/fetch/url-placeholders.js +1 -1
- package/dist/server/plugins/mcp/gateway-mcp/rate-limit/ip-key.js +1 -1
- package/dist/server/plugins/mcp/gateway-mcp/upstream-auth-scheme.d.ts +0 -6
- package/dist/server/plugins/mcp/gateway-mcp/upstream-auth-scheme.js +2 -2
- package/dist/server/plugins/mcp/handlers/docs-mcp-handler.js +1 -1
- package/dist/server/plugins/mcp/handlers/mcp-credentials-handler.js +1 -1
- package/dist/server/plugins/mcp/handlers/mcp-credentials-page.js +35 -35
- package/dist/server/plugins/mcp/index.js +1 -1
- package/dist/server/plugins/mcp/servers/docs-server.js +1 -1
- package/dist/server/plugins/mcp/servers/mcp-server.js +2 -4
- package/dist/server/plugins/mcp/types.d.ts +5 -11
- package/dist/server/plugins/mcp/utils/disabled-tools.d.ts +3 -0
- package/dist/server/plugins/mcp/utils/disabled-tools.js +1 -0
- package/dist/server/plugins/mcp/utils/json-schema-validator.d.ts +2 -2
- package/dist/server/plugins/mcp/utils/json-schema-validator.js +1 -1
- package/dist/server/plugins/mcp/utils/mcp-client.js +1 -1
- package/dist/server/plugins/mcp/utils/public-endpoint.d.ts +9 -0
- package/dist/server/plugins/mcp/utils/public-endpoint.js +1 -0
- package/dist/server/plugins/mcp/utils/telemetry-attributes.d.ts +2 -1
- package/dist/server/plugins/mcp/utils/telemetry-attributes.js +1 -1
- package/dist/server/plugins/mcp/utils/tool-registration.d.ts +2 -1
- package/dist/server/plugins/mcp/utils/tool-registration.js +1 -1
- package/dist/server/plugins/mcp/utils/xmcp-utils.d.ts +0 -7
- package/dist/server/plugins/mcp/utils/xmcp-utils.js +1 -1
- package/dist/server/plugins/mcp/workers/execute-mcp-tool.js +1 -1
- package/dist/server/plugins/mcp/workers/mcp-tool-telemetry.d.ts +5 -7
- package/dist/server/plugins/mcp/workers/mcp-tool-telemetry.js +1 -1
- package/dist/server/plugins/nav-utils.js +1 -1
- package/dist/server/plugins/scorecard-classic/index.js +1 -1
- package/dist/server/plugins/scorecard-classic/template/Grid/GridHeader.js +21 -8
- package/dist/server/plugins/scorecard-classic/template/ScorecardDashboard.js +3 -3
- package/dist/server/plugins/scorecard-classic/template/index.styles.d.ts +1 -0
- package/dist/server/plugins/scorecard-classic/template/index.styles.js +15 -5
- 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/search/engines/flexsearch/index.js +2 -1
- package/dist/server/plugins/search/engines/flexsearch/search-index.d.ts +2 -2
- package/dist/server/plugins/search/engines/flexsearch/search-index.js +1 -1
- package/dist/server/plugins/search/llmstxt/index.js +1 -1
- package/dist/server/plugins/sidebars/index.js +7 -3
- package/dist/server/plugins/sidebars/tabs.d.ts +19 -0
- package/dist/server/plugins/sidebars/tabs.js +1 -0
- package/dist/server/plugins/sso/index.js +1 -1
- package/dist/server/ssr/render.js +1 -1
- package/dist/server/store.d.ts +2 -0
- package/dist/server/store.js +1 -1
- package/dist/server/tools/notifiers/helpers/privacy/mask-subject.js +1 -1
- package/dist/server/tools/notifiers/helpers/privacy/remove-pii.js +1 -1
- package/dist/server/types/plugins/search.d.ts +7 -5
- package/dist/server/utils/catalog-classic/get-catalog-shared-data-id.d.ts +3 -0
- package/dist/server/utils/catalog-classic/get-catalog-shared-data-id.js +1 -0
- package/dist/server/utils/envs/interpolate-env-variables.js +1 -1
- package/dist/server/utils/rbac-expand.js +1 -1
- package/dist/server/utils/rbac.js +1 -1
- package/dist/server/utils/redact-url.d.ts +6 -0
- package/dist/server/utils/redact-url.js +1 -0
- package/dist/server/utils/report-all-errors.js +1 -1
- package/dist/server/utils/sandbox-context.js +1 -1
- package/dist/server/utils/search/highlight-text-for-search.d.ts +1 -0
- package/dist/server/utils/search/highlight-text-for-search.js +1 -1
- package/dist/server/utils/search/text-match.d.ts +6 -0
- package/dist/server/utils/search/text-match.js +1 -0
- package/dist/server/utils/static-data.js +1 -1
- package/dist/server/utils/write-problems-report.d.ts +3 -0
- package/dist/server/utils/write-problems-report.js +1 -0
- package/dist/server/web-server/auth.d.ts +16 -2
- package/dist/server/web-server/auth.js +4 -4
- package/dist/server/web-server/jwt/jwt.js +1 -1
- package/dist/server/web-server/jwt/token-types.d.ts +11 -0
- package/dist/server/web-server/jwt/token-types.js +1 -0
- package/dist/server/web-server/jwt/types.d.ts +4 -4
- package/dist/server/web-server/jwt/types.js +1 -1
- package/dist/server/web-server/middleware/ensureSearchData.js +1 -1
- package/dist/server/web-server/middleware/responseHeadersMiddleware.js +1 -1
- package/dist/server/web-server/middleware/telemetry-middleware.js +1 -1
- package/dist/server/web-server/routes/ask-ai.js +1 -1
- package/dist/server/web-server/routes/auth.d.ts +1 -1
- package/dist/server/web-server/routes/auth.js +1 -1
- package/dist/server/web-server/routes/cors-proxy.js +2 -2
- package/dist/server/web-server/routes/dynamic-route.js +1 -1
- package/dist/server/web-server/routes/index.js +1 -1
- package/dist/server/web-server/routes/mcp-routes/mcp-oauth.js +1 -1
- package/dist/server/web-server/routes/mcp-routes/mcp-server-card.js +1 -1
- package/dist/server/web-server/routes/semantic-search.d.ts +1 -1
- package/dist/server/web-server/routes/semantic-search.js +1 -1
- package/dist/server/web-server/routes/static-content.js +1 -1
- package/dist/server/workers/worker-pool.js +1 -1
- package/dist/types/entitlements.d.ts +1 -0
- package/dist/utils/path/parse-path-versions.js +1 -1
- package/dist/utils/string/to-kebab-case.js +1 -1
- package/package.json +9 -9
- package/dist/client/app/Sidebar/helpers/filter-out-versioned-items.js +0 -1
- package/dist/server/plugins/mcp/auth/token-audience-telemetry.d.ts +0 -7
- package/dist/server/plugins/mcp/auth/token-audience-telemetry.js +0 -1
- package/dist/server/plugins/mcp/auth/token-audience.d.ts +0 -6
- package/dist/server/plugins/mcp/auth/token-audience.js +0 -1
- /package/dist/server/{plugins/mcp/gateway-mcp/fetch → web-server/utils}/ssrf-blocklist.d.ts +0 -0
- /package/dist/server/{plugins/mcp/gateway-mcp/fetch → web-server/utils}/ssrf-blocklist.js +0 -0
- /package/dist/server/{plugins/mcp/gateway-mcp/fetch → web-server/utils}/ssrf-safe-lookup.d.ts +0 -0
- /package/dist/server/{plugins/mcp/gateway-mcp/fetch → web-server/utils}/ssrf-safe-lookup.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readFileSync as
|
|
1
|
+
import{readFileSync as g}from"fs";import{join as j}from"path";import{isLocalLink as p}from"../../../utils/path/is-local-link.js";import{copyStaticFile as x}from"../../utils/fs.js";async function T(n,t){return m(n,"src",(e,o)=>`<script ${e}>${o}</script>`,t)}async function b(n,t){return m(n,"href",e=>`<link ${e} />`,{...t,defaultAttrs:{rel:"stylesheet"}})}async function m(n=[],t,e,{contentDir:o,outdir:y,defaultAttrs:h={},consentEnabled:d=!1}){if(!Array.isArray(n)||!n.length)return"";const c=[];for(const i of n){const C=typeof i=="string"?{[t]:i}:{...i},{src:$,href:k,inline:a,consent:l,...s}=C;l&&d&&t==="src"&&(s["data-consent"]=l,s.type&&(s["data-consent-type"]=s.type),s.type="text/plain");let r=t==="href"?k:$,u="";if(p(r)&&!a){const f=await x(o,r,y);if(!f)continue;r=f}else p(r)&&a&&(u=g(j(o,r),"utf-8"),r=!1);const S=F({...h,...s,[t]:r});c.push(e(S,u))}return c.join("")}function F(n){const t=[];for(let e in n){const o=n[e];o!==!1&&(o===!0?t.push(e):t.push(`${e}="${o}"`))}return t.join(" ")}export{b as formatCustomLinks,T as formatCustomScripts};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import A from"path";import{REDOCLY_ROUTE_RBAC as b,REDOCLY_TEAMS_RBAC as g}from"@redocly/config";import{deepMerge as S}from"../../../utils/object/deep-merge.js";import{parsePathVersions as v}from"../../../utils/path/parse-path-versions.js";import{buildWildcardRedirectsTree as D}from"../../utils/redirects/build-wildcard-redirects-tree.js";import{shaHexShort as T}from"../../utils/crypto/sha-hex-short.js";import{formatCustomScripts as u,formatCustomLinks as w}from"./format-custom-tags.js";import{applyL10nToRbacConfig as L,resolveDirectoryHashes as O}from"../../utils/rbac.js";import{isConsentEnabled as E}from"../consent/is-consent-enabled.js";import{copySeoAssets as k}from"./copy-seo-assets.js";import{normalizeRedirectSources as G}from"./normalize-redirect-sources.js";import{applyL10nToRedirects as B}from"./apply-l10n-to-redirects.js";import{DEFAULT_LOADERS as _}from"./loaders/index.js";import{resolveSearchFacets as j}from"./resolve-search-facets.js";import{telemetryTraceStep as x}from"../../../cli/telemetry/helpers/trace-step.js";import{transformMdAst as F}from"../markdown/runtime-transform.js";async function er(){return{id:"Config Parser",loaders:_,async processContent(e,{getConfig:n,fs:t}){await x("com.redocly.build.plugin.configParser",async o=>{const{contentDir:l,setGlobalConfig:s,setGlobalData:a}=e,r=await n(),i=r.access||{},d=L(t,i.rbac||{}),f={outdir:e.outdir,contentDir:l,consentEnabled:E(r.consent)},y=await u(r.scripts?.head,f),h=await w(r.links,f),R=await u(r.scripts?.body,f),m=S(r,{headScriptTags:y,linkTags:h,postBodyScriptTags:R});o?.setAttribute("config",JSON.stringify(m));const p=r.redirects?G(r.redirects):{},C=Object.keys(p),P=m.banner?.map(c=>typeof c=="object"&&c!==null&&c.rbac?{...c,[g]:c.rbac}:c);s({...m,banner:P,access:{...i,requiresLogin:!!i.requiresLogin,rbac:d},directoryPaths:await O(t,i.rbac),seo:r.seo&&await k(r.seo,f.contentDir,f.outdir),redirects:B(p,r.l10n),wildcardRedirectsTree:D(p),originalRedirectSources:C}),j(r.search?.filters?.facets||[],e.getSearchFacets,e.setSearchFacets),a({removeAttribution:!!r.removeAttribution})})},async afterRoutesCreated(e,n){M(e);const t=e.getGlobalConfig("banner");if(Array.isArray(t)){const o=await Promise.all(t.map(async(l,s)=>{const{content:a,...r}=l,{ast:i}=await e.parseMarkdoc({input:{content:a,relativePath:"redocly.yaml"},context:n,resource:`redocly.yaml#banner${s}`}),{renderableAst:d}=await F(i,{variables:{},partials:{}},e.serverOutDir);return{...r,ast:d,hash:T(a)}}));e.setGlobalConfig({banner:o})}}}}function M(e){const n=e.getGlobalConfig("access")?.rbac,t=e.getGlobalConfig("directoryPaths");if(!(!n||Object.keys(n).length===0))for(const o of e.getAllRoutes()){if(o.versions&&t){const l=v(o.fsPath)?.filePathInVersion||"index.md";for(const s of o.versions){const a=t[s.folderId],i=a==="."||a==="/"?"":a;s[b]={slug:s.link,fsPath:A.posix.join(i,"@"+s.version,l)}}}o[b]||o[g]||(o[b]={slug:o.slug,fsPath:o.fsPath})}}export{er as configParserPlugin};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{DEFAULT_SEARCH_ENGINE as
|
|
1
|
+
import{DEFAULT_SEARCH_ENGINE as p,redocConfigSchema as A,rootRedoclyConfigSchema as i}from"@redocly/config";import F from"is-glob";import{I18N_DIR_NAME as u,L10N_DIR_NAME as l}from"../../../constants/common.js";import{CONFIG_FILE_NAME as f}from"../../../../constants/common.js";import{deepMerge as C}from"../../../../utils/object/deep-merge.js";import{logger as o}from"../../../tools/notifiers/logger.js";import{EntitlementsProvider as b}from"../../../entitlements/entitlements-provider.js";import{readAndValidateConfig as h}from"./utils/read-and-validate-config.js";import{resolveExternalPlugins as y}from"../../../external-plugins/resolve-external-plugins.js";import{getPathForAllLocales as m}from"../../../fs/utils/get-path-for-all-locales.js";import{parseRbacConfig as E}from"../../../utils/rbac.js";import{RbacConfigLocation as S,validateRbacConfig as v}from"../../validate-rbac-config.js";const R=["**/_partials/**"],$=async(e,{fs:n},s)=>{const r=await h(e,n,s,async t=>e===f?L(n.cwd,t?.plugins||[]):void 0);if(r?.access?.rbac){const t=await E(r.access.rbac);r.access.rbac=t,v(t,e===f?S.RootRedoclyYaml:void 0)}(r?.l10n||r?.i18n)&&(r.l10n=w(r),r.i18n=void 0);const c=C(r||{},{markdown:{partialsFolders:(r?.markdown?.partialsFolders||R).flatMap(t=>m(t,n))}});return _({...c,configPath:e,ignore:g(r?.ignore,n)})};async function L(e,n){const s=await y(e,n),r=s.map(a=>a.config.schema?a.lifecyclePlugin.id:""),c={};for(const a of s){const d=a.lifecyclePlugin?.id;a.config.schema&&d&&i.properties&&(c[d]=a.config.schema)}return{...i,properties:{...c,...i.properties,openapi:A},$id:i.$id+r.join("")}}function _(e){const n=b.instance();if(n.canAccessFeature("apiFunctions")||(e.apiFunctions=void 0),n.canAccessFeature("products")||(e.products=void 0),n.canAccessFeature("breadcrumbs")||(e.breadcrumbs={hide:!0}),n.canAccessFeature("seo")||(e.seo={llmstxt:{hide:!0}}),n.canAccessFeature("redirects")||(e.redirects={}),n.canAccessFeature("l10n")||(e.l10n=void 0),n.canAccessFeature("rbac")||e.access&&(e.access.rbac=void 0),n.canAccessFeature("sso")||e.access&&(e.access.sso=void 0),n.canAccessFeature("ssoDirect")||(e.ssoDirect=void 0),n.canAccessFeature("catalogClassic")||(e.catalog=void 0,e.catalogClassic=void 0),n.canAccessFeature("scorecard")||(e.scorecard=void 0,e.scorecardClassic=void 0),n.canAccessFeature("scorecards")||(e.scorecards=void 0),n.canAccessFeature("devOnboarding")||(e.developerOnboarding=void 0),n.canAccessFeature("analytics")||(e.analytics=void 0),n.canAccessFeature("removeAttribution")||(e.removeAttribution=void 0),n.canAccessFeature("mockServer")||(e.mockServer={off:!0}),n.canAccessFeature("advancedSearch")||e.search&&(e.search.engine=p),n.canAccessFeature("banner")||(e.banner=void 0),e.consent){const s=n.entitlements;s&&!Object.prototype.hasOwnProperty.call(s,"cookieConsent")?o.warn("The plan gates token has no cookieConsent entry. The consent option stays on."):n.canAccessFeature("cookieConsent")||(o.error("The consent option requires the Enterprise+ plan. It is ignored, and analytics loads without consent."),e.consent=void 0)}return e}function g(e=[],n){return["static",...e].flatMap(s=>F(s)&&(s.startsWith("*")||s.startsWith(l)||s.startsWith("/"+l)||s.startsWith(u)||s.startsWith("/"+u))?s:m(s,n))}function w(e){return e.i18n&&o.warn("The `i18n` configuration is deprecated. Please use `l10n` instead."),e.l10n||e.i18n||{}}export{$ as redoclyConfigLoader};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import v from"path";import{I18N_DIR_NAME as c,L10N_DIR_NAME as p,RESERVED_DIR_NAMES as
|
|
1
|
+
import v from"path";import{I18N_DIR_NAME as c,L10N_DIR_NAME as p,RESERVED_DIR_NAMES as u,VERSION_SEPARATOR as V,VERSIONED_FOLDER_REGEXP_MATCH as P}from"../../../constants/common.js";import{parsePathVersions as l}from"../../../../utils/path/parse-path-versions.js";import{compareVersions as g}from"../../../../utils/version/compare-versions.js";import{reporter as h}from"../../../tools/notifiers/reporter.js";import{logger as y}from"../../../tools/notifiers/logger.js";const A=async(i,{cache:r,fs:s})=>{const e=new Map,a=await s.scan();await E(a);for(const{relativePath:n}of a){if(v.posix.basename(n)==="versions.yaml"){await F(n,e,r);continue}const o=l(n);if(o==null||u.includes(V+o.versionName))continue;const t=e.get(o.versionFolderPath)||{versionedFiles:new Map,versions:[]},f=t.versionedFiles.get(o.filePathInVersion)||new Set,d={version:o.versionName};f.add(d.version),!t.hasVersionsConfig&&t.versions.findIndex(m=>m.version===o.versionName)===-1&&t.versions.push(d),t.versionedFiles.set(o.filePathInVersion,f),e.set(o.versionFolderPath,t)}return w(e)};async function F(i,r,s){let e=v.posix.dirname(i);e==="."?e="/":e=e.endsWith("/")?e:e+"/",e.startsWith(c+"/")&&(e=e.slice(c.length+1)),e.startsWith(p+"/")&&(e=e.slice(p.length+1));const n=(await s.load(i,"yaml")).data;n.versions&&!Array.isArray(n.versions)?(await h.panicOnBuild(`Property 'versions' must be an array at %rp. Got '${typeof n.versions}'.`,i),n.versions=[]):(!n.versions||n.versions.length===0)&&y.warn("Property 'versions' is empty at %rp. This is likely a mistake.",i);const o=r.get(e)||{versionedFiles:new Map,versions:[]};o.hasVersionsConfig=!0,o.versions=n.versions||[],n.default&&(o.defaultVersion=n.default),r.set(e,o)}async function E(i){const r=new Set;for(const{relativePath:s}of i){const e=l(s);if(!(e?.versionFolderPath&&u.includes(e?.versionFolderPath))){if(e?.versionFolderPath==null){(s.match(P)?.length||0)>1&&await h.panicOnBuild(`Nested versions are not supported. Detected nested versions in path: "${s}".`);continue}r.has(e.versionFolderPath)||r.add(e.versionFolderPath)}}}function w(i){for(let[r,s]of i){const e=s.hasVersionsConfig?s.versions:s.versions.sort((o,t)=>g(t.version,o.version)),a=s.hasVersionsConfig?e[e.length-1]:e[0],n=s.defaultVersion||a?.version;i.set(r,{...s,versions:e,defaultVersion:n})}return i}function S(i,r){const s=l(i);return s==null?null:r.get(s.versionFolderPath)?.defaultVersion}export{S as getDefaultVersionByPath,A as versionsConfigLoader};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import s from"@redocly/ajv";import
|
|
1
|
+
import s from"@redocly/ajv";import c from"ajv-formats";import{removeDeepProperty as d}from"../../../utils/object/remove-deep-property.js";function v(t,e){const i=JSON.parse(JSON.stringify(e)),a=l(t);if(!a(i||{})){for(const o of a.errors||[]){const n=o.instancePath.slice(1).split("/");o.keyword==="additionalProperties"&&o.instancePath!==""&&n.push(o.params.additionalProperty),d(i,n)}a(i||{})}return i||{}}function l(t){if(!t.$id)return r.compile(t);const e=r.getSchema(t.$id);return e||(r.addSchema(t),r.compile(t))}const r=new s({strictSchema:!1,allowUnionTypes:!0,useDefaults:!0,allErrors:!0,discriminator:!0,strictTypes:!1,verbose:!0});c(r);export{r as ajv,v as safeParsePartial};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ConsentConfig } from '@redocly/config';
|
|
2
|
+
export type ConsentScriptOptions = {
|
|
3
|
+
dataLayerName?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function buildConsentScript(consent: ConsentConfig, options?: ConsentScriptOptions): string;
|
|
6
|
+
//# sourceMappingURL=build-consent-script.d.ts.map
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import{buildZoneModes as a,groupZones as r}from"./zone-modes.js";const i=365,o="dataLayer";function c(e,t={}){const n=e.mode==="auto"?r(a().optOut):{};return`(function(){
|
|
2
|
+
var cfg=${JSON.stringify({mode:e.mode,expires:e.expires??i,dataLayer:t.dataLayerName||o,optOut:n}).replace(/</g,"\\u003c")};
|
|
3
|
+
var COOKIE='redocly_consent';
|
|
4
|
+
var tcfState=null;
|
|
5
|
+
var adapters={
|
|
6
|
+
onetrust:{
|
|
7
|
+
ready:function(){return !!window.OneTrust&&typeof window.OnetrustActiveGroups==='string';},
|
|
8
|
+
read:function(){
|
|
9
|
+
var raw=window.OnetrustActiveGroups||'';
|
|
10
|
+
var groups=','+raw+',';
|
|
11
|
+
var decided=!!(window.OneTrust.IsAlertBoxClosed&&window.OneTrust.IsAlertBoxClosed());
|
|
12
|
+
var ids=raw.split(',');
|
|
13
|
+
for(var i=0;i<ids.length;i++){if(ids[i]&&ids[i]!=='C0001'){decided=true;}}
|
|
14
|
+
return {analytics:groups.indexOf(',C0002,')>-1,marketing:groups.indexOf(',C0004,')>-1,decided:decided};
|
|
15
|
+
},
|
|
16
|
+
subscribe:function(read){
|
|
17
|
+
if(window.OneTrust.OnConsentChanged){window.OneTrust.OnConsentChanged(function(){read();});}
|
|
18
|
+
var previous=window.OptanonWrapper;
|
|
19
|
+
window.OptanonWrapper=function(){
|
|
20
|
+
if(typeof previous==='function'){previous();}
|
|
21
|
+
read();
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
open:function(){window.OneTrust.ToggleInfoDisplay();return true;}
|
|
25
|
+
},
|
|
26
|
+
cookiebot:{
|
|
27
|
+
ready:function(){return !!(window.Cookiebot&&window.Cookiebot.consent);},
|
|
28
|
+
read:function(){
|
|
29
|
+
var cb=window.Cookiebot;
|
|
30
|
+
return {analytics:cb.consent.statistics===true,marketing:cb.consent.marketing===true,decided:cb.consented===true||cb.declined===true};
|
|
31
|
+
},
|
|
32
|
+
subscribe:function(read){
|
|
33
|
+
var events=['CookiebotOnConsentReady','CookiebotOnAccept','CookiebotOnDecline'];
|
|
34
|
+
for(var i=0;i<events.length;i++){window.addEventListener(events[i],function(){read();});}
|
|
35
|
+
},
|
|
36
|
+
open:function(){window.Cookiebot.renew();return true;}
|
|
37
|
+
},
|
|
38
|
+
trustarc:{
|
|
39
|
+
ready:function(){return !!(window.truste&&window.truste.cma&&typeof window.truste.cma.callApi==='function');},
|
|
40
|
+
read:function(){
|
|
41
|
+
var d=window.truste.cma.callApi('getConsentDecision',window.location.host)||{};
|
|
42
|
+
var buckets=d.consentDecision||[];
|
|
43
|
+
var decided=d.source==='asserted';
|
|
44
|
+
for(var i=0;i<buckets.length;i++){if(buckets[i]!==0){decided=true;}}
|
|
45
|
+
return {analytics:buckets.indexOf(2)>-1,marketing:buckets.indexOf(3)>-1,decided:decided};
|
|
46
|
+
},
|
|
47
|
+
subscribe:function(read){
|
|
48
|
+
window.addEventListener('message',function(event){
|
|
49
|
+
if(typeof event.data!=='string'||event.data.indexOf('PrivacyManager:')!==0){return;}
|
|
50
|
+
var payload=null;
|
|
51
|
+
try{payload=JSON.parse(event.data.slice('PrivacyManager:'.length));}catch(e){return;}
|
|
52
|
+
if(payload&&payload.source==='preference_manager'&&payload.message==='submit_preferences'){read();}
|
|
53
|
+
});
|
|
54
|
+
window.addEventListener('load',function(){read();});
|
|
55
|
+
},
|
|
56
|
+
open:function(){
|
|
57
|
+
if(!window.truste.eu||typeof window.truste.eu.clickListener!=='function'){return false;}
|
|
58
|
+
window.truste.eu.clickListener();return true;
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
tcf:{
|
|
62
|
+
ready:function(){return typeof window.__tcfapi==='function';},
|
|
63
|
+
read:function(){return tcfState;},
|
|
64
|
+
subscribe:function(read){
|
|
65
|
+
window.__tcfapi('addEventListener',2,function(tcData,success){
|
|
66
|
+
if(!success||!tcData){return;}
|
|
67
|
+
if(tcData.eventStatus!=='tcloaded'&&tcData.eventStatus!=='useractioncomplete'){return;}
|
|
68
|
+
var consents=(tcData.purpose&&tcData.purpose.consents)||{};
|
|
69
|
+
var base=consents[1]===true;
|
|
70
|
+
tcfState={
|
|
71
|
+
analytics:base&&(consents[8]===true||consents[9]===true||consents[10]===true),
|
|
72
|
+
marketing:base&&(consents[2]===true||consents[3]===true||consents[4]===true),
|
|
73
|
+
decided:true
|
|
74
|
+
};
|
|
75
|
+
read();
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
open:function(){
|
|
79
|
+
if(window.Didomi&&window.Didomi.preferences&&typeof window.Didomi.preferences.show==='function'){window.Didomi.preferences.show();return true;}
|
|
80
|
+
if(window.UC_UI&&typeof window.UC_UI.showSecondLayer==='function'){window.UC_UI.showSecondLayer();return true;}
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
var adapter=adapters[cfg.mode]||null;
|
|
86
|
+
function readCookie(){
|
|
87
|
+
var m=document.cookie.match(/(?:^|; )redocly_consent=([^;]*)/);
|
|
88
|
+
if(!m){return null;}
|
|
89
|
+
try{return JSON.parse(decodeURIComponent(m[1]));}catch(e){return null;}
|
|
90
|
+
}
|
|
91
|
+
function writeCookie(s){
|
|
92
|
+
var v=encodeURIComponent(JSON.stringify({v:1,analytics:s.analytics,marketing:s.marketing,ts:Date.now()}));
|
|
93
|
+
document.cookie=COOKIE+'='+v+'; Max-Age='+(cfg.expires*86400)+'; Path=/; SameSite=Lax'+(location.protocol==='https:'?'; Secure':'');
|
|
94
|
+
}
|
|
95
|
+
function detectRegion(){
|
|
96
|
+
var tz=null;
|
|
97
|
+
try{tz=Intl.DateTimeFormat().resolvedOptions().timeZone||null;}catch(e){}
|
|
98
|
+
if(!tz){return {mode:null,source:'none',timeZone:null};}
|
|
99
|
+
var slash=tz.indexOf('/');
|
|
100
|
+
var group=slash===-1?'':tz.slice(0,slash);
|
|
101
|
+
var rest=slash===-1?tz:tz.slice(slash+1);
|
|
102
|
+
var zones=Object.prototype.hasOwnProperty.call(cfg.optOut,group)?cfg.optOut[group]:[];
|
|
103
|
+
if(zones.indexOf(rest)>-1){return {mode:'opt-out',source:'timezone',timeZone:tz};}
|
|
104
|
+
return {mode:'opt-in',source:'timezone',timeZone:tz};
|
|
105
|
+
}
|
|
106
|
+
var region=adapter?{mode:cfg.mode,source:'provider',timeZone:null}:(cfg.mode==='auto'?detectRegion():{mode:cfg.mode,source:'config',timeZone:null});
|
|
107
|
+
var mode=region.mode||'opt-in';
|
|
108
|
+
var gpc=navigator.globalPrivacyControl===true;
|
|
109
|
+
var saved=adapter?null:readCookie();
|
|
110
|
+
var state={necessary:true,analytics:mode==='opt-out',marketing:mode==='opt-out'&&!gpc};
|
|
111
|
+
if(saved){state.analytics=!!saved.analytics;state.marketing=!!saved.marketing&&!gpc;}
|
|
112
|
+
var listeners=[];
|
|
113
|
+
function emit(name){
|
|
114
|
+
var snapshot={necessary:true,analytics:state.analytics,marketing:state.marketing};
|
|
115
|
+
for(var i=0;i<listeners.length;i++){if(listeners[i].name===name){try{listeners[i].fn(snapshot);}catch(e){}}}
|
|
116
|
+
}
|
|
117
|
+
function gtagConsent(command){
|
|
118
|
+
if(adapter){return;}
|
|
119
|
+
window[cfg.dataLayer]=window[cfg.dataLayer]||[];
|
|
120
|
+
var a=state.analytics?'granted':'denied';
|
|
121
|
+
var m=state.marketing?'granted':'denied';
|
|
122
|
+
window[cfg.dataLayer].push(makeArgs(['consent',command,{analytics_storage:a,ad_storage:m,ad_user_data:m,ad_personalization:m}]));
|
|
123
|
+
}
|
|
124
|
+
function makeArgs(list){
|
|
125
|
+
return (function(){return arguments;}).apply(null,list);
|
|
126
|
+
}
|
|
127
|
+
function activate(){
|
|
128
|
+
var nodes=document.querySelectorAll('script[type="text/plain"][data-consent]');
|
|
129
|
+
for(var i=0;i<nodes.length;i++){
|
|
130
|
+
var node=nodes[i];
|
|
131
|
+
var category=node.getAttribute('data-consent');
|
|
132
|
+
if(!state[category]||node.getAttribute('data-consent-loaded')){continue;}
|
|
133
|
+
var script=document.createElement('script');
|
|
134
|
+
for(var j=0;j<node.attributes.length;j++){
|
|
135
|
+
var attr=node.attributes[j];
|
|
136
|
+
if(attr.name==='type'||attr.name==='data-consent'||attr.name==='data-consent-type'){continue;}
|
|
137
|
+
script.setAttribute(attr.name,attr.value);
|
|
138
|
+
}
|
|
139
|
+
if(!node.hasAttribute('async')){script.async=false;}
|
|
140
|
+
if(typeof node.nonce==='string'&&node.nonce){script.nonce=node.nonce;}
|
|
141
|
+
var originalType=node.getAttribute('data-consent-type');
|
|
142
|
+
if(originalType){script.setAttribute('type',originalType);}
|
|
143
|
+
if(!node.getAttribute('src')){script.text=node.text;}
|
|
144
|
+
node.setAttribute('data-consent-loaded','true');
|
|
145
|
+
node.parentNode.insertBefore(script,node.nextSibling);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function close(){
|
|
149
|
+
api.dialogOpen=false;
|
|
150
|
+
emit('close');
|
|
151
|
+
}
|
|
152
|
+
function save(next){
|
|
153
|
+
if(adapter){console.warn('Consent is managed by '+cfg.mode+'.');return;}
|
|
154
|
+
var revoked=!!next&&((state.analytics&&next.analytics===false)||(state.marketing&&next.marketing===false));
|
|
155
|
+
if(next&&typeof next.analytics==='boolean'){state.analytics=next.analytics;}
|
|
156
|
+
if(next&&typeof next.marketing==='boolean'){state.marketing=next.marketing&&!gpc;}
|
|
157
|
+
writeCookie(state);
|
|
158
|
+
api.decided=true;
|
|
159
|
+
api.state={necessary:true,analytics:state.analytics,marketing:state.marketing};
|
|
160
|
+
gtagConsent('update');
|
|
161
|
+
activate();
|
|
162
|
+
emit('change');
|
|
163
|
+
close();
|
|
164
|
+
if(revoked){api.reload();}
|
|
165
|
+
}
|
|
166
|
+
function applyProvider(next){
|
|
167
|
+
if(!next){return;}
|
|
168
|
+
var analytics=!!next.analytics;
|
|
169
|
+
var marketing=!!next.marketing&&!gpc;
|
|
170
|
+
var decided=api.decided||!!next.decided;
|
|
171
|
+
var changed=analytics!==state.analytics||marketing!==state.marketing||decided!==api.decided;
|
|
172
|
+
state.analytics=analytics;
|
|
173
|
+
state.marketing=marketing;
|
|
174
|
+
api.decided=decided;
|
|
175
|
+
api.state={necessary:true,analytics:analytics,marketing:marketing};
|
|
176
|
+
activate();
|
|
177
|
+
if(changed){emit('change');}
|
|
178
|
+
}
|
|
179
|
+
function readProvider(){
|
|
180
|
+
applyProvider(adapter.read());
|
|
181
|
+
}
|
|
182
|
+
function listenProvider(){
|
|
183
|
+
adapter.subscribe(readProvider);
|
|
184
|
+
readProvider();
|
|
185
|
+
}
|
|
186
|
+
function startProvider(){
|
|
187
|
+
if(adapter.ready()){listenProvider();return;}
|
|
188
|
+
var waited=0;
|
|
189
|
+
var timer=setInterval(function(){
|
|
190
|
+
if(adapter.ready()){clearInterval(timer);listenProvider();return;}
|
|
191
|
+
waited+=250;
|
|
192
|
+
if(waited>=15000){
|
|
193
|
+
clearInterval(timer);
|
|
194
|
+
console.warn('Consent provider '+cfg.mode+' did not load. Analytics stays off.');
|
|
195
|
+
}
|
|
196
|
+
},250);
|
|
197
|
+
}
|
|
198
|
+
var api={
|
|
199
|
+
configuredMode:cfg.mode,
|
|
200
|
+
mode:mode,
|
|
201
|
+
state:{necessary:true,analytics:state.analytics,marketing:state.marketing},
|
|
202
|
+
decided:!!saved,
|
|
203
|
+
gpc:gpc,
|
|
204
|
+
dialogOpen:false,
|
|
205
|
+
region:{source:region.source,timeZone:region.timeZone},
|
|
206
|
+
accept:function(){save({analytics:true,marketing:true});},
|
|
207
|
+
reject:function(){save({analytics:false,marketing:false});},
|
|
208
|
+
save:save,
|
|
209
|
+
open:function(){
|
|
210
|
+
if(adapter){
|
|
211
|
+
if(!adapter.ready()){console.warn('Consent provider '+cfg.mode+' is not loaded yet.');return;}
|
|
212
|
+
if(adapter.open()===false){console.warn('Consent provider '+cfg.mode+' has no preference center hook. Add your own trigger.');}
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
api.dialogOpen=true;emit('open');
|
|
216
|
+
},
|
|
217
|
+
close:close,
|
|
218
|
+
reload:function(){window.location.reload();},
|
|
219
|
+
on:function(name,fn){
|
|
220
|
+
var entry={name:name,fn:fn};
|
|
221
|
+
listeners.push(entry);
|
|
222
|
+
return function(){var i=listeners.indexOf(entry);if(i>-1){listeners.splice(i,1);}};
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
window.redocly=window.redocly||{};
|
|
226
|
+
window.redocly.consent=api;
|
|
227
|
+
gtagConsent('default');
|
|
228
|
+
if(adapter){startProvider();}
|
|
229
|
+
if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',activate);}else{activate();}
|
|
230
|
+
})();`}export{c as buildConsentScript};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { JSX } from 'react';
|
|
2
|
+
import type { ConsentConfig } from '@redocly/config';
|
|
3
|
+
export type GatedConsentCategory = 'analytics' | 'marketing';
|
|
4
|
+
export declare function gateSsrComponents(components: JSX.Element[], category: GatedConsentCategory, consent?: ConsentConfig): JSX.Element[];
|
|
5
|
+
//# sourceMappingURL=gate-ssr-components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"react";import{isConsentEnabled as i}from"./is-consent-enabled.js";function c(r,p,o){return i(o)?r.filter(t=>t.type!=="noscript").map(t=>{if(t.type!=="script")return t;const n=t.props.type;return e.cloneElement(t,{type:"text/plain","data-consent":p,...n?{"data-consent-type":n}:{}})}):r}export{c as gateSsrComponents};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import r from"react";import{buildConsentScript as a}from"./build-consent-script.js";import{isConsentEnabled as s}from"./is-consent-enabled.js";async function d(){return{id:"Consent",async processContent(n){const t=n.getConfig(),e=t?.consent;if(!s(e))return;const o=t?.analytics?.gtm?.dataLayerName||"dataLayer";n.addSsrComponents([r.createElement("script",{key:"redocly-consent",dangerouslySetInnerHTML:{__html:a(e,{dataLayerName:o})}})],"head")}}}export{d as consentPlugin};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ConsentConfig } from '@redocly/config';
|
|
2
|
+
export declare const PROVIDER_MODES: readonly ['onetrust', 'cookiebot', 'trustarc', 'tcf'];
|
|
3
|
+
export type ConsentProviderMode = (typeof PROVIDER_MODES)[number];
|
|
4
|
+
export declare function isConsentEnabled(consent?: ConsentConfig): consent is ConsentConfig & {
|
|
5
|
+
mode: 'auto' | 'opt-in' | 'opt-out' | ConsentProviderMode;
|
|
6
|
+
};
|
|
7
|
+
export declare function isProviderMode(mode?: ConsentConfig['mode']): mode is ConsentProviderMode;
|
|
8
|
+
//# sourceMappingURL=is-consent-enabled.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=["onetrust","cookiebot","trustarc","tcf"];function t(o){return!!o?.mode&&o?.mode!=="none"}function n(o){return e.includes(o)}export{e as PROVIDER_MODES,t as isConsentEnabled,n as isProviderMode};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type ZoneMode = 'opt-in' | 'opt-out';
|
|
2
|
+
export declare function resolveZoneMode(zone: string): ZoneMode | undefined;
|
|
3
|
+
export declare function buildZoneModes(): {
|
|
4
|
+
optIn: string[];
|
|
5
|
+
optOut: string[];
|
|
6
|
+
};
|
|
7
|
+
export declare function groupZones(zones: string[]): Record<string, string[]>;
|
|
8
|
+
//# sourceMappingURL=zone-modes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{OPT_IN_COUNTRIES as c,TZ_COUNTRIES as s}from"../../constants/plugins/consent.js";function p(e){const t=s[e];if(!(!t||t.length===0))return t.some(o=>c.has(o))?"opt-in":"opt-out"}function f(){const e=[],t=[];for(const o of Object.keys(s)){const n=p(o);n==="opt-in"&&e.push(o),n==="opt-out"&&t.push(o)}return{optIn:e,optOut:t}}function d(e){const t={};for(const o of e){const n=o.indexOf("/"),r=n===-1?"":o.slice(0,n),u=n===-1?o:o.slice(n+1);(t[r]||=[]).push(u)}return t}export{f as buildZoneModes,d as groupZones,p as resolveZoneMode};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{DEFAULT_ANONYMOUS_VISITOR_TEAM as c,DEFAULT_AUTHENTICATED_TEAM as
|
|
1
|
+
import{DEFAULT_ANONYMOUS_VISITOR_TEAM as c,DEFAULT_AUTHENTICATED_TEAM as f}from"../../../constants/common.js";function i(e){if(/\s/.test(e))return!1;const t=e.indexOf("@",1);return t!==-1&&e.slice(t+2,-1).includes(".")}function u(e){const t=[];if(!e?.content)return t;const n=Object.values(e.content);for(const s of n){const r=Object.keys(s);t.push(...r)}const o=t.filter(s=>s!==c&&s!==f&&!i(s));return Array.from(new Set(o))}export{u as extractTeamNames};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import*as e from"react";import
|
|
1
|
+
import*as e from"react";import i from"styled-components";import{useQuery as v}from"@tanstack/react-query";import{useParams as x}from"react-router";import{Box as y,Flex as E}from"@redocly/portal-legacy-ui";import{Admonition as A}from"@redocly/theme/markdoc/components/Admonition/Admonition";import{useTabList as w}from"@redocly/theme/core/hooks";import{useTranslate as T}from"../../../../client/app/hooks";import C from"../../../../client/app/CircularProgress";import{Container as P}from"./components/Container";import k from"./components/AppOverview";import I from"./components/ApiKeys";import L from"./components/ApiLogs";import _ from"./components/CreateApiKey";import{Description as B}from"./components/Description";import{CallbackUrl as K}from"./components/CallbackUrl";const S="app-tab-actions-portal",p="api_keys",z="logs";function D(U){const{id:s}=x(),{isLoading:m,error:l,data:t}=v({queryKey:["APP:"+s],queryFn:()=>fetch(`/api/api-keys/apps/${s}`).then(a=>a.json())}),{translate:c}=T(),d=a=>r.findIndex(o=>o.id===a),r=[{id:p,name:c("dev.main.tab.appKeys","API keys"),content:e.createElement(e.Fragment,null,e.createElement(I,{credentials:t?.credentials,attributes:t?.attributes}),e.createElement(B,{text:t?.description}),t?.callbackUrl!==void 0&&e.createElement(K,{text:t.callbackUrl})),show:!0},{id:z,name:c("dev.main.tab.logs","Logs"),content:e.createElement(L,null),show:!!t?.supportsLogs}].filter(a=>a.show),[n,g]=e.useState(0),{tabListProps:u,getTabProps:b,getTabPanelProps:f}=w({count:r.length,activeIndex:n,onChange:g}),h=t?.canCreateKey&&n===d(p);return e.createElement(y,{my:"2rem"},e.createElement(P,null,m?e.createElement(E,{justifyContent:"center",mt:"2em"},e.createElement(C,null)):l?e.createElement(A,{type:"danger"},l?.message??"Something went wrong"):t?e.createElement(e.Fragment,null,e.createElement(k,{app:t}),e.createElement(F,null,e.createElement(O,{...u},r.map(({name:a},o)=>e.createElement("span",{key:a,className:n===o?"active":"",...b(o)},a))),e.createElement("div",{id:S}),h&&e.createElement(_,{initialEnabledApis:(t.credentials||[]).flatMap(a=>a.apiProductIds||[])})),e.createElement(j,{...f(n)},r[n].content)):null))}const ae=i.i`
|
|
2
2
|
display: inline-block;
|
|
3
3
|
width: 12px;
|
|
4
4
|
height: 12px;
|
|
5
5
|
background-repeat: no-repeat;
|
|
6
6
|
background-size: 12px 12px;
|
|
7
7
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='black' viewBox='0 0 451.847 451.847' width='12px' height='12px' %3E%3Cpath d='M225.923 354.706c-8.098 0-16.195-3.092-22.369-9.263L9.27 151.157c-12.359-12.359-12.359-32.397 0-44.751 12.354-12.354 32.388-12.354 44.748 0l171.905 171.915 171.906-171.909c12.359-12.354 32.391-12.354 44.744 0 12.365 12.354 12.365 32.392 0 44.751L248.292 345.449c-6.177 6.172-14.274 9.257-22.369 9.257z' /%3E%3C/svg%3E");
|
|
8
|
-
`,
|
|
8
|
+
`,F=i.div`
|
|
9
9
|
display: flex;
|
|
10
10
|
justify-content: space-between;
|
|
11
11
|
align-items: end;
|
|
12
|
-
`,
|
|
12
|
+
`,O=i.div`
|
|
13
13
|
display: flex;
|
|
14
14
|
align-items: center;
|
|
15
15
|
height: 42px;
|
|
@@ -27,6 +27,6 @@ import*as e from"react";import a from"styled-components";import{useQuery as f}fr
|
|
|
27
27
|
> span.active {
|
|
28
28
|
border-bottom: 2px solid var(--border-color-primary);
|
|
29
29
|
}
|
|
30
|
-
`,
|
|
30
|
+
`,j=i.div`
|
|
31
31
|
margin-top: var(--spacing-base);
|
|
32
|
-
`;export{
|
|
32
|
+
`;export{ae as ArrowIcon,S as TAB_ACTIONS_PORTAL_ID,D as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import*as t from"react";import
|
|
1
|
+
import*as t from"react";import a from"styled-components";import{Flex as l}from"@redocly/portal-legacy-ui";import{WarningAltIcon as n}from"@redocly/theme/icons/WarningAltIcon/WarningAltIcon";import s from"./ApiKeyRow";import c from"./CreatedAtRow";import m from"./ExpiresAtRow";import p from"./RevokeAPIKey";import d from"./RollAPIKey";import x from"./SecretRow";import f from"./StageRow";import u from"./StatusRow";function g(r){const{apiKey:e}=r,[i]=t.useState(()=>Date.now()),o=Number(e.expiresAt)>0&&Math.abs(Number(e.expiresAt)-i)<1440*60*1e3;return t.createElement(l,{flexDirection:"column",flexGrow:1},o&&t.createElement(E,null,t.createElement("div",null,"Expires soon"),t.createElement(n,{size:"24px",color:"#C8102E"})),t.createElement(v,{borderColor:o?"var(--color-error-border)":e.stage==="production"?"var(--color-success-border)":""},e.stage&&t.createElement(f,{stage:e.stage})||null,e.clientId&&t.createElement(s,{apiKey:e.clientId})||null,e.clientSecret&&t.createElement(x,{secret:e.clientSecret,hasClientId:!!e.clientId})||null,e.status&&t.createElement(u,{status:e.status})||null,t.createElement(c,{createdAt:e.issuedAt}),t.createElement(m,{expiresAt:e.expiresAt,expiresSoon:o})),e.canBeRolled&&t.createElement(d,{apiKey:e}),e.canBeRevoked&&t.createElement(p,{apiKey:e}))}const v=a.div`
|
|
2
2
|
display: flex;
|
|
3
3
|
flex-direction: column;
|
|
4
4
|
|
|
@@ -9,7 +9,7 @@ import*as t from"react";import i from"styled-components";import{Flex as a}from"@
|
|
|
9
9
|
> :not(:last-child) {
|
|
10
10
|
border-bottom: 1px solid var(--border-color-primary);
|
|
11
11
|
}
|
|
12
|
-
`,
|
|
12
|
+
`,E=a.div`
|
|
13
13
|
display: flex;
|
|
14
14
|
gap: var(--spacing-xs);
|
|
15
15
|
font-weight: var(--font-weight-regular);
|
|
@@ -20,4 +20,4 @@ import*as t from"react";import i from"styled-components";import{Flex as a}from"@
|
|
|
20
20
|
width: 18px;
|
|
21
21
|
height: 18px;
|
|
22
22
|
}
|
|
23
|
-
`;export{
|
|
23
|
+
`;export{g as default};
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import type { RedoclyConfig } from '@redocly/config';
|
|
2
2
|
type RouteReservationRule = {
|
|
3
3
|
slug: string;
|
|
4
|
-
isEnabled: (config
|
|
4
|
+
isEnabled: (config: RedoclyConfig) => boolean;
|
|
5
5
|
};
|
|
6
6
|
export declare const RESERVED_ROUTES: {
|
|
7
7
|
mcp: string;
|
|
8
|
+
mcpPublic: string;
|
|
8
9
|
};
|
|
9
10
|
/**
|
|
10
11
|
* Checks if a given route slug is reserved based on configuration.
|
|
11
|
-
* A route is considered reserved if
|
|
12
|
+
* A route is considered reserved if a rule for it is enabled, meaning the system serves
|
|
13
|
+
* that slug: content pages cannot use it, and links to it resolve.
|
|
12
14
|
*
|
|
13
15
|
* @param slug - The route slug to check
|
|
14
16
|
* @param config - The Redocly configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{EntitlementsProvider as
|
|
1
|
+
import{MCP_ROUTE as i,PUBLIC_MCP_ROUTE as r}from"@redocly/theme/core/constants/mcp";import{EntitlementsProvider as m}from"../entitlements/entitlements-provider.js";import{getPublicMcpEndpointStatus as p}from"./mcp/utils/public-endpoint.js";const t={mcp:i,mcpPublic:r};function s(){return!!m.instance().canAccessFeature("mcp")}const E=[{slug:t.mcp,isEnabled:e=>!e?.mcp?.hide&&!e?.mcp?.docs?.hide&&s()},{slug:t.mcpPublic,isEnabled:e=>s()&&p(e)==="served"}];function l(e,n,o=[]){return[...E,...o].some(c=>c.slug===e&&c.isEnabled(n))}export{t as RESERVED_ROUTES,l as isRouteReserved};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import g from"path";import{DEFAULT_LOCALE_PLACEHOLDER as d,TRANSLATIONS_FILE_NAME as h}from"../../../constants/common.js";import{I18N_DIR_NAME as y,L10N_DIR_NAME as A}from"../../constants/common.js";import{logger as m}from"../../tools/notifiers/logger.js";import{reporter as w}from"../../tools/notifiers/reporter.js";import{EntitlementsProvider as O}from"../../entitlements/entitlements-provider.js";import{isL10nPath as E}from"../../fs/utils/is-l10n-path.js";import{isOpenapiDoc as I}from"../api-docs/utils/is-api-doc.js";import{telemetryTraceStep as N}from"../../../cli/telemetry/helpers/trace-step.js";async function $(){return{id:"l10n",async processContent(n,i){await N("com.redocly.build.plugin.l10n",async a=>{const{fs:t,cache:c,getConfig:r}=i,e={},p=O.instance(),l=await r();a?.setAttribute("config",JSON.stringify(l.l10n||{}));const s=l.l10n?.defaultLocale||d;if(p.canAccessFeature("l10n")){await F(i);for(const{relativePath:o}of t.scan(/(
|
|
1
|
+
import g from"path";import{DEFAULT_LOCALE_PLACEHOLDER as d,TRANSLATIONS_FILE_NAME as h}from"../../../constants/common.js";import{I18N_DIR_NAME as y,L10N_DIR_NAME as A}from"../../constants/common.js";import{logger as m}from"../../tools/notifiers/logger.js";import{reporter as w}from"../../tools/notifiers/reporter.js";import{EntitlementsProvider as O}from"../../entitlements/entitlements-provider.js";import{isL10nPath as E}from"../../fs/utils/is-l10n-path.js";import{isOpenapiDoc as I}from"../api-docs/utils/is-api-doc.js";import{telemetryTraceStep as N}from"../../../cli/telemetry/helpers/trace-step.js";async function $(){return{id:"l10n",async processContent(n,i){await N("com.redocly.build.plugin.l10n",async a=>{const{fs:t,cache:c,getConfig:r}=i,e={},p=O.instance(),l=await r();a?.setAttribute("config",JSON.stringify(l.l10n||{}));const s=l.l10n?.defaultLocale||d;if(p.canAccessFeature("l10n")){await F(i);for(const{relativePath:o}of t.scan(/(?:^|[/\\])translations\.yaml$/)){const u=await c.load(o,"yaml"),L=P(o)||s;e[L]={translation:u.data||{}}}}e[s]={translation:{...e[s]?.translation||{}}};const f=l.l10n?.locales||[d,...t.localeFolders].map(o=>({code:o.toLowerCase(),name:o}));a?.setAttribute("locales",JSON.stringify(f)),n.setGlobalData({l10n:{translations:e,defaultLocale:s,locales:f.map(o=>({code:o.code,name:o.name||o.code}))}})})}}}function P(n){return n.indexOf("/")>0?n.split("/")[1]:void 0}async function F(n){const i=n.fs.scan();for(const{isVirtual:a,realRelativePath:t}of i){if(a)continue;if(E(t)&&t.endsWith(".page.tsx")&&await w.panicOnBuild(`The file %rp is not allowed in ${A} or ${y} folders`,t),g.posix.basename(t)===h){const r=/^(?:@(i18n|l10n)[/\\][^/\\]+[/\\])?translations\.yaml$/.test(t),e=await I(t,n);!r&&!e&&m.warn("The file %rp is in the wrong location. Make sure it is located in the root directory or in the locale root directory.",t),r&&e&&m.warn("It looks like the file %rp might be an OpenAPI definition and is located in a location reserved for translation files. Please rename it or move to another directory if it is not a translations file",t)}}}export{$ as l10nPlugin};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import B from"@redocly/portal-plugin-mock-server";import{REDOCLY_ROUTE_RBAC as x}from"@redocly/config";import{combineUrls as E,withPathPrefix as L}from"@redocly/theme/core/utils";import{VERSION_SEPARATOR as k}from"../constants/common.js";import{removeTrailingSlash as N}from"../../utils/url/remove-trailing-slash.js";import{removeLeadingSlash as j}from"../../utils/url/remove-leading-slash.js";import{isTruthy as $}from"../../utils/guards/is-truthy.js";import{normalizeRouteSlug as D}from"../../utils/path/normalize-route-slug.js";import{parsePathVersions as V}from"../../utils/path/parse-path-versions.js";import{reporter as v}from"../tools/notifiers/reporter.js";import{logger as P}from"../tools/notifiers/logger.js";import{envConfig as S}from"../config/env-config.js";import{shaDirPathShort as M}from"../utils/crypto/sha-dir-path-short.js";import{writeServerRebuildTrigger as _,generateBrowserPluginsModule as q,generateClientRoutes as z,generateTemplatesModule as H}from"../esbuild/generate.js";import{customPagesPlugin as U}from"../../server/plugins/pages/index.js";import{apiDocsPlugin as G}from"../../server/plugins/api-docs/index.js";import{configParserPlugin as I}from"./config-parser/index.js";import{createSlugify as W}from"./create-slugify.js";import{markdownPlugin as K}from"./markdown/index.js";import{searchPlugin as Y}from"./search/index.js";import{skillsPlugin as J}from"./skills/index.js";import{defaultThemePlugin as Q}from"./default-theme/index.js";import{apiKeyMgmtPlugin as X}from"./dev-onboarding/index.js";import{apiFunctionsPlugin as Z}from"./api-functions/index.js";import{scorecardClassicPlugin as ee}from"./scorecard-classic/index.js";import{lintPlugin as te}from"./lint/index.js";import{resolveExternalPlugins as oe}from"../external-plugins/resolve-external-plugins.js";import{sidebarsPlugin as ie}from"./sidebars/index.js";import{l10nPlugin as re}from"./l10n/index.js";import{validateRedirects as ne}from"../utils/redirects/validate-redirects.js";import{analyticsPlugins as se}from"./analytics/index.js";import{
|
|
2
|
-
`+l.stack;
|
|
1
|
+
import B from"@redocly/portal-plugin-mock-server";import{REDOCLY_ROUTE_RBAC as x}from"@redocly/config";import{combineUrls as E,withPathPrefix as L}from"@redocly/theme/core/utils";import{VERSION_SEPARATOR as k}from"../constants/common.js";import{removeTrailingSlash as N}from"../../utils/url/remove-trailing-slash.js";import{removeLeadingSlash as j}from"../../utils/url/remove-leading-slash.js";import{isTruthy as $}from"../../utils/guards/is-truthy.js";import{normalizeRouteSlug as D}from"../../utils/path/normalize-route-slug.js";import{parsePathVersions as V}from"../../utils/path/parse-path-versions.js";import{reporter as v}from"../tools/notifiers/reporter.js";import{logger as P}from"../tools/notifiers/logger.js";import{envConfig as S}from"../config/env-config.js";import{shaDirPathShort as M}from"../utils/crypto/sha-dir-path-short.js";import{writeServerRebuildTrigger as _,generateBrowserPluginsModule as q,generateClientRoutes as z,generateTemplatesModule as H}from"../esbuild/generate.js";import{customPagesPlugin as U}from"../../server/plugins/pages/index.js";import{apiDocsPlugin as G}from"../../server/plugins/api-docs/index.js";import{configParserPlugin as I}from"./config-parser/index.js";import{createSlugify as W}from"./create-slugify.js";import{markdownPlugin as K}from"./markdown/index.js";import{searchPlugin as Y}from"./search/index.js";import{skillsPlugin as J}from"./skills/index.js";import{defaultThemePlugin as Q}from"./default-theme/index.js";import{apiKeyMgmtPlugin as X}from"./dev-onboarding/index.js";import{apiFunctionsPlugin as Z}from"./api-functions/index.js";import{scorecardClassicPlugin as ee}from"./scorecard-classic/index.js";import{lintPlugin as te}from"./lint/index.js";import{resolveExternalPlugins as oe}from"../external-plugins/resolve-external-plugins.js";import{sidebarsPlugin as ie}from"./sidebars/index.js";import{l10nPlugin as re}from"./l10n/index.js";import{validateRedirects as ne}from"../utils/redirects/validate-redirects.js";import{analyticsPlugins as se}from"./analytics/index.js";import{consentPlugin as ae}from"./consent/index.js";import{sitemapPlugin as le}from"./sitemap/index.js";import{entitlementsPlugin as ce}from"./entitlements/index.js";import{getBilledPagesCount as ue}from"../utils/index.js";import{telemetry as fe}from"../../cli/telemetry/index.js";import{telemetryTraceStep as b}from"../../cli/telemetry/helpers/trace-step.js";import{EntitlementsProvider as A}from"../entitlements/entitlements-provider.js";import{enforceLoginPlugin as me}from"./enforce-login/index.js";import{ssoPlugin as de}from"./sso/index.js";import{Cache as ge}from"../fs/cache.js";import{ContentFs as pe}from"../fs/content-fs.js";import{findProductBySlug as Pe}from"../utils/product.js";import{isRouteReserved as ye}from"./get-reserved-routes.js";import{catalogClassicPlugin as he}from"./catalog-classic/index.js";import{arazzoDocsPlugin as Re}from"./arazzo-docs/index.js";const Ce=[I,me,de,Q,re,K,G,Re,ee,te,Z,U,X,he,{importPath:"./catalog-entities/plugin.js",loadCondition:()=>S.NEW_CATALOG_ENABLED??!1},{importPath:"./scorecards/plugin.js",loadCondition:()=>S.NEW_SCORECARDS_ENABLED??!1},{importPath:"./mcp/index.js",loadCondition:()=>A.instance().canAccessFeature("mcp")},ie,le,ce,Y,J,B,ae,...se];async function Pt(t,e=Ce){return await b("com.redocly.build.pluginsInit",async()=>{const r=[],R=A.instance(),y={};for(const s of e){let u;if("loadCondition"in s){if(!s.loadCondition())continue;const i=await import(s.importPath);if(!i.default||typeof i.default!="function"){await v.panicOnBuild(`Dynamic plugin ${s.importPath} does not export a default export or it is not a function`);continue}u=i.default}else u=s;const h=await u(t);for(const[i,f]of Object.entries(h.loaders||{}))y[i]&&await v.panicOnBuild(`Duplicate loader with name ${i}`),y[i]=f;(!h.requiredEntitlements||h.requiredEntitlements?.every(i=>R.canAccessFeature(i)))&&r.push(h)}const l=new pe(t.contentDir);await l.ready;const c=new ge(l);return c.setLoaders(y),P.verbose("All plugins instantiated"),{pluginInstances:r,lifecycleContext:be(l,c)}})}function O(t){P.verbose("Generating templates"),b("com.redocly.build.writeClientEntries",()=>{H(t),q(t),z(t)})}async function ve(t){const e=t.getAllRoutes();ue(e)||await v.panicOnBuild("No routes created by plugins. Please check your project configuration.")}async function yt(t,e,r,R={}){const y=A.instance();try{await b("com.redocly.build.pluginsRun",async()=>{e.startPluginsRun();const l=S.isDevelopMode&&e.buildRevision>0,c=l?F(e):"";let s=[];await b("com.redocly.build.pluginsProcessContent",async i=>{for(const o of t){const a=P.startTiming();await o.processContent?.(e,r),P.verboseTime(a,`processContent for ${o.id}`)}s=(await oe(e.contentDir,e.config.plugins)).map(o=>o.lifecyclePlugin).filter(o=>$(o)&&(!o.requiredEntitlements||o.requiredEntitlements?.every(a=>y.canAccessFeature(a)))),r.cache.setLoaders(Object.fromEntries(s.flatMap(o=>Object.entries(o.loaders||{}))));for(const o of s){const a=P.startTiming();await o.processContent?.(e,r),P.verboseTime(a,`processContent for ${o.id}`)}i?.setAttribute("externalPluginsProcessed",s.length.toString())});const u=await we(e,r),h=[...t,...s];O(e),S.isDevelopMode?await e.userCodeReady:e.buildRevision++,await b("com.redocly.build.pluginsAfterRoutesCreated",async()=>{for(const i of h){const f=P.startTiming();await i.afterRoutesCreated?.(e,u),P.verboseTime(f,`afterRoutesCreated for ${i.id}`)}}),ne(e),await e.reportUnsetEnvVars(),await ve(e),O(e),l&&c!==F(e)&&(e.markRequestHandlersEntryOutdated(),_(e.serverOutDir))})}catch(l){const c="Unhandled error in plugin. "+l.message+`
|
|
2
|
+
`+l.stack;fe.sendCliErrorCaughtMessage([{id:"cli",object:"error",uri:"urn:redocly:realm:cli:error:cli",message:c}]),R.failFast?await v.panic(c):await v.panicOnBuild(c)}finally{e.finishPluginsRun()}}async function we(t,e){const{cache:r,fs:R}=e,y=await e.getConfig(),l=Object.values(y.products||{}),c=(await r.load("versions-config","versions-config")).data,s=(await r.load("content-slugs","content-slugs")).data,u=W(s);for(const{duplicateInAllLocales:i,slugSuffix:f,sharedData:o=[],redirectFrom:a=[],...d}of t.newRoutes){const w=D(d.slug?d.slug:u(d.fsPath)),g=N(f?E(w,f):w),n={...d,[x]:{slug:g,fsPath:d.fsPath},slug:g,baseSlug:w,versions:h(d.fsPath,f),product:Pe(l,g,u)};ye(g,y)&&await v.panicOnBuildContentError(`Route "${g}" is reserved and cannot be used. Please choose a different slug for "${d.fsPath}".`),t.routesByFsPath.set(n.fsPath,n.slug),t.routesBySlug.set(n.slug,n);for(const{key:p,id:m}of o)t.addRouteSharedData(n.slug,p,m);for(const p of a)t.addRedirect(p.from,{type:p.type,to:n.slug});if(i)for(const p of R.localeFolders){const m={...n,slug:"/"+p.toLowerCase()+n.slug};t.routesByFsPath.set(m.fsPath,m.slug),t.routesBySlug.set(m.slug,m);for(const{key:C,id:T}of o)t.addRouteSharedData(m.slug,C,T);for(const C of a){const T=E(R.localizationFolder,p,C.from);t.addRedirect(T,{type:C.type,to:m.slug},{trackOriginalSource:!1})}}}return t.newRoutes=[],{...e,slugify:u};function h(i,f=""){const o=V(i);if(!o?.versionName)return;const{versionFolderPath:a,filePathInVersion:d,versionName:w}=o,g=c.get(a);if(g)return g.versions.map(n=>{const p=g.defaultVersion===n.version,m=j(E(a,k+n.version,d)),C=u(m);return{version:n.version,label:n.name||n.version,link:D(E(C,f)),default:p,active:w===n.version,folderId:M(`${a}`)}})}}function be(t,e){return{fs:t,cache:e,getConfig:async(r=".")=>(await e.load(r,"nearest-redocly-config",t.localeFolders)).data,isPathIgnored:async r=>(await e.load(r,"is-ignored")).data,withPathPrefix:L,logger:P}}function F(t){return[...t.apiRoutesRequestHandlers.keys(),...t.getMcpTools().map(e=>`${e.name}:${e.importPath}`)].sort().join(",")}export{Ce as INTERNAL_PLUGINS,be as createLifecycleContext,Pt as initPlugins,yt as runPlugins,O as writeClientEntries};
|
|
@@ -4,6 +4,8 @@ export declare function getMarkdocOptions(serverOutDir?: string, _templateId?: s
|
|
|
4
4
|
heading: import("@markdoc/markdoc").Schema;
|
|
5
5
|
fence: import("@markdoc/markdoc").Schema;
|
|
6
6
|
table: import("@markdoc/markdoc").Schema;
|
|
7
|
+
td: import("@markdoc/markdoc").Schema;
|
|
8
|
+
th: import("@markdoc/markdoc").Schema;
|
|
7
9
|
text: import("@markdoc/markdoc").Schema;
|
|
8
10
|
strong: {
|
|
9
11
|
render?: string | undefined;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
${
|
|
3
|
-
`:"";let s=[];for(const t of o)if(t instanceof
|
|
4
|
-
`)};(t.attributes.level>1||
|
|
5
|
-
`:"",
|
|
6
|
-
`)});else{const a=t.parentNode?.id??
|
|
7
|
-
`:"",m.content+=t.content.trimEnd(),c.set(a,m)}const
|
|
8
|
-
`),fsPath:n.fsPath,locale:u,product:n.product?.name,facets:f}))}function
|
|
9
|
-
`+i.content:(o.push(e),e=i)}return o.push(e),o}function
|
|
1
|
+
import M from"@markdoc/markdoc";import D from"node:path";import{AI_SEARCH_CHUNK_SIZE as R,AI_SEARCH_DOCUMENT_CHUNK_SIZE as v}from"../../../constants/plugins/search.js";import{slugger as I}from"../../../../utils/slugger.js";import{joinSectionContent as N}from"./join-section-content.js";import{toMarkdown as P}from"./to-markdown.js";import{AstToSearchNodeTransformer as w}from"./walk-sections.js";import{createRenderTagFn as x}from"./create-render-tag-fn.js";import{getBuildTranslateContext as K}from"../../../utils/l10n/get-build-translate-context.js";import{getLocaleFromRelativePath as L}from"../../../fs/utils/get-locale-from-relative-path.js";import{HeadingNode as b}from"./nodes/heading-node.js";import{extractDocumentSearchFacets as U}from"./search-facets.js";import{formatDocumentMetadata as y}from"../../search/utils.js";import{TagNode as H}from"./nodes/tag-node.js";import{MARKDOC_PARTIALS_DATA_KEY as O}from"../../../constants/common.js";const j=Symbol(),at=(n,o)=>async(e,r,i,c)=>{if(o?.excludeFromSearch)return;I.reset();const l=await e.getNavText?.()||D.basename(e.fsPath),f=M.Ast.fromJSON(r.ast),{locale:g,translate:A}=await K(e.slug,c.getGlobalData?.().l10n),s=new w({partials:c.getGlobalConfig(O)||{},renderTag:x(c.markdocOptions.tags,g,A),getInnerContent:P,ast:f,skipConditionals:!0}),d=Array.from(s.transform());return{async getLLMsTxts(){const u=o?.seo,t=u&&typeof u=="object"&&"description"in u?String(u.description):void 0,a=N(d);return[{title:l,description:t,slug:e.slug,fsPath:e.fsPath,content:a,includeInLLMsTxt:!0}]},async getSearchDocuments(){return F(e,d,n,l)}}};function F(n,o,e,r){const i=n.slug,c=new Map,l=n.metadata||{},f=U(l,e),g=y(l),A=g?`Metadata:
|
|
2
|
+
${g}
|
|
3
|
+
`:"";let s=[];for(const t of o)if(t instanceof b){s.splice(t.attributes.level-1,6);const a=t.attributes.level>2,m=s[s.length-1]?.title,T=s[s.length-1]?.url,C=a&&m?m:W(r,t),S=a&&T?T:t.getUrl(i),p={title:C,content:"",url:S,level:t.attributes.level,toc:s.map(E=>h(E.section)).join(`
|
|
4
|
+
`)};(t.attributes.level>1||h(t)!==r)&&(p.content+=p.content?`
|
|
5
|
+
`:"",p.content+=t.content.trimEnd()),c.set(t.id,p),s.push({section:t,title:C,url:S})}else if(t instanceof H)c.set(t.id,{title:t.content,content:t.content,url:t.getUrl(i),level:t.attributes.level+1,toc:s.map(a=>h(a.section)).concat(t.content).join(`
|
|
6
|
+
`)});else{const a=t.parentNode?.id??j,m=c.get(a)??{title:r,content:"",url:i,level:1/0,toc:""};m.content+=m.content?`
|
|
7
|
+
`:"",m.content+=t.content.trimEnd(),c.set(a,m)}const d=$(Array.from(c.values())),u=L(n.fsPath);return d.filter(t=>t.content).map(t=>({title:t.title,url:t.url,content:[A,t.toc||`# ${r}`,t.content].filter(Boolean).join(`
|
|
8
|
+
`),fsPath:n.fsPath,locale:u,product:n.product?.name,facets:f}))}function _(n){return n.length/4}function $(n){if(n.length===0)return[];const o=[];let e=n[0];for(let r=1;r<n.length;r++){const i=n[r],c=_(e.content),l=_(i.content),f=r===n.length-1;l<R&&(c<v||f)&&i.level>e.level?e.content+=`
|
|
9
|
+
`+i.content:(o.push(e),e=i)}return o.push(e),o}const k=String.raw`\((?:[^()]|\([^()]*\))*\)`,G=new RegExp(String.raw`!\[[^\]]*\]`+k,"g"),z=new RegExp(String.raw`\[(?<!\[[^\]()]*?\[)([^\]]*)\]`+k,"g");function W(n,o){const e=h(o);return o.content===n||!e?n:`${n} \u2192 ${e}`}function h(n){return B(n.content.replace(/^#+/,""))}function B(n){return n.replace(G,"").replace(z,"$1").trim()}export{at as getAiDocumentsStore};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SectionNode, type SectionNodeParams } from './section-node.js';
|
|
2
|
-
export declare const TAG_TITLE_ATTRIBUTES: readonly ['title', '
|
|
2
|
+
export declare const TAG_TITLE_ATTRIBUTES: readonly ['title', 'name', 'label'];
|
|
3
3
|
declare const TagNode_base: typeof SectionNode;
|
|
4
4
|
export declare class TagNode extends TagNode_base {
|
|
5
5
|
constructor(params: SectionNodeParams);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{SectionNode as r,WithCounterId as o}from"./section-node.js";const i=["title","
|
|
1
|
+
import{SectionNode as r,WithCounterId as o}from"./section-node.js";const i=["title","name","label"];class s extends o(r){constructor(t){super(t)}getUrl(t){return this.parentNode?.getUrl(t)??t}getPath(t){let e=this.parentNode?.getPath(t);return e||(e=this.content?[this.content]:[]),e}}export{i as TAG_TITLE_ATTRIBUTES,s as TagNode};
|
|
@@ -14,7 +14,7 @@ import{isPrimitive as m}from"../../../../utils/guards/is-primitive.js";import{ge
|
|
|
14
14
|
\`\`\`${`${i||""}${l?`${i?" ":""}${l}`:""}`}
|
|
15
15
|
${n.trimEnd()}
|
|
16
16
|
\`\`\`
|
|
17
|
-
`;t.push(h)}continue}if(e.tag==="json-example"){const n=j(e);n&&t.push(n);continue}if(e.tag==="json-schema"){const n=S(e);n&&t.push(n);continue}if(r.renderTag){const n=r.renderTag(e,{getBody:()=>a(e.children,r)});if(n!==void 0){t.push(n);continue}}t.push(`${a(e.children,r)}`);break;default:t.push(a(e.children,r));break}else $(e)&&t.push(a(e.children,r));k(e)&&t.push(a([f(e,r.variables)],r))}return r.isTrim?d(t.map(e=>d(e)).join("")):t.join("")}function d(s){return s.replace(/^[ \t\r\f]+|[ \t\r\f]+$/g,"")}function u(s,r={},t=!1){const e=c(s,"title"),n=c(s,"language"),i=`${n||""}${e?`${n?" ":""}${e}`:""}`,l=t?(c(s,"content")||"").trimEnd():a(s.children,r).trimEnd();return`
|
|
17
|
+
`;t.push(h)}continue}if(e.tag==="json-example"){const n=j(e);n&&t.push(n);continue}if(e.tag==="json-schema"){const n=S(e);n&&t.push(n);continue}if(r.renderTag){const n=r.renderTag(e,{getBody:()=>a(e.children,r)});if(n!==void 0){t.push(n);continue}}t.push(`${a(e.children,r)}`);break;default:t.push(a(e.children,r));break}else $(e)&&t.push(a(e.children,r));k(e)&&t.push(a([f(e,r.variables)],r))}return r.isTrim?d(t.map(e=>d(e)).join("")):t.join("")}function d(s){return s.replace(/^[ \t\r\f]+|(?<![ \t\r\f])[ \t\r\f]+$/g,"")}function u(s,r={},t=!1){const e=c(s,"title"),n=c(s,"language"),i=`${n||""}${e?`${n?" ":""}${e}`:""}`,l=t?(c(s,"content")||"").trimEnd():a(s.children,r).trimEnd();return`
|
|
18
18
|
\`\`\`${i}
|
|
19
19
|
${l}
|
|
20
20
|
\`\`\`
|