@eventcatalog/core 3.39.1 → 3.39.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/analytics/analytics.cjs +1 -1
  2. package/dist/analytics/analytics.js +2 -2
  3. package/dist/analytics/log-build.cjs +1 -1
  4. package/dist/analytics/log-build.js +3 -3
  5. package/dist/{chunk-NQ35I4PT.js → chunk-5G6OFPTY.js} +3 -3
  6. package/dist/{chunk-KIRJD3RR.js → chunk-ABTA6BYL.js} +1 -1
  7. package/dist/{chunk-DNU6WL3Q.js → chunk-L4F5FCQK.js} +1 -1
  8. package/dist/{chunk-MOMRC6JV.js → chunk-MFYIAZEO.js} +1 -1
  9. package/dist/{chunk-ZVTW5LU6.js → chunk-TUEC7QBE.js} +1 -1
  10. package/dist/constants.cjs +1 -1
  11. package/dist/constants.js +1 -1
  12. package/dist/docs/api/02-config.md +25 -0
  13. package/dist/docs/development/guides/diagrams/05-comparing-diagrams.md +1 -1
  14. package/dist/docs/development/license-keys/_category_.json +12 -0
  15. package/dist/docs/development/license-keys/integrations.md +41 -0
  16. package/dist/docs/development/license-keys/license-validation.md +34 -0
  17. package/dist/docs/development/license-keys/overview.md +52 -0
  18. package/dist/docs/development/license-keys/plans.md +50 -0
  19. package/dist/eventcatalog.cjs +1 -1
  20. package/dist/eventcatalog.js +10 -10
  21. package/dist/generate.cjs +1 -1
  22. package/dist/generate.js +3 -3
  23. package/dist/utils/cli-logger.cjs +1 -1
  24. package/dist/utils/cli-logger.js +2 -2
  25. package/eventcatalog/astro.config.mjs +9 -1
  26. package/eventcatalog/src/components/Grids/DomainGrid.tsx +2 -1
  27. package/eventcatalog/src/pages/docs/[type]/[id]/_index.data.ts +67 -0
  28. package/eventcatalog/src/pages/docs/[type]/[id]/index.astro +4 -41
  29. package/eventcatalog/src/utils/page-loaders/page-data-loader.ts +16 -13
  30. package/package.json +3 -3
  31. package/dist/docs/development/deployment/licenses.md +0 -50
@@ -37,7 +37,7 @@ var import_axios = __toESM(require("axios"), 1);
37
37
  var import_os = __toESM(require("os"), 1);
38
38
 
39
39
  // package.json
40
- var version = "3.39.1";
40
+ var version = "3.39.3";
41
41
 
42
42
  // src/constants.ts
43
43
  var VERSION = version;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  raiseEvent
3
- } from "../chunk-KIRJD3RR.js";
4
- import "../chunk-DNU6WL3Q.js";
3
+ } from "../chunk-ABTA6BYL.js";
4
+ import "../chunk-L4F5FCQK.js";
5
5
  export {
6
6
  raiseEvent
7
7
  };
@@ -111,7 +111,7 @@ var import_axios = __toESM(require("axios"), 1);
111
111
  var import_os = __toESM(require("os"), 1);
112
112
 
113
113
  // package.json
114
- var version = "3.39.1";
114
+ var version = "3.39.3";
115
115
 
116
116
  // src/constants.ts
117
117
  var VERSION = version;
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  log_build_default
3
- } from "../chunk-NQ35I4PT.js";
3
+ } from "../chunk-5G6OFPTY.js";
4
+ import "../chunk-ABTA6BYL.js";
4
5
  import "../chunk-4UVFXLPI.js";
5
- import "../chunk-KIRJD3RR.js";
6
- import "../chunk-DNU6WL3Q.js";
6
+ import "../chunk-L4F5FCQK.js";
7
7
  import "../chunk-5T63CXKU.js";
