@eventcatalog/core 2.2.5 → 2.2.7
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/.github/workflows/verify-build.yml +4 -5
- package/.prettierrc +17 -9
- package/CHANGELOG.md +13 -0
- package/package.json +6 -5
- package/scripts/build-ci.js +1 -1
- package/scripts/catalog-to-astro-content-directory.js +9 -7
- package/scripts/watcher.js +4 -0
- package/src/components/DocsNavigation.astro +34 -25
- package/src/components/Header.astro +14 -11
- package/src/components/Lists/VersionList.astro +29 -17
- package/src/components/MDX/Accordion/Accordion.astro +5 -6
- package/src/components/MDX/Accordion/AccordionGroup.astro +1 -0
- package/src/components/MDX/NodeGraph/NodeGraph.astro +13 -8
- package/src/components/MDX/SchemaViewer/SchemaViewer.astro +45 -50
- package/src/components/Search.astro +16 -5
- package/src/components/Seo.astro +48 -54
- package/src/components/SideBars/DomainSideBar.astro +24 -6
- package/src/components/SideBars/MessageSideBar.astro +41 -10
- package/src/components/SideBars/ServiceSideBar.astro +54 -13
- package/src/layouts/CustomDocsPageLayout.astro +70 -23
- package/src/layouts/DiscoverLayout.astro +3 -1
- package/src/layouts/DocsLayout.astro +4 -4
- package/src/layouts/Footer.astro +19 -6
- package/src/pages/discover/[type]/index.astro +26 -21
- package/src/pages/docs/[type]/[id]/[version]/changelog/index.astro +68 -59
- package/src/pages/docs/[type]/[id]/[version]/index.astro +38 -20
- package/src/pages/docs/index.astro +13 -16
- package/src/pages/docs/teams/[id]/index.astro +24 -7
- package/src/pages/docs/users/[id]/index.astro +23 -6
- package/src/pages/visualiser/[type]/[id]/[version]/index.astro +12 -1
package/src/components/Seo.astro
CHANGED
|
@@ -4,12 +4,7 @@ import config from '@config';
|
|
|
4
4
|
import defaultImageFile from '../../public/opengraph.png';
|
|
5
5
|
import { buildUrl } from '@utils/url-builder';
|
|
6
6
|
|
|
7
|
-
const {
|
|
8
|
-
title = config.title,
|
|
9
|
-
description = config.tagline,
|
|
10
|
-
ogTitle = title,
|
|
11
|
-
ogType = 'website',
|
|
12
|
-
} = Astro.props;
|
|
7
|
+
const { title = config.title, description = config.tagline, ogTitle = title, ogType = 'website' } = Astro.props;
|
|
13
8
|
|
|
14
9
|
const siteBaseURL = new URL(Astro.url);
|
|
15
10
|
const defaultImage = new URL(defaultImageFile.src, siteBaseURL);
|
|
@@ -19,13 +14,12 @@ _image = _image || defaultImage;
|
|
|
19
14
|
|
|
20
15
|
let image = null;
|
|
21
16
|
if (typeof _image === 'string') {
|
|
22
|
-
|
|
17
|
+
image = new URL(_image, siteBaseURL);
|
|
23
18
|
} else if (_image && typeof _image['href'] !== 'undefined') {
|
|
24
|
-
|
|
19
|
+
image = new URL(_image['href'], siteBaseURL);
|
|
25
20
|
} else {
|
|
26
|
-
|
|
21
|
+
image = defaultImage;
|
|
27
22
|
}
|
|
28
|
-
|
|
29
23
|
---
|
|
30
24
|
|
|
31
25
|
<meta charset="UTF-8" />
|
|
@@ -34,47 +28,47 @@ if (typeof _image === 'string') {
|
|
|
34
28
|
<link rel="icon" type="image/svg+xml" href={buildUrl('/favicon.ico', true)} />
|
|
35
29
|
|
|
36
30
|
<SEO
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
/>
|
|
31
|
+
title={title}
|
|
32
|
+
description={description}
|
|
33
|
+
openGraph={{
|
|
34
|
+
basic: {
|
|
35
|
+
url: config.homepageLink,
|
|
36
|
+
title: ogTitle,
|
|
37
|
+
type: ogType,
|
|
38
|
+
image: _image?.src ? _image.src : defaultImage.toString(),
|
|
39
|
+
},
|
|
40
|
+
image: {
|
|
41
|
+
url: image.toString(),
|
|
42
|
+
secureUrl: image.toString(),
|
|
43
|
+
alt: ogTitle,
|
|
44
|
+
height: _image?.height,
|
|
45
|
+
width: _image?.width,
|
|
46
|
+
type: _image?.format && `image/${_image.format}`,
|
|
47
|
+
},
|
|
48
|
+
}}
|
|
49
|
+
twitter={{
|
|
50
|
+
creator: '@liran_tal',
|
|
51
|
+
image: image ? image.toString() : undefined,
|
|
52
|
+
imageAlt: ogTitle,
|
|
53
|
+
title: ogTitle,
|
|
54
|
+
site: '@liran_tal',
|
|
55
|
+
description: description,
|
|
56
|
+
card: image ? 'summary_large_image' : 'summary',
|
|
57
|
+
}}
|
|
58
|
+
extend={{
|
|
59
|
+
meta: [
|
|
60
|
+
{
|
|
61
|
+
name: 'og:locale',
|
|
62
|
+
content: 'en_US',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'og:description',
|
|
66
|
+
content: description,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'og:site_name',
|
|
70
|
+
content: config.homepageLink,
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
}}
|
|
74
|
+
/>
|
|
@@ -11,7 +11,7 @@ interface Props {
|
|
|
11
11
|
const { domain } = Astro.props;
|
|
12
12
|
|
|
13
13
|
// @ts-ignore
|
|
14
|
-
const services = domain.data.services as CollectionEntry<'services'>[] || [];
|
|
14
|
+
const services = (domain.data.services as CollectionEntry<'services'>[]) || [];
|
|
15
15
|
|
|
16
16
|
const ownersRaw = domain.data?.owners || [];
|
|
17
17
|
const owners = await Promise.all(ownersRaw.map((o) => getEntry(o)));
|
|
@@ -30,17 +30,35 @@ const ownersList = owners.map((o) => ({
|
|
|
30
30
|
avatarUrl: o.collection === 'users' ? o.data.avatarUrl : '',
|
|
31
31
|
href: buildUrl(`/docs/${o.collection}/${o.data.id}`),
|
|
32
32
|
}));
|
|
33
|
-
|
|
34
33
|
---
|
|
35
34
|
|
|
36
35
|
<aside class="sticky top-28 left-0 space-y-8 h-full overflow-y-auto">
|
|
37
36
|
<div>
|
|
38
|
-
<PillList
|
|
39
|
-
|
|
37
|
+
<PillList
|
|
38
|
+
title={`Services (${services.length})`}
|
|
39
|
+
pills={serviceList}
|
|
40
|
+
emptyMessage={`This domain does not contain any services.`}
|
|
41
|
+
color="pink"
|
|
42
|
+
client:load
|
|
43
|
+
/>
|
|
44
|
+
<OwnersList
|
|
45
|
+
title={`Service owners (${ownersList.length})`}
|
|
46
|
+
owners={ownersList}
|
|
47
|
+
emptyMessage={`This domain does not have any documented owners.`}
|
|
48
|
+
client:load
|
|
49
|
+
/>
|
|
40
50
|
{domain.data.versions && <VersionList versions={domain.data.versions} collectionItem={domain} />}
|
|
41
51
|
<div class="space-y-2">
|
|
42
|
-
<a
|
|
43
|
-
|
|
52
|
+
<a
|
|
53
|
+
href={buildUrl(`/visualiser/${domain.collection}/${domain.data.id}/${domain.data.version}`)}
|
|
54
|
+
class="block text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-purple-500"
|
|
55
|
+
>View in Visualiser</a
|
|
56
|
+
>
|
|
57
|
+
<a
|
|
58
|
+
href={buildUrl(`/docs/${domain.collection}/${domain.data.id}/${domain.data.version}/changelog`)}
|
|
59
|
+
class="block text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-purple-500"
|
|
60
|
+
>Changelog</a
|
|
61
|
+
>
|
|
44
62
|
</div>
|
|
45
63
|
</div>
|
|
46
64
|
</aside>
|
|
@@ -43,15 +43,31 @@ const type = message.collection.slice(0, -1);
|
|
|
43
43
|
// @ts-ignore
|
|
44
44
|
const publicPath = message?.catalog?.publicPath;
|
|
45
45
|
const schemaFilePath = message?.data?.schemaPath;
|
|
46
|
-
const schemaURL = path.join(publicPath, schemaFilePath || '')
|
|
47
|
-
|
|
46
|
+
const schemaURL = path.join(publicPath, schemaFilePath || '');
|
|
48
47
|
---
|
|
49
48
|
|
|
50
|
-
<aside class="sticky top-28 left-0 space-y-8 h-full overflow-y-auto pb-20
|
|
49
|
+
<aside class="sticky top-28 left-0 space-y-8 h-full overflow-y-auto pb-20">
|
|
51
50
|
<div class="">
|
|
52
|
-
<PillList
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
<PillList
|
|
52
|
+
color="pink"
|
|
53
|
+
title={`${type} Producers (${producerList.length})`}
|
|
54
|
+
pills={producerList}
|
|
55
|
+
emptyMessage={`This ${type} does not get produced by any services.`}
|
|
56
|
+
client:load
|
|
57
|
+
/>
|
|
58
|
+
<PillList
|
|
59
|
+
color="pink"
|
|
60
|
+
title={`${type} Consumers (${consumerList.length})`}
|
|
61
|
+
pills={consumerList}
|
|
62
|
+
emptyMessage={`This ${type} does not get consumed by any services.`}
|
|
63
|
+
client:load
|
|
64
|
+
/>
|
|
65
|
+
<OwnersList
|
|
66
|
+
title={`${type} owners (${ownersList.length})`}
|
|
67
|
+
owners={ownersList}
|
|
68
|
+
emptyMessage={`This ${type} does not have any documented owners.`}
|
|
69
|
+
client:load
|
|
70
|
+
/>
|
|
55
71
|
|
|
56
72
|
{message.data.versions && <VersionList versions={message.data.versions} collectionItem={message} />}
|
|
57
73
|
|
|
@@ -64,8 +80,20 @@ const schemaURL = path.join(publicPath, schemaFilePath || '')
|
|
|
64
80
|
class="hidden w-full md:inline-flex h-10 justify-center px-4 py-2 border border-gray-300 shadow-sm text-sm font-medium rounded-md text-gray-200 bg-gray-800 hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-900"
|
|
65
81
|
>
|
|
66
82
|
<>
|
|
67
|
-
<svg
|
|
68
|
-
|
|
83
|
+
<svg
|
|
84
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
85
|
+
fill="none"
|
|
86
|
+
viewBox="0 0 24 24"
|
|
87
|
+
stroke-width="2"
|
|
88
|
+
stroke="currentColor"
|
|
89
|
+
aria-hidden="true"
|
|
90
|
+
class="-ml-1 mr-2 h-5 w-5 text-gray-200"
|
|
91
|
+
>
|
|
92
|
+
<path
|
|
93
|
+
stroke-linecap="round"
|
|
94
|
+
stroke-linejoin="round"
|
|
95
|
+
d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"
|
|
96
|
+
/>
|
|
69
97
|
</svg>
|
|
70
98
|
<span>Download Schema</span>
|
|
71
99
|
</>
|
|
@@ -78,8 +106,11 @@ const schemaURL = path.join(publicPath, schemaFilePath || '')
|
|
|
78
106
|
>View in Visualiser</a
|
|
79
107
|
>
|
|
80
108
|
|
|
81
|
-
<a
|
|
82
|
-
|
|
109
|
+
<a
|
|
110
|
+
href={buildUrl(`/docs/${message.collection}/${message.data.id}/${message.data.version}/changelog`)}
|
|
111
|
+
class="block text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-purple-500"
|
|
112
|
+
>Changelog</a
|
|
113
|
+
>
|
|
83
114
|
</div>
|
|
84
115
|
</div>
|
|
85
116
|
</aside>
|
|
@@ -4,7 +4,7 @@ import PillList from '@components/Lists/PillList';
|
|
|
4
4
|
import VersionList from '@components/Lists/VersionList.astro';
|
|
5
5
|
import { buildUrl } from '@utils/url-builder';
|
|
6
6
|
import { getEntry, type CollectionEntry } from 'astro:content';
|
|
7
|
-
import { join } from 'node:path'
|
|
7
|
+
import { join } from 'node:path';
|
|
8
8
|
interface Props {
|
|
9
9
|
service: CollectionEntry<'services'>;
|
|
10
10
|
}
|
|
@@ -12,9 +12,9 @@ interface Props {
|
|
|
12
12
|
const { service } = Astro.props;
|
|
13
13
|
|
|
14
14
|
// @ts-ignore
|
|
15
|
-
const sends = service.data.sends as CollectionEntry<'events'>[] || [];
|
|
15
|
+
const sends = (service.data.sends as CollectionEntry<'events'>[]) || [];
|
|
16
16
|
// @ts-ignore
|
|
17
|
-
const receives = service.data.receives as CollectionEntry<'events'>[] || [];
|
|
17
|
+
const receives = (service.data.receives as CollectionEntry<'events'>[]) || [];
|
|
18
18
|
|
|
19
19
|
const ownersRaw = service.data?.owners || [];
|
|
20
20
|
const owners = await Promise.all(ownersRaw.map((o) => getEntry(o)));
|
|
@@ -45,14 +45,31 @@ const ownersList = owners.map((o) => ({
|
|
|
45
45
|
// @ts-ignore
|
|
46
46
|
const publicPath = service?.catalog?.publicPath;
|
|
47
47
|
const schemaFilePath = service?.data?.schemaPath;
|
|
48
|
-
const schemaURL = join(publicPath, schemaFilePath || '')
|
|
48
|
+
const schemaURL = join(publicPath, schemaFilePath || '');
|
|
49
49
|
---
|
|
50
50
|
|
|
51
51
|
<aside class="sticky top-28 left-0 space-y-8 h-full overflow-y-auto">
|
|
52
52
|
<div id="sidebar-cta-portal">
|
|
53
|
-
<PillList
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
<PillList
|
|
54
|
+
title={`Receives Messages (${receivesList.length})`}
|
|
55
|
+
pills={receivesList}
|
|
56
|
+
emptyMessage={`This service does not receive any messages.`}
|
|
57
|
+
color="orange"
|
|
58
|
+
client:load
|
|
59
|
+
/>
|
|
60
|
+
<PillList
|
|
61
|
+
title={`Sends Messages (${sendsList.length})`}
|
|
62
|
+
pills={sendsList}
|
|
63
|
+
emptyMessage={`This service does not send any messages.`}
|
|
64
|
+
color="orange"
|
|
65
|
+
client:load
|
|
66
|
+
/>
|
|
67
|
+
<OwnersList
|
|
68
|
+
title={`Service owners (${ownersList.length})`}
|
|
69
|
+
owners={ownersList}
|
|
70
|
+
emptyMessage={`This service does not have any documented owners.`}
|
|
71
|
+
client:load
|
|
72
|
+
/>
|
|
56
73
|
|
|
57
74
|
{service.data.versions && <VersionList versions={service.data.versions} collectionItem={service} />}
|
|
58
75
|
|
|
@@ -65,17 +82,42 @@ const schemaURL = join(publicPath, schemaFilePath || '')
|
|
|
65
82
|
class="hidden w-full md:inline-flex h-10 justify-center px-4 py-2 border border-gray-300 shadow-sm text-sm font-medium rounded-md text-gray-200 bg-gray-800 hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-900"
|
|
66
83
|
>
|
|
67
84
|
<>
|
|
68
|
-
<svg
|
|
69
|
-
|
|
85
|
+
<svg
|
|
86
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
87
|
+
fill="none"
|
|
88
|
+
viewBox="0 0 24 24"
|
|
89
|
+
stroke-width="2"
|
|
90
|
+
stroke="currentColor"
|
|
91
|
+
aria-hidden="true"
|
|
92
|
+
class="-ml-1 mr-2 h-5 w-5 text-gray-200"
|
|
93
|
+
>
|
|
94
|
+
<path
|
|
95
|
+
stroke-linecap="round"
|
|
96
|
+
stroke-linejoin="round"
|
|
97
|
+
d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"
|
|
98
|
+
/>
|
|
70
99
|
</svg>
|
|
71
100
|
<span>Download Schema</span>
|
|
72
101
|
</>
|
|
73
102
|
</a>
|
|
74
103
|
)
|
|
75
104
|
}
|
|
76
|
-
<a
|
|
77
|
-
|
|
78
|
-
|
|
105
|
+
<a
|
|
106
|
+
href={buildUrl(`/visualiser/${service.collection}/${service.data.id}/${service.data.version}`)}
|
|
107
|
+
class="block text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-purple-500"
|
|
108
|
+
>View in Visualiser</a
|
|
109
|
+
>
|
|
110
|
+
<a
|
|
111
|
+
id="open-api-button"
|
|
112
|
+
href={buildUrl(`/docs/${service.collection}/${service.data.id}/${service.data.version}/spec`)}
|
|
113
|
+
class="hidden text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-purple-500"
|
|
114
|
+
>View API spec</a
|
|
115
|
+
>
|
|
116
|
+
<a
|
|
117
|
+
href={buildUrl(`/docs/${service.collection}/${service.data.id}/${service.data.version}/changelog`)}
|
|
118
|
+
class="block text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-purple-500"
|
|
119
|
+
>Changelog</a
|
|
120
|
+
>
|
|
79
121
|
</div>
|
|
80
122
|
</div>
|
|
81
123
|
</aside>
|
|
@@ -89,5 +131,4 @@ const schemaURL = join(publicPath, schemaFilePath || '')
|
|
|
89
131
|
openApiButton.style.display = 'block';
|
|
90
132
|
}
|
|
91
133
|
});
|
|
92
|
-
|
|
93
134
|
</script>
|
|
@@ -33,44 +33,91 @@ import { buildUrl } from '@utils/url-builder';
|
|
|
33
33
|
<div class="pl-0 sm:pl-56 xl:pl-80 w-full pt-8 pb-40">
|
|
34
34
|
<div class="prose prose-sm">
|
|
35
35
|
<div class="bg-white">
|
|
36
|
-
<div class="mx-auto max-w-7xl
|
|
36
|
+
<div class="mx-auto max-w-7xl">
|
|
37
37
|
<div class="mx-auto max-w-2xl lg:mx-0 lg:max-w-none">
|
|
38
38
|
<h1 class="mt-2 text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl mb-0">EventCatalog</h1>
|
|
39
|
-
<div class="
|
|
39
|
+
<div class="grid max-w-xl grid-cols-1 md:gap-8 text-base leading-7 text-gray-700 lg:max-w-none lg:grid-cols-1">
|
|
40
40
|
<div>
|
|
41
41
|
<p>
|
|
42
|
-
Welcome to <a href="https://www.eventcatalog.dev/">EventCatalog</a>.
|
|
42
|
+
Welcome to <a href="https://www.eventcatalog.dev/">EventCatalog</a>.
|
|
43
43
|
</p>
|
|
44
44
|
<p>
|
|
45
|
-
This open-source project is designed to help you and your teams
|
|
46
|
-
|
|
45
|
+
This open-source project is designed to help you and your teams bring discoverability and clarity to your
|
|
46
|
+
event-driven architectures (EDA).
|
|
47
47
|
</p>
|
|
48
48
|
<p>
|
|
49
|
-
To get started you can read the following guides:
|
|
49
|
+
To get started you can read the following guides:
|
|
50
50
|
<ul>
|
|
51
|
-
<li
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
<li
|
|
51
|
+
<li>
|
|
52
|
+
<a
|
|
53
|
+
class="text-purple-500"
|
|
54
|
+
href="https://eventcatalog.dev/docs/development/getting-started/introduction"
|
|
55
|
+
>Getting started with EventCatalog</a
|
|
56
|
+
>
|
|
57
|
+
</li>
|
|
58
|
+
<li>
|
|
59
|
+
<a
|
|
60
|
+
class="text-purple-500"
|
|
61
|
+
href="https://eventcatalog.dev/docs/development/guides/domains/adding-domains">Creating domains</a
|
|
62
|
+
>
|
|
63
|
+
</li>
|
|
64
|
+
<li>
|
|
65
|
+
<a
|
|
66
|
+
class="text-purple-500"
|
|
67
|
+
href="https://eventcatalog.dev/docs/development/guides/services/adding-services"
|
|
68
|
+
>Creating services</a
|
|
69
|
+
>
|
|
70
|
+
</li>
|
|
71
|
+
<li>
|
|
72
|
+
<a
|
|
73
|
+
class="text-purple-500"
|
|
74
|
+
href="https://eventcatalog.dev/docs/development/guides/messages/commands/introduction"
|
|
75
|
+
>Creating commands</a
|
|
76
|
+
>
|
|
77
|
+
</li>
|
|
78
|
+
<li>
|
|
79
|
+
<a
|
|
80
|
+
class="text-purple-500"
|
|
81
|
+
href="https://eventcatalog.dev/docs/development/guides/messages/events/introduction"
|
|
82
|
+
>Creating events</a
|
|
83
|
+
>
|
|
84
|
+
</li>
|
|
85
|
+
<li>
|
|
86
|
+
<a class="text-purple-500" href="https://eventcatalog.dev/docs/owners"
|
|
87
|
+
>Assigning owners to resources</a
|
|
88
|
+
>
|
|
89
|
+
</li>
|
|
90
|
+
<li>
|
|
91
|
+
<a
|
|
92
|
+
class="text-purple-500"
|
|
93
|
+
href="https://eventcatalog.dev/docs/development/components/using-components"
|
|
94
|
+
>Using components in your pages (Schemas, OpenAPI, etc)</a
|
|
95
|
+
>
|
|
96
|
+
</li>
|
|
97
|
+
<li>
|
|
98
|
+
<a class="text-purple-500" href="https://eventcatalog.dev/docs/development/deployment"
|
|
99
|
+
>Deploying and hosting your EventCatalog</a
|
|
100
|
+
>
|
|
101
|
+
</li>
|
|
59
102
|
</ul>
|
|
60
103
|
</p>
|
|
61
|
-
<h3>
|
|
62
|
-
Join the community
|
|
63
|
-
</h3>
|
|
64
|
-
<p>Got questions about EventCatalog? Feature requests or need support? <a class="text-purple-500" href="https://discord.gg/3rjaZMmrAm">Join our community on Discord.</a></p>
|
|
65
|
-
<h3>
|
|
66
|
-
Enterprise support
|
|
67
|
-
</h3>
|
|
104
|
+
<h3>Join the community</h3>
|
|
68
105
|
<p>
|
|
69
|
-
|
|
106
|
+
Got questions about EventCatalog? Feature requests or need support? <a
|
|
107
|
+
class="text-purple-500"
|
|
108
|
+
href="https://discord.gg/3rjaZMmrAm">Join our community on Discord.</a
|
|
109
|
+
>
|
|
110
|
+
</p>
|
|
111
|
+
<h3>Enterprise support</h3>
|
|
112
|
+
<p>
|
|
113
|
+
Using EventCatalog and needs enterprise support? Work with us, find out what we offer on our <a
|
|
114
|
+
class="text-purple-500"
|
|
115
|
+
href="https://eventcatalog.dev/enterprise">enterprise page</a
|
|
116
|
+
>.
|
|
70
117
|
</p>
|
|
71
118
|
</div>
|
|
72
119
|
</div>
|
|
73
|
-
|
|
120
|
+
|
|
74
121
|
<Footer />
|
|
75
122
|
</div>
|
|
76
123
|
</div>
|
|
@@ -76,7 +76,9 @@ const tabs = [
|
|
|
76
76
|
class={` text-black group inline-flex items-center py-4 px-1 text-sm font-light ${tab.isActive ? `border-${tab.activeColor}-500 border-b-[2px] text-${tab.activeColor}-500` : 'opacity-80'} ${!tab.enabled ? 'disabled' : ''}`}
|
|
77
77
|
aria-current="page"
|
|
78
78
|
>
|
|
79
|
-
<tab.icon
|
|
79
|
+
<tab.icon
|
|
80
|
+
className={`w-6 h-6 -ml-0.5 mr-2 ${tab.isActive ? `text-${tab.activeColor}-500` : 'text-gray-500'}`}
|
|
81
|
+
/>
|
|
80
82
|
<span>{tab.label}</span>
|
|
81
83
|
</a>
|
|
82
84
|
))
|
|
@@ -16,18 +16,18 @@ import SEO from '../components/Seo.astro';
|
|
|
16
16
|
<head>
|
|
17
17
|
<SEO title={`EventCatalog | ${title}`} description={description} ogTitle={title} />
|
|
18
18
|
</head>
|
|
19
|
-
<body>
|
|
19
|
+
<body>
|
|
20
20
|
<div class="px-10 max-w-[96em] mx-auto">
|
|
21
21
|
<Header />
|
|
22
22
|
|
|
23
23
|
<div class="md:pt-20">
|
|
24
|
-
<nav class="hidden sm:flex grow w-56 xl:w-[19em] fixed overflow-y-auto h-full py-2
|
|
25
|
-
<div class="w-full
|
|
24
|
+
<nav class="hidden sm:flex grow w-56 xl:w-[19em] fixed overflow-y-auto h-full py-2">
|
|
25
|
+
<div class="w-full">
|
|
26
26
|
<SideBar />
|
|
27
27
|
</div>
|
|
28
28
|
</nav>
|
|
29
29
|
|
|
30
|
-
<div class="pl-0 sm:pl-64 lg:pl-72 xl:pl-80 w-full pt-0 pb-40
|
|
30
|
+
<div class="pl-0 sm:pl-64 lg:pl-72 xl:pl-80 w-full pt-0 pb-40">
|
|
31
31
|
<slot />
|
|
32
32
|
</div>
|
|
33
33
|
</div>
|
package/src/layouts/Footer.astro
CHANGED
|
@@ -1,14 +1,27 @@
|
|
|
1
1
|
---
|
|
2
|
-
import { buildUrl } from
|
|
3
|
-
|
|
2
|
+
import { buildUrl } from '@utils/url-builder';
|
|
4
3
|
---
|
|
5
4
|
|
|
6
5
|
<footer class="py-4 space-y-8 border-t border-gray-300">
|
|
7
6
|
<div class="flex justify-between items-center py-8 text-gray-500 text-sm font-light">
|
|
8
7
|
<div class="flex space-x-5">
|
|
9
|
-
<a href="https://github.com/event-catalog/eventcatalog" target="_blank"
|
|
10
|
-
|
|
8
|
+
<a href="https://github.com/event-catalog/eventcatalog" target="_blank"
|
|
9
|
+
><svg
|
|
10
|
+
class="w-5 h-5 bg-gray-400 hover:bg-purple-500 dark:hover:bg-gray-400"
|
|
11
|
+
style={`mask-image: url("${buildUrl('/icons/github.svg', true)}"); mask-repeat: no-repeat; mask-position: center center;`}
|
|
12
|
+
></svg></a
|
|
13
|
+
>
|
|
14
|
+
<a href="https://x.com/event_catalog" target="_blank"
|
|
15
|
+
><span class="sr-only">x</span><svg
|
|
16
|
+
class="w-5 h-5 bg-gray-400 hover:bg-purple-500 dark:hover:bg-gray-400"
|
|
17
|
+
style={`mask-image: url("${buildUrl('/icons/x-twitter.svg', true)}"); mask-repeat: no-repeat; mask-position: center center;`}
|
|
18
|
+
></svg></a
|
|
19
|
+
>
|
|
11
20
|
</div>
|
|
12
|
-
<a
|
|
21
|
+
<a
|
|
22
|
+
target="_blank"
|
|
23
|
+
class="hover:text-purple-500 hover:underline text-gray-400 font-light not-prose"
|
|
24
|
+
href="https://eventcatalog.dev">Powered by EventCatalog</a
|
|
25
|
+
>
|
|
13
26
|
</div>
|
|
14
|
-
</footer>
|
|
27
|
+
</footer>
|
|
@@ -8,32 +8,37 @@ import { getServices } from '@utils/services/services';
|
|
|
8
8
|
import { getDomains } from '@utils/domains/domains';
|
|
9
9
|
|
|
10
10
|
export async function getStaticPaths() {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
const events = await getEvents();
|
|
12
|
+
const commands = await getCommands();
|
|
13
|
+
const services = await getServices();
|
|
14
|
+
const domains = await getDomains();
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
};
|
|
16
|
+
const buildPage = (type: string, collection: CollectionEntry<CollectionTypes>[]) => {
|
|
17
|
+
return {
|
|
18
|
+
params: {
|
|
19
|
+
type,
|
|
20
|
+
},
|
|
21
|
+
props: {
|
|
22
|
+
type,
|
|
23
|
+
data: collection,
|
|
24
|
+
},
|
|
26
25
|
};
|
|
26
|
+
};
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
return [
|
|
29
|
+
buildPage('events', events),
|
|
30
|
+
buildPage('commands', commands),
|
|
31
|
+
buildPage('services', services),
|
|
32
|
+
buildPage('domains', domains),
|
|
33
|
+
];
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
const { type, data } = Astro.props;
|
|
37
37
|
---
|
|
38
38
|
|
|
39
|
-
<DiscoverLayout
|
|
39
|
+
<DiscoverLayout
|
|
40
|
+
title={`${type} (${data.length})`}
|
|
41
|
+
subtitle={`Find, filter and search for any ${type} in your system.`}
|
|
42
|
+
data={data}
|
|
43
|
+
type={type}
|
|
44
|
+
/>
|