@eventcatalog/core 2.48.2 → 2.48.4

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.
@@ -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 = "2.48.2";
40
+ var version = "2.48.4";
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-SKRYED6N.js";
4
- import "../chunk-TU4LMTL7.js";
3
+ } from "../chunk-Z6AR6AYE.js";
4
+ import "../chunk-ECZJUK6Y.js";
5
5
  export {
6
6
  raiseEvent
7
7
  };
@@ -106,7 +106,7 @@ var import_axios = __toESM(require("axios"), 1);
106
106
  var import_os = __toESM(require("os"), 1);
107
107
 
108
108
  // package.json
109
- var version = "2.48.2";
109
+ var version = "2.48.4";
110
110
 
111
111
  // src/constants.ts
112
112
  var VERSION = version;
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  log_build_default
3
- } from "../chunk-UVANOIYF.js";
4
- import "../chunk-SKRYED6N.js";
5
- import "../chunk-TU4LMTL7.js";
3
+ } from "../chunk-RQNHTYIW.js";
4
+ import "../chunk-Z6AR6AYE.js";
5
+ import "../chunk-ECZJUK6Y.js";
6
6
  import "../chunk-E7TXTI7G.js";
7
7
  export {
8
8
  log_build_default as default
@@ -1,5 +1,5 @@
1
1
  // package.json
2
- var version = "2.48.2";
2
+ var version = "2.48.4";
3
3
 
4
4
  // src/constants.ts
5
5
  var VERSION = version;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  raiseEvent
3
- } from "./chunk-SKRYED6N.js";
3
+ } from "./chunk-Z6AR6AYE.js";
4
4
  import {
5
5
  getEventCatalogConfigFile,
6
6
  verifyRequiredFieldsAreInCatalogConfigFile
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-TU4LMTL7.js";
3
+ } from "./chunk-ECZJUK6Y.js";
4
4
 
5
5
  // src/analytics/analytics.js
6
6
  import axios from "axios";
