@eventcatalog/core 3.0.0-beta.2 → 3.0.0-beta.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 = "3.0.0-beta.2";
40
+ var version = "3.0.0-beta.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-JSONCD7V.js";
4
- import "../chunk-H4QHE5YZ.js";
3
+ } from "../chunk-HNU3YCIL.js";
4
+ import "../chunk-FEE4ODCC.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 = "3.0.0-beta.2";
109
+ var version = "3.0.0-beta.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-PQL6O5YA.js";
4
- import "../chunk-JSONCD7V.js";
5
- import "../chunk-H4QHE5YZ.js";
3
+ } from "../chunk-P4GSM347.js";
4
+ import "../chunk-HNU3YCIL.js";
5
+ import "../chunk-FEE4ODCC.js";
6
6
  import "../chunk-UPONRQSN.js";
7
7
  export {
8
8
  log_build_default as default
@@ -0,0 +1,44 @@
1
+ import {
2
+ VERSION
3
+ } from "./chunk-FEE4ODCC.js";
4
+
5
+ // src/utils/cli-logger.ts
6
+ import pc from "picocolors";
7
+ var getTimestamp = () => {
8
+ const now = /* @__PURE__ */ new Date();
9
+ return now.toLocaleTimeString("en-US", { hour12: false });
10
+ };
11
+ var formatMessage = (tag, message, tagColor) => {
12
+ return `${pc.dim(getTimestamp())} ${tagColor(`[${tag}]`)} ${message}`;
13
+ };
14
+ var logger = {
15
+ welcome: () => {
16
+ console.log();
17
+ console.log(pc.magenta(pc.bold("\u{1F680} EventCatalog")) + pc.dim(` (v${VERSION})`));
18
+ console.log(pc.dim("https://eventcatalog.dev"));
19
+ console.log();
20
+ console.log(
21
+ pc.dim("If you like the project, we would appreciate a star on GitHub \u2764\uFE0F - ") + pc.bold("https://github.com/event-catalog/eventcatalog/stargazers")
22
+ );
23
+ console.log();
24
+ },
25
+ info: (message, tag = "info") => {
26
+ console.log(formatMessage(tag, message, pc.blue));
27
+ },
28
+ success: (message, tag = "success") => {
29
+ console.log(formatMessage(tag, message, pc.green));
30
+ },
31
+ error: (message, tag = "error") => {
32
+ console.log(formatMessage(tag, message, pc.red));
33
+ },
34
+ warning: (message, tag = "warn") => {
35
+ console.log(formatMessage(tag, message, pc.yellow));
36
+ },
37
+ dim: (message) => {
38
+ console.log(pc.dim(message));
39
+ }
40
+ };
41
+
42
+ export {
43
+ logger
44
+ };
@@ -1,5 +1,5 @@
1
1
  // package.json
2
- var version = "3.0.0-beta.2";
2
+ var version = "3.0.0-beta.4";
3
3
 
4
4
  // src/constants.ts
5
5
  var VERSION = version;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-H4QHE5YZ.js";
3
+ } from "./chunk-FEE4ODCC.js";
4
4
 
5
5
  // src/analytics/analytics.js
6
6
  import axios from "axios";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  raiseEvent