8
8
  export {
9
9
  log_build_default as default
@@ -1,10 +1,10 @@
1
+ import {
2
+ raiseEvent
3
+ } from "./chunk-ABTA6BYL.js";
1
4
  import {
2
5
  countResources,
3
6
  serializeCounts
4
7
  } from "./chunk-4UVFXLPI.js";
5
- import {
6
- raiseEvent
7
- } from "./chunk-KIRJD3RR.js";
8
8
  import {
9
9
  getEventCatalogConfigFile,
10
10
  verifyRequiredFieldsAreInCatalogConfigFile
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-DNU6WL3Q.js";
3
+ } from "./chunk-L4F5FCQK.js";
4
4
 
5
5
  // src/analytics/analytics.js
6
6
  import axios from "axios";
@@ -1,5 +1,5 @@
1
1
  // package.json
2
- var version = "3.39.1";
2
+ var version = "3.39.3";
3
3
 
4
4
  // src/constants.ts
5
5
  var VERSION = version;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  logger
3
- } from "./chunk-ZVTW5LU6.js";
3
+ } from "./chunk-TUEC7QBE.js";
4
4
  import {
5
5
  cleanup,
6
6
  getEventCatalogConfigFile
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-DNU6WL3Q.js";
3
+ } from "./chunk-L4F5FCQK.js";
4
4
 
5
5
  // src/utils/cli-logger.ts
6
6
  import pc from "picocolors";