@@ -25,7 +25,7 @@ __export(constants_exports, {
25
25
  module.exports = __toCommonJS(constants_exports);
26
26
 
27
27
  // package.json
28
- var version = "2.48.2";
28
+ var version = "2.48.4";
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-TU4LMTL7.js";
3
+ } from "./chunk-ECZJUK6Y.js";
4
4
  export {
5
5
  VERSION
6
6
  };
@@ -157,7 +157,7 @@ var import_axios = __toESM(require("axios"), 1);
157
157
  var import_os = __toESM(require("os"), 1);
158
158
 
159
159
  // package.json
160
- var version = "2.48.2";
160
+ var version = "2.48.4";
161
161
 
162
162
  // src/constants.ts
163
163
  var VERSION = version;
@@ -6,8 +6,8 @@ import {
6
6
  } from "./chunk-XE6PFSH5.js";
7
7
  import {
8
8
  log_build_default
9
- } from "./chunk-UVANOIYF.js";
10
- import "./chunk-SKRYED6N.js";
9
+ } from "./chunk-RQNHTYIW.js";
10
+ import "./chunk-Z6AR6AYE.js";
11
11
  import {
12
12
  catalogToAstro,
13
13
  checkAndConvertMdToMdx
@@ -15,7 +15,7 @@ import {
15
15
  import "./chunk-LDBRNJIL.js";
16
16
  import {
17
17
  VERSION
18
- } from "./chunk-TU4LMTL7.js";
18
+ } from "./chunk-ECZJUK6Y.js";
19
19
  import {
20
20
  isAuthEnabled,
21
21
  isBackstagePluginEnabled,
@@ -61,6 +61,7 @@ const MessageList: React.FC<MessageListProps> = ({ messages, decodedCurrentPath,
61
61
  >
62
62
  <span className="truncate">
63
63
  <HighlightedText text={message.data?.sidebar?.label || message.data.name} searchTerm={searchTerm} />
64
+ <span className="text-xs text-gray-400">{message.data.draft ? ' (DRAFT)' : ''}</span>
64
65
  </span>
65
66
  <span
66
67
  className={`ml-2 text-[10px] flex items-center gap-1 font-medium px-2 uppercase py-0.5 rounded ${getMessageColorByLabelOrCollection(message.collection, message.data?.sidebar?.badge)}`}
@@ -91,6 +91,7 @@ const ServiceItem = React.memo(
91
91
  >
92
92
  <span className="truncate text-xs font-bold">
93
93
  <HighlightedText text={item.label} searchTerm={searchTerm} />
94
+ <span className="text-xs text-gray-400">{item.draft ? ' (DRAFT)' : ''}</span>
94
95
  </span>
95
96
  <span className="text-purple-600 ml-2 text-[10px] font-medium bg-purple-50 px-2 py-0.5 rounded">SERVICE</span>
96
97
  </button>
@@ -24,6 +24,7 @@ export interface ServiceItem {
24
24
  name: string;
25
25
  id: string;
26
26
  version: string;
27
+ draft: boolean | { title?: string; message: string };
27
28
  sends: MessageItem[];
28
29
  receives: MessageItem[];
29
30
  entities: EntityItem[];
@@ -59,6 +59,7 @@ export async function getResourcesForNavigation({ currentPath }: { currentPath:
59
59
  name: send.data.name,
60
60
  sidebar: send.data.sidebar,
61
61
  aggregateRoot: send?.data?.aggregateRoot,
62
+ draft: send.data.draft,
62
63
  },
63
64
  collection: send.collection,
64
65
  href: buildUrl(`/${route}/${send.collection}/${send.data.id}/${send.data.version}`),
@@ -69,6 +70,7 @@ export async function getResourcesForNavigation({ currentPath }: { currentPath:
69
70
  name: receive.data.name,
70
71
  sidebar: receive.data.sidebar,
71
72
  aggregateRoot: receive?.data?.aggregateRoot,
73
+ draft: receive.data.draft,
72
74
  },
73
75
  collection: receive.collection,
74
76
  href: buildUrl(`/${route}/${receive.collection}/${receive.data.id}/${receive.data.version}`),
@@ -79,6 +81,7 @@ export async function getResourcesForNavigation({ currentPath }: { currentPath:
79
81
  name: entity.data.name,
80
82
  sidebar: entity.data.sidebar,
81
83
  aggregateRoot: entity?.data?.aggregateRoot,
84
+ draft: entity.data.draft,
82
85
  },
83
86
  collection: entity.collection,
84
87
  href: buildUrl(`/${route}/${entity.collection}/${entity.data.id}/${entity.data.version}`),
@@ -103,6 +106,7 @@ export async function getResourcesForNavigation({ currentPath }: { currentPath:
103
106
  servicesCount,
104
107
  id: item.data.id,
105
108
  name: item.data.name,
109
+ draft: item.data.draft,
106
110
  services: isCollectionDomain ? stripCollection(item.data.services) : null,
107
111
  domains: isCollectionDomain ? stripCollection(item.data.domains) : null,
108
112
  sends: sendsWithHref,
@@ -127,6 +131,7 @@ export async function getResourcesForNavigation({ currentPath }: { currentPath:
127
131
  version: item.data.version,
128
132
  id: item.data.id,
129
133
  name: item.data.name,
134
+ draft: item.data.draft,
130
135
  href: buildUrl(`/${route}/${item.collection}/${item.data.id}/${item.data.version}`),
131
136
  collection: item.collection,
132
137
  }));
@@ -48,6 +48,7 @@ export type TData<T extends TCollectionTypes> = {
48
48
  summary: string;
49
49
  version: string;
50
50
  latestVersion?: string; // Defined on getter collection utility
51
+ draft?: boolean | { title?: string; message: string }; // Draft property from base schema
51
52
  badges?: Array<{
52
53
  id: string; // Where is it defined?
53
54
  content: string;
@@ -124,13 +125,14 @@ export const Table = <T extends TCollectionTypes>({
124
125
  collection,
125
126
  mode = 'simple',
126
127
  checkboxLatestId,
128
+ checkboxDraftsId,
127
129
  }: {
128
130
  data: TData<T>[];
129
131
  collection: T;
130
132
  checkboxLatestId: string;
133
+ checkboxDraftsId: string;
131
134
  mode?: 'simple' | 'full';
132
135
  }) => {
133
- const [data, _setData] = useState(initialData);
134
136
  const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);
135
137
 
136
138
  useEffect(() => {
@@ -142,11 +144,13 @@ export const Table = <T extends TCollectionTypes>({
142
144
  }, []);
143
145
 
144
146
  const [showOnlyLatest, setShowOnlyLatest] = useState(true);
147
+ const [onlyShowDrafts, setOnlyShowDrafts] = useState(false);
145
148
 
146
149
  useEffect(() => {
147
150
  const checkbox = document.getElementById(checkboxLatestId);
148
151
  function handleChange(evt: Event) {
149
- setShowOnlyLatest((evt.target as HTMLInputElement).checked);
152
+ const checked = (evt.target as HTMLInputElement).checked;
153
+ setShowOnlyLatest(checked);
150
154
  }
151
155
 
152
156
  checkbox?.addEventListener('change', handleChange);
@@ -154,10 +158,47 @@ export const Table = <T extends TCollectionTypes>({
154
158
  return () => checkbox?.removeEventListener('change', handleChange);
155
159
  }, [checkboxLatestId]);
156
160
 
161
+ useEffect(() => {
162
+ const checkbox = document.getElementById(checkboxDraftsId);
163
+ function handleChange(evt: Event) {
164
+ const checked = (evt.target as HTMLInputElement).checked;
165
+ setOnlyShowDrafts(checked);
166
+ }
167
+
168
+ checkbox?.addEventListener('change', handleChange);
169
+
170
+ return () => checkbox?.removeEventListener('change', handleChange);
171
+ }, [checkboxDraftsId]);
172
+
173
+ // Filter data based on checkbox states
174
+ const filteredData = useMemo(() => {
175
+ return initialData.filter((row) => {
176
+ // Check if item is a draft
177
+ const isDraft = row.data.draft === true || (typeof row.data.draft === 'object' && row.data.draft !== null);
178
+
179
+ // If "Only show drafts" is enabled, show only drafts
180
+ if (onlyShowDrafts && !isDraft) {
181
+ return false;
182
+ }
183
+
184
+ // If "Only show drafts" is enabled, don't apply other filters
185
+ if (onlyShowDrafts) {
186
+ return true;
187
+ }
188
+
189
+ // Check latest version filter (only when not showing only drafts)
190
+ if (showOnlyLatest) {
191
+ return isSameVersion(row.data.version, row.data.latestVersion);
192
+ }
193
+
194
+ return true;
195
+ });
196
+ }, [initialData, showOnlyLatest, onlyShowDrafts]);
197
+
157
198
  const columns = useMemo(() => getColumnsByCollection(collection), [collection]);
158
199
 
159
200
  const table = useReactTable({
160
- data,
201
+ data: filteredData,
161
202
  columns,
162
203
  onColumnFiltersChange: setColumnFilters,
163
204
  getCoreRowModel: getCoreRowModel(),
@@ -168,15 +209,6 @@ export const Table = <T extends TCollectionTypes>({
168
209
  getPaginationRowModel: getPaginationRowModel(),
169
210
  state: {
170
211
  columnFilters,
171
- globalFilter: showOnlyLatest,
172
- },
173
- onGlobalFilterChange: setShowOnlyLatest,
174
- globalFilterFn: (row, _columnId, showOnlyLatest: boolean) => {
175
- if (showOnlyLatest) {
176
- return isSameVersion(row.original.data.version, row.original.data.latestVersion);
177
- }
178
-
179
- return true;
180
212
  },
181
213
  });
182
214
 
@@ -43,7 +43,11 @@ export const columns = () => [
43
43
  columnHelper.accessor('data.summary', {
44
44
  id: 'summary',
45
45
  header: () => 'Summary',
46
- cell: (info) => <span className="font-light ">{info.renderValue()}</span>,
46
+ cell: (info) => (
47
+ <span className="font-light ">
48
+ {info.renderValue()} {info.row.original.data.draft ? ' (Draft)' : ''}
49
+ </span>
50
+ ),
47
51
  footer: (info) => info.column.id,
48
52
  meta: {
49
53
  showFilter: false,
@@ -60,7 +60,11 @@ export const columns = () => [
60
60
  columnHelper.accessor('data.summary', {
61
61
  id: 'summary',
62
62
  header: () => 'Summary',
63
- cell: (info) => <span className="font-light ">{info.renderValue()}</span>,
63
+ cell: (info) => (
64
+ <span className="font-light ">
65
+ {info.renderValue()} {info.row.original.data.draft ? ' (Draft)' : ''}
66
+ </span>
67
+ ),
64
68
  footer: (info) => info.column.id,
65
69
  meta: {
66
70
  showFilter: false,
@@ -44,7 +44,11 @@ export const columns = () => [
44
44
  columnHelper.accessor('data.summary', {
45
45
  id: 'summary',
46
46
  header: () => 'Summary',
47
- cell: (info) => <span className="font-light ">{info.renderValue()}</span>,
47
+ cell: (info) => (
48
+ <span className="font-light ">
49
+ {info.renderValue()} {info.row.original.data.draft ? ' (Draft)' : ''}
50
+ </span>
51
+ ),
48
52
  footer: (info) => info.column.id,
49
53
  meta: {
50
54
  showFilter: false,
@@ -73,6 +73,7 @@ const baseSchema = z.object({
73
73
  name: z.string(),
74
74
  summary: z.string().optional(),
75
75
  version: z.string(),
76
+ draft: z.union([z.boolean(), z.object({ title: z.string().optional(), message: z.string() })]).optional(),
76
77
  badges: z.array(badge).optional(),
77
78
  owners: z.array(ownerReference).optional(),
78
79
  schemaPath: z.string().optional(),
@@ -30,6 +30,7 @@ const { title, subtitle, data, type } = Astro.props;
30
30
  const currentPath = Astro.url.pathname;
31
31
 
32
32
  const checkboxLatestId = 'latest-only';
33
+ const checkboxDraftsId = 'drafts-only';
33
34
 
34
35
  const tabs = [
35
36
  {
@@ -88,7 +89,13 @@ const tabs = [
88
89
  <div class="mt-4 flow-root">
89
90
  <div class="-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8">
90
91
  <div class="inline-block min-w-full align-middle sm:px-6 lg:px-8">
91
- <Table checkboxLatestId={checkboxLatestId} data={data} collection={type} client:load />
92
+ <Table
93
+ checkboxLatestId={checkboxLatestId}
94
+ checkboxDraftsId={checkboxDraftsId}
95
+ data={data}
96
+ collection={type}
97
+ client:load
98
+ />
92
99
  </div>
93
100
  </div>
94
101
  </div>
@@ -31,6 +31,7 @@ const { title, subtitle, data, type } = Astro.props;
31
31
  const currentPath = Astro.url.pathname;
32
32
 
33
33
  const checkboxLatestId = 'latest-only';
34
+ const checkboxDraftsId = 'show-drafts';
34
35
 
35
36
  const tabs = [
36
37
  {
@@ -117,14 +118,25 @@ const tabs = [
117
118
  <h1 class="text-4xl font-semibold text-gray-900 capitalize">{title}</h1>
118
119
  <p class="text-md text-gray-700">{subtitle}</p>
119
120
  </div>
120
- <div class="p-4 border border-gray-200 rounded-md">
121
- <Checkbox id={checkboxLatestId} name={checkboxLatestId} label="Show latest version only" checked />
121
+ <div class="flex gap-4">
122
+ <div class="p-4 border border-gray-200 rounded-md">
123
+ <Checkbox id={checkboxLatestId} name={checkboxLatestId} label="Show latest version only" checked />
124
+ </div>
125
+ <div class="p-4 border border-gray-200 rounded-md">
126
+ <Checkbox id={checkboxDraftsId} name={checkboxDraftsId} label="Show drafts only" />
127
+ </div>
122
128
  </div>
123
129
  </div>
124
130
  <div class="mt-4 flow-root">
125
131
  <div class="-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8">
126
132
  <div class="inline-block min-w-full align-middle sm:px-6 lg:px-8">
127
- <Table checkboxLatestId={checkboxLatestId} data={data} collection={type} client:load />
133
+ <Table
134
+ checkboxLatestId={checkboxLatestId}
135
+ checkboxDraftsId={checkboxDraftsId}
136
+ data={data}
137
+ collection={type}
138
+ client:load
139
+ />
128
140
  </div>
129
141
  </div>
130
142
  </div>
@@ -34,6 +34,7 @@ function mapToItem(i: any) {
34
34
  summary: d.data?.summary,
35
35
  version: d.data.version,
36
36
  latestVersion: d.data?.latestVersion,
37
+ draft: d.data?.draft,
37
38
  badges: d.data?.badges,
38
39
  // @ts-ignore
39
40
  consumers: d.data?.consumers?.map(mapToItem) ?? [],
@@ -278,6 +278,21 @@ nodeGraphs.push({
278
278
  </div>
279
279
  )
280
280
  }
281
+
282
+ {
283
+ props.data.draft && (
284
+ <Admonition type="warning" title={props.data?.draft?.title || `Draft ${friendlyCollectionName}`}>
285
+ <div>
286
+ {!props.data.draft.message && (
287
+ <p>This resource has been marked as a draft and may still be under development.</p>
288
+ )}
289
+ {props.data.draft.message && (
290
+ <div class="prose prose-sm max-w-none" set:html={marked.parse(props.data.draft.message)} />
291
+ )}
292
+ </div>
293
+ </Admonition>
294
+ )
295
+ }
281
296
  </div>
282
297
  </div>
283
298
 
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "https://github.com/event-catalog/eventcatalog.git"
7
7
  },
8
8
  "type": "module",
9
- "version": "2.48.2",
9
+ "version": "2.48.4",
10
10
  "publishConfig": {
11
11
  "access": "public"
12
12
  },