3
- } from "./chunk-JSONCD7V.js";
3
+ } from "./chunk-HNU3YCIL.js";
4
4
  import {
5
5
  getEventCatalogConfigFile,
6
6
  verifyRequiredFieldsAreInCatalogConfigFile
@@ -1,3 +1,6 @@
1
+ import {
2
+ logger
3
+ } from "./chunk-5L44ZUV2.js";
1
4
  import {
2
5
  cleanup,
3
6
  getEventCatalogConfigFile
@@ -22,7 +25,7 @@ var generate = async (PROJECT_DIRECTORY) => {
22
25
  const config = await getEventCatalogConfigFile(PROJECT_DIRECTORY);
23
26
  const { generators = [] } = config;
24
27
  if (!generators.length) {
25
- console.log("No configured generators found, skipping generation");
28
+ logger.info("No configured generators found, skipping generation", "generator");
26
29
  return;
27
30
  }
28
31
  for (const generator of generators) {
@@ -39,7 +42,8 @@ var generate = async (PROJECT_DIRECTORY) => {
39
42
  const generator2 = getDefaultExport(importedGenerator);
40
43
  await generator2({ eventCatalogConfig: {} }, pluginConfig);
41
44
  } catch (error) {
42
- console.error("Error loading plugin:", error);
45
+ logger.error("Error loading plugin:", "generator");
46
+ console.error(error);
43
47
  await cleanup(PROJECT_DIRECTORY);
44
48
  return;
45
49
  }
@@ -25,7 +25,7 @@ __export(constants_exports, {
25
25
  module.exports = __toCommonJS(constants_exports);
26
26
 
27
27
  // package.json
28
- var version = "3.0.0-beta.2";
28
+ var version = "3.0.0-beta.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-H4QHE5YZ.js";
3
+ } from "./chunk-FEE4ODCC.js";
4
4
  export {
5
5
  VERSION
6
6
  };
@@ -105,6 +105,51 @@ var verifyRequiredFieldsAreInCatalogConfigFile = async (projectDirectory) => {
105
105
  }
106
106
  };
107
107
 
108
+ // src/utils/cli-logger.ts
109
+ var import_picocolors = __toESM(require("picocolors"), 1);
110
+
111
+ // package.json
112
+ var version = "3.0.0-beta.4";
113
+
114
+ // src/constants.ts
115
+ var VERSION = version;
116
+
117
+ // src/utils/cli-logger.ts
118
+ var getTimestamp = () => {
119
+ const now = /* @__PURE__ */ new Date();
120
+ return now.toLocaleTimeString("en-US", { hour12: false });
121
+ };
122
+ var formatMessage = (tag, message, tagColor) => {
123
+ return `${import_picocolors.default.dim(getTimestamp())} ${tagColor(`[${tag}]`)} ${message}`;
124
+ };
125
+ var logger = {
126
+ welcome: () => {
127
+ console.log();
128
+ console.log(import_picocolors.default.magenta(import_picocolors.default.bold("\u{1F680} EventCatalog")) + import_picocolors.default.dim(` (v${VERSION})`));
129
+ console.log(import_picocolors.default.dim("https://eventcatalog.dev"));
130
+ console.log();
131
+ console.log(
132
+ import_picocolors.default.dim("If you like the project, we would appreciate a star on GitHub \u2764\uFE0F - ") + import_picocolors.default.bold("https://github.com/event-catalog/eventcatalog/stargazers")
133
+ );
134
+ console.log();
135
+ },
136
+ info: (message, tag = "info") => {
137
+ console.log(formatMessage(tag, message, import_picocolors.default.blue));
138
+ },
139
+ success: (message, tag = "success") => {
140
+ console.log(formatMessage(tag, message, import_picocolors.default.green));
141
+ },
142
+ error: (message, tag = "error") => {
143
+ console.log(formatMessage(tag, message, import_picocolors.default.red));
144
+ },
145
+ warning: (message, tag = "warn") => {
146
+ console.log(formatMessage(tag, message, import_picocolors.default.yellow));
147
+ },
148
+ dim: (message) => {
149
+ console.log(import_picocolors.default.dim(message));
150
+ }
151
+ };
152
+
108
153
  // src/generate.js
109
154
  function getDefaultExport(importedModule) {
110
155
  if (importedModule === null || typeof importedModule !== "object") {
@@ -123,7 +168,7 @@ var generate = async (PROJECT_DIRECTORY) => {
123
168
  const config = await getEventCatalogConfigFile(PROJECT_DIRECTORY);
124
169
  const { generators = [] } = config;
125
170
  if (!generators.length) {
126
- console.log("No configured generators found, skipping generation");
171
+ logger.info("No configured generators found, skipping generation", "generator");
127
172
  return;
128
173
  }
129
174
  for (const generator of generators) {
@@ -140,7 +185,8 @@ var generate = async (PROJECT_DIRECTORY) => {
140
185
  const generator2 = getDefaultExport(importedGenerator);
141
186
  await generator2({ eventCatalogConfig: {} }, pluginConfig);
142
187
  } catch (error) {
143
- console.error("Error loading plugin:", error);
188
+ logger.error("Error loading plugin:", "generator");
189
+ console.error(error);
144
190
  await cleanup(PROJECT_DIRECTORY);
145
191
  return;
146
192
  }
@@ -155,14 +201,6 @@ var generate = async (PROJECT_DIRECTORY) => {
155
201
  // src/analytics/analytics.js
156
202
  var import_axios = __toESM(require("axios"), 1);
157
203
  var import_os = __toESM(require("os"), 1);
158
-
159
- // package.json
160
- var version = "3.0.0-beta.2";
161
-
162
- // src/constants.ts
163
- var VERSION = version;
164
-
165
- // src/analytics/analytics.js
166
204
  async function raiseEvent(eventData) {
167
205
  const url = "https://queue.simpleanalyticscdn.com/events";
168
206
  const userAgent = `@eventcatalog/eventcatalog@${VERSION} (${import_os.default.platform()}; ${import_os.default.arch()}; Node/${process.version})`;
@@ -687,7 +725,7 @@ var createAuthFileIfNotExists = async (hasRequiredLicense) => {
687
725
  const isSRR = await isOutputServer();
688
726
  try {
689
727
  if (authEnabled && hasRequiredLicense && isSRR) {
690
- console.log("Creating auth file");
728
+ logger.info("Creating auth file", "auth");
691
729
  import_fs2.default.writeFileSync(
692
730
  (0, import_node_path7.join)(core, "src/pages/api/[...auth].ts"),
693
731
  `import { AstroAuth } from 'auth-astro/server';
@@ -731,14 +769,17 @@ Run npm i @eventcatalog/core to update`;
731
769
  }
732
770
  };
733
771
  program.command("dev").description("Run development server of EventCatalog").option("-d, --debug", "Output EventCatalog application information into your terminal").option("--force-recreate", "Recreate the eventcatalog-core directory", false).action(async (options, command) => {
734
- console.log("Setting up EventCatalog....");
772
+ logger.welcome();
773
+ logger.info("Setting up EventCatalog...", "eventcatalog");
774
+ const isServer = await isOutputServer();
775
+ logger.info(isServer ? "EventCatalog is running in Server Mode" : "EventCatalog is running in Static Mode", "config");
735
776
  if (import_fs2.default.existsSync(import_node_path8.default.join(dir, ".env"))) {
736
777
  import_dotenv.default.config({ path: import_node_path8.default.join(dir, ".env") });
737
778
  }
738
779
  if (options.debug) {
739
- console.log("Debug mode enabled");
740
- console.log("PROJECT_DIR", dir);
741
- console.log("CATALOG_DIR", core);
780
+ logger.info("Debug mode enabled", "debug");
781
+ logger.info(`PROJECT_DIR: ${dir}`, "debug");
782
+ logger.info(`CATALOG_DIR: ${core}`, "debug");
742
783
  }
743
784
  if (options.forceRecreate) clearCore();
744
785
  copyCore();
@@ -786,7 +827,10 @@ program.command("dev").description("Run development server of EventCatalog").opt
786
827
  }
787
828
  });
788
829
  program.command("build").description("Run build of EventCatalog").action(async (options, command) => {
789
- console.log("Building EventCatalog...");
830
+ logger.welcome();
831
+ logger.info("Building EventCatalog...", "build");
832
+ const isServer = await isOutputServer();
833
+ logger.info(isServer ? "EventCatalog is running in Server Mode" : "EventCatalog is running in Static Mode", "config");
790
834
  if (import_fs2.default.existsSync(import_node_path8.default.join(dir, ".env"))) {
791
835
  import_dotenv.default.config({ path: import_node_path8.default.join(dir, ".env") });
792
836
  }
@@ -850,7 +894,8 @@ var startServerCatalog = ({
850
894
  );
851
895
  };
852
896
  program.command("preview").description("Serves the contents of your eventcatalog build directory").action(async (options, command) => {
853
- console.log("Starting preview of your build...");
897
+ logger.welcome();
898
+ logger.info("Starting preview of your build...", "preview");
854
899
  if (import_fs2.default.existsSync(import_node_path8.default.join(dir, ".env"))) {
855
900
  import_dotenv.default.config({ path: import_node_path8.default.join(dir, ".env") });
856
901
  }
@@ -865,7 +910,8 @@ program.command("preview").description("Serves the contents of your eventcatalog
865
910
  previewCatalog({ command, canEmbedPages: canEmbedPages || isEventCatalogScale, isEventCatalogStarter, isEventCatalogScale });
866
911
  });
867
912
  program.command("start").description("Serves the contents of your eventcatalog build directory").action(async (options, command) => {
868
- console.log("Starting preview of your build...");
913
+ logger.welcome();
914
+ logger.info("Starting preview of your build...", "preview");
869
915
  if (import_fs2.default.existsSync(import_node_path8.default.join(dir, ".env"))) {
870
916
  import_dotenv.default.config({ path: import_node_path8.default.join(dir, ".env") });
871
917
  }
@@ -6,8 +6,8 @@ import {
6
6
  } from "./chunk-PLNJC7NZ.js";
7
7
  import {
8
8
  log_build_default
9
- } from "./chunk-PQL6O5YA.js";
10
- import "./chunk-JSONCD7V.js";
9
+ } from "./chunk-P4GSM347.js";
10
+ import "./chunk-HNU3YCIL.js";
11
11
  import {
12
12
  runMigrations
13
13
  } from "./chunk-BH3JMNAV.js";
@@ -17,16 +17,19 @@ import {
17
17
  checkAndConvertMdToMdx
18
18
  } from "./chunk-R2BJ7MJG.js";
19
19
  import "./chunk-55D645EH.js";
20
- import {
21
- VERSION
22
- } from "./chunk-H4QHE5YZ.js";
23
20
  import {
24
21
  isAuthEnabled,
25
22
  isOutputServer
26
23
  } from "./chunk-5VBIXL6C.js";
27
24
  import {
28
25
  generate
29
- } from "./chunk-3W6JYTHP.js";
26
+ } from "./chunk-UKOXBJ2K.js";
27
+ import {
28
+ logger
29
+ } from "./chunk-5L44ZUV2.js";
30
+ import {
31
+ VERSION
32
+ } from "./chunk-FEE4ODCC.js";
30
33
  import "./chunk-UPONRQSN.js";
31
34
 
32
35
  // src/eventcatalog.ts
@@ -96,7 +99,7 @@ var createAuthFileIfNotExists = async (hasRequiredLicense) => {
96
99
  const isSRR = await isOutputServer();
97
100
  try {
98
101
  if (authEnabled && hasRequiredLicense && isSRR) {
99
- console.log("Creating auth file");
102
+ logger.info("Creating auth file", "auth");
100
103
  fs.writeFileSync(
101
104
  join(core, "src/pages/api/[...auth].ts"),
102
105
  `import { AstroAuth } from 'auth-astro/server';
@@ -140,14 +143,17 @@ Run npm i @eventcatalog/core to update`;
140
143
  }
141
144
  };
142
145
  program.command("dev").description("Run development server of EventCatalog").option("-d, --debug", "Output EventCatalog application information into your terminal").option("--force-recreate", "Recreate the eventcatalog-core directory", false).action(async (options, command) => {
143
- console.log("Setting up EventCatalog....");
146
+ logger.welcome();
147
+ logger.info("Setting up EventCatalog...", "eventcatalog");
148
+ const isServer = await isOutputServer();
149
+ logger.info(isServer ? "EventCatalog is running in Server Mode" : "EventCatalog is running in Static Mode", "config");
144
150
  if (fs.existsSync(path.join(dir, ".env"))) {
145
151
  dotenv.config({ path: path.join(dir, ".env") });
146
152
  }
147
153
  if (options.debug) {
148
- console.log("Debug mode enabled");
149
- console.log("PROJECT_DIR", dir);
150
- console.log("CATALOG_DIR", core);
154
+ logger.info("Debug mode enabled", "debug");
155
+ logger.info(`PROJECT_DIR: ${dir}`, "debug");
156
+ logger.info(`CATALOG_DIR: ${core}`, "debug");
151
157
  }
152
158
  if (options.forceRecreate) clearCore();
153
159
  copyCore();
@@ -195,7 +201,10 @@ program.command("dev").description("Run development server of EventCatalog").opt
195
201
  }
196
202
  });
197
203
  program.command("build").description("Run build of EventCatalog").action(async (options, command) => {
198
- console.log("Building EventCatalog...");
204
+ logger.welcome();
205
+ logger.info("Building EventCatalog...", "build");
206
+ const isServer = await isOutputServer();
207
+ logger.info(isServer ? "EventCatalog is running in Server Mode" : "EventCatalog is running in Static Mode", "config");
199
208
  if (fs.existsSync(path.join(dir, ".env"))) {
200
209
  dotenv.config({ path: path.join(dir, ".env") });
201
210
  }
@@ -259,7 +268,8 @@ var startServerCatalog = ({
259
268
  );
260
269
  };
261
270
  program.command("preview").description("Serves the contents of your eventcatalog build directory").action(async (options, command) => {
262
- console.log("Starting preview of your build...");
271
+ logger.welcome();
272
+ logger.info("Starting preview of your build...", "preview");
263
273
  if (fs.existsSync(path.join(dir, ".env"))) {
264
274
  dotenv.config({ path: path.join(dir, ".env") });
265
275
  }
@@ -274,7 +284,8 @@ program.command("preview").description("Serves the contents of your eventcatalog
274
284
  previewCatalog({ command, canEmbedPages: canEmbedPages || isEventCatalogScale, isEventCatalogStarter, isEventCatalogScale });
275
285
  });
276
286
  program.command("start").description("Serves the contents of your eventcatalog build directory").action(async (options, command) => {
277
- console.log("Starting preview of your build...");
287
+ logger.welcome();
288
+ logger.info("Starting preview of your build...", "preview");
278
289
  if (fs.existsSync(path.join(dir, ".env"))) {
279
290
  dotenv.config({ path: path.join(dir, ".env") });
280
291
  }
package/dist/generate.cjs CHANGED
@@ -69,6 +69,51 @@ var getEventCatalogConfigFile = async (projectDirectory) => {
69
69
  }
70
70
  };
71
71
 
72
+ // src/utils/cli-logger.ts
73
+ var import_picocolors = __toESM(require("picocolors"), 1);
74
+
75
+ // package.json
76
+ var version = "3.0.0-beta.4";
77
+
78
+ // src/constants.ts
79
+ var VERSION = version;
80
+
81
+ // src/utils/cli-logger.ts
82
+ var getTimestamp = () => {
83
+ const now = /* @__PURE__ */ new Date();
84
+ return now.toLocaleTimeString("en-US", { hour12: false });
85
+ };
86
+ var formatMessage = (tag, message, tagColor) => {
87
+ return `${import_picocolors.default.dim(getTimestamp())} ${tagColor(`[${tag}]`)} ${message}`;
88
+ };
89
+ var logger = {
90
+ welcome: () => {
91
+ console.log();
92
+ console.log(import_picocolors.default.magenta(import_picocolors.default.bold("\u{1F680} EventCatalog")) + import_picocolors.default.dim(` (v${VERSION})`));
93
+ console.log(import_picocolors.default.dim("https://eventcatalog.dev"));
94
+ console.log();
95
+ console.log(
96
+ import_picocolors.default.dim("If you like the project, we would appreciate a star on GitHub \u2764\uFE0F - ") + import_picocolors.default.bold("https://github.com/event-catalog/eventcatalog/stargazers")
97
+ );
98
+ console.log();
99
+ },
100
+ info: (message, tag = "info") => {
101
+ console.log(formatMessage(tag, message, import_picocolors.default.blue));
102
+ },
103
+ success: (message, tag = "success") => {
104
+ console.log(formatMessage(tag, message, import_picocolors.default.green));
105
+ },
106
+ error: (message, tag = "error") => {
107
+ console.log(formatMessage(tag, message, import_picocolors.default.red));
108
+ },
109
+ warning: (message, tag = "warn") => {
110
+ console.log(formatMessage(tag, message, import_picocolors.default.yellow));
111
+ },
112
+ dim: (message) => {
113
+ console.log(import_picocolors.default.dim(message));
114
+ }
115
+ };
116
+
72
117
  // src/generate.js
73
118
  function getDefaultExport(importedModule) {
74
119
  if (importedModule === null || typeof importedModule !== "object") {
@@ -87,7 +132,7 @@ var generate = async (PROJECT_DIRECTORY) => {
87
132
  const config = await getEventCatalogConfigFile(PROJECT_DIRECTORY);
88
133
  const { generators = [] } = config;
89
134
  if (!generators.length) {
90
- console.log("No configured generators found, skipping generation");
135
+ logger.info("No configured generators found, skipping generation", "generator");
91
136
  return;
92
137
  }
93
138
  for (const generator of generators) {
@@ -104,7 +149,8 @@ var generate = async (PROJECT_DIRECTORY) => {
104
149
  const generator2 = getDefaultExport(importedGenerator);
105
150
  await generator2({ eventCatalogConfig: {} }, pluginConfig);
106
151
  } catch (error) {
107
- console.error("Error loading plugin:", error);
152
+ logger.error("Error loading plugin:", "generator");
153
+ console.error(error);
108
154
  await cleanup(PROJECT_DIRECTORY);
109
155
  return;
110
156
  }
package/dist/generate.js CHANGED
@@ -1,6 +1,8 @@
1
1
  import {
2
2
  generate
3
- } from "./chunk-3W6JYTHP.js";
3
+ } from "./chunk-UKOXBJ2K.js";
4
+ import "./chunk-5L44ZUV2.js";
5
+ import "./chunk-FEE4ODCC.js";
4
6
  import "./chunk-UPONRQSN.js";
5
7
  export {
6
8
  generate
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/utils/cli-logger.ts
31
+ var cli_logger_exports = {};
32
+ __export(cli_logger_exports, {
33
+ logger: () => logger
34
+ });
35
+ module.exports = __toCommonJS(cli_logger_exports);
36
+ var import_picocolors = __toESM(require("picocolors"), 1);
37
+
38
+ // package.json
39
+ var version = "3.0.0-beta.4";
40
+
41
+ // src/constants.ts
42
+ var VERSION = version;
43
+
44
+ // src/utils/cli-logger.ts
45
+ var getTimestamp = () => {
46
+ const now = /* @__PURE__ */ new Date();
47
+ return now.toLocaleTimeString("en-US", { hour12: false });
48
+ };
49
+ var formatMessage = (tag, message, tagColor) => {
50
+ return `${import_picocolors.default.dim(getTimestamp())} ${tagColor(`[${tag}]`)} ${message}`;
51
+ };
52
+ var logger = {
53
+ welcome: () => {
54
+ console.log();
55
+ console.log(import_picocolors.default.magenta(import_picocolors.default.bold("\u{1F680} EventCatalog")) + import_picocolors.default.dim(` (v${VERSION})`));
56
+ console.log(import_picocolors.default.dim("https://eventcatalog.dev"));
57
+ console.log();
58
+ console.log(
59
+ import_picocolors.default.dim("If you like the project, we would appreciate a star on GitHub \u2764\uFE0F - ") + import_picocolors.default.bold("https://github.com/event-catalog/eventcatalog/stargazers")
60
+ );
61
+ console.log();
62
+ },
63
+ info: (message, tag = "info") => {
64
+ console.log(formatMessage(tag, message, import_picocolors.default.blue));
65
+ },
66
+ success: (message, tag = "success") => {
67
+ console.log(formatMessage(tag, message, import_picocolors.default.green));
68
+ },
69
+ error: (message, tag = "error") => {
70
+ console.log(formatMessage(tag, message, import_picocolors.default.red));
71
+ },
72
+ warning: (message, tag = "warn") => {
73
+ console.log(formatMessage(tag, message, import_picocolors.default.yellow));
74
+ },
75
+ dim: (message) => {
76
+ console.log(import_picocolors.default.dim(message));
77
+ }
78
+ };
79
+ // Annotate the CommonJS export names for ESM import in node:
80
+ 0 && (module.exports = {
81
+ logger
82
+ });
@@ -0,0 +1,10 @@
1
+ declare const logger: {
2
+ welcome: () => void;
3
+ info: (message: string, tag?: string) => void;
4
+ success: (message: string, tag?: string) => void;
5
+ error: (message: string, tag?: string) => void;
6
+ warning: (message: string, tag?: string) => void;
7
+ dim: (message: string) => void;
8
+ };
9
+
10
+ export { logger };
@@ -0,0 +1,10 @@
1
+ declare const logger: {
2
+ welcome: () => void;
3
+ info: (message: string, tag?: string) => void;
4
+ success: (message: string, tag?: string) => void;
5
+ error: (message: string, tag?: string) => void;
6
+ warning: (message: string, tag?: string) => void;
7
+ dim: (message: string) => void;
8
+ };
9
+
10
+ export { logger };
@@ -0,0 +1,7 @@
1
+ import {
2
+ logger
3
+ } from "../chunk-5L44ZUV2.js";
4
+ import "../chunk-FEE4ODCC.js";
5
+ export {
6
+ logger
7
+ };
@@ -20,6 +20,7 @@ import {
20
20
  ArrowUturnLeftIcon,
21
21
  StarIcon,
22
22
  Square2StackIcon,
23
+ ArrowsRightLeftIcon,
23
24
  } from '@heroicons/react/24/outline';
24
25
  import { StarIcon as StarIconSolid, CircleStackIcon } from '@heroicons/react/24/solid';
25
26
  import { useStore } from '@nanostores/react';
@@ -33,7 +34,7 @@ const typeIcons: any = {
33
34
  Command: ChatBubbleLeftIcon,
34
35
  Query: QueryIcon,
35
36
  Entity: CubeIcon,
36
- Channel: QueueListIcon,
37
+ Channel: ArrowsRightLeftIcon,
37
38
  Team: UserGroupIcon,
38
39
  User: UserIcon,
39
40
  Language: BookOpenIcon,
@@ -68,8 +69,6 @@ function classNames(...classes: (string | boolean | undefined)[]) {
68
69
 
69
70
  // Helper to construct URL from key if href is missing
70
71
  const getUrlForItem = (node: any, key: string) => {
71
- if (node.href) return node.href;
72
-
73
72
  const parts = key.split(':');
74
73
  if (parts.length < 2) return null; // Need at least type:id
75
74
 
@@ -83,8 +82,16 @@ const getUrlForItem = (node: any, key: string) => {
83
82
  // Only show items that have a version to avoid duplicates
84
83
  if (!version) return null;
85
84
 
85
+ // If node has href, use it, otherwise construct from key
86
+ if (node.href) return node.href;
87
+
86
88
  // Pluralize type for URL if needed
87
- const pluralType = ['event', 'command', 'query', 'domain', 'service', 'flow', 'container'].includes(type) ? type + 's' : type; // users/teams already have href usually, but safe fallback
89
+ let pluralType = type;
90
+ if (['event', 'command', 'domain', 'service', 'flow', 'container', 'channel'].includes(type)) {
91
+ pluralType = type + 's';
92
+ } else if (type === 'query') {
93
+ pluralType = 'queries';
94
+ }
88
95
 
89
96
  return `/docs/${pluralType}/${id}/${version}`;
90
97
  };
@@ -171,6 +178,7 @@ export default function SearchModal() {
171
178
  Team: 0,
172
179
  Container: 0,
173
180
  Design: 0,
181
+ Channel: 0,
174
182
  };
175
183
 
176
184
  itemsToCount.forEach((item) => {
@@ -195,6 +203,7 @@ export default function SearchModal() {
195
203
  if (counts.Service > 0) dynamicFilters.push({ id: 'Service', name: `Services (${counts.Service})` });
196
204
  if (counts.Message > 0) dynamicFilters.push({ id: 'Message', name: `Messages (${counts.Message})` });
197
205
  if (counts.Container > 0) dynamicFilters.push({ id: 'Container', name: `Containers (${counts.Container})` });
206
+ if (counts.Channel > 0) dynamicFilters.push({ id: 'Channel', name: `Channels (${counts.Channel})` });
198
207
  if (counts.Design > 0) dynamicFilters.push({ id: 'Design', name: `Designs (${counts.Design})` });
199
208
  if (counts.Team > 0) dynamicFilters.push({ id: 'Team', name: `Teams & Users (${counts.Team})` });
200
209
 
@@ -224,7 +233,7 @@ export default function SearchModal() {
224
233
  const filteredItems = useMemo(() => {
225
234
  if (query === '') {
226
235
  // Show favorites when search is empty
227
- if (favorites.length > 0) {
236
+ if (favorites.length > 0 && activeFilter === 'all') {
228
237
  return favorites
229
238
  .slice(0, 5)
230
239
  .map((fav) => {
@@ -375,14 +384,14 @@ export default function SearchModal() {
375
384
  <p className={classNames('text-sm font-medium', active ? 'text-gray-900' : 'text-gray-700')}>
376
385
  {item.name}
377
386
  </p>
378
- <div className="flex items-start gap-2">
387
+ <div className="flex items-center gap-2">
379
388
  <p
380
389
  className={classNames('text-sm flex-shrink-0', active ? 'text-gray-700' : 'text-gray-500')}
381
390
  >
382
391
  {item.type}
383
392
  </p>
384
393
  {item.rawNode.summary && (
385
- <p className={classNames('text-xs truncate', active ? 'text-gray-600' : 'text-gray-400')}>
394
+ <p className={classNames('text-sm truncate', active ? 'text-gray-600' : 'text-gray-400')}>
386
395
  • {item.rawNode.summary}
387
396
  </p>
388
397
  )}
@@ -14,6 +14,8 @@ import {
14
14
  Database,
15
15
  Waypoints,
16
16
  SquareMousePointer,
17
+ ListOrdered,
18
+ ArrowLeftRight,
17
19
  } from 'lucide-react';
18
20
  import type { NavNode } from './sidebar-builder';
19
21
 
@@ -28,6 +30,7 @@ const getBadgeClasses = (badge: string): string => {
28
30
  query: 'bg-purple-100 text-purple-700',
29
31
  message: 'bg-indigo-100 text-indigo-700',
30
32
  design: 'bg-teal-100 text-teal-700',
33
+ channel: 'bg-indigo-100 text-indigo-700',
31
34
  };
32
35
  return badgeColors[badge.toLowerCase()] || 'bg-gray-100 text-gray-600';
33
36
  };
@@ -77,6 +80,7 @@ export default function SearchBar({ nodes, onSelectResult, onSearchChange }: Pro
77
80
  };
78
81
 
79
82
  const filterTypes = [
83
+ { key: 'channel', label: 'Channels', badge: 'Channel', icon: ArrowLeftRight },
80
84
  { key: 'command', label: 'Commands', badge: 'Command', icon: MessageSquare },
81
85
  { key: 'container', label: 'Data Stores', badge: 'Container', icon: Database },
82
86
  { key: 'design', label: 'Designs', badge: 'Design', icon: SquareMousePointer },
@@ -25,6 +25,7 @@ const getBadgeClasses = (badge: string): string => {
25
25
  query: 'bg-purple-100 text-purple-700',
26
26
  message: 'bg-indigo-100 text-indigo-700',
27
27
  design: 'bg-teal-100 text-teal-700',
28
+ channel: 'bg-indigo-100 text-indigo-700',
28
29
  };
29
30
  return badgeColors[badge.toLowerCase()] || 'bg-gray-100 text-gray-600';
30
31
  };
@@ -786,17 +787,17 @@ export default function NestedSideBar() {
786
787
  </div>
787
788
  <div className="flex items-center gap-1 flex-shrink-0">
788
789
  {canFavorite && (
789
- <button
790
+ <div
790
791
  onClick={handleStarClick}
791
792
  className={cn(
792
- 'flex items-center justify-center w-5 h-5 rounded transition-colors',
793
+ 'flex items-center justify-center w-5 h-5 rounded transition-colors cursor-pointer',
793
794
  isFav
794
795
  ? 'text-amber-400 hover:text-amber-500'
795
796
  : 'text-gray-300 opacity-0 group-hover:opacity-100 hover:text-amber-400'
796
797
  )}
797
798
  >
798
799
  <Star className={cn('w-3.5 h-3.5', isFav && 'fill-current')} />
799
- </button>
800
+ </div>
800
801
  )}
801
802
  {itemHasChildren && (
802
803
  <span className="flex items-center justify-center w-5 h-5 text-gray-400 group-hover:text-black group-hover:translate-x-0.5 transition-transform">
@@ -1038,15 +1039,15 @@ export default function NestedSideBar() {
1038
1039
  {fav.badge}
1039
1040
  </span>
1040
1041
  )}
1041
- <button
1042
+ <div
1042
1043
  onClick={(e) => {
1043
1044
  e.stopPropagation();
1044
1045
  if (node) toggleFavorite(fav.nodeKey, node);
1045
1046
  }}
1046
- className="flex items-center justify-center w-5 h-5 text-amber-400 hover:text-amber-500 rounded transition-colors"
1047
+ className="flex items-center justify-center w-5 h-5 text-amber-400 hover:text-amber-500 rounded transition-colors cursor-pointer"
1047
1048
  >
1048
1049
  <Star className="w-3.5 h-3.5 fill-current" />
1049
- </button>
1050
+ </div>
1050
1051
  {node?.pages && node.pages.length > 0 && (
1051
1052
  <span className="flex items-center justify-center w-5 h-5 text-gray-400 group-hover:text-black">
1052
1053
  <ChevronRight className="w-4 h-4" />
@@ -15,6 +15,7 @@ import { buildContainerNode } from './builders/container';
15
15
  import { buildFlowNode } from './builders/flow';
16
16
  import config from '@config';
17
17
  import { getDesigns } from '@utils/collections/designs';
18
+ import { getChannels } from '@utils/collections/channels';
18
19
 
19
20
  export type { NavigationData, NavNode, ChildRef };
20
21
 
@@ -29,16 +30,18 @@ export const getNestedSideBarData = async (): Promise<NavigationData> => {
29
30
  return memoryCache;
30
31
  }
31
32
 
32
- const [domains, services, { events, commands, queries }, containers, flows, users, teams, designs] = await Promise.all([
33
- getDomains({ getAllVersions: false, includeServicesInSubdomains: false }),
34
- getServices({ getAllVersions: false }),
35
- getMessages({ getAllVersions: false }),
36
- getContainers({ getAllVersions: false }),
37
- getFlows({ getAllVersions: false }),
38
- getUsers(),
39
- getTeams(),
40
- getDesigns(),
41
- ]);
33
+ const [domains, services, { events, commands, queries }, containers, flows, users, teams, designs, channels] =
34
+ await Promise.all([
35
+ getDomains({ getAllVersions: false, includeServicesInSubdomains: false }),
36
+ getServices({ getAllVersions: false }),
37
+ getMessages({ getAllVersions: false }),
38
+ getContainers({ getAllVersions: false }),
39
+ getFlows({ getAllVersions: false }),
40
+ getUsers(),
41
+ getTeams(),
42
+ getDesigns(),
43
+ getChannels({ getAllVersions: false }),
44
+ ]);
42
45
 
43
46
  // Calculate derived lists to avoid extra fetches
44
47
  const allSubDomainIds = new Set(domains.flatMap((d) => (d.data.domains || []).map((sd: any) => sd.data.id)));
@@ -178,6 +181,30 @@ export const getNestedSideBarData = async (): Promise<NavigationData> => {
178
181
  {} as Record<string, NavNode>
179
182
  );
180
183
 
184
+ const channelNodes = channels.reduce(
185
+ (acc, channel) => {
186
+ acc[`channel:${channel.data.id}:${channel.data.version}`] = {
187
+ type: 'item',
188
+ title: channel.data.name,
189
+ badge: 'Channel',
190
+ summary: channel.data.summary,
191
+ href: buildUrl(`/docs/${channel.collection}/${channel.data.id}/${channel.data.version}`),
192
+ };
193
+
194
+ if (channel.data.latestVersion === channel.data.version) {
195
+ acc[`channel:${channel.data.id}`] = {
196
+ type: 'item',
197
+ title: channel.data.name,
198
+ badge: 'Channel',
199
+ summary: channel.data.summary,
200
+ href: buildUrl(`/docs/${channel.collection}/${channel.data.id}/${channel.data.version}`),
201
+ };
202
+ }
203
+ return acc;
204
+ },
205
+ {} as Record<string, NavNode>
206
+ );
207
+
181
208
  const teamNodes = teams.reduce(
182
209
  (acc, team) => {
183
210
  acc[`team:${team.data.id}`] = {
@@ -273,6 +300,13 @@ export const getNestedSideBarData = async (): Promise<NavigationData> => {
273
300
  pages: users.map((user) => `user:${user.data.id}`),
274
301
  });
275
302
 
303
+ const channelList = createLeaf(channels, {
304
+ type: 'item',
305
+ title: 'Channels',
306
+ icon: 'ArrowRightLeft',
307
+ pages: channels.map((channel) => `channel:${channel.data.id}:${channel.data.version}`),
308
+ });
309
+
276
310
  const messagesChildren = ['list:events', 'list:commands', 'list:queries'].filter(
277
311
  (key, index) => [eventsList, commandsList, queriesList][index] !== undefined
278
312
  );
@@ -303,12 +337,22 @@ export const getNestedSideBarData = async (): Promise<NavigationData> => {
303
337
  'list:domains',
304
338
  'list:services',
305
339
  'list:messages',
340
+ 'list:channels',
306
341
  'list:flows',
307
342
  'list:containers',
308
343
  'list:designs',
309
344
  'list:people',
310
345
  ];
311
- const allChildrenNodes = [domainsList, servicesList, messagesList, flowsList, containersList, designsList, peopleList];
346
+ const allChildrenNodes = [
347
+ domainsList,
348
+ servicesList,
349
+ messagesList,
350
+ channelList,
351
+ flowsList,
352
+ containersList,
353
+ designsList,
354
+ peopleList,
355
+ ];
312
356
 
313
357
  const validAllChildren = allChildrenKeys.filter((_, idx) => allChildrenNodes[idx] !== undefined);
314
358
 
@@ -334,6 +378,7 @@ export const getNestedSideBarData = async (): Promise<NavigationData> => {
334
378
  ...(designsList ? { 'list:designs': designsList } : {}),
335
379
  ...(teamsList ? { 'list:teams': teamsList } : {}),
336
380
  ...(usersList ? { 'list:users': usersList } : {}),
381
+ ...(channelList ? { 'list:channels': channelList as NavNode } : {}),
337
382
  ...(peopleList ? { 'list:people': peopleList as NavNode } : {}),
338
383
  ...(allList ? { 'list:all': allList as NavNode } : {}),
339
384
  };
@@ -343,6 +388,7 @@ export const getNestedSideBarData = async (): Promise<NavigationData> => {
343
388
  ...domainNodes,
344
389
  ...serviceNodes,
345
390
  ...messageNodes,
391
+ ...channelNodes,
346
392
  ...containerNodes,
347
393
  ...flowNodes,
348
394
  ...userNodes,
@@ -167,7 +167,7 @@ const providerConfig = {
167
167
 
168
168
  <div class="text-center">
169
169
  <a
170
- href="#"
170
+ href="https://www.eventcatalog.dev/docs/development/authentication/introduction"
171
171
  class="inline-flex items-center px-6 py-3 border border-transparent text-sm font-medium rounded-lg text-white bg-purple-600 hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500 transition-colors duration-200"
172
172
  >
173
173
  Read Authentication Documentation
@@ -237,7 +237,7 @@ const providerConfig = {
237
237
 
238
238
  <div class="text-center">
239
239
  <a
240
- href="#"
240
+ href="https://www.eventcatalog.dev/docs/development/authentication/introduction"
241
241
  class="inline-flex items-center px-6 py-3 border border-transparent text-sm font-medium rounded-lg text-white bg-purple-600 hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500 transition-colors duration-200"
242
242
  >
243
243
  Read Authentication Documentation
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": "3.0.0-beta.2",
9
+ "version": "3.0.0-beta.4",
10
10
  "publishConfig": {
11
11
  "access": "public"
12
12
  },
@@ -87,6 +87,7 @@
87
87
  "nanostores": "^1.1.0",
88
88
  "pagefind": "^1.3.0",
89
89
  "pako": "^2.1.0",
90
+ "picocolors": "^1.1.1",
90
91
  "react": "^18.3.1",
91
92
  "react-dom": "^18.3.1",
92
93
  "react-markdown": "^10.1.0",