@@ -25,7 +25,7 @@ __export(constants_exports, {
25
25
  module.exports = __toCommonJS(constants_exports);
26
26
 
27
27
  // package.json
28
- var version = "3.39.1";
28
+ var version = "3.39.3";
29
29
 
30
30
  // src/constants.ts
31
31
  var VERSION = version;
package/dist/constants.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-DNU6WL3Q.js";
3
+ } from "./chunk-L4F5FCQK.js";
4
4
  export {
5
5
  VERSION
6
6
  };
@@ -175,6 +175,30 @@ module.exports = {
175
175
  };
176
176
  ```
177
177
 
178
+ ### `security` {#security}
179
+
180
+ <AddedIn version="3.39.2" />
181
+
182
+ - Type: `Record<"checkOrigin", boolean> | undefined`
183
+ - Default: `{checkOrigin: true}`
184
+
185
+ Enables security measures for an EventCatalog website.
186
+
187
+ These features only exist for pages rendered on demand (SSR) using server mode or pages that opt out of prerendering in static mode.
188
+
189
+ By default, EventCatalog will automatically check that the “origin” header matches the URL sent by each request in on-demand rendered pages. You can disable this behavior by setting checkOrigin to false:
190
+
191
+ You can read more on the Astro documentation [here](https://docs.astro.build/en/reference/configuration-reference/#security).
192
+
193
+ ```js title="eventcatalog.config.js"
194
+ module.exports = {
195
+ output: "server",
196
+ security: {
197
+ checkOrigin: false
198
+ }
199
+ };
200
+ ```
201
+
178
202
  ### `generators` {#generators}
179
203
 
180
204
  - Type: `Generator[]`
@@ -389,6 +413,7 @@ The `chat` property requires a Starter or Scale plan and `output: 'server'` to t
389
413
 
390
414
  ```js title="eventcatalog.config.js"
391
415
  module.exports = {
416
+ output: 'server',
392
417
  chat: {
393
418
  // Set to false to disable the AI chat feature entirely
394
419
  enabled: false,
@@ -14,7 +14,7 @@ import AddedIn from '@site/src/components/MDX/AddedIn';
14
14
  <AddedIn version="3.3.0" />
15
15
 
16
16
  :::info EventCatalog Scale Feature
17
- Diagram comparison is available exclusively with the [EventCatalog Scale](/docs/development/deployment/licenses) license. This feature enables side-by-side visualization of different diagram versions.
17
+ Diagram comparison is available exclusively with the [EventCatalog Scale](/docs/development/license-keys/plans) license. This feature enables side-by-side visualization of different diagram versions.
18
18
  :::
19
19
 
20
20
  The diagram comparison feature allows you to view two versions of a diagram side-by-side, making it easy to understand architectural changes and evolution over time.
@@ -0,0 +1,12 @@
1
+ {
2
+ "label": "License Keys",
3
+ "position": 11,
4
+ "collapsible": true,
5
+ "collapsed": true,
6
+ "link": {
7
+ "type": "generated-index",
8
+ "slug": "development/license-keys",
9
+ "title": "License Keys",
10
+ "description": "How to get and use license keys for EventCatalog plans (Starter, Scale) and integrations (OpenAPI, AsyncAPI, and more)."
11
+ }
12
+ }
@@ -0,0 +1,41 @@
1
+ ---
2
+ sidebar_position: 3
3
+ keywords:
4
+ - licenses
5
+ - integrations
6
+ - plugins
7
+ - openapi
8
+ - asyncapi
9
+ sidebar_label: Integrations
10
+ title: Getting a license key for integrations
11
+ description: How to activate EventCatalog integrations (OpenAPI, AsyncAPI, Backstage, and more) and get your license key.
12
+ ---
13
+
14
+ EventCatalog integrations (sometimes called plugins) let you generate your catalog from sources you already have — OpenAPI specs, AsyncAPI documents, Backstage, federated catalogs, and more. You can see the full list on the [integrations page](/integrations).
15
+
16
+ Each integration is licensed individually and comes with a **14 day free trial**. Activate one from your [integrations dashboard](https://eventcatalog.cloud/dashboard/integrations) — see the [Quick start in the overview](/docs/development/license-keys/overview#quick-start) for the full step-by-step.
17
+
18
+ ![Pick your integrations in EventCatalog Cloud](./images/pick-your-integraions.png)
19
+
20
+ Once activated, your license key for the integration appears on your [API keys page](https://eventcatalog.cloud/dashboard/api-keys):
21
+
22
+ ![Your license keys in the EventCatalog Cloud API keys dashboard](./images/api-keys-dashboard.png)
23
+
24
+ ## Adding your license key to your catalog
25
+
26
+ Copy the license key from your dashboard into your `.env` file. Each integration uses its own environment variable — the exact name is shown next to the key on your dashboard and in the integration's own documentation. For example:
27
+
28
+ ```bash title=".env"
29
+ EVENTCATALOG_OPENAPI_LICENSE_KEY=your-license-key-here
30
+ EVENTCATALOG_ASYNCAPI_LICENSE_KEY=your-license-key-here
31
+ ```
32
+
33
+ Then configure the integration in your `eventcatalog.config.js` as described in the [integration's documentation](/integrations).
34
+
35
+ ## Trying multiple integrations
36
+
37
+ You can activate as many integrations as you want from your [integrations dashboard](https://eventcatalog.cloud/dashboard/integrations). Each one has its own 14 day trial and its own license key.
38
+
39
+ ## Need more time?
40
+
41
+ If 14 days isn't enough to evaluate an integration in your environment, email us at `hello@eventcatalog.dev` and we'll extend your trial.
@@ -0,0 +1,34 @@
1
+ ---
2
+ sidebar_position: 4
3
+ keywords:
4
+ - licenses
5
+ - validation
6
+ - offline
7
+ sidebar_label: License Validation
8
+ title: How license validation works
9
+ description: How EventCatalog validates your license keys online and offline.
10
+ ---
11
+
12
+ Once you have a license key from [EventCatalog Cloud](https://eventcatalog.cloud) (see [Overview](/docs/development/license-keys/overview) if you don't yet), EventCatalog validates it every time you build or serve your catalog. There are two modes: online and offline.
13
+
14
+ ## Online validation (default)
15
+
16
+ By default, EventCatalog validates license keys online. Your keys are read from your `.env` file (or environment variables) and verified against the EventCatalog API.
17
+
18
+ This is the recommended mode — it requires no extra setup and your keys stay in sync with your account automatically.
19
+
20
+ ## Offline validation
21
+
22
+ If you're behind a firewall or otherwise can't reach the EventCatalog API at build time, you can validate your keys offline.
23
+
24
+ To set up offline validation:
25
+
26
+ 1. Email us at `hello@eventcatalog.dev` to request an offline license file (`license.jwt`).
27
+ 2. Place the `license.jwt` file in the root of your catalog directory.
28
+ 3. EventCatalog will validate against the local file instead of calling our API.
29
+
30
+ Offline license files expire one year from purchase. You'll need to request a new file each year.
31
+
32
+ ## Managing your keys
33
+
34
+ You can view, rotate, and revoke license keys at any time from your [API keys dashboard](https://eventcatalog.cloud/dashboard/api-keys).
@@ -0,0 +1,52 @@
1
+ ---
2
+ sidebar_position: 1
3
+ keywords:
4
+ - licenses
5
+ - license keys
6
+ - trial
7
+ sidebar_label: Overview
8
+ title: License Keys Overview
9
+ description: Learn how license keys work in EventCatalog, how to get a free trial, and where to find your keys.
10
+ ---
11
+
12
+ EventCatalog is open source with a [community edition and a commercial edition](/pricing). The commercial editions (Starter, Scale, Enterprise) and the [integrations](/integrations) (OpenAPI, AsyncAPI, Backstage, and others) are unlocked using **license keys**.
13
+
14
+ If you are using the community edition, you don't need a license key and can skip this section.
15
+
16
+ ## Where license keys come from
17
+
18
+ All license keys are managed in [EventCatalog Cloud](https://eventcatalog.cloud). You sign up for an account, activate the plan or integration you want to use, and your license keys appear on your dashboard.
19
+
20
+ You can then add those keys to your `.env` file (or set them as environment variables) and EventCatalog will unlock the corresponding features.
21
+
22
+ ## Free trials
23
+
24
+ :::tip 14 day free trials
25
+ Every plan and every integration comes with a **14 day free trial**. No payment is required to start one — just sign in to [EventCatalog Cloud](https://eventcatalog.cloud) and activate what you want to try.
26
+
27
+ Need longer to evaluate? Email us at `hello@eventcatalog.dev` and we'll happily extend your trial.
28
+ :::
29
+
30
+ ## Quick start
31
+
32
+ 1. Create an account at [eventcatalog.cloud](https://eventcatalog.cloud).
33
+ 2. From your [dashboard](https://eventcatalog.cloud/dashboard), pick what you need:
34
+ - [Pick your plan](https://eventcatalog.cloud/dashboard) (Starter or Scale) — see [Starting a plan](/docs/development/license-keys/plans).
35
+
36
+ ![Pick your plan in EventCatalog Cloud](./images/pick-your-plan.png)
37
+
38
+ - [Pick your integrations](https://eventcatalog.cloud/dashboard/integrations) (OpenAPI, AsyncAPI, etc.) — see [Getting integration keys](/docs/development/license-keys/integrations).
39
+
40
+ ![Pick your integrations in EventCatalog Cloud](./images/pick-your-integraions.png)
41
+
42
+ 3. Copy your license keys from the [API keys page](https://eventcatalog.cloud/dashboard/api-keys) into your `.env` file.
43
+
44
+ ![Your license keys in the EventCatalog Cloud API keys dashboard](./images/api-keys-dashboard.png)
45
+
46
+ 4. Run your catalog — your commercial features are now unlocked.
47
+
48
+ ## Next steps
49
+
50
+ - [Starting a Starter or Scale plan](/docs/development/license-keys/plans)
51
+ - [Getting license keys for integrations](/docs/development/license-keys/integrations)
52
+ - [How license validation works (online and offline)](/docs/development/license-keys/license-validation)
@@ -0,0 +1,50 @@
1
+ ---
2
+ sidebar_position: 2
3
+ keywords:
4
+ - licenses
5
+ - starter
6
+ - scale
7
+ - plans
8
+ sidebar_label: Starter & Scale Plans
9
+ title: Getting a license key for Starter or Scale
10
+ description: How to start a Starter or Scale plan in EventCatalog Cloud and get your license key.
11
+ ---
12
+
13
+ EventCatalog offers two commercial plans you can self-serve from [EventCatalog Cloud](https://eventcatalog.cloud):
14
+
15
+ - **Starter** — for small teams getting started with commercial features.
16
+ - **Scale** — for larger teams that need the full set of advanced capabilities.
17
+
18
+ See the [pricing page](/pricing) for a full breakdown of what each plan includes.
19
+
20
+ ## Starting a plan
21
+
22
+ 1. Sign in to [EventCatalog Cloud](https://eventcatalog.cloud). If you don't have an account yet, sign up — it's free.
23
+ 2. Go to your [dashboard](https://eventcatalog.cloud/dashboard).
24
+ 3. Choose **Starter** or **Scale** and start your plan. Every plan comes with a **14 day free trial**, so you can try it before you commit.
25
+
26
+ ![Pick your plan in EventCatalog Cloud](./images/pick-your-plan.png)
27
+
28
+ 4. Once the plan is active, head to your [API keys page](https://eventcatalog.cloud/dashboard/api-keys) to find your license key.
29
+
30
+ ![Your license keys in the EventCatalog Cloud API keys dashboard](./images/api-keys-dashboard.png)
31
+
32
+ ## Adding your license key to your catalog
33
+
34
+ Copy the license key from your dashboard into your `.env` file:
35
+
36
+ ```bash title=".env"
37
+ EVENTCATALOG_STARTER_LICENSE_KEY=your-license-key-here
38
+ # or for Scale
39
+ EVENTCATALOG_SCALE_LICENSE_KEY=your-license-key-here
40
+ ```
41
+
42
+ Then start EventCatalog as normal. The commercial features for your plan will be unlocked automatically.
43
+
44
+ ## Need more time?
45
+
46
+ The default trial is 14 days. If you need longer to evaluate, email us at `hello@eventcatalog.dev` and we'll extend it for you.
47
+
48
+ ## Enterprise
49
+
50
+ If you need features beyond Scale — SSO, dedicated support, custom contracts, or on-premise/offline deployment — get in touch at `hello@eventcatalog.dev`.
@@ -114,7 +114,7 @@ var verifyRequiredFieldsAreInCatalogConfigFile = async (projectDirectory) => {
114
114
  var import_picocolors = __toESM(require("picocolors"), 1);
115
115
 
116
116
  // package.json
117
- var version = "3.39.1";
117
+ var version = "3.39.3";
118
118
 
119
119
  // src/constants.ts
120
120
  var VERSION = version;
@@ -1,7 +1,7 @@
1
1
  import {
2
- log_build_default
3
- } from "./chunk-NQ35I4PT.js";
4
- import "./chunk-4UVFXLPI.js";
2
+ runMigrations
3
+ } from "./chunk-XUAF2H54.js";
4
+ import "./chunk-CA4U2JP7.js";
5
5
  import {
6
6
  resolve_catalog_dependencies_default
7
7
  } from "./chunk-WAJIJEI3.js";
@@ -12,10 +12,10 @@ import {
12
12
  watch
13
13
  } from "./chunk-K3ZVEX2Y.js";
14
14
  import {
15
- runMigrations
16
- } from "./chunk-XUAF2H54.js";
17
- import "./chunk-CA4U2JP7.js";
18
- import "./chunk-KIRJD3RR.js";
15
+ log_build_default
16
+ } from "./chunk-5G6OFPTY.js";
17
+ import "./chunk-ABTA6BYL.js";
18
+ import "./chunk-4UVFXLPI.js";
19
19
  import {
20
20
  catalogToAstro
21
21
  } from "./chunk-YDXB3BD2.js";
@@ -28,13 +28,13 @@ import {
28
28
  } from "./chunk-ULZYHF3V.js";
29
29
  import {
30
30
  generate
31
- } from "./chunk-MOMRC6JV.js";
31
+ } from "./chunk-MFYIAZEO.js";
32
32
  import {
33
33
  logger
34
- } from "./chunk-ZVTW5LU6.js";
34
+ } from "./chunk-TUEC7QBE.js";
35
35
  import {
36
36
  VERSION
37
- } from "./chunk-DNU6WL3Q.js";
37
+ } from "./chunk-L4F5FCQK.js";
38
38
  import {
39
39
  getEventCatalogConfigFile,
40
40
  verifyRequiredFieldsAreInCatalogConfigFile
package/dist/generate.cjs CHANGED
@@ -78,7 +78,7 @@ var getEventCatalogConfigFile = async (projectDirectory) => {
78
78
  var import_picocolors = __toESM(require("picocolors"), 1);
79
79
 
80
80
  // package.json
81
- var version = "3.39.1";
81
+ var version = "3.39.3";
82
82
 
83
83
  // src/constants.ts
84
84
  var VERSION = version;
package/dist/generate.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  generate
3
- } from "./chunk-MOMRC6JV.js";
4
- import "./chunk-ZVTW5LU6.js";
5
- import "./chunk-DNU6WL3Q.js";
3
+ } from "./chunk-MFYIAZEO.js";
4
+ import "./chunk-TUEC7QBE.js";
5
+ import "./chunk-L4F5FCQK.js";
6
6
  import "./chunk-5T63CXKU.js";
7
7
  export {
8
8
  generate
@@ -36,7 +36,7 @@ module.exports = __toCommonJS(cli_logger_exports);
36
36
  var import_picocolors = __toESM(require("picocolors"), 1);
37
37
 
38
38
  // package.json
39
- var version = "3.39.1";
39
+ var version = "3.39.3";
40
40
 
41
41
  // src/constants.ts
42
42
  var VERSION = version;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  logger
3
- } from "../chunk-ZVTW5LU6.js";
4
- import "../chunk-DNU6WL3Q.js";
3
+ } from "../chunk-TUEC7QBE.js";
4
+ import "../chunk-L4F5FCQK.js";
5
5
  export {
6
6
  logger
7
7
  };
@@ -40,7 +40,15 @@ const expressiveCodeConfig = {
40
40
  // https://astro.build/config
41
41
  export default defineConfig({
42
42
  base,
43
- server: { port: config.port || 3000, host: host },
43
+ server: {
44
+ port: config.port || 3000,
45
+ host: host,
46
+ // Add allowed hosts if its set
47
+ ...(config.server?.allowedHosts ? { allowedHosts: config.server?.allowedHosts } : {}),
48
+ },
49
+
50
+ // If security is set
51
+ ...(config.security ? { security: config.security } : {}),
44
52
 
45
53
  // In dev mode (EVENTCATALOG_DEV_MODE=true) we need 'server' output so that
46
54
  // routes which opt into SSR via `export const prerender = false` (e.g. the
@@ -49,10 +49,11 @@ const getMessageIcon = (collection: string) => {
49
49
  const EntityBadge = memo(({ entity }: { entity: any }) => {
50
50
  const id = entity?.data?.id || entity?.id;
51
51
  const name = entity?.data?.name || entity?.name || id;
52
+ const version = entity?.data?.version || entity?.version || 'latest';
52
53
 
53
54
  return (
54
55
  <a
55
- href={buildUrl(`/docs/entities/${id}`)}
56
+ href={buildUrl(`/docs/entities/${id}/${version}`)}
56
57
  className="inline-flex items-center gap-2 px-3 py-2 bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] rounded-lg text-sm font-medium text-[rgb(var(--ec-page-text))] hover:bg-[rgb(var(--ec-content-hover))] hover:border-[rgb(var(--ec-accent)/0.5)] transition-all shadow-xs"
57
58
  >
58
59
  <BoxIcon className="h-4 w-4 text-[rgb(var(--ec-accent))]" />
@@ -0,0 +1,67 @@
1
+ import type { CollectionTypes, PageTypes } from '@types';
2
+ import { HybridPage } from '@utils/page-loaders/hybrid-page';
3
+ import { pageDataLoader } from '@utils/page-loaders/page-data-loader';
4
+ import { isSSR } from '@utils/feature';
5
+
6
+ const itemTypes: PageTypes[] = [
7
+ 'events',
8
+ 'commands',
9
+ 'queries',
10
+ 'services',
11
+ 'domains',
12
+ 'flows',
13
+ 'channels',
14
+ 'entities',
15
+ 'containers',
16
+ 'data-products',
17
+ ];
18
+
19
+ export class Page extends HybridPage {
20
+ static async getStaticPaths() {
21
+ if (isSSR()) {
22
+ return [];
23
+ }
24
+
25
+ const allItems = await Promise.all(itemTypes.map((type) => pageDataLoader[type]({ getAllVersions: false })));
26
+
27
+ return allItems.flatMap((items, index) =>
28
+ items.map((item) => ({
29
+ params: {
30
+ type: itemTypes[index],
31
+ id: item.data.id,
32
+ },
33
+ props: {
34
+ type: itemTypes[index],
35
+ ...item,
36
+ },
37
+ }))
38
+ );
39
+ }
40
+
41
+ protected static async fetchData(params: any) {
42
+ const { type, id } = params;
43
+
44
+ if (!type || !id || !(type in pageDataLoader)) {
45
+ return null;
46
+ }
47
+
48
+ const items = await pageDataLoader[type as PageTypes]({ getAllVersions: false });
49
+ const item = items.find((entry) => entry.data.id === id);
50
+
51
+ if (!item) {
52
+ return null;
53
+ }
54
+
55
+ return {
56
+ type: type as CollectionTypes,
57
+ ...item,
58
+ };
59
+ }
60
+
61
+ protected static createNotFoundResponse(): Response {
62
+ return new Response(null, {
63
+ status: 404,
64
+ statusText: 'Documentation not found',
65
+ });
66
+ }
67
+ }
@@ -1,49 +1,12 @@
1
1
  ---
2
2
  import Seo from '@components/Seo.astro';
3
3
  import { buildUrl } from '@utils/url-builder';
4
- import { getEvents } from '@utils/collections/events';
5
- import { getEntities } from '@utils/collections/entities';
6
- import { getCommands } from '@utils/collections/commands';
7
- import { getServices } from '@utils/collections/services';
8
- import { getDomains } from '@utils/collections/domains';
9
- import type { CollectionEntry } from 'astro:content';
10
- import type { CollectionTypes } from '@types';
11
- import { getChannels } from '@utils/collections/channels';
4
+ import { Page } from './_index.data';
12
5
 
13
- export async function getStaticPaths() {
14
- const [events, commands, services, domains, channels, entities] = await Promise.all([
15
- getEvents(),
16
- getCommands(),
17
- getServices(),
18
- getDomains(),
19
- getChannels(),
20
- getEntities(),
21
- ]);
6
+ export const prerender = Page.prerender;
7
+ export const getStaticPaths = Page.getStaticPaths;
22
8
 
23
- const buildPages = (collection: CollectionEntry<CollectionTypes>[]) => {
24
- return collection.map((item) => ({
25
- params: {
26
- type: item.collection,
27
- id: item.data.id,
28
- },
29
- props: {
30
- type: item.collection,
31
- ...item,
32
- },
33
- }));
34
- };
35
-
36
- return [
37
- ...buildPages(domains),
38
- ...buildPages(events),
39
- ...buildPages(services),
40
- ...buildPages(commands),
41
- ...buildPages(channels),
42
- ...buildPages(entities),
43
- ];
44
- }
45
-
46
- const props = Astro.props;
9
+ const props = await Page.getData(Astro);
47
10
 
48
11
  const pageTitle = `${props.collection} | ${props.data.name}`.replace(/^\w/, (c) => c.toUpperCase());
49
12
 
@@ -11,16 +11,19 @@ import { getDiagrams } from '@utils/collections/diagrams';
11
11
  import type { CollectionEntry } from 'astro:content';
12
12
  import { getDataProducts } from '@utils/collections/data-products';
13
13
 
14
- export const pageDataLoader: Record<PageTypes, () => Promise<CollectionEntry<CollectionTypes>[]>> = {
15
- events: getEvents,
16
- commands: getCommands,
17
- queries: getQueries,
18
- services: getServices,
19
- domains: getDomains,
20
- channels: getChannels,
21
- flows: getFlows,
22
- entities: getEntities,
23
- containers: getContainers,
24
- diagrams: getDiagrams,
25
- 'data-products': getDataProducts,
26
- };
14
+ type PageDataLoaderOptions = { getAllVersions?: boolean };
15
+
16
+ export const pageDataLoader: Record<PageTypes, (options?: PageDataLoaderOptions) => Promise<CollectionEntry<CollectionTypes>[]>> =
17
+ {
18
+ events: getEvents,
19
+ commands: getCommands,
20
+ queries: getQueries,
21
+ services: getServices,
22
+ domains: getDomains,
23
+ channels: getChannels,
24
+ flows: getFlows,
25
+ entities: getEntities,
26
+ containers: getContainers,
27
+ diagrams: getDiagrams,
28
+ 'data-products': getDataProducts,
29
+ };
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "license": "SEE LICENSE IN LICENSE",
9
9
  "type": "module",
10
- "version": "3.39.1",
10
+ "version": "3.39.3",
11
11
  "publishConfig": {
12
12
  "access": "public"
13
13
  },
@@ -107,8 +107,8 @@
107
107
  "uuid": "^10.0.0",
108
108
  "zod": "^4.3.6",
109
109
  "@eventcatalog/linter": "1.0.23",
110
- "@eventcatalog/visualiser": "^3.21.0",
111
- "@eventcatalog/sdk": "2.21.1"
110
+ "@eventcatalog/sdk": "2.21.1",
111
+ "@eventcatalog/visualiser": "^3.21.0"
112
112
  },
113
113
  "devDependencies": {
114
114
  "@astrojs/check": "^0.9.9",
@@ -1,50 +0,0 @@
1
- ---
2
- sidebar_position: 5
3
- keywords:
4
- - licenses
5
- sidebar_label: License Validation
6
- title: EventCatalog Licenses
7
- description: This document describes how EventCatalog licenses work online and offline.
8
- ---
9
-
10
- EventCatalog is an open source project with a [community edition and a commercial edition](/pricing) and also supports a range of integrations (plugins) which have their own licenses.
11
-
12
- If you are using the commercial edition of EventCatalog, then you don't need to worry about licenses and can skip this page.
13
-
14
- If you are using EventCatalog Starter, EventCatalog Scale, EventCatalog Enterprise or any of the integrations (plugins) you will need to set up a license key.
15
-
16
- :::tip Want to try commercial features?
17
- All licenses have a 14 day free trial. You can get a free trial license key by going to [EventCatalog Cloud](https://eventcatalog.cloud).
18
-
19
- If you wish to continue using the commercial features after the trial period, you will need to purchase a license.
20
-
21
- You can email us at `hello@eventcatalog.dev` to enquire about a license.
22
- :::
23
-
24
-
25
- ### How to set up a license keys
26
-
27
- 1. Go to [EventCatalog Cloud](https://eventcatalog.cloud) and sign up for a free trial.
28
- 1. Once you are logged in, you can select any license you want to use or integration.
29
- 1. Selecting the plan or integration will give you a license key.
30
- 1. Store the license key in your `.env` file or as an environment variable.
31
-
32
- ### How EventCatalog validates licenses keys
33
-
34
- ##### Online License Validation (recommended)
35
-
36
- By default, EventCatalog will validate your license key online.
37
-
38
- Your keys are read from your `.env` file and verified against our API.
39
-
40
- ##### Offline License Validation
41
-
42
- If you are behind a firewall or can't access the EventCatalog API, then your license keys can be validated offline.
43
-
44
- To get offline validation working you will need to:
45
-
46
- 1. Get in contact with us at `hello@eventcatalog.dev` to get a license key `(license.jwt)`.
47
- 1. Once you have you license key `(license.jwt)` you put this into the root of your catalog directory.
48
- 1. EventCatalog will then validate your license key offline.
49
-
50
- Your key will expire after a year of purchase, and you will need to get a new license key.