@wildo-ai/saas-technical-doc 1.1.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/LICENSE +34 -0
- package/dist/esm/.builder.pid +9 -0
- package/dist/esm/build/csp-emit.d.ts +9 -0
- package/dist/esm/build/csp-emit.d.ts.map +1 -0
- package/dist/esm/build/csp-emit.js +8 -0
- package/dist/esm/build/csp-emit.js.map +1 -0
- package/dist/esm/build/load-materialized-frontend-providers.d.ts +9 -0
- package/dist/esm/build/load-materialized-frontend-providers.d.ts.map +1 -0
- package/dist/esm/build/load-materialized-frontend-providers.js +9 -0
- package/dist/esm/build/load-materialized-frontend-providers.js.map +1 -0
- package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts +66 -0
- package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts.map +1 -0
- package/dist/esm/companion/application-documentation/application-organization-role-documentation.js +195 -0
- package/dist/esm/companion/application-documentation/application-organization-role-documentation.js.map +1 -0
- package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.d.ts +36 -0
- package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.d.ts.map +1 -0
- package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.js +71 -0
- package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.js.map +1 -0
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts +37 -0
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts.map +1 -0
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js +1865 -0
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js.map +1 -0
- package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.d.ts +22 -0
- package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.d.ts.map +1 -0
- package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.js +31 -0
- package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.js.map +1 -0
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts +31 -0
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts.map +1 -0
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js +33 -0
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js.map +1 -0
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.d.ts +13 -0
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.d.ts.map +1 -0
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js +93 -0
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js.map +1 -0
- package/dist/esm/companion/content/application-consumer-documentation-content-loader.d.ts +52 -0
- package/dist/esm/companion/content/application-consumer-documentation-content-loader.d.ts.map +1 -0
- package/dist/esm/companion/content/application-consumer-documentation-content-loader.js +191 -0
- package/dist/esm/companion/content/application-consumer-documentation-content-loader.js.map +1 -0
- package/dist/esm/companion/index.d.ts +39 -0
- package/dist/esm/companion/index.d.ts.map +1 -0
- package/dist/esm/companion/index.js +39 -0
- package/dist/esm/companion/index.js.map +1 -0
- package/dist/esm/companion/openapi-generator.d.ts +94 -0
- package/dist/esm/companion/openapi-generator.d.ts.map +1 -0
- package/dist/esm/companion/openapi-generator.js +1562 -0
- package/dist/esm/companion/openapi-generator.js.map +1 -0
- package/dist/esm/companion/operation-projection.schemas.d.ts +797 -0
- package/dist/esm/companion/operation-projection.schemas.d.ts.map +1 -0
- package/dist/esm/companion/operation-projection.schemas.js +610 -0
- package/dist/esm/companion/operation-projection.schemas.js.map +1 -0
- package/dist/esm/companion/publish-result.types.d.ts +124 -0
- package/dist/esm/companion/publish-result.types.d.ts.map +1 -0
- package/dist/esm/companion/publish-result.types.js +28 -0
- package/dist/esm/companion/publish-result.types.js.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.d.ts +26 -0
- package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.d.ts.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.js +63 -0
- package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.js.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-build-measurement.d.ts +23 -0
- package/dist/esm/companion/rendering/technical-documentation-build-measurement.d.ts.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-build-measurement.js +104 -0
- package/dist/esm/companion/rendering/technical-documentation-build-measurement.js.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts +9 -0
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js +421 -0
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.d.ts +72 -0
- package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.d.ts.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js +204 -0
- package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts +9 -0
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js +106 -0
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-mdx-escaping.d.ts +43 -0
- package/dist/esm/companion/rendering/technical-documentation-mdx-escaping.d.ts.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-mdx-escaping.js +88 -0
- package/dist/esm/companion/rendering/technical-documentation-mdx-escaping.js.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.d.ts +7 -0
- package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.d.ts.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.js +51 -0
- package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.js.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts +45 -0
- package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-render-model.js +178 -0
- package/dist/esm/companion/rendering/technical-documentation-render-model.js.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts +3 -0
- package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts.map +1 -0
- package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js +49 -0
- package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js.map +1 -0
- package/dist/esm/companion/spec-to-operation-doc.d.ts +176 -0
- package/dist/esm/companion/spec-to-operation-doc.d.ts.map +1 -0
- package/dist/esm/companion/spec-to-operation-doc.js +326 -0
- package/dist/esm/companion/spec-to-operation-doc.js.map +1 -0
- package/dist/esm/companion/technical-documentation-asset-path.d.ts +16 -0
- package/dist/esm/companion/technical-documentation-asset-path.d.ts.map +1 -0
- package/dist/esm/companion/technical-documentation-asset-path.js +19 -0
- package/dist/esm/companion/technical-documentation-asset-path.js.map +1 -0
- package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts +14 -0
- package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts.map +1 -0
- package/dist/esm/companion/technical-documentation-capture-execution-port.js +1 -0
- package/dist/esm/companion/technical-documentation-capture-execution-port.js.map +1 -0
- package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts +25 -0
- package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts.map +1 -0
- package/dist/esm/companion/technical-documentation-diagram-materializer.js +86 -0
- package/dist/esm/companion/technical-documentation-diagram-materializer.js.map +1 -0
- package/dist/esm/companion/technical-documentation-placeholder-materializer.d.ts +17 -0
- package/dist/esm/companion/technical-documentation-placeholder-materializer.d.ts.map +1 -0
- package/dist/esm/companion/technical-documentation-placeholder-materializer.js +63 -0
- package/dist/esm/companion/technical-documentation-placeholder-materializer.js.map +1 -0
- package/dist/esm/companion/zod-to-openapi.d.ts +67 -0
- package/dist/esm/companion/zod-to-openapi.d.ts.map +1 -0
- package/dist/esm/companion/zod-to-openapi.js +211 -0
- package/dist/esm/companion/zod-to-openapi.js.map +1 -0
- package/dist/esm/companion-exports.d.ts +32 -0
- package/dist/esm/companion-exports.d.ts.map +1 -0
- package/dist/esm/companion-exports.js +32 -0
- package/dist/esm/companion-exports.js.map +1 -0
- package/dist/esm/config/define-tech-doc-config.d.ts +38 -0
- package/dist/esm/config/define-tech-doc-config.d.ts.map +1 -0
- package/dist/esm/config/define-tech-doc-config.js +40 -0
- package/dist/esm/config/define-tech-doc-config.js.map +1 -0
- package/dist/esm/config/index.d.ts +22 -0
- package/dist/esm/config/index.d.ts.map +1 -0
- package/dist/esm/config/index.js +22 -0
- package/dist/esm/config/index.js.map +1 -0
- package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts +204 -0
- package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts.map +1 -0
- package/dist/esm/config/wildo-tech-doc-config.schemas.js +192 -0
- package/dist/esm/config/wildo-tech-doc-config.schemas.js.map +1 -0
- package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.d.ts +82 -0
- package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.d.ts.map +1 -0
- package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.js +114 -0
- package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.js.map +1 -0
- package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts +420 -0
- package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts.map +1 -0
- package/dist/esm/content/application-consumer-documentation-content.techdoc.js +9619 -0
- package/dist/esm/content/application-consumer-documentation-content.techdoc.js.map +1 -0
- package/dist/esm/content.exports.d.ts +9 -0
- package/dist/esm/content.exports.d.ts.map +1 -0
- package/dist/esm/content.exports.js +9 -0
- package/dist/esm/content.exports.js.map +1 -0
- package/dist/esm/index.d.ts +26 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +26 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/openapi/api-reference-link-index.d.ts +98 -0
- package/dist/esm/openapi/api-reference-link-index.d.ts.map +1 -0
- package/dist/esm/openapi/api-reference-link-index.js +301 -0
- package/dist/esm/openapi/api-reference-link-index.js.map +1 -0
- package/dist/esm/openapi/api-reference-targets.d.ts +71 -0
- package/dist/esm/openapi/api-reference-targets.d.ts.map +1 -0
- package/dist/esm/openapi/api-reference-targets.js +114 -0
- package/dist/esm/openapi/api-reference-targets.js.map +1 -0
- package/dist/esm/openapi/index.d.ts +20 -0
- package/dist/esm/openapi/index.d.ts.map +1 -0
- package/dist/esm/openapi/index.js +20 -0
- package/dist/esm/openapi/index.js.map +1 -0
- package/dist/esm/openapi/openapi-generation-output.schemas.d.ts +80 -0
- package/dist/esm/openapi/openapi-generation-output.schemas.d.ts.map +1 -0
- package/dist/esm/openapi/openapi-generation-output.schemas.js +76 -0
- package/dist/esm/openapi/openapi-generation-output.schemas.js.map +1 -0
- package/dist/esm/openapi-reference-model.exports.d.ts +10 -0
- package/dist/esm/openapi-reference-model.exports.d.ts.map +1 -0
- package/dist/esm/openapi-reference-model.exports.js +10 -0
- package/dist/esm/openapi-reference-model.exports.js.map +1 -0
- package/dist/esm/runtime/AuthExchangePage.d.ts +84 -0
- package/dist/esm/runtime/AuthExchangePage.d.ts.map +1 -0
- package/dist/esm/runtime/AuthExchangePage.js +188 -0
- package/dist/esm/runtime/AuthExchangePage.js.map +1 -0
- package/dist/esm/runtime/DocsAuthContext.d.ts +119 -0
- package/dist/esm/runtime/DocsAuthContext.d.ts.map +1 -0
- package/dist/esm/runtime/DocsAuthContext.js +171 -0
- package/dist/esm/runtime/DocsAuthContext.js.map +1 -0
- package/dist/esm/runtime/decode-jwt-claims.d.ts +39 -0
- package/dist/esm/runtime/decode-jwt-claims.d.ts.map +1 -0
- package/dist/esm/runtime/decode-jwt-claims.js +86 -0
- package/dist/esm/runtime/decode-jwt-claims.js.map +1 -0
- package/dist/esm/runtime/docs-auth-client.d.ts +193 -0
- package/dist/esm/runtime/docs-auth-client.d.ts.map +1 -0
- package/dist/esm/runtime/docs-auth-client.js +211 -0
- package/dist/esm/runtime/docs-auth-client.js.map +1 -0
- package/dist/esm/runtime/docs-auth-session.schemas.d.ts +77 -0
- package/dist/esm/runtime/docs-auth-session.schemas.d.ts.map +1 -0
- package/dist/esm/runtime/docs-auth-session.schemas.js +50 -0
- package/dist/esm/runtime/docs-auth-session.schemas.js.map +1 -0
- package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts +17 -0
- package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts.map +1 -0
- package/dist/esm/runtime/frontend-provider-registry.techdoc.js +23 -0
- package/dist/esm/runtime/frontend-provider-registry.techdoc.js.map +1 -0
- package/dist/esm/runtime/index.d.ts +57 -0
- package/dist/esm/runtime/index.d.ts.map +1 -0
- package/dist/esm/runtime/index.js +76 -0
- package/dist/esm/runtime/index.js.map +1 -0
- package/dist/esm/runtime/openapi-reference-conservation.d.ts +20 -0
- package/dist/esm/runtime/openapi-reference-conservation.d.ts.map +1 -0
- package/dist/esm/runtime/openapi-reference-conservation.js +102 -0
- package/dist/esm/runtime/openapi-reference-conservation.js.map +1 -0
- package/dist/esm/runtime/openapi-reference-model.d.ts +224 -0
- package/dist/esm/runtime/openapi-reference-model.d.ts.map +1 -0
- package/dist/esm/runtime/openapi-reference-model.js +579 -0
- package/dist/esm/runtime/openapi-reference-model.js.map +1 -0
- package/dist/esm/runtime/openapi-reference-view.d.ts +13 -0
- package/dist/esm/runtime/openapi-reference-view.d.ts.map +1 -0
- package/dist/esm/runtime/openapi-reference-view.js +284 -0
- package/dist/esm/runtime/openapi-reference-view.js.map +1 -0
- package/dist/esm/runtime/use-docs-auth-session.d.ts +26 -0
- package/dist/esm/runtime/use-docs-auth-session.d.ts.map +1 -0
- package/dist/esm/runtime/use-docs-auth-session.js +34 -0
- package/dist/esm/runtime/use-docs-auth-session.js.map +1 -0
- package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts +3 -0
- package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts.map +1 -0
- package/dist/esm/runtime/use-docs-frontend-provider-registry.js +5 -0
- package/dist/esm/runtime/use-docs-frontend-provider-registry.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +117 -0
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
import { TechnicalDocumentationAssetResolutionStatus, TechnicalDocumentationLinkKind, TechnicalDocumentationOutputKind, TechnicalDocumentationRendererKind, } from '@wildo-ai/saas-specifications/technical-documentation';
|
|
2
|
+
import { escapeMarkdownForMdx } from './technical-documentation-mdx-escaping.js';
|
|
3
|
+
import { technicalDocumentationAssetFileStem, } from '../technical-documentation-asset-path.js';
|
|
4
|
+
import { createTechnicalDocumentationRendererExecution, } from './technical-documentation-render-model.js';
|
|
5
|
+
/**
|
|
6
|
+
* Statuses whose asset carries real bytes at a real path, and therefore renders.
|
|
7
|
+
*
|
|
8
|
+
* `PLACEHOLDER` belongs here with `RESOLVED`: the framework materializes a stand-in image,
|
|
9
|
+
* so the page shows a picture rather than a hole. That is the whole distinction from
|
|
10
|
+
* `MISSING` — both mean "the real capture has not run", but only one of them SHIPS
|
|
11
|
+
* something. Rendering is a question about bytes; whether provisional imagery may be
|
|
12
|
+
* published at all is an environment policy decided at publication, not here.
|
|
13
|
+
*/
|
|
14
|
+
const RENDERABLE_ASSET_STATUSES = new Set([
|
|
15
|
+
TechnicalDocumentationAssetResolutionStatus.PLACEHOLDER,
|
|
16
|
+
TechnicalDocumentationAssetResolutionStatus.RESOLVED,
|
|
17
|
+
]);
|
|
18
|
+
const DOCUSAURUS_RENDERER_REF = 'technical-documentation:renderer/docusaurus';
|
|
19
|
+
/**
|
|
20
|
+
* Reader-facing names for the product responsibilities in the portal.
|
|
21
|
+
*
|
|
22
|
+
* Folder names are stable routing mechanics, not customer copy: exposing
|
|
23
|
+
* `user-administration` in the sidebar leaks a URL convention. A category
|
|
24
|
+
* with a landing document links to that document and excludes it from the
|
|
25
|
+
* dropdown, so readers select the category for orientation and expand it for
|
|
26
|
+
* focused tasks. A landing may use the category's canonical root path or the
|
|
27
|
+
* conventional nested `overview` path; the former keeps a public entry route
|
|
28
|
+
* concise without introducing a redirect or duplicate document.
|
|
29
|
+
*/
|
|
30
|
+
const DOCUSAURUS_CATEGORY_LABEL_BY_DIRECTORY = {
|
|
31
|
+
'access-and-identity': 'Access and identity',
|
|
32
|
+
'billing-and-subscriptions': 'Billing and subscriptions',
|
|
33
|
+
integrations: 'Integrations',
|
|
34
|
+
'security-and-audit': 'Security and audit',
|
|
35
|
+
'user-administration': 'User administration',
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* A category is a reader journey, not an alphabetized file listing. Most
|
|
39
|
+
* categories need no override; user administration does, because readers first
|
|
40
|
+
* choose how accounts are managed and then follow the relevant task sequence.
|
|
41
|
+
*
|
|
42
|
+
* A journey landing is rendered as a clickable second-level category. It is
|
|
43
|
+
* deliberately absent from that category's children: selecting the label opens
|
|
44
|
+
* the explanation, while expanding it reveals the concrete tasks. Plain paths
|
|
45
|
+
* remain direct children for work that spans several journeys.
|
|
46
|
+
*/
|
|
47
|
+
const DOCUSAURUS_CATEGORY_JOURNEY_BY_DIRECTORY = {
|
|
48
|
+
'billing-and-subscriptions': [
|
|
49
|
+
{
|
|
50
|
+
landingPath: 'billing-and-subscriptions/plans-and-access',
|
|
51
|
+
childPaths: ['billing-and-subscriptions/start-subscription'],
|
|
52
|
+
},
|
|
53
|
+
'billing-and-subscriptions/change-or-end-subscription',
|
|
54
|
+
{
|
|
55
|
+
landingPath: 'billing-and-subscriptions/billing-records',
|
|
56
|
+
childPaths: [
|
|
57
|
+
'billing-and-subscriptions/invoices-and-payments',
|
|
58
|
+
'billing-and-subscriptions/metered-usage',
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
'billing-and-subscriptions/reconcile-access',
|
|
62
|
+
'billing-and-subscriptions/troubleshoot',
|
|
63
|
+
],
|
|
64
|
+
'security-and-audit': [
|
|
65
|
+
'security-and-audit/investigate-event',
|
|
66
|
+
'security-and-audit/review-access-changes',
|
|
67
|
+
'security-and-audit/export-audit-records',
|
|
68
|
+
{
|
|
69
|
+
landingPath: 'security-and-audit/configure-siem',
|
|
70
|
+
childPaths: [
|
|
71
|
+
'security-and-audit/siem-splunk',
|
|
72
|
+
'security-and-audit/siem-microsoft-sentinel',
|
|
73
|
+
'security-and-audit/siem-elastic',
|
|
74
|
+
'security-and-audit/operate-siem',
|
|
75
|
+
],
|
|
76
|
+
},
|
|
77
|
+
'security-and-audit/protect-evidence',
|
|
78
|
+
],
|
|
79
|
+
'access-and-identity': [
|
|
80
|
+
{
|
|
81
|
+
landingPath: 'access-and-identity/sign-in-and-mfa',
|
|
82
|
+
childPaths: [
|
|
83
|
+
'access-and-identity/complete-sign-in',
|
|
84
|
+
'access-and-identity/mfa-enrollment-and-recovery',
|
|
85
|
+
'access-and-identity/sign-in-troubleshoot',
|
|
86
|
+
],
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
landingPath: 'access-and-identity/single-sign-on',
|
|
90
|
+
childPaths: [
|
|
91
|
+
'access-and-identity/sso-configure',
|
|
92
|
+
'access-and-identity/sso-rollout-and-recovery',
|
|
93
|
+
'access-and-identity/sso-troubleshoot',
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
landingPath: 'access-and-identity/api-keys',
|
|
98
|
+
childPaths: [
|
|
99
|
+
'access-and-identity/api-keys-create-and-store',
|
|
100
|
+
'access-and-identity/api-keys-lifecycle',
|
|
101
|
+
'access-and-identity/api-keys-troubleshoot',
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
landingPath: 'access-and-identity/oauth-provider',
|
|
106
|
+
childPaths: [
|
|
107
|
+
'access-and-identity/oauth-register-client',
|
|
108
|
+
'access-and-identity/oauth-authorize-delegated-access',
|
|
109
|
+
'access-and-identity/oauth-operate-and-revoke',
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
'user-administration': [
|
|
114
|
+
{
|
|
115
|
+
landingPath: 'user-administration/manage-users-manually',
|
|
116
|
+
childPaths: [
|
|
117
|
+
'user-administration/invite-and-onboard-user',
|
|
118
|
+
'user-administration/roles-and-permissions',
|
|
119
|
+
'user-administration/change-user-access',
|
|
120
|
+
'user-administration/suspend-or-remove-user',
|
|
121
|
+
],
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
landingPath: 'user-administration/manage-organization-units',
|
|
125
|
+
childPaths: [
|
|
126
|
+
'user-administration/design-organization-unit-hierarchy',
|
|
127
|
+
'user-administration/assign-organization-unit-access',
|
|
128
|
+
'user-administration/operate-organization-units',
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
'user-administration/review-users-and-access',
|
|
132
|
+
'user-administration/troubleshoot-user-access',
|
|
133
|
+
{
|
|
134
|
+
landingPath: 'user-administration/scim-provisioning',
|
|
135
|
+
childPaths: [
|
|
136
|
+
'user-administration/scim-protocol-and-payloads',
|
|
137
|
+
'user-administration/scim-configure',
|
|
138
|
+
'user-administration/scim-microsoft-entra',
|
|
139
|
+
'user-administration/scim-okta',
|
|
140
|
+
'user-administration/scim-ldap-and-active-directory',
|
|
141
|
+
'user-administration/scim-map-profile-and-units',
|
|
142
|
+
'user-administration/scim-validate-and-roll-out',
|
|
143
|
+
'user-administration/scim-operate-and-troubleshoot',
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
integrations: [
|
|
148
|
+
{
|
|
149
|
+
landingPath: 'integrations/automation-platforms',
|
|
150
|
+
childPaths: [
|
|
151
|
+
'integrations/automation/n8n',
|
|
152
|
+
'integrations/automation/zapier',
|
|
153
|
+
'integrations/automation/make',
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
landingPath: 'integrations/ai-coding-tools',
|
|
158
|
+
childPaths: [
|
|
159
|
+
'integrations/ai-tools/cursor',
|
|
160
|
+
'integrations/ai-tools/codex',
|
|
161
|
+
'integrations/ai-tools/claude-code',
|
|
162
|
+
],
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
landingPath: 'integrations/rest-api',
|
|
166
|
+
childPaths: [
|
|
167
|
+
'integrations/rest/send-request',
|
|
168
|
+
'integrations/rest/read-collections',
|
|
169
|
+
'integrations/rest/write-and-reconcile',
|
|
170
|
+
'integrations/rest/troubleshoot',
|
|
171
|
+
],
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
landingPath: 'integrations/webhooks',
|
|
175
|
+
childPaths: [
|
|
176
|
+
'integrations/webhooks/configure-and-test',
|
|
177
|
+
'integrations/webhooks/verify-delivery',
|
|
178
|
+
'integrations/webhooks/operate-deliveries',
|
|
179
|
+
'integrations/webhooks/troubleshoot',
|
|
180
|
+
],
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
landingPath: 'integrations/agents',
|
|
184
|
+
childPaths: [
|
|
185
|
+
'integrations/mcp',
|
|
186
|
+
'integrations/a2a',
|
|
187
|
+
],
|
|
188
|
+
},
|
|
189
|
+
'integrations/create-your-own-integration',
|
|
190
|
+
],
|
|
191
|
+
};
|
|
192
|
+
function renderDocusaurusCategoryItems(input) {
|
|
193
|
+
const availablePaths = new Set(input.itemPaths);
|
|
194
|
+
const claimedPaths = new Set();
|
|
195
|
+
const journey = DOCUSAURUS_CATEGORY_JOURNEY_BY_DIRECTORY[input.directory] ?? [];
|
|
196
|
+
const renderedJourney = journey.flatMap((item) => {
|
|
197
|
+
if (typeof item === 'string') {
|
|
198
|
+
if (!availablePaths.has(item))
|
|
199
|
+
return [];
|
|
200
|
+
claimedPaths.add(item);
|
|
201
|
+
return [item];
|
|
202
|
+
}
|
|
203
|
+
const availableChildPaths = item.childPaths.filter((path) => availablePaths.has(path));
|
|
204
|
+
for (const path of availableChildPaths)
|
|
205
|
+
claimedPaths.add(path);
|
|
206
|
+
if (!availablePaths.has(item.landingPath)) {
|
|
207
|
+
// Applicability may omit a landing while retaining an independently
|
|
208
|
+
// useful task. Never hide those tasks merely because their group cannot
|
|
209
|
+
// be rendered as a linked category in this publication.
|
|
210
|
+
return availableChildPaths;
|
|
211
|
+
}
|
|
212
|
+
const label = input.unitTitleByPath.get(item.landingPath);
|
|
213
|
+
if (label === undefined)
|
|
214
|
+
throw new Error(`technical-documentation Docusaurus journey landing is missing a reader title: ${item.landingPath}`);
|
|
215
|
+
claimedPaths.add(item.landingPath);
|
|
216
|
+
// A landing without applicable child tasks is a document, not an empty
|
|
217
|
+
// disclosure control. This preserves the same no-duplicate/no-empty-arrow
|
|
218
|
+
// rule used for top-level single-page responsibilities.
|
|
219
|
+
if (availableChildPaths.length === 0)
|
|
220
|
+
return [item.landingPath];
|
|
221
|
+
return [{
|
|
222
|
+
type: 'category',
|
|
223
|
+
label,
|
|
224
|
+
collapsible: true,
|
|
225
|
+
collapsed: true,
|
|
226
|
+
link: { type: 'doc', id: item.landingPath },
|
|
227
|
+
items: availableChildPaths,
|
|
228
|
+
}];
|
|
229
|
+
});
|
|
230
|
+
return [
|
|
231
|
+
...renderedJourney,
|
|
232
|
+
...input.itemPaths.filter((path) => !claimedPaths.has(path)).sort((left, right) => left.localeCompare(right)),
|
|
233
|
+
];
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Authors use tilde fences because this content module itself is a TypeScript
|
|
237
|
+
* template literal. CommonMark accepts them, but the installed Docusaurus
|
|
238
|
+
* Mermaid integration recognizes backtick fences only. Normalize just a
|
|
239
|
+
* well-formed Mermaid pair at this renderer boundary: prose authors stay
|
|
240
|
+
* renderer-neutral, while the renderer emits the fence syntax its MDX plugin
|
|
241
|
+
* actually executes. Other fenced examples retain their authored delimiter.
|
|
242
|
+
*/
|
|
243
|
+
function normalizeMermaidFencesForDocusaurus(markdown) {
|
|
244
|
+
let insideTildeMermaidFence = false;
|
|
245
|
+
return markdown.split('\n').map((line) => {
|
|
246
|
+
if (/^\s{0,3}~~~mermaid\s*$/.test(line)) {
|
|
247
|
+
insideTildeMermaidFence = true;
|
|
248
|
+
return line.replace('~~~mermaid', '```mermaid');
|
|
249
|
+
}
|
|
250
|
+
if (insideTildeMermaidFence && /^\s{0,3}~~~\s*$/.test(line)) {
|
|
251
|
+
insideTildeMermaidFence = false;
|
|
252
|
+
return line.replace('~~~', '```');
|
|
253
|
+
}
|
|
254
|
+
return line;
|
|
255
|
+
}).join('\n');
|
|
256
|
+
}
|
|
257
|
+
function renderUnit(unit, model, assetPathByRef, resolveApiReferenceTarget) {
|
|
258
|
+
const path = model.unitPathByRef.get(unit.unitRef);
|
|
259
|
+
// Every field below carries authored or derived PROSE into an `.mdx` file, so each one is a
|
|
260
|
+
// site where a route template like `/organizations/{organizationId}/todos` would compile fine
|
|
261
|
+
// and then crash the page in the reader's browser. Escaping is applied per field rather than
|
|
262
|
+
// once over the assembled document on purpose: the assembly also emits `---` frontmatter and
|
|
263
|
+
// Markdown punctuation this must not touch, and `title` is JSON-encoded rather than Markdown.
|
|
264
|
+
const sections = unit.sections
|
|
265
|
+
.map((section) => `## ${escapeMarkdownForMdx(section.heading)}\n\n${escapeMarkdownForMdx(normalizeMermaidFencesForDocusaurus(section.bodyMarkdown))}`)
|
|
266
|
+
.join('\n\n');
|
|
267
|
+
const figures = unit.assetRequests.flatMap((request) => {
|
|
268
|
+
const assetPath = assetPathByRef.get(request.assetRef);
|
|
269
|
+
return assetPath === undefined ? [] : [``];
|
|
270
|
+
});
|
|
271
|
+
const links = unit.links.flatMap((link) => {
|
|
272
|
+
const label = escapeMarkdownForMdx(link.label);
|
|
273
|
+
if (link.kind === TechnicalDocumentationLinkKind.UNIT) {
|
|
274
|
+
const target = model.unitPathByRef.get(link.targetUnitRef);
|
|
275
|
+
if (target === undefined)
|
|
276
|
+
throw new Error(`technical-documentation Docusaurus link target is absent: ${link.targetUnitRef}`);
|
|
277
|
+
return [`- [${label}](/${target})`];
|
|
278
|
+
}
|
|
279
|
+
if (link.kind === TechnicalDocumentationLinkKind.EXTERNAL)
|
|
280
|
+
return [`- [${label}](${link.externalUrl})`];
|
|
281
|
+
if (link.kind === TechnicalDocumentationLinkKind.API_REFERENCE) {
|
|
282
|
+
if (resolveApiReferenceTarget === undefined)
|
|
283
|
+
throw new Error(`technical-documentation API-reference link was not resolved before Docusaurus rendering: ${link.linkRef}`);
|
|
284
|
+
return [`- [${label}](${resolveApiReferenceTarget(link.apiReferenceTarget)})`];
|
|
285
|
+
}
|
|
286
|
+
return [];
|
|
287
|
+
});
|
|
288
|
+
const assetSection = figures.length === 0 ? '' : `\n\n## Product view\n\n${figures.join('\n\n')}`;
|
|
289
|
+
const relatedSection = links.length === 0 ? '' : `\n\n## Related\n\n${links.join('\n')}`;
|
|
290
|
+
const summary = escapeMarkdownForMdx(unit.summary);
|
|
291
|
+
return `---\nid: ${path.split('/').at(-1)}\ntitle: ${JSON.stringify(unit.title)}\nsidebar_label: ${JSON.stringify(unit.title)}\n---\n\n${summary}\n\n${sections}${assetSection}${relatedSection}\n`;
|
|
292
|
+
}
|
|
293
|
+
function renderDocusaurusSidebars(model) {
|
|
294
|
+
const rootDocumentPaths = [];
|
|
295
|
+
const rootDocumentPathSet = new Set();
|
|
296
|
+
const categoryItems = [];
|
|
297
|
+
const claimedRootLandingPaths = new Set();
|
|
298
|
+
const pathsByDirectory = new Map();
|
|
299
|
+
const unitTitleByPath = new Map();
|
|
300
|
+
for (const unit of model.units) {
|
|
301
|
+
const path = model.unitPathByRef.get(unit.unitRef);
|
|
302
|
+
unitTitleByPath.set(path, unit.title);
|
|
303
|
+
const [directory] = path.split('/');
|
|
304
|
+
if (directory === undefined || !path.includes('/')) {
|
|
305
|
+
rootDocumentPaths.push(path);
|
|
306
|
+
rootDocumentPathSet.add(path);
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
const paths = pathsByDirectory.get(directory) ?? [];
|
|
310
|
+
paths.push(path);
|
|
311
|
+
pathsByDirectory.set(directory, paths);
|
|
312
|
+
}
|
|
313
|
+
for (const [directory, paths] of [...pathsByDirectory.entries()].sort(([left], [right]) => left.localeCompare(right))) {
|
|
314
|
+
const label = DOCUSAURUS_CATEGORY_LABEL_BY_DIRECTORY[directory];
|
|
315
|
+
if (label === undefined)
|
|
316
|
+
throw new Error(`technical-documentation Docusaurus category is missing a reader label: ${directory}`);
|
|
317
|
+
const overviewPath = `${directory}/overview`;
|
|
318
|
+
// A root document and a child directory may deliberately share one route
|
|
319
|
+
// identity (`user-administration` + `user-administration/*`). That exact
|
|
320
|
+
// path relation—not mutable display copy—makes the root document the
|
|
321
|
+
// category landing. Labels remain free to evolve without breaking IA.
|
|
322
|
+
const rootLandingPath = rootDocumentPathSet.has(directory) ? directory : undefined;
|
|
323
|
+
const landingPath = paths.includes(overviewPath) ? overviewPath : rootLandingPath;
|
|
324
|
+
if (rootLandingPath !== undefined && landingPath === rootLandingPath)
|
|
325
|
+
claimedRootLandingPaths.add(rootLandingPath);
|
|
326
|
+
const itemPaths = paths.filter((path) => path !== overviewPath);
|
|
327
|
+
const [onlyItemPath] = itemPaths;
|
|
328
|
+
// A category with one identically named document is not a journey: rendering
|
|
329
|
+
// both creates two adjacent controls with the same reader meaning. Flatten
|
|
330
|
+
// only that exact shape. A differently named single document remains under
|
|
331
|
+
// its responsibility label because the category still adds useful context.
|
|
332
|
+
if (landingPath === undefined && itemPaths.length === 1 && onlyItemPath !== undefined && unitTitleByPath.get(onlyItemPath) === label) {
|
|
333
|
+
categoryItems.push(onlyItemPath);
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
const orderedItems = renderDocusaurusCategoryItems({ directory, itemPaths, unitTitleByPath });
|
|
337
|
+
categoryItems.push({
|
|
338
|
+
type: 'category',
|
|
339
|
+
label,
|
|
340
|
+
collapsible: true,
|
|
341
|
+
// Docusaurus expands the category containing the active document. Keeping
|
|
342
|
+
// other journeys collapsed makes the sidebar scale with the catalogue.
|
|
343
|
+
collapsed: true,
|
|
344
|
+
...(landingPath === undefined ? {} : { link: { type: 'doc', id: landingPath } }),
|
|
345
|
+
items: orderedItems,
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
const rootItems = [
|
|
349
|
+
...rootDocumentPaths.filter((path) => !claimedRootLandingPaths.has(path)),
|
|
350
|
+
...categoryItems,
|
|
351
|
+
];
|
|
352
|
+
return `${JSON.stringify({ docs: rootItems }, null, 2)}\n`;
|
|
353
|
+
}
|
|
354
|
+
export function renderTechnicalDocumentationDocusaurus(input) {
|
|
355
|
+
const assetPathByRef = new Map(input.resolvedAssetBundle.resolvedAssetSet.assets.flatMap((asset) => RENDERABLE_ASSET_STATUSES.has(asset.status) ? [[asset.assetRef, asset.normalizedRelativePath]] : []));
|
|
356
|
+
const sourceUnitRefsByAssetRef = new Map();
|
|
357
|
+
for (const unit of input.model.units) {
|
|
358
|
+
for (const request of unit.assetRequests) {
|
|
359
|
+
const owners = sourceUnitRefsByAssetRef.get(request.assetRef) ?? [];
|
|
360
|
+
owners.push(unit.unitRef);
|
|
361
|
+
sourceUnitRefsByAssetRef.set(request.assetRef, owners);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
const pageFiles = input.model.units.map((unit) => {
|
|
365
|
+
const path = input.model.unitPathByRef.get(unit.unitRef);
|
|
366
|
+
return {
|
|
367
|
+
// The full route identity is part of the output identity. Two valid pages
|
|
368
|
+
// may share their final slug (`integrations/todos` and
|
|
369
|
+
// `user-administration/users`) without sharing a file or a manifest row.
|
|
370
|
+
outputRef: `technical-documentation:output/docusaurus/${path.split('/').join(':')}`,
|
|
371
|
+
rendererRef: DOCUSAURUS_RENDERER_REF,
|
|
372
|
+
outputKind: TechnicalDocumentationOutputKind.MARKDOWN_DOCUMENT,
|
|
373
|
+
sourceUnitRefs: [unit.unitRef],
|
|
374
|
+
normalizedRelativePath: `docusaurus/docs/${path}.mdx`,
|
|
375
|
+
mediaType: 'text/mdx',
|
|
376
|
+
bytes: Buffer.from(renderUnit(unit, input.model, assetPathByRef, input.resolveApiReferenceTarget), 'utf8'),
|
|
377
|
+
};
|
|
378
|
+
});
|
|
379
|
+
const assetFiles = input.resolvedAssetBundle.resolvedAssetSet.assets.flatMap((asset) => {
|
|
380
|
+
if (!RENDERABLE_ASSET_STATUSES.has(asset.status))
|
|
381
|
+
return [];
|
|
382
|
+
const path = asset.normalizedRelativePath;
|
|
383
|
+
const bytes = input.assetBytesByPath.get(path);
|
|
384
|
+
if (bytes === undefined)
|
|
385
|
+
throw new Error(`technical-documentation Docusaurus asset bytes are absent: ${path}`);
|
|
386
|
+
const sourceUnitRefs = [...(sourceUnitRefsByAssetRef.get(asset.assetRef) ?? [])].sort();
|
|
387
|
+
if (sourceUnitRefs.length === 0)
|
|
388
|
+
throw new Error(`technical-documentation resolved asset has no authorized unit owner: ${asset.assetRef}`);
|
|
389
|
+
return [{
|
|
390
|
+
outputRef: `technical-documentation:output/asset/${technicalDocumentationAssetFileStem(asset.assetRef)}`,
|
|
391
|
+
rendererRef: DOCUSAURUS_RENDERER_REF,
|
|
392
|
+
outputKind: TechnicalDocumentationOutputKind.ASSET,
|
|
393
|
+
sourceUnitRefs,
|
|
394
|
+
normalizedRelativePath: `docusaurus/static/${path}`,
|
|
395
|
+
mediaType: asset.mediaType,
|
|
396
|
+
bytes,
|
|
397
|
+
}];
|
|
398
|
+
});
|
|
399
|
+
return {
|
|
400
|
+
execution: createTechnicalDocumentationRendererExecution({
|
|
401
|
+
rendererKind: TechnicalDocumentationRendererKind.DOCUSAURUS,
|
|
402
|
+
rendererRef: DOCUSAURUS_RENDERER_REF,
|
|
403
|
+
rendererVersion: 1,
|
|
404
|
+
configurationRef: 'technical-documentation:renderer-configuration/docusaurus-v1',
|
|
405
|
+
}),
|
|
406
|
+
files: [
|
|
407
|
+
...pageFiles,
|
|
408
|
+
...assetFiles,
|
|
409
|
+
{
|
|
410
|
+
outputRef: 'technical-documentation:output/docusaurus-sidebars',
|
|
411
|
+
rendererRef: DOCUSAURUS_RENDERER_REF,
|
|
412
|
+
outputKind: TechnicalDocumentationOutputKind.NAVIGATION_INDEX,
|
|
413
|
+
sourceUnitRefs: input.model.units.map((unit) => unit.unitRef),
|
|
414
|
+
normalizedRelativePath: 'docusaurus/sidebars.json',
|
|
415
|
+
mediaType: 'application/json',
|
|
416
|
+
bytes: Buffer.from(renderDocusaurusSidebars(input.model), 'utf8'),
|
|
417
|
+
},
|
|
418
|
+
],
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
//# sourceMappingURL=technical-documentation-docusaurus-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"technical-documentation-docusaurus-renderer.js","sourceRoot":"","sources":["../../../../../src/companion/rendering/technical-documentation-docusaurus-renderer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n TechnicalDocumentationAssetResolutionStatus,\n TechnicalDocumentationLinkKind,\n TechnicalDocumentationOutputKind,\n TechnicalDocumentationRendererKind,\n type TechnicalDocumentationResolvedAssetBundleManifestV1,\n type TechnicalDocumentationApiReferenceTargetV1,\n type TechnicalDocumentationUnitV1,\n} from '@wildo-ai/saas-specifications/technical-documentation';\n\nimport { escapeMarkdownForMdx } from './technical-documentation-mdx-escaping';\nimport {\n technicalDocumentationAssetFileStem,\n} from '../technical-documentation-asset-path';\nimport {\n createTechnicalDocumentationRendererExecution,\n type TechnicalDocumentationRenderModel,\n type TechnicalDocumentationRendererResult,\n} from './technical-documentation-render-model';\n\n/**\n * Statuses whose asset carries real bytes at a real path, and therefore renders.\n *\n * `PLACEHOLDER` belongs here with `RESOLVED`: the framework materializes a stand-in image,\n * so the page shows a picture rather than a hole. That is the whole distinction from\n * `MISSING` — both mean \"the real capture has not run\", but only one of them SHIPS\n * something. Rendering is a question about bytes; whether provisional imagery may be\n * published at all is an environment policy decided at publication, not here.\n */\nconst RENDERABLE_ASSET_STATUSES: ReadonlySet<TechnicalDocumentationAssetResolutionStatus> = new Set([\n TechnicalDocumentationAssetResolutionStatus.PLACEHOLDER,\n TechnicalDocumentationAssetResolutionStatus.RESOLVED,\n]);\n\nconst DOCUSAURUS_RENDERER_REF = 'technical-documentation:renderer/docusaurus';\n\n/**\n * Reader-facing names for the product responsibilities in the portal.\n *\n * Folder names are stable routing mechanics, not customer copy: exposing\n * `user-administration` in the sidebar leaks a URL convention. A category\n * with a landing document links to that document and excludes it from the\n * dropdown, so readers select the category for orientation and expand it for\n * focused tasks. A landing may use the category's canonical root path or the\n * conventional nested `overview` path; the former keeps a public entry route\n * concise without introducing a redirect or duplicate document.\n */\nconst DOCUSAURUS_CATEGORY_LABEL_BY_DIRECTORY: Readonly<Record<string, string>> = {\n 'access-and-identity': 'Access and identity',\n 'billing-and-subscriptions': 'Billing and subscriptions',\n integrations: 'Integrations',\n 'security-and-audit': 'Security and audit',\n 'user-administration': 'User administration',\n};\n\ntype DocusaurusJourneyItem = string | {\n readonly landingPath: string;\n readonly childPaths: readonly string[];\n};\n\ntype DocusaurusSidebarItem = string | {\n readonly type: 'category';\n readonly label: string;\n readonly collapsible: true;\n readonly collapsed: true;\n readonly link?: { readonly type: 'doc'; readonly id: string };\n readonly items: readonly DocusaurusSidebarItem[];\n};\n\n/**\n * A category is a reader journey, not an alphabetized file listing. Most\n * categories need no override; user administration does, because readers first\n * choose how accounts are managed and then follow the relevant task sequence.\n *\n * A journey landing is rendered as a clickable second-level category. It is\n * deliberately absent from that category's children: selecting the label opens\n * the explanation, while expanding it reveals the concrete tasks. Plain paths\n * remain direct children for work that spans several journeys.\n */\nconst DOCUSAURUS_CATEGORY_JOURNEY_BY_DIRECTORY: Readonly<Record<string, readonly DocusaurusJourneyItem[]>> = {\n 'billing-and-subscriptions': [\n {\n landingPath: 'billing-and-subscriptions/plans-and-access',\n childPaths: ['billing-and-subscriptions/start-subscription'],\n },\n 'billing-and-subscriptions/change-or-end-subscription',\n {\n landingPath: 'billing-and-subscriptions/billing-records',\n childPaths: [\n 'billing-and-subscriptions/invoices-and-payments',\n 'billing-and-subscriptions/metered-usage',\n ],\n },\n 'billing-and-subscriptions/reconcile-access',\n 'billing-and-subscriptions/troubleshoot',\n ],\n 'security-and-audit': [\n 'security-and-audit/investigate-event',\n 'security-and-audit/review-access-changes',\n 'security-and-audit/export-audit-records',\n {\n landingPath: 'security-and-audit/configure-siem',\n childPaths: [\n 'security-and-audit/siem-splunk',\n 'security-and-audit/siem-microsoft-sentinel',\n 'security-and-audit/siem-elastic',\n 'security-and-audit/operate-siem',\n ],\n },\n 'security-and-audit/protect-evidence',\n ],\n 'access-and-identity': [\n {\n landingPath: 'access-and-identity/sign-in-and-mfa',\n childPaths: [\n 'access-and-identity/complete-sign-in',\n 'access-and-identity/mfa-enrollment-and-recovery',\n 'access-and-identity/sign-in-troubleshoot',\n ],\n },\n {\n landingPath: 'access-and-identity/single-sign-on',\n childPaths: [\n 'access-and-identity/sso-configure',\n 'access-and-identity/sso-rollout-and-recovery',\n 'access-and-identity/sso-troubleshoot',\n ],\n },\n {\n landingPath: 'access-and-identity/api-keys',\n childPaths: [\n 'access-and-identity/api-keys-create-and-store',\n 'access-and-identity/api-keys-lifecycle',\n 'access-and-identity/api-keys-troubleshoot',\n ],\n },\n {\n landingPath: 'access-and-identity/oauth-provider',\n childPaths: [\n 'access-and-identity/oauth-register-client',\n 'access-and-identity/oauth-authorize-delegated-access',\n 'access-and-identity/oauth-operate-and-revoke',\n ],\n },\n ],\n 'user-administration': [\n {\n landingPath: 'user-administration/manage-users-manually',\n childPaths: [\n 'user-administration/invite-and-onboard-user',\n 'user-administration/roles-and-permissions',\n 'user-administration/change-user-access',\n 'user-administration/suspend-or-remove-user',\n ],\n },\n {\n landingPath: 'user-administration/manage-organization-units',\n childPaths: [\n 'user-administration/design-organization-unit-hierarchy',\n 'user-administration/assign-organization-unit-access',\n 'user-administration/operate-organization-units',\n ],\n },\n 'user-administration/review-users-and-access',\n 'user-administration/troubleshoot-user-access',\n {\n landingPath: 'user-administration/scim-provisioning',\n childPaths: [\n 'user-administration/scim-protocol-and-payloads',\n 'user-administration/scim-configure',\n 'user-administration/scim-microsoft-entra',\n 'user-administration/scim-okta',\n 'user-administration/scim-ldap-and-active-directory',\n 'user-administration/scim-map-profile-and-units',\n 'user-administration/scim-validate-and-roll-out',\n 'user-administration/scim-operate-and-troubleshoot',\n ],\n },\n ],\n integrations: [\n {\n landingPath: 'integrations/automation-platforms',\n childPaths: [\n 'integrations/automation/n8n',\n 'integrations/automation/zapier',\n 'integrations/automation/make',\n ],\n },\n {\n landingPath: 'integrations/ai-coding-tools',\n childPaths: [\n 'integrations/ai-tools/cursor',\n 'integrations/ai-tools/codex',\n 'integrations/ai-tools/claude-code',\n ],\n },\n {\n landingPath: 'integrations/rest-api',\n childPaths: [\n 'integrations/rest/send-request',\n 'integrations/rest/read-collections',\n 'integrations/rest/write-and-reconcile',\n 'integrations/rest/troubleshoot',\n ],\n },\n {\n landingPath: 'integrations/webhooks',\n childPaths: [\n 'integrations/webhooks/configure-and-test',\n 'integrations/webhooks/verify-delivery',\n 'integrations/webhooks/operate-deliveries',\n 'integrations/webhooks/troubleshoot',\n ],\n },\n {\n landingPath: 'integrations/agents',\n childPaths: [\n 'integrations/mcp',\n 'integrations/a2a',\n ],\n },\n 'integrations/create-your-own-integration',\n ],\n};\n\nfunction renderDocusaurusCategoryItems(input: {\n readonly directory: string;\n readonly itemPaths: readonly string[];\n readonly unitTitleByPath: ReadonlyMap<string, string>;\n}): DocusaurusSidebarItem[] {\n const availablePaths = new Set(input.itemPaths);\n const claimedPaths = new Set<string>();\n const journey = DOCUSAURUS_CATEGORY_JOURNEY_BY_DIRECTORY[input.directory] ?? [];\n const renderedJourney = journey.flatMap((item): DocusaurusSidebarItem[] => {\n if (typeof item === 'string') {\n if (!availablePaths.has(item)) return [];\n claimedPaths.add(item);\n return [item];\n }\n\n const availableChildPaths = item.childPaths.filter((path) => availablePaths.has(path));\n for (const path of availableChildPaths) claimedPaths.add(path);\n if (!availablePaths.has(item.landingPath)) {\n // Applicability may omit a landing while retaining an independently\n // useful task. Never hide those tasks merely because their group cannot\n // be rendered as a linked category in this publication.\n return availableChildPaths;\n }\n\n const label = input.unitTitleByPath.get(item.landingPath);\n if (label === undefined) throw new Error(`technical-documentation Docusaurus journey landing is missing a reader title: ${item.landingPath}`);\n claimedPaths.add(item.landingPath);\n // A landing without applicable child tasks is a document, not an empty\n // disclosure control. This preserves the same no-duplicate/no-empty-arrow\n // rule used for top-level single-page responsibilities.\n if (availableChildPaths.length === 0) return [item.landingPath];\n return [{\n type: 'category',\n label,\n collapsible: true,\n collapsed: true,\n link: { type: 'doc', id: item.landingPath },\n items: availableChildPaths,\n }];\n });\n\n return [\n ...renderedJourney,\n ...input.itemPaths.filter((path) => !claimedPaths.has(path)).sort((left, right) => left.localeCompare(right)),\n ];\n}\n\n/**\n * Authors use tilde fences because this content module itself is a TypeScript\n * template literal. CommonMark accepts them, but the installed Docusaurus\n * Mermaid integration recognizes backtick fences only. Normalize just a\n * well-formed Mermaid pair at this renderer boundary: prose authors stay\n * renderer-neutral, while the renderer emits the fence syntax its MDX plugin\n * actually executes. Other fenced examples retain their authored delimiter.\n */\nfunction normalizeMermaidFencesForDocusaurus(markdown: string): string {\n let insideTildeMermaidFence = false;\n return markdown.split('\\n').map((line) => {\n if (/^\\s{0,3}~~~mermaid\\s*$/.test(line)) {\n insideTildeMermaidFence = true;\n return line.replace('~~~mermaid', '```mermaid');\n }\n if (insideTildeMermaidFence && /^\\s{0,3}~~~\\s*$/.test(line)) {\n insideTildeMermaidFence = false;\n return line.replace('~~~', '```');\n }\n return line;\n }).join('\\n');\n}\n\nfunction renderUnit(unit: TechnicalDocumentationUnitV1, model: TechnicalDocumentationRenderModel, assetPathByRef: ReadonlyMap<string, string>, resolveApiReferenceTarget?: (target: TechnicalDocumentationApiReferenceTargetV1) => string): string {\n const path = model.unitPathByRef.get(unit.unitRef) as string;\n // Every field below carries authored or derived PROSE into an `.mdx` file, so each one is a\n // site where a route template like `/organizations/{organizationId}/todos` would compile fine\n // and then crash the page in the reader's browser. Escaping is applied per field rather than\n // once over the assembled document on purpose: the assembly also emits `---` frontmatter and\n // Markdown punctuation this must not touch, and `title` is JSON-encoded rather than Markdown.\n const sections = unit.sections\n .map((section) => `## ${escapeMarkdownForMdx(section.heading)}\\n\\n${escapeMarkdownForMdx(normalizeMermaidFencesForDocusaurus(section.bodyMarkdown))}`)\n .join('\\n\\n');\n const figures = unit.assetRequests.flatMap((request) => {\n const assetPath = assetPathByRef.get(request.assetRef);\n return assetPath === undefined ? [] : [``];\n });\n const links = unit.links.flatMap((link) => {\n const label = escapeMarkdownForMdx(link.label);\n if (link.kind === TechnicalDocumentationLinkKind.UNIT) {\n const target = model.unitPathByRef.get(link.targetUnitRef as string);\n if (target === undefined) throw new Error(`technical-documentation Docusaurus link target is absent: ${link.targetUnitRef}`);\n return [`- [${label}](/${target})`];\n }\n if (link.kind === TechnicalDocumentationLinkKind.EXTERNAL) return [`- [${label}](${link.externalUrl})`];\n if (link.kind === TechnicalDocumentationLinkKind.API_REFERENCE) {\n if (resolveApiReferenceTarget === undefined) throw new Error(`technical-documentation API-reference link was not resolved before Docusaurus rendering: ${link.linkRef}`);\n return [`- [${label}](${resolveApiReferenceTarget(link.apiReferenceTarget as TechnicalDocumentationApiReferenceTargetV1)})`];\n }\n return [];\n });\n const assetSection = figures.length === 0 ? '' : `\\n\\n## Product view\\n\\n${figures.join('\\n\\n')}`;\n const relatedSection = links.length === 0 ? '' : `\\n\\n## Related\\n\\n${links.join('\\n')}`;\n const summary = escapeMarkdownForMdx(unit.summary);\n return `---\\nid: ${path.split('/').at(-1)}\\ntitle: ${JSON.stringify(unit.title)}\\nsidebar_label: ${JSON.stringify(unit.title)}\\n---\\n\\n${summary}\\n\\n${sections}${assetSection}${relatedSection}\\n`;\n}\n\nfunction renderDocusaurusSidebars(model: TechnicalDocumentationRenderModel): string {\n const rootDocumentPaths: string[] = [];\n const rootDocumentPathSet = new Set<string>();\n const categoryItems: DocusaurusSidebarItem[] = [];\n const claimedRootLandingPaths = new Set<string>();\n const pathsByDirectory = new Map<string, string[]>();\n const unitTitleByPath = new Map<string, string>();\n for (const unit of model.units) {\n const path = model.unitPathByRef.get(unit.unitRef) as string;\n unitTitleByPath.set(path, unit.title);\n const [directory] = path.split('/');\n if (directory === undefined || !path.includes('/')) {\n rootDocumentPaths.push(path);\n rootDocumentPathSet.add(path);\n continue;\n }\n const paths = pathsByDirectory.get(directory) ?? [];\n paths.push(path);\n pathsByDirectory.set(directory, paths);\n }\n\n for (const [directory, paths] of [...pathsByDirectory.entries()].sort(([left], [right]) => left.localeCompare(right))) {\n const label = DOCUSAURUS_CATEGORY_LABEL_BY_DIRECTORY[directory];\n if (label === undefined) throw new Error(`technical-documentation Docusaurus category is missing a reader label: ${directory}`);\n const overviewPath = `${directory}/overview`;\n // A root document and a child directory may deliberately share one route\n // identity (`user-administration` + `user-administration/*`). That exact\n // path relation—not mutable display copy—makes the root document the\n // category landing. Labels remain free to evolve without breaking IA.\n const rootLandingPath = rootDocumentPathSet.has(directory) ? directory : undefined;\n const landingPath = paths.includes(overviewPath) ? overviewPath : rootLandingPath;\n if (rootLandingPath !== undefined && landingPath === rootLandingPath) claimedRootLandingPaths.add(rootLandingPath);\n const itemPaths = paths.filter((path) => path !== overviewPath);\n const [onlyItemPath] = itemPaths;\n\n // A category with one identically named document is not a journey: rendering\n // both creates two adjacent controls with the same reader meaning. Flatten\n // only that exact shape. A differently named single document remains under\n // its responsibility label because the category still adds useful context.\n if (landingPath === undefined && itemPaths.length === 1 && onlyItemPath !== undefined && unitTitleByPath.get(onlyItemPath) === label) {\n categoryItems.push(onlyItemPath);\n continue;\n }\n\n const orderedItems = renderDocusaurusCategoryItems({ directory, itemPaths, unitTitleByPath });\n categoryItems.push({\n type: 'category',\n label,\n collapsible: true,\n // Docusaurus expands the category containing the active document. Keeping\n // other journeys collapsed makes the sidebar scale with the catalogue.\n collapsed: true,\n ...(landingPath === undefined ? {} : { link: { type: 'doc', id: landingPath } }),\n items: orderedItems,\n });\n }\n\n const rootItems = [\n ...rootDocumentPaths.filter((path) => !claimedRootLandingPaths.has(path)),\n ...categoryItems,\n ];\n return `${JSON.stringify({ docs: rootItems }, null, 2)}\\n`;\n}\n\nexport function renderTechnicalDocumentationDocusaurus(input: {\n readonly model: TechnicalDocumentationRenderModel;\n readonly resolvedAssetBundle: TechnicalDocumentationResolvedAssetBundleManifestV1;\n readonly assetBytesByPath: ReadonlyMap<string, Uint8Array>;\n readonly resolveApiReferenceTarget?: (target: TechnicalDocumentationApiReferenceTargetV1) => string;\n}): TechnicalDocumentationRendererResult {\n const assetPathByRef = new Map(input.resolvedAssetBundle.resolvedAssetSet.assets.flatMap((asset) =>\n RENDERABLE_ASSET_STATUSES.has(asset.status) ? [[asset.assetRef, asset.normalizedRelativePath as string]] : []));\n const sourceUnitRefsByAssetRef = new Map<string, string[]>();\n for (const unit of input.model.units) {\n for (const request of unit.assetRequests) {\n const owners = sourceUnitRefsByAssetRef.get(request.assetRef) ?? [];\n owners.push(unit.unitRef);\n sourceUnitRefsByAssetRef.set(request.assetRef, owners);\n }\n }\n const pageFiles = input.model.units.map((unit) => {\n const path = input.model.unitPathByRef.get(unit.unitRef) as string;\n return {\n // The full route identity is part of the output identity. Two valid pages\n // may share their final slug (`integrations/todos` and\n // `user-administration/users`) without sharing a file or a manifest row.\n outputRef: `technical-documentation:output/docusaurus/${path.split('/').join(':')}`,\n rendererRef: DOCUSAURUS_RENDERER_REF,\n outputKind: TechnicalDocumentationOutputKind.MARKDOWN_DOCUMENT,\n sourceUnitRefs: [unit.unitRef],\n normalizedRelativePath: `docusaurus/docs/${path}.mdx`,\n mediaType: 'text/mdx',\n bytes: Buffer.from(renderUnit(unit, input.model, assetPathByRef, input.resolveApiReferenceTarget), 'utf8'),\n } as const;\n });\n const assetFiles = input.resolvedAssetBundle.resolvedAssetSet.assets.flatMap((asset) => {\n if (!RENDERABLE_ASSET_STATUSES.has(asset.status)) return [];\n const path = asset.normalizedRelativePath as string;\n const bytes = input.assetBytesByPath.get(path);\n if (bytes === undefined) throw new Error(`technical-documentation Docusaurus asset bytes are absent: ${path}`);\n const sourceUnitRefs = [...(sourceUnitRefsByAssetRef.get(asset.assetRef) ?? [])].sort();\n if (sourceUnitRefs.length === 0) throw new Error(`technical-documentation resolved asset has no authorized unit owner: ${asset.assetRef}`);\n return [{\n outputRef: `technical-documentation:output/asset/${technicalDocumentationAssetFileStem(asset.assetRef)}`,\n rendererRef: DOCUSAURUS_RENDERER_REF,\n outputKind: TechnicalDocumentationOutputKind.ASSET,\n sourceUnitRefs,\n normalizedRelativePath: `docusaurus/static/${path}`,\n mediaType: asset.mediaType,\n bytes,\n }];\n });\n return {\n execution: createTechnicalDocumentationRendererExecution({\n rendererKind: TechnicalDocumentationRendererKind.DOCUSAURUS,\n rendererRef: DOCUSAURUS_RENDERER_REF,\n rendererVersion: 1,\n configurationRef: 'technical-documentation:renderer-configuration/docusaurus-v1',\n }),\n files: [\n ...pageFiles,\n ...assetFiles,\n {\n outputRef: 'technical-documentation:output/docusaurus-sidebars',\n rendererRef: DOCUSAURUS_RENDERER_REF,\n outputKind: TechnicalDocumentationOutputKind.NAVIGATION_INDEX,\n sourceUnitRefs: input.model.units.map((unit) => unit.unitRef),\n normalizedRelativePath: 'docusaurus/sidebars.json',\n mediaType: 'application/json',\n bytes: Buffer.from(renderDocusaurusSidebars(input.model), 'utf8'),\n },\n ],\n };\n}\n"]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type TechnicalDocumentationAuthorizedBundleManifestV1, type TechnicalDocumentationResolvedAssetBundleManifestV1 } from '@wildo-ai/saas-specifications/technical-documentation';
|
|
2
|
+
import { type TechnicalDocumentationRenderedFile } from './technical-documentation-render-model';
|
|
3
|
+
export interface TechnicalDocumentationOutputBudgets {
|
|
4
|
+
readonly maximumPageCount: number;
|
|
5
|
+
readonly maximumTotalBytes: number;
|
|
6
|
+
readonly maximumSearchIndexBytes: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Ceilings applied when an application declares none.
|
|
10
|
+
*
|
|
11
|
+
* The point is that ABSENCE is bounded, not that these numbers are precisely right. An
|
|
12
|
+
* application which never thought about output size still gets a documentation tree that
|
|
13
|
+
* cannot silently grow until a build host runs out of memory; one that genuinely outgrows
|
|
14
|
+
* a ceiling raises it explicitly, and that edit is visible in review.
|
|
15
|
+
*
|
|
16
|
+
* Generous on purpose. A default tight enough to be "safe" for a small application would
|
|
17
|
+
* fire on ordinary growth, and a limit that routinely fires is a limit people learn to
|
|
18
|
+
* raise without reading — which is worse than no limit at all.
|
|
19
|
+
*/
|
|
20
|
+
export declare const TECHNICAL_DOCUMENTATION_DEFAULT_OUTPUT_BUDGETS: TechnicalDocumentationOutputBudgets;
|
|
21
|
+
/**
|
|
22
|
+
* Sentinels every application inherits, which an application can EXTEND but never remove.
|
|
23
|
+
*
|
|
24
|
+
* ## Why this set is so small
|
|
25
|
+
*
|
|
26
|
+
* A sentinel is matched with `String.includes` against every public file, so a generic
|
|
27
|
+
* marker — `secret`, `token`, `password`, `Bearer` — would fire on the very guides that
|
|
28
|
+
* teach authentication, error handling and webhook signature verification. Those documents
|
|
29
|
+
* legitimately contain those words. A canary that cries on correct content gets removed,
|
|
30
|
+
* and then it protects nothing.
|
|
31
|
+
*
|
|
32
|
+
* So the mandatory set is restricted to byte sequences that **cannot legitimately appear in
|
|
33
|
+
* published product documentation** under any authoring style. A PEM private-key header
|
|
34
|
+
* qualifies: documentation teaches readers to *use* a public key, never to read a private
|
|
35
|
+
* one, so its presence in a public tree is a leak by construction rather than by judgement.
|
|
36
|
+
*
|
|
37
|
+
* Application-specific canaries — a restricted-content marker, a fixture value that must
|
|
38
|
+
* stay internal — belong in the application's own declared list, which is UNIONED with this
|
|
39
|
+
* one. The union direction is the safety property: an application must be able to add
|
|
40
|
+
* canaries and must not be able to switch these off.
|
|
41
|
+
*/
|
|
42
|
+
export declare const TECHNICAL_DOCUMENTATION_MANDATORY_PUBLIC_SENTINELS: readonly string[];
|
|
43
|
+
/**
|
|
44
|
+
* Resolves the effective budgets from an application's partial declaration.
|
|
45
|
+
*
|
|
46
|
+
* Per-field rather than all-or-nothing: an application that only needs a larger page
|
|
47
|
+
* count should not have to restate — and thereby freeze a copy of — every other ceiling.
|
|
48
|
+
*/
|
|
49
|
+
export declare function resolveTechnicalDocumentationOutputBudgets(declared?: Partial<TechnicalDocumentationOutputBudgets>): TechnicalDocumentationOutputBudgets;
|
|
50
|
+
/**
|
|
51
|
+
* Unions the mandatory sentinels with an application's declared ones.
|
|
52
|
+
*
|
|
53
|
+
* A union, never a replacement — see
|
|
54
|
+
* {@link TECHNICAL_DOCUMENTATION_MANDATORY_PUBLIC_SENTINELS}. Deduplicated and sorted so
|
|
55
|
+
* the resolved set is a stable value: it is compared and reported, and an order that
|
|
56
|
+
* varied with authoring order would make two identical policies look different.
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveTechnicalDocumentationForbiddenPublicSentinels(declared?: readonly string[]): readonly string[];
|
|
59
|
+
export interface TechnicalDocumentationManagedTreeValidationReport {
|
|
60
|
+
readonly pageCount: number;
|
|
61
|
+
readonly totalBytes: number;
|
|
62
|
+
readonly searchIndexBytes: number;
|
|
63
|
+
}
|
|
64
|
+
export declare function validateTechnicalDocumentationManagedTree(input: {
|
|
65
|
+
readonly manifest: unknown;
|
|
66
|
+
readonly files: readonly TechnicalDocumentationRenderedFile[];
|
|
67
|
+
readonly authorizedBundle: TechnicalDocumentationAuthorizedBundleManifestV1;
|
|
68
|
+
readonly resolvedAssetBundle: TechnicalDocumentationResolvedAssetBundleManifestV1;
|
|
69
|
+
readonly forbiddenPublicSentinels: readonly string[];
|
|
70
|
+
readonly budgets: TechnicalDocumentationOutputBudgets;
|
|
71
|
+
}): TechnicalDocumentationManagedTreeValidationReport;
|
|
72
|
+
//# sourceMappingURL=technical-documentation-managed-tree-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"technical-documentation-managed-tree-validator.d.ts","sourceRoot":"","sources":["../../../../../src/companion/rendering/technical-documentation-managed-tree-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gDAAgD,EAErD,KAAK,mDAAmD,EACzD,MAAM,uDAAuD,CAAC;AAE/D,OAAO,EAEL,KAAK,kCAAkC,EACxC,MAAM,wCAAwC,CAAC;AAMhD,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;CAC1C;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,8CAA8C,EAAE,mCAI3D,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,kDAAkD,EAAE,SAAS,MAAM,EAK9E,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,0CAA0C,CACxD,QAAQ,CAAC,EAAE,OAAO,CAAC,mCAAmC,CAAC,GACtD,mCAAmC,CAErC;AAED;;;;;;;GAOG;AACH,wBAAgB,qDAAqD,CACnE,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAC3B,SAAS,MAAM,EAAE,CASnB;AAED,MAAM,WAAW,iDAAiD;IAChE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AA4CD,wBAAgB,yCAAyC,CAAC,KAAK,EAAE;IAC/D,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,kCAAkC,EAAE,CAAC;IAC9D,QAAQ,CAAC,gBAAgB,EAAE,gDAAgD,CAAC;IAC5E,QAAQ,CAAC,mBAAmB,EAAE,mDAAmD,CAAC;IAClF,QAAQ,CAAC,wBAAwB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,mCAAmC,CAAC;CACvD,GAAG,iDAAiD,CAiFpD"}
|