@eventcatalog/core 4.10.13 → 4.10.15
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/dist/analytics/analytics.cjs +1 -1
- package/dist/analytics/analytics.js +2 -2
- package/dist/analytics/log-build.cjs +1 -1
- package/dist/analytics/log-build.js +3 -3
- package/dist/{chunk-SSSN5FXC.js → chunk-7LWOCX4R.js} +1 -1
- package/dist/{chunk-IIECZFXN.js → chunk-A4JRWRCV.js} +1 -1
- package/dist/{chunk-JHUICVBT.js → chunk-HBVTU6ZP.js} +1 -1
- package/dist/{chunk-PADMH2RJ.js → chunk-I6HUOX4R.js} +1 -1
- package/dist/{chunk-34RMFKFB.js → chunk-Q2ATWE7N.js} +1 -1
- package/dist/constants.cjs +1 -1
- package/dist/constants.js +1 -1
- package/dist/docs/api/02-config.md +60 -6
- package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/02-configuration.md +18 -11
- package/dist/docs/development/authentication/providers/03-setting-up-github.md +29 -0
- package/dist/docs/development/bring-your-own-documentation/custom-pages/02-adding-custom-docs.md +2 -2
- package/dist/docs/development/bring-your-own-documentation/custom-pages/03-components.md +17 -0
- package/dist/docs/development/components/07-resource-references.md +7 -1
- package/dist/docs/development/components/components/05-architecture-graph.md +65 -0
- package/dist/docs/development/components/components/{05-attachments.md → 06-attachments.md} +1 -1
- package/dist/docs/development/components/components/{06-channel-information.md → 07-channel-information.md} +1 -1
- package/dist/docs/development/components/components/{07-custom-properties.md → 08-custom-properties.md} +1 -1
- package/dist/docs/development/components/components/{08-design.md → 09-design.md} +1 -1
- package/dist/docs/development/components/components/{09-entitymap.md → 10-entitymap.md} +1 -1
- package/dist/docs/development/components/components/{10-flow.md → 11-flow.md} +1 -1
- package/dist/docs/development/components/components/{11-link.md → 12-link.md} +1 -1
- package/dist/docs/development/components/components/{12-mermaid-file-loader.md → 13-mermaid-file-loader.md} +13 -1
- package/dist/docs/development/components/components/{13-message-table.md → 14-message-table.md} +1 -1
- package/dist/docs/development/components/components/{14-nodegraph.md → 15-nodegraph.md} +1 -1
- package/dist/docs/development/components/components/{15-openapi.md → 16-openapi.md} +1 -1
- package/dist/docs/development/components/components/{16-prompt.md → 17-prompt.md} +1 -1
- package/dist/docs/development/components/components/{17-remote-schema.md → 18-remote-schema.md} +1 -1
- package/dist/docs/development/components/components/{18-resource-group-table.md → 19-resource-group-table.md} +1 -1
- package/dist/docs/development/components/components/{19-resource-link.md → 20-resource-link.md} +1 -1
- package/dist/docs/development/components/components/{20-schema.md → 21-schema.md} +1 -1
- package/dist/docs/development/components/components/{21-schema-viewer.md → 22-schema-viewer.md} +1 -1
- package/dist/docs/development/components/components/{22-steps.md → 23-steps.md} +1 -1
- package/dist/docs/development/components/components/{23-tabs.md → 24-tabs.md} +1 -1
- package/dist/docs/development/components/components/{24-tiles.md → 25-tiles.md} +1 -1
- package/dist/docs/development/components/components/{25-visibility.md → 26-visibility.md} +1 -1
- package/dist/docs/development/components/diagram-syntax/06-mermaid.md +45 -6
- package/dist/docs/development/customization/04-documentation-sidebar.md +3 -3
- package/dist/docs/development/customization/05-resource-sidebar.md +235 -0
- package/dist/docs/development/customization/09-embed-eventcatalog.md +179 -0
- package/dist/docs/development/customization/_category_.json +1 -1
- package/dist/docs/development/deployment/build-and-deploy.md +4 -0
- package/dist/docs/development/deployment/hosting-options.md +1 -1
- package/dist/docs/development/deployment/link-validation.md +105 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/00-overview.md +76 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/01-setup.md +144 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/_category_.json +10 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/01-configure-rules.md +130 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/02-run-in-ci.md +93 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/03-use-custom-frontmatter.md +81 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/04-reference-external-catalogs.md +51 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/05-fix-common-problems.md +120 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/_category_.json +12 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/01-cli.md +109 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/02-configuration.md +120 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/03-rules.md +287 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/04-versions.md +77 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/05-supported-resources.md +75 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/_category_.json +12 -0
- package/dist/docs/development/guides/97-architecture-graph.md +78 -0
- package/dist/docs/development/guides/domains/02-create-domain.md +1 -1
- package/dist/docs/development/guides/domains/03-ownership-and-language/02-adding-ubiquitous-language.md +29 -0
- package/dist/docs/development/guides/domains/09-reference.md +10 -0
- package/dist/docs/development/guides/resources/messages/04-message-channels/02-adding-channels.md +2 -2
- package/dist/docs/development/guides/resources/messages/04-message-channels/04-adding-messages-to-services.md +8 -0
- package/dist/docs/development/guides/resources/schemas/03-add-specifications-to-services/01-add-openapi-specifications.md +2 -2
- package/dist/docs/development/guides/resources/schemas/03-add-specifications-to-services/02-add-asyncapi-specifications.md +3 -3
- package/dist/docs/development/guides/systems/05-system-context-maps.md +2 -0
- package/dist/docs/development/license-keys/license-validation.md +7 -3
- package/dist/docs/development/license-keys/overview.md +7 -3
- package/dist/docs/development/upgrading/upgrading.md +3 -3
- package/dist/docs/development/upgrading/v2.md +3 -3
- package/dist/docs/federation/00-overview.md +158 -0
- package/dist/docs/federation/01-first-federation.md +199 -0
- package/dist/docs/federation/_category_.json +12 -0
- package/dist/docs/federation/explanation/_category_.json +12 -0
- package/dist/docs/federation/explanation/how-it-works.md +129 -0
- package/dist/docs/federation/explanation/lockfile-and-cache.md +134 -0
- package/dist/docs/federation/explanation/mvp-status-and-feedback.md +86 -0
- package/dist/docs/federation/explanation/ownership-and-references.md +134 -0
- package/dist/docs/federation/how-to/_category_.json +12 -0
- package/dist/docs/federation/how-to/configure-github-sources.md +156 -0
- package/dist/docs/federation/how-to/configure-validation-rules.md +127 -0
- package/dist/docs/federation/how-to/run-in-ci.md +138 -0
- package/dist/docs/federation/how-to/share-assets-and-components.md +125 -0
- package/dist/docs/federation/how-to/use-local-sources.md +138 -0
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/00-introduction.md +11 -2
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/01-installation.md +11 -3
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/02-plugin-configuration.md +11 -2
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/03-examples.md +11 -1
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/04-configuration.md +11 -1
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/05-setup-team-catalog.md +11 -2
- package/dist/docs/federation/legacy-federation/_category_.json +12 -0
- package/dist/docs/federation/reference/_category_.json +12 -0
- package/dist/docs/federation/reference/cli.md +122 -0
- package/dist/docs/federation/reference/configuration.md +192 -0
- package/dist/docs/federation/reference/diagnostic-rules.md +173 -0
- package/dist/docs/federation/reference/generated-output.md +118 -0
- package/dist/docs/federation/reference/supported-content.md +86 -0
- package/dist/docs/federation/reference/troubleshooting.md +208 -0
- package/dist/docs/plugins/01-intro.md +3 -3
- package/dist/docs/plugins/03-all-plugins.md +2 -2
- package/dist/docs/plugins/asyncapi/00-intro.md +4 -4
- package/dist/docs/plugins/asyncapi/02-plugin-configuration.md +4 -4
- package/dist/docs/plugins/backstage/00-overview.md +53 -0
- package/dist/docs/plugins/backstage/01-get-started.md +95 -0
- package/dist/docs/plugins/backstage/02-embed-entity-tabs.md +109 -0
- package/dist/docs/plugins/backstage/03-add-overview-cards.md +79 -0
- package/dist/docs/plugins/backstage/04-control-theme-and-size.md +54 -0
- package/dist/docs/plugins/backstage/05-migrate-to-annotations.md +49 -0
- package/dist/docs/plugins/backstage/06-configuration.md +85 -0
- package/dist/docs/plugins/backstage/07-components.md +129 -0
- package/dist/docs/plugins/backstage/08-how-embeds-work.md +52 -0
- package/dist/docs/plugins/backstage/_category_.json +4 -3
- package/dist/docs/plugins/eventbridge/00-intro.md +5 -5
- package/dist/docs/plugins/eventbridge/03-api.md +3 -3
- package/dist/docs/plugins/graphql/00-intro.md +2 -2
- package/dist/docs/plugins/graphql/02-plugin-configuration.md +2 -2
- package/dist/docs/plugins/hookdeck/01-intro.md +1 -1
- package/dist/docs/plugins/openapi/00-intro.md +1 -1
- package/dist/eventcatalog.cjs +1 -1
- package/dist/eventcatalog.js +5 -5
- package/dist/generate.cjs +1 -1
- package/dist/generate.js +3 -3
- package/dist/utils/cli-logger.cjs +1 -1
- package/dist/utils/cli-logger.js +2 -2
- package/eventcatalog/src/components/SchemaExplorer/AvroSchemaViewer.tsx +21 -19
- package/eventcatalog/src/components/SchemaExplorer/JSONSchemaViewer.test.tsx +114 -0
- package/eventcatalog/src/components/SchemaExplorer/JSONSchemaViewer.tsx +107 -86
- package/eventcatalog/src/components/SchemaExplorer/ProtobufSchemaViewer.test.tsx +91 -0
- package/eventcatalog/src/components/SchemaExplorer/ProtobufSchemaViewer.tsx +115 -33
- package/eventcatalog/src/components/SchemaExplorer/SchemaViewerHover.test.tsx +33 -0
- package/eventcatalog/src/components/SchemaExplorer/protobuf-validation.test.ts +84 -0
- package/eventcatalog/src/components/SchemaExplorer/protobuf-validation.ts +149 -0
- package/eventcatalog/src/utils/collections/glob-loader.ts +2 -2
- package/eventcatalog/src/utils/protobuf-schema.ts +211 -16
- package/package.json +8 -8
- package/dist/docs/cli/channels.md +0 -180
- package/dist/docs/cli/commands.md +0 -183
- package/dist/docs/cli/custom-docs.md +0 -78
- package/dist/docs/cli/data-products.md +0 -177
- package/dist/docs/cli/data-stores.md +0 -166
- package/dist/docs/cli/diagrams.md +0 -147
- package/dist/docs/cli/domains.md +0 -280
- package/dist/docs/cli/entities.md +0 -138
- package/dist/docs/cli/events.md +0 -186
- package/dist/docs/cli/export.md +0 -27
- package/dist/docs/cli/governance.md +0 -24
- package/dist/docs/cli/messages.md +0 -69
- package/dist/docs/cli/queries.md +0 -183
- package/dist/docs/cli/services.md +0 -266
- package/dist/docs/cli/snapshots.md +0 -44
- package/dist/docs/cli/teams.md +0 -75
- package/dist/docs/cli/users.md +0 -75
- package/dist/docs/cli/utilities.md +0 -43
- package/dist/docs/development/developer-tools/eventcatalog-linter.md +0 -732
- package/dist/docs/plugins/backstage/00-intro.md +0 -67
- package/dist/docs/plugins/backstage/01-installation.md +0 -242
- package/dist/docs/plugins/backstage/02-api.md +0 -51
- package/dist/docs/plugins/backstage/03-examples.md +0 -12
- package/dist/docs/plugins/eventcatalog-federation/_category_.json +0 -11
|
@@ -29,7 +29,7 @@ If you have large diagrams that fail to render, increase the `maxTextSize` confi
|
|
|
29
29
|
|
|
30
30
|
### Using the `mermaid` code block in any markdown file.
|
|
31
31
|
|
|
32
|
-
To use mermaid you need to use the `mermaid` code block in any markdown file.
|
|
32
|
+
To use mermaid you need to use the `mermaid` code block in any markdown file. You can pass `placement` and `actions` on the code fence to configure the [interactive controls](#control-options).
|
|
33
33
|
|
|
34
34
|
#### Example
|
|
35
35
|
|
|
@@ -74,6 +74,9 @@ Add your .mmd or .mermaid file to your folder (e.g `/events/MyEvent/mermaid.mmd`
|
|
|
74
74
|
|
|
75
75
|
<!-- Using the .mermaid file extension -->
|
|
76
76
|
<MermaidFileLoader file="my-second-mermaid-file.mermaid" />
|
|
77
|
+
|
|
78
|
+
<!-- Optional: configure interactive controls -->
|
|
79
|
+
<MermaidFileLoader file="mermaid.mmd" placement="top-left" actions={false} />
|
|
77
80
|
```
|
|
78
81
|
|
|
79
82
|
This example will load a mermaid file (.mmd or .mermaid) into your EventCatalog page.
|
|
@@ -180,22 +183,58 @@ All Mermaid diagrams include interactive controls for better viewing and explora
|
|
|
180
183
|
|
|
181
184
|

|
|
182
185
|
|
|
186
|
+
Pan, zoom, reset, fullscreen, and copy controls appear on hover. On touch devices the controls stay visible.
|
|
187
|
+
|
|
183
188
|
### Zoom and pan
|
|
184
189
|
|
|
185
|
-
Click and drag to pan around the diagram, or use the
|
|
190
|
+
Click and drag to pan around the diagram, or use the pan and zoom buttons to move around. Double-click the diagram to zoom in quickly. Use reset to fit the diagram back into view.
|
|
186
191
|
|
|
187
|
-
###
|
|
192
|
+
### Fullscreen
|
|
188
193
|
|
|
189
|
-
Click the
|
|
194
|
+
Click the fullscreen button to open the diagram in a modal. In fullscreen you can drag, scroll, or pinch to zoom.
|
|
190
195
|
|
|
191
|
-
|
|
196
|
+
Keyboard shortcuts in fullscreen:
|
|
197
|
+
- Arrow keys to pan
|
|
198
|
+
- `+` / `-` to zoom
|
|
199
|
+
- `0` to reset
|
|
200
|
+
- `Escape` to close
|
|
192
201
|
|
|
193
202
|
### Copy diagram code
|
|
194
203
|
|
|
195
|
-
Click the copy button
|
|
204
|
+
Click the copy button to copy the diagram code to your clipboard.
|
|
196
205
|
|
|
197
206
|
Useful for copying diagrams into LLM prompts.
|
|
198
207
|
|
|
208
|
+
### Control options
|
|
209
|
+
|
|
210
|
+
<AddedIn version="4.10.6" />
|
|
211
|
+
|
|
212
|
+
Code blocks and [`<MermaidFileLoader />`](/docs/development/components/components/mermaid-file-loader) accept `placement` and `actions` to configure the controls.
|
|
213
|
+
|
|
214
|
+
| Name | Type | Default | Description |
|
|
215
|
+
| ---- | ---- | ------- | ----------- |
|
|
216
|
+
| `placement` (optional) | `'top-left' \| 'top-right' \| 'bottom-left' \| 'bottom-right'` | `'top-right'` | Corner for the interactive controls. |
|
|
217
|
+
| `actions` (optional) | `boolean` | shown when the diagram is taller than 120px | `true` always shows the controls. `false` hides them. |
|
|
218
|
+
|
|
219
|
+
#### Code block
|
|
220
|
+
|
|
221
|
+
Pass the options on the `mermaid` code fence. `placement` accepts double or single quotes. `actions` accepts `{true}` / `{false}` or `true` / `false`.
|
|
222
|
+
|
|
223
|
+
```markdown
|
|
224
|
+
```mermaid placement="top-left" actions={false}
|
|
225
|
+
sequenceDiagram
|
|
226
|
+
participant Customer
|
|
227
|
+
participant OrdersService
|
|
228
|
+
Customer->>OrdersService: Place Order
|
|
229
|
+
```_
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
#### MermaidFileLoader
|
|
233
|
+
|
|
234
|
+
```md
|
|
235
|
+
<MermaidFileLoader file="mermaid.mmd" placement="top-left" actions={false} />
|
|
236
|
+
```
|
|
237
|
+
|
|
199
238
|
## Export NodeGraphs as Mermaid
|
|
200
239
|
|
|
201
240
|
<AddedIn version="3.9.0" />
|
|
@@ -9,7 +9,7 @@ description: Pick and customize the documentation sidebar.
|
|
|
9
9
|
|
|
10
10
|
import AddedIn from '@site/src/components/MDX/AddedIn';
|
|
11
11
|
|
|
12
|
-
The documentation sidebar is a [context aware sidebar](#what-is-context-aware-sidebar) that is shown on the `/docs/` pages.
|
|
12
|
+
The documentation sidebar is a [context aware sidebar](#what-is-a-context-aware-sidebar) that is shown on the `/docs/` pages.
|
|
13
13
|
|
|
14
14
|
Clicking on any resource in the sidebar will show you related information to that selected resource ([see demo](https://demo.eventcatalog.dev/)).
|
|
15
15
|
|
|
@@ -56,9 +56,9 @@ You can specify the following options in the `navigation.pages` property:
|
|
|
56
56
|
|
|
57
57
|
- [Top level options](#top-level-options)
|
|
58
58
|
- Useful if you want to show the top-level resources in your catalog in the sidebar. For example high level domains and let your users drill down.
|
|
59
|
-
- [List all resources (by type)](#list-all-resources-type)
|
|
59
|
+
- [List all resources (by type)](#list-all-resources-by-type)
|
|
60
60
|
- Useful if you want to show all resources of a specific type in the sidebar. For example all domains, services, messages, etc.
|
|
61
|
-
- [Pick specific resources to show](#
|
|
61
|
+
- [Pick specific resources to show](#chose-which-resources-to-show)
|
|
62
62
|
- Useful if you want to show a specific resource or a group of resources in the sidebar. For example a specific domain, service, message, etc.
|
|
63
63
|
- [Custom groups and links](#custom-groups-and-links)
|
|
64
64
|
- Useful if you want to create custom groups and links to external pages in the sidebar. For example a group of resources, or a link to an external page.
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 2.5
|
|
3
|
+
keywords:
|
|
4
|
+
- EventCatalog resource sidebar
|
|
5
|
+
- customize sidebar
|
|
6
|
+
- sidebar.json
|
|
7
|
+
sidebar_label: Resource sidebar
|
|
8
|
+
title: Resource sidebar
|
|
9
|
+
description: Define your own sidebar for any resource with a sidebar.json file.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
import AddedIn from '@site/src/components/MDX/AddedIn';
|
|
13
|
+
|
|
14
|
+
<AddedIn version="4.10.0" />
|
|
15
|
+
|
|
16
|
+
Every resource in EventCatalog (domains, services, messages, flows, and more) gets a generated sidebar showing its quick reference, architecture, related resources and owners.
|
|
17
|
+
|
|
18
|
+

|
|
19
|
+
|
|
20
|
+
By default, EventCatalog will generate a sidebar for your resources, but sometimes you may want to customize what is shown here — for example runbooks, guides, external links, or your own grouping of events and services.
|
|
21
|
+
|
|
22
|
+
To do this, add a `sidebar.json` file next to the resource's `index.mdx`. This file becomes the sidebar for that resource.
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
domains/
|
|
26
|
+
Payments/
|
|
27
|
+
index.mdx
|
|
28
|
+
sidebar.json <-- your sidebar for the Payments domain
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
:::info The file is the sidebar
|
|
32
|
+
When a `sidebar.json` is present it fully replaces the generated sidebar — what you list is what renders, in the order you list it. Nothing is merged in, and anything you don't list isn't shown. Remove the file to get the default sidebar back.
|
|
33
|
+
:::
|
|
34
|
+
|
|
35
|
+
## Which resources support it?
|
|
36
|
+
|
|
37
|
+
All of them. A `sidebar.json` can sit next to the `index.mdx` of any **domain, system, service, agent, event, command, query, flow, container (data store), entity, data product or ADR**.
|
|
38
|
+
|
|
39
|
+
Versioned copies (`versioned/0.0.1/index.mdx`) inherit the resource folder's `sidebar.json` automatically, unless the versioned folder contains its own.
|
|
40
|
+
|
|
41
|
+
## Quick start
|
|
42
|
+
|
|
43
|
+
A sidebar is a list of **sections**. A section is either a predefined `$token` (a section EventCatalog generates and keeps up to date for you) or a group you define yourself:
|
|
44
|
+
|
|
45
|
+
```json title="domains/Payments/sidebar.json"
|
|
46
|
+
{
|
|
47
|
+
"sections": [
|
|
48
|
+
// A predefined section, relabelled from "Quick Reference" to "Overview"
|
|
49
|
+
{ "section": "$quick-reference", "title": "Overview" },
|
|
50
|
+
// Your own group — any Lucide icon name works
|
|
51
|
+
{
|
|
52
|
+
"title": "Runbooks",
|
|
53
|
+
"icon": "Siren",
|
|
54
|
+
"pages": [
|
|
55
|
+
// Links to this domain's runbooks/failed-captures documentation page
|
|
56
|
+
"[[doc|runbooks/failed-captures]]",
|
|
57
|
+
// A plain link — external links open in a new tab
|
|
58
|
+
{ "title": "Health dashboard", "href": "https://grafana.acme.dev/d/payments" }
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
// Predefined sections, rendered exactly as the default sidebar would
|
|
62
|
+
"$architecture",
|
|
63
|
+
"$services",
|
|
64
|
+
"$owners"
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
This renders: an **Overview** section (the generated Quick Reference, relabelled), your own **Runbooks** group, then the generated **Architecture**, **Services** and **Owners** sections.
|
|
70
|
+
|
|
71
|
+
## Sections
|
|
72
|
+
|
|
73
|
+
Each entry in `sections` is one of three shapes:
|
|
74
|
+
|
|
75
|
+
| Shape | Example | Meaning |
|
|
76
|
+
|-------|---------|---------|
|
|
77
|
+
| Token | `"$architecture"` | A predefined section, rendered exactly as the default sidebar would — and kept up to date as your catalog changes |
|
|
78
|
+
| Adjusted token | `{ "section": "$owners", "title": "Team" }` | A predefined section with a new `title`, `icon` or `collapsed` state |
|
|
79
|
+
| Custom group | `{ "title": "Runbooks", "icon": "Siren", "pages": [...] }` | A group you define. `icon` is any [Lucide](https://lucide.dev) icon name |
|
|
80
|
+
|
|
81
|
+
A predefined section with nothing behind it (for example `$entities` on a domain with no entities) renders nothing — you can safely list sections that only sometimes have content.
|
|
82
|
+
|
|
83
|
+
## Pages
|
|
84
|
+
|
|
85
|
+
Inside a custom group, each entry in `pages` is one of:
|
|
86
|
+
|
|
87
|
+
| Entry | Example | Renders |
|
|
88
|
+
|-------|---------|---------|
|
|
89
|
+
| Section token | `"$inbound-messages"` | The **items** of a predefined section, spliced into your group — this is how you extend a generated section with your own pages |
|
|
90
|
+
| Resource reference | `"[[service\|payment-api]]"` | The resource, with its own expandable nested sidebar, at its latest version. Messages can pin a version: `"[[event\|payment-captured@1.0.0]]"` — other types always reference the latest |
|
|
91
|
+
| Documentation reference | `"[[doc\|guides/onboarding]]"` | One of this resource's [documentation pages](/docs/development/bring-your-own-documentation/resource-docs/adding-resource-docs), addressed as `<type>/<id>` |
|
|
92
|
+
| Specification reference | `"[[spec\|openapi.yml]]"` | A specification page, with the OpenAPI/AsyncAPI/GraphQL logo and the spec's name |
|
|
93
|
+
| Schema reference | `"[[schema\|payment-captured]]"` | A message's schema page |
|
|
94
|
+
| Link | `{ "title": "Runbook", "href": "https://..." }` | A plain link. External links (any protocol) open in a new tab and show an external-link icon |
|
|
95
|
+
| Nested group | `{ "title": "Internal", "collapsed": true, "pages": [...] }` | A subsection. Groups nest to any depth |
|
|
96
|
+
|
|
97
|
+
Resource references accept any resource type: `domain`, `system`, `service`, `agent`, `event`, `command`, `query`, `flow`, `container`, `entity`, `channel`, `data-product`, `adr`, `diagram`, `team`, `user`.
|
|
98
|
+
|
|
99
|
+
### Specification and schema references
|
|
100
|
+
|
|
101
|
+
Specifications belong to a resource, so a spec reference names the file — and optionally the resource that owns it:
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
"[[spec|openapi.yml]]" // this resource's own spec
|
|
105
|
+
"[[spec|payment-api/openapi.yml]]" // another resource's spec, by id
|
|
106
|
+
"[[spec|service/payment-api/openapi.yml]]" // type-qualified
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Specifications always come from the owner's latest version.
|
|
110
|
+
|
|
111
|
+
Schema references point at a message's schema page:
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
"[[schema|payment-captured]]" // latest version
|
|
115
|
+
"[[schema|event/payment-captured@1.0.0]]" // type-qualified and pinned to a version
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Extending a generated section
|
|
119
|
+
|
|
120
|
+
Because a `$token` inside `pages` splices in that section's items, extending a generated section is just wrapping it in your own group — placement is list order:
|
|
121
|
+
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"title": "Quick Reference",
|
|
125
|
+
"icon": "BookOpen",
|
|
126
|
+
"pages": [
|
|
127
|
+
// Splices in the generated Quick Reference items (Overview, Changelog, ...)
|
|
128
|
+
"$quick-reference",
|
|
129
|
+
// ...followed by your own pages
|
|
130
|
+
"[[doc|guides/onboarding]]",
|
|
131
|
+
{ "title": "Team Slack", "href": "https://acme.slack.com/archives/payments" }
|
|
132
|
+
]
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Link placeholders
|
|
137
|
+
|
|
138
|
+
Internal links can use `{collection}`, `{id}` and `{version}` placeholders for the resource the sidebar belongs to, so the same file works across versions:
|
|
139
|
+
|
|
140
|
+
```json
|
|
141
|
+
// On the Payments domain v1.0.0 this renders as
|
|
142
|
+
// "Visualiser (1.0.0)" -> /visualiser/domains/payments/1.0.0
|
|
143
|
+
{ "title": "Visualiser ({version})", "href": "/visualiser/{collection}/{id}/{version}" }
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Internal links automatically respect your configured base path.
|
|
147
|
+
|
|
148
|
+
## Collapsing sections
|
|
149
|
+
|
|
150
|
+
Any object-form section or group accepts `"collapsed": true | false` as its **initial** state — users can still toggle it, and their choice is remembered:
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
// Starts collapsed; users can still expand it and their choice is remembered
|
|
154
|
+
{ "title": "Internal commands", "collapsed": true, "pages": ["[[command|refund-payment]]"] }
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Without `collapsed`, groups with more than five items start collapsed and smaller groups start open.
|
|
158
|
+
|
|
159
|
+
## Predefined sections
|
|
160
|
+
|
|
161
|
+
Tokens shared by most resource types:
|
|
162
|
+
|
|
163
|
+
`$quick-reference` · `$documentation` · `$architecture` · `$diagrams` · `$decision-records` · `$owners` · `$code` · `$attachments`
|
|
164
|
+
|
|
165
|
+
And per resource type:
|
|
166
|
+
|
|
167
|
+
| Resource | Tokens |
|
|
168
|
+
|----------|--------|
|
|
169
|
+
| Domain | `$api-and-contracts` `$systems` `$subdomains` `$resources` `$services` `$flows` `$entities` `$domain-events` `$external-events` `$resource-groups` `$agents` `$external-integrations` `$data-products` |
|
|
170
|
+
| System | `$resources` `$services` `$flows` `$data-stores` `$entities` |
|
|
171
|
+
| Service / Agent | `$api-and-contracts`* `$resource-groups` `$state-and-persistence` `$entities`* `$outbound-messages` `$inbound-messages` `$channels` `$flows` |
|
|
172
|
+
| Event / Command / Query | `$api-and-contracts` `$producers` `$consumers` `$triggered-by` `$triggers` `$appears-in-flows` |
|
|
173
|
+
| Flow | `$messages` `$services` `$agents` `$subflows` `$data-stores` `$data-products` |
|
|
174
|
+
| Container | `$writes` `$reads` `$appears-in-flows` |
|
|
175
|
+
| Data product | `$inputs` `$outputs` `$data-contracts` `$appears-in-flows` |
|
|
176
|
+
| Entity | `$domains` `$services` |
|
|
177
|
+
| ADR | `$applies-to` `$supersedes` `$superseded-by` `$amends` `$amended-by` `$related-decisions` `$decision-makers` |
|
|
178
|
+
|
|
179
|
+
\* service only.
|
|
180
|
+
|
|
181
|
+
Tokens like `$services` that the default sidebar nests inside a "Resources" umbrella render as top-level sections when you use them directly.
|
|
182
|
+
|
|
183
|
+
## When something doesn't resolve
|
|
184
|
+
|
|
185
|
+
Mistakes fail fast so your catalog never silently ships a broken sidebar:
|
|
186
|
+
|
|
187
|
+
- An unknown `$token`, or a `[[doc|…]]`, `[[spec|…]]` or `[[schema|…]]` reference that doesn't resolve **fails the build**, with an error naming the file and listing the valid options.
|
|
188
|
+
- A resource reference (like `[[service|…]]`) to something that doesn't exist renders nothing.
|
|
189
|
+
|
|
190
|
+
## A complete example
|
|
191
|
+
|
|
192
|
+
The [demo catalog](https://demo.eventcatalog.dev/docs/domains/catalog/1.0.0) uses resource sidebars throughout. The Catalog domain's sidebar organizes the domain for its consumers — guides first, then the events other teams integrate with:
|
|
193
|
+
|
|
194
|
+
```json title="domains/Catalog/sidebar.json"
|
|
195
|
+
{
|
|
196
|
+
"sections": [
|
|
197
|
+
// Generated Quick Reference, relabelled
|
|
198
|
+
{ "section": "$quick-reference", "title": "Overview" },
|
|
199
|
+
// The domain's documentation pages, front and center for new consumers
|
|
200
|
+
{
|
|
201
|
+
"title": "Guides",
|
|
202
|
+
"icon": "BookOpen",
|
|
203
|
+
"pages": [
|
|
204
|
+
"[[doc|guides/integrating-with-the-catalog]]",
|
|
205
|
+
"[[doc|guides/product-data-model]]",
|
|
206
|
+
"[[doc|guides/event-versioning]]"
|
|
207
|
+
]
|
|
208
|
+
},
|
|
209
|
+
// A curated list of the events other teams subscribe to.
|
|
210
|
+
// Each renders with its own expandable nested sidebar.
|
|
211
|
+
{
|
|
212
|
+
"title": "Integration Events",
|
|
213
|
+
"icon": "Radio",
|
|
214
|
+
"pages": ["[[event|product-created]]", "[[event|product-updated]]", "[[event|product-deleted]]"]
|
|
215
|
+
},
|
|
216
|
+
// Generated sections — kept up to date as the catalog changes
|
|
217
|
+
"$architecture",
|
|
218
|
+
"$systems",
|
|
219
|
+
"$entities",
|
|
220
|
+
// Docs mixed with external links in one group
|
|
221
|
+
{
|
|
222
|
+
"title": "Runbooks",
|
|
223
|
+
"icon": "Siren",
|
|
224
|
+
"pages": [
|
|
225
|
+
"[[doc|runbooks/on-call]]",
|
|
226
|
+
"[[doc|runbooks/search-index-lag]]",
|
|
227
|
+
{ "title": "Health dashboard", "href": "https://grafana.acme.dev/d/catalog-overview" }
|
|
228
|
+
]
|
|
229
|
+
},
|
|
230
|
+
// Out of the way until needed
|
|
231
|
+
{ "title": "Decisions", "icon": "ClipboardList", "collapsed": true, "pages": ["[[adr|adr-001-use-transactional-outbox]]"] },
|
|
232
|
+
"$owners"
|
|
233
|
+
]
|
|
234
|
+
}
|
|
235
|
+
```
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 11
|
|
3
|
+
sidebar_label: Embed EventCatalog
|
|
4
|
+
title: Embed EventCatalog in other applications
|
|
5
|
+
description: Bring EventCatalog documentation, diagrams, schemas, messages, and flows into your internal applications.
|
|
6
|
+
keywords:
|
|
7
|
+
- embed EventCatalog
|
|
8
|
+
- iframe
|
|
9
|
+
- developer portal
|
|
10
|
+
- internal application
|
|
11
|
+
- Scale
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
import PlanBanner from '@site/src/components/MDX/PlanBanner';
|
|
15
|
+
|
|
16
|
+
<PlanBanner plan="Scale" />
|
|
17
|
+
|
|
18
|
+
You can embed EventCatalog pages in developer portals, internal tools, intranets, and other web applications. Your teams can explore architecture information in the application where they already work while EventCatalog remains the source of the documentation.
|
|
19
|
+
|
|
20
|
+
Embedding EventCatalog requires an EventCatalog Scale license. See [Getting a license key for EventCatalog Scale](/docs/development/license-keys/plans).
|
|
21
|
+
|
|
22
|
+
## What you can embed
|
|
23
|
+
|
|
24
|
+
| Feature | What users can do in the embedded view |
|
|
25
|
+
| --- | --- |
|
|
26
|
+
| Resource documentation | Read the documentation for a domain, system, service, message, flow, team, or another catalog resource. |
|
|
27
|
+
| Resource visualizer | Explore the selected resource and its relationships. |
|
|
28
|
+
| Architecture Graph | Explore the catalog-wide graph or focus it on a resource with a relationship depth of 1, 2, or 3. |
|
|
29
|
+
| System Context Maps | View the catalog-wide system overview or the context surrounding one system. |
|
|
30
|
+
| Entity maps | Explore the entities and relationships associated with a resource. |
|
|
31
|
+
| Flows | Follow the steps, services, and messages in a business or technical flow. |
|
|
32
|
+
| Discovery tables | Browse and filter catalog resources such as services, events, commands, and queries. |
|
|
33
|
+
| Schema explorer | Search schemas, inspect their contents, and see the resources that use them. |
|
|
34
|
+
|
|
35
|
+
Embedded pages remain interactive. Controls belonging to the selected visualization or table stay available, while EventCatalog's application header and sidebars are removed so they do not compete with the host application's navigation.
|
|
36
|
+
|
|
37
|
+
## How embedding works
|
|
38
|
+
|
|
39
|
+
Add `embed=true` to a supported EventCatalog URL and load that URL in an iframe. For example:
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
https://catalog.example.com/docs/services/order-service/1.0.0?embed=true
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
You can also request a light or dark color mode for an embed:
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
https://catalog.example.com/docs/services/order-service/1.0.0?embed=true&theme=dark
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The requested theme only affects that embedded page. It does not replace the visitor's saved EventCatalog theme.
|
|
52
|
+
|
|
53
|
+
## Before you embed
|
|
54
|
+
|
|
55
|
+
- Build and deploy EventCatalog with a valid Scale license.
|
|
56
|
+
- Use an EventCatalog URL that users of the host application can reach from their browsers.
|
|
57
|
+
- If EventCatalog is authenticated, verify that users can authenticate from the embedded context.
|
|
58
|
+
- Give the iframe's parent a defined height. EventCatalog fills the space the host application provides.
|
|
59
|
+
- Review the host application's Content Security Policy and iframe policy if the browser blocks the page.
|
|
60
|
+
|
|
61
|
+
## Embed a page
|
|
62
|
+
|
|
63
|
+
### 1. Choose the EventCatalog page
|
|
64
|
+
|
|
65
|
+
Open the page in EventCatalog and confirm that it contains the content you want users to see. Prefer an explicit resource version so the embedded URL is stable.
|
|
66
|
+
|
|
67
|
+
For example, a service visualizer may have this URL:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
https://catalog.example.com/visualiser/services/order-service/1.0.0
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 2. Enable embed mode
|
|
74
|
+
|
|
75
|
+
Add `embed=true` to the query string:
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
https://catalog.example.com/visualiser/services/order-service/1.0.0?embed=true
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Use `&embed=true` instead when the URL already has query parameters.
|
|
82
|
+
|
|
83
|
+
### 3. Add the iframe
|
|
84
|
+
|
|
85
|
+
Give the container a concrete height and let the iframe fill it:
|
|
86
|
+
|
|
87
|
+
```html
|
|
88
|
+
<div style="height: 700px; width: 100%;">
|
|
89
|
+
<iframe
|
|
90
|
+
src="https://catalog.example.com/visualiser/services/order-service/1.0.0?embed=true"
|
|
91
|
+
title="Order service architecture"
|
|
92
|
+
loading="lazy"
|
|
93
|
+
style="border: 0; display: block; height: 100%; width: 100%;"
|
|
94
|
+
></iframe>
|
|
95
|
+
</div>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
`height: 100%` only works when the iframe's ancestors have a defined height. Use a fixed, viewport-relative, or layout-controlled height in the host application.
|
|
99
|
+
|
|
100
|
+
### 4. Select a theme
|
|
101
|
+
|
|
102
|
+
Add `theme=light` or `theme=dark` to force the embedded page's color mode:
|
|
103
|
+
|
|
104
|
+
```html
|
|
105
|
+
<iframe
|
|
106
|
+
src="https://catalog.example.com/schemas/explorer?embed=true&theme=dark"
|
|
107
|
+
title="Schema explorer"
|
|
108
|
+
></iframe>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
If you omit `theme`, EventCatalog uses the visitor's saved EventCatalog preference or their system preference.
|
|
112
|
+
|
|
113
|
+
## Embed URL reference
|
|
114
|
+
|
|
115
|
+
Replace `https://catalog.example.com` with the URL of your deployed catalog.
|
|
116
|
+
|
|
117
|
+
| Feature | URL pattern |
|
|
118
|
+
| --- | --- |
|
|
119
|
+
| Resource documentation | `/docs/{collection}/{id}/{version}?embed=true` |
|
|
120
|
+
| Resource visualizer | `/visualiser/{collection}/{id}/{version}?embed=true` |
|
|
121
|
+
| Discovery table | `/discover/{collection}?embed=true` |
|
|
122
|
+
| Entity map | `/visualiser/{collection}/{id}/{version}/entity-map?embed=true` |
|
|
123
|
+
| Data dependency view | `/visualiser/{collection}/{id}/{version}/data?embed=true` |
|
|
124
|
+
| Schema explorer | `/schemas/explorer?embed=true` |
|
|
125
|
+
| Schema details | `/schemas/{type}/{id}/{version}?embed=true` |
|
|
126
|
+
| Architecture Graph | `/visualiser/graph?embed=true` |
|
|
127
|
+
| System Context Map overview | `/visualiser/system-context-map?embed=true` |
|
|
128
|
+
| System-specific context map | `/visualiser/systems/{id}/{version}/context?embed=true` |
|
|
129
|
+
| Flow visualizer | `/visualiser/flows/{id}/{version}?embed=true` |
|
|
130
|
+
|
|
131
|
+
Collections use their plural route names, such as `domains`, `systems`, `services`, `events`, `commands`, `queries`, `flows`, and `entities`. Schema detail pages support message types such as `events`, `commands`, and `queries`, as well as data product contracts.
|
|
132
|
+
|
|
133
|
+
### Focus the Architecture Graph
|
|
134
|
+
|
|
135
|
+
Use `focus={collection}/{id}` to select the initial resource and `depth` to choose how many relationship hops are visible. `depth` accepts `1`, `2`, or `3`.
|
|
136
|
+
|
|
137
|
+
```text
|
|
138
|
+
https://catalog.example.com/visualiser/graph?embed=true&focus=services/order-service&depth=2
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
The Architecture Graph must be enabled in `eventcatalog.config.js`:
|
|
142
|
+
|
|
143
|
+
```js title="eventcatalog.config.js"
|
|
144
|
+
module.exports = {
|
|
145
|
+
visualiser: {
|
|
146
|
+
architectureGraph: {
|
|
147
|
+
enabled: true,
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Troubleshooting
|
|
154
|
+
|
|
155
|
+
### EventCatalog shows a license overlay
|
|
156
|
+
|
|
157
|
+
Confirm that the deployed catalog was built or started with a valid Scale license. Add the key to the EventCatalog project's environment:
|
|
158
|
+
|
|
159
|
+
```bash title=".env"
|
|
160
|
+
EVENTCATALOG_SCALE_LICENSE_KEY=your-scale-license-key
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Then rebuild and redeploy the catalog. See [Getting a license key for EventCatalog Scale](/docs/development/license-keys/plans).
|
|
164
|
+
|
|
165
|
+
### Navigation is still visible
|
|
166
|
+
|
|
167
|
+
Confirm that the URL contains `embed=true`, including the exact lowercase value `true`.
|
|
168
|
+
|
|
169
|
+
### The iframe is blank or blocked
|
|
170
|
+
|
|
171
|
+
Open the iframe URL directly in the same browser. Confirm that it is reachable and that the user can authenticate. Then check the browser console for Content Security Policy, mixed-content, or iframe permission errors from either application.
|
|
172
|
+
|
|
173
|
+
### The content does not fill the available height
|
|
174
|
+
|
|
175
|
+
Set an explicit height on the iframe's parent and keep the iframe at `height: 100%`. Check every ancestor if you use a percentage height.
|
|
176
|
+
|
|
177
|
+
## Backstage
|
|
178
|
+
|
|
179
|
+
If your host application is Backstage, use the [EventCatalog Backstage plugin](/docs/plugins/backstage/overview). It supplies React components, resolves EventCatalog resources from Backstage entity annotations, and constructs the embed URLs for you.
|
|
@@ -7,6 +7,6 @@
|
|
|
7
7
|
"type": "generated-index",
|
|
8
8
|
"slug": "development/customization",
|
|
9
9
|
"title": "Customization Documentation",
|
|
10
|
-
"description": "
|
|
10
|
+
"description": "Customize EventCatalog and embed its documentation and visualizations in other applications."
|
|
11
11
|
}
|
|
12
12
|
}
|
|
@@ -32,6 +32,10 @@ This will output one directory
|
|
|
32
32
|
|
|
33
33
|
- `dist` - Your EventCatalog as Static HTML
|
|
34
34
|
|
|
35
|
+
### Link validation
|
|
36
|
+
|
|
37
|
+
Static builds check internal links and anchors and report warnings by default. See [link validation](/docs/development/deployment/link-validation) to fail builds on broken links, ignore destinations, or disable the check.
|
|
38
|
+
|
|
35
39
|
### Passing custom options
|
|
36
40
|
|
|
37
41
|
<AddedIn version="2.16.5" />
|
|
@@ -22,7 +22,7 @@ By default EventCatalog will build a static website.
|
|
|
22
22
|
|
|
23
23
|
Here are some guides and places you can host static content
|
|
24
24
|
|
|
25
|
-
- [Host with Docker](#hosting-with-docker)
|
|
25
|
+
- [Host with Docker](#hosting-static-website-with-docker)
|
|
26
26
|
- [Deploy to NextJS](https://nextjs.org/docs/deployment)
|
|
27
27
|
- [Host in AWS S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html)
|
|
28
28
|
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 5
|
|
3
|
+
sidebar_label: Link validation
|
|
4
|
+
title: Link validation
|
|
5
|
+
description: Catch broken links and anchors before they reach production
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
After a static build, EventCatalog scans every generated HTML page and reports internal links and anchors that don't resolve. This catches typos in [resource references](/docs/development/components/resource-references), renamed pages, and moved custom docs before they ship.
|
|
9
|
+
|
|
10
|
+
## What gets checked
|
|
11
|
+
|
|
12
|
+
- Links between pages rendered by your catalog, including the sidebar navigation.
|
|
13
|
+
- Anchors (`#section`) on the destination page, so a link to a heading that no longer exists is caught too.
|
|
14
|
+
- Links are resolved against your [`base`](/docs/api/config#base) path, so this works the same whether your catalog is hosted at the root or a subpath.
|
|
15
|
+
|
|
16
|
+
Only links on the same origin and under the catalog's `base` path are checked. Set [`homepageLink`](/docs/api/config#homepageLink) to your deployed URL so absolute links to your own catalog are recognized as internal. External links and non-HTTP links such as `mailto:` are skipped.
|
|
17
|
+
|
|
18
|
+
Links to files in the build output are checked for existence, but fragments in non-HTML files such as PDFs are not validated. Links created only by client-side JavaScript are not checked, except for sidebar navigation.
|
|
19
|
+
|
|
20
|
+
:::info
|
|
21
|
+
Link validation only runs after a [static build](/docs/development/deployment/build-and-deploy). It's skipped when running in [SSR mode](/docs/development/deployment/build-ssr-mode), since pages are rendered on demand rather than generated up front.
|
|
22
|
+
:::
|
|
23
|
+
|
|
24
|
+
## Configure the check
|
|
25
|
+
|
|
26
|
+
By default, broken links and anchors are logged as warnings and the build still succeeds.
|
|
27
|
+
|
|
28
|
+
```js title="eventcatalog.config.js"
|
|
29
|
+
module.exports = {
|
|
30
|
+
linkValidation: {
|
|
31
|
+
onBrokenLinks: 'warn',
|
|
32
|
+
onBrokenAnchors: 'warn',
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Set either option to `error` to fail the build instead, or `ignore` to skip that check completely.
|
|
38
|
+
|
|
39
|
+
```js title="eventcatalog.config.js"
|
|
40
|
+
module.exports = {
|
|
41
|
+
linkValidation: {
|
|
42
|
+
onBrokenLinks: 'error',
|
|
43
|
+
onBrokenAnchors: 'ignore',
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Turn the whole feature off by setting `linkValidation` to `false`.
|
|
49
|
+
|
|
50
|
+
```js title="eventcatalog.config.js"
|
|
51
|
+
module.exports = {
|
|
52
|
+
linkValidation: false,
|
|
53
|
+
};
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Ignore known destinations
|
|
57
|
+
|
|
58
|
+
Some links can't be verified during the build, such as pages generated by a separate process. Use `ignore` with glob patterns for the destination paths. See [`linkValidation.ignore`](/docs/api/config#linkvalidationignore) for how paths are matched.
|
|
59
|
+
|
|
60
|
+
```js title="eventcatalog.config.js"
|
|
61
|
+
module.exports = {
|
|
62
|
+
linkValidation: {
|
|
63
|
+
ignore: ['/api/**', '/docs/legacy/*'],
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Run in CI
|
|
69
|
+
|
|
70
|
+
Set both checks to `error` in CI to fail the build on broken links or anchors. Keep `warn` locally if you want the build to succeed while you fix them.
|
|
71
|
+
|
|
72
|
+
```js title="eventcatalog.config.js"
|
|
73
|
+
module.exports = {
|
|
74
|
+
linkValidation: {
|
|
75
|
+
onBrokenLinks: process.env.CI ? 'error' : 'warn',
|
|
76
|
+
onBrokenAnchors: process.env.CI ? 'error' : 'warn',
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
```yaml title=".github/workflows/build-catalog.yml"
|
|
82
|
+
name: Build catalog
|
|
83
|
+
on:
|
|
84
|
+
pull_request:
|
|
85
|
+
|
|
86
|
+
jobs:
|
|
87
|
+
build:
|
|
88
|
+
runs-on: ubuntu-latest
|
|
89
|
+
steps:
|
|
90
|
+
- uses: actions/checkout@v4
|
|
91
|
+
- uses: actions/setup-node@v4
|
|
92
|
+
with:
|
|
93
|
+
node-version: 20
|
|
94
|
+
- run: npm install
|
|
95
|
+
- run: npm run build
|
|
96
|
+
env:
|
|
97
|
+
CI: true
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
When a check is set to `error`, broken destinations fail the build. Diagnostics group references by destination and show up to five source pages per destination. For user/team and event/command/query mixups, EventCatalog suggests an alternative only when that destination exists in the build.
|
|
101
|
+
|
|
102
|
+
## Related
|
|
103
|
+
|
|
104
|
+
- [`eventcatalog.config.js` reference](/docs/api/config#linkValidation) for the full list of options
|
|
105
|
+
- [Resource references](/docs/development/components/resource-references) for linking to catalog resources
|