@eventcatalog/core 2.23.0 → 2.23.2

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/README.md CHANGED
@@ -32,10 +32,10 @@
32
32
  <h4>Features: Documentation generator for Event Driven Architectures, Integration with any broker, Docs and Code, Markdown driven, Document Domains/Services/Messages/Schemas and more, Content versioning, Assign Owners, Schemas, OpenAPI, MDX Components and more...</h4>
33
33
 
34
34
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
35
- [![All Contributors](https://img.shields.io/badge/all_contributors-47-orange.svg?style=flat-square)](#contributors-)
35
+ [![All Contributors](https://img.shields.io/badge/all_contributors-48-orange.svg?style=flat-square)](#contributors-)
36
36
  <!-- ALL-CONTRIBUTORS-BADGE:END -->
37
37
 
38
- [Read the Docs](https://eventcatalog.dev/) | [Edit the Docs](https://github.com/event-catalog/docs) | [View Demo](https://demo.eventcatalog.dev/docs)
38
+ [Read the Docs](https://www.eventcatalog.dev/product/documentation) | [View Demo](https://demo.eventcatalog.dev/docs)
39
39
 
40
40
  </div>
41
41
 
@@ -44,14 +44,14 @@
44
44
  # Core Features
45
45
 
46
46
  - 📃 Document domains, services and messages ([demo](https://demo.eventcatalog.dev/docs))
47
- - 📊 Visualise your architecture ([demo](https://demo.eventcatalog.dev/visualiser))
47
+ - 📊 Visualise your architecture ([demo](https://demo.eventcatalog.dev/visualiser/domains/Orders))
48
48
  - ⭐ Supports any Schema format (e.g Avro, JSON) ([demo](https://demo.eventcatalog.dev/docs/events/InventoryAdjusted/0.0.4))
49
49
  - 🗂️ Document any code examples (Any code snippet)
50
50
  - 💅 Custom MDX components ([read more](https://eventcatalog.dev/docs/development/components/using-components))
51
51
  - 🗄️ Version domains, services and messages
52
52
  - ⭐ Discoverability feature (search, filter and more) ([demo](https://demo.eventcatalog.dev/discover/events))
53
53
  - ⭐ Document teams and users ([demo](https://demo.eventcatalog.dev/docs/teams/full-stack))
54
- - 🤖 Automate your catalogs with [generators](https://www.eventcatalog.dev/docs/development/plugins/plugin-overview) (e.g generate your catalogs from your [AsyncAPI](https://www.eventcatalog.dev/docs/ascynapi)/[OpenAPI](https://www.eventcatalog.dev/docs/openapi) documents)
54
+ - 🤖 Automate your catalogs with [generators](https://www.eventcatalog.dev/docs/development/plugins/plugin-overview) (e.g generate your catalogs from your [AsyncAPI](https://www.eventcatalog.dev/docs/asyncapi)/[OpenAPI](https://www.eventcatalog.dev/docs/openapi) documents)
55
55
  - 👨🏼‍💻 Follows [Docs as code](https://www.writethedocs.org/guide/docs-as-code/) principles
56
56
  - ⭐ And much more...
57
57
 
@@ -251,6 +251,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
251
251
  <td align="center" valign="top" width="14.28%"><a href="https://pallares.io"><img src="https://avatars.githubusercontent.com/u/1077520?v=4?s=100" width="100px;" alt="Cristian Pallarés"/><br /><sub><b>Cristian Pallarés</b></sub></a><br /><a href="https://github.com/event-catalog/eventcatalog/commits?author=skyrpex" title="Code">💻</a></td>
252
252
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/SebasRendon12"><img src="https://avatars.githubusercontent.com/u/69688183?v=4?s=100" width="100px;" alt="Sebastian Rendon"/><br /><sub><b>Sebastian Rendon</b></sub></a><br /><a href="https://github.com/event-catalog/eventcatalog/commits?author=SebasRendon12" title="Code">💻</a></td>
253
253
  <td align="center" valign="top" width="14.28%"><a href="http://craig0990.co.uk"><img src="https://avatars.githubusercontent.com/u/461897?v=4?s=100" width="100px;" alt="Craig Roberts"/><br /><sub><b>Craig Roberts</b></sub></a><br /><a href="https://github.com/event-catalog/eventcatalog/commits?author=craig0990" title="Code">💻</a></td>
254
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Vertygo"><img src="https://avatars.githubusercontent.com/u/1658326?v=4?s=100" width="100px;" alt="Ivan Milosavljevic"/><br /><sub><b>Ivan Milosavljevic</b></sub></a><br /><a href="https://github.com/event-catalog/eventcatalog/commits?author=Vertygo" title="Documentation">📖</a></td>
254
255
  </tr>
255
256
  </tbody>
256
257
  </table>
@@ -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.23.0";
40
+ var version = "2.23.2";
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-CLNIEHVG.js";
4
- import "../chunk-WNRZ5O5C.js";
3
+ } from "../chunk-RMESKTDM.js";
4
+ import "../chunk-OXD723LJ.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.23.0";
109
+ var version = "2.23.2";
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-F55C3RGO.js";
4
- import "../chunk-CLNIEHVG.js";
5
- import "../chunk-WNRZ5O5C.js";
3
+ } from "../chunk-W3SPESBN.js";
4
+ import "../chunk-RMESKTDM.js";
5
+ import "../chunk-OXD723LJ.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.23.0";
2
+ var version = "2.23.2";
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-WNRZ5O5C.js";
3
+ } from "./chunk-OXD723LJ.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-CLNIEHVG.js";
3
+ } from "./chunk-RMESKTDM.js";
4
4
  import {
5
5
  getEventCatalogConfigFile,
6
6
  verifyRequiredFieldsAreInCatalogConfigFile
@@ -25,7 +25,7 @@ __export(constants_exports, {
25
25
  module.exports = __toCommonJS(constants_exports);
26
26
 
27
27
  // package.json
28
- var version = "2.23.0";
28
+ var version = "2.23.2";
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-WNRZ5O5C.js";
3
+ } from "./chunk-OXD723LJ.js";
4
4
  export {
5
5
  VERSION
6
6
  };
@@ -161,7 +161,7 @@ var import_axios = __toESM(require("axios"), 1);
161
161
  var import_os = __toESM(require("os"), 1);
162
162
 
163
163
  // package.json
164
- var version = "2.23.0";
164
+ var version = "2.23.2";
165
165
 
166
166
  // src/constants.ts
167
167
  var VERSION = version;
@@ -513,7 +513,6 @@ var resolve_catalog_dependencies_default = async (catalogDir, core2) => {
513
513
  };
514
514
 
515
515
  // src/eventcatalog.ts
516
- var import_semver = __toESM(require("semver"), 1);
517
516
  var import_boxen2 = __toESM(require("boxen"), 1);
518
517
 
519
518
  // src/features.ts
@@ -562,27 +561,21 @@ var isBackstagePluginEnabled = async (licenseKey) => {
562
561
  };
563
562
 
564
563
  // src/eventcatalog.ts
565
- var boxenOptions = {
566
- padding: 1,
567
- margin: 1,
568
- align: "center",
569
- borderColor: "yellow",
570
- borderStyle: {
571
- topLeft: " ",
572
- topRight: " ",
573
- bottomLeft: " ",
574
- bottomRight: " ",
575
- right: " ",
576
- top: "-",
577
- bottom: "-",
578
- left: " "
579
- }
580
- };
564
+ var import_update_notifier = __toESM(require("update-notifier"), 1);
581
565
  var currentDir = import_node_path7.default.dirname((0, import_node_url.fileURLToPath)(importMetaUrl));
582
566
  var program = new import_commander.Command().version(VERSION);
583
567
  var dir = import_node_path7.default.resolve(process.env.PROJECT_DIR || process.cwd());
584
568
  var core = import_node_path7.default.resolve(process.env.CATALOG_DIR || (0, import_node_path6.join)(dir, ".eventcatalog-core"));
585
569
  var eventCatalogDir = import_node_path7.default.resolve((0, import_node_path6.join)(currentDir, "../eventcatalog/"));
570
+ var getInstalledEventCatalogVersion = () => {
571
+ try {
572
+ const pkg = import_fs2.default.readFileSync((0, import_node_path6.join)(dir, "package.json"), "utf8");
573
+ const json = JSON.parse(pkg);
574
+ return json.dependencies["@eventcatalog/core"];
575
+ } catch (error) {
576
+ return null;
577
+ }
578
+ };
586
579
  program.name("eventcatalog").description("Documentation tool for event-driven architectures");
587
580
  var ensureDir = (dir2) => {
588
581
  if (!import_fs2.default.existsSync(dir2)) {
@@ -605,29 +598,35 @@ var clearCore = () => {
605
598
  if (import_fs2.default.existsSync(core)) import_fs2.default.rmSync(core, { recursive: true });
606
599
  };
607
600
  var checkForUpdate = () => {
608
- try {
609
- const packageJson = JSON.parse(import_fs2.default.readFileSync(import_node_path7.default.join(dir, "package.json"), "utf-8"));
610
- const userEventCatalogVersion = packageJson.dependencies["@eventcatalog/core"];
611
- const corePackageJson = JSON.parse(import_fs2.default.readFileSync(import_node_path7.default.join(core, "package.json"), "utf-8"));
612
- const coreVersion = corePackageJson.version;
613
- const userVersion = userEventCatalogVersion.replace(/[\^~]/, "");
614
- if (import_semver.default.lt(userVersion, coreVersion)) {
615
- const docusaurusUpdateMessage = (0, import_boxen2.default)(
616
- `Update available for EventCatalog
617
- @eventcatalog/core ${userVersion} \u2192 ${coreVersion}
618
-
619
- Run \`npm i @eventcatalog/core@${coreVersion}\` to update your EventCatalog
620
- `,
621
- boxenOptions
622
- );
623
- console.log(docusaurusUpdateMessage);
624
- }
625
- } catch (error) {
601
+ const installedVersion = getInstalledEventCatalogVersion();
602
+ if (!installedVersion) return;
603
+ const pkg = { name: "@eventcatalog/core", version: installedVersion };
604
+ const notifier = (0, import_update_notifier.default)({ pkg, updateCheckInterval: 0 });
605
+ if (notifier.update) {
606
+ const message = `EventCatalog update available ${notifier.update.current} \u2192 ${notifier.update.latest}
607
+ Run npm i @eventcatalog/core to update`;
608
+ console.log(
609
+ (0, import_boxen2.default)(message, {
610
+ padding: 1,
611
+ margin: 1,
612
+ align: "center",
613
+ borderColor: "yellow",
614
+ borderStyle: {
615
+ topLeft: " ",
616
+ topRight: " ",
617
+ bottomLeft: " ",
618
+ bottomRight: " ",
619
+ right: " ",
620
+ top: "-",
621
+ bottom: "-",
622
+ left: " "
623
+ }
624
+ })
625
+ );
626
626
  }
627
627
  };
628
628
  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) => {
629
629
  console.log("Setting up EventCatalog....");
630
- checkForUpdate();
631
630
  if (options.debug) {
632
631
  console.log("Debug mode enabled");
633
632
  console.log("PROJECT_DIR", dir);
@@ -635,10 +634,10 @@ program.command("dev").description("Run development server of EventCatalog").opt
635
634
  }
636
635
  if (options.forceRecreate) clearCore();
637
636
  copyCore();
638
- console.log("EventCatalog is starting at http://localhost:3000/docs");
639
637
  await resolve_catalog_dependencies_default(dir, core);
640
638
  await catalogToAstro(dir, core);
641
639
  const canEmbedPages = await isBackstagePluginEnabled();
640
+ checkForUpdate();
642
641
  let watchUnsub;
643
642
  try {
644
643
  watchUnsub = await watch(dir, core);
@@ -663,12 +662,12 @@ program.command("dev").description("Run development server of EventCatalog").opt
663
662
  });
664
663
  program.command("build").description("Run build of EventCatalog").action(async (options, command) => {
665
664
  console.log("Building EventCatalog...");
666
- checkForUpdate();
667
665
  copyCore();
668
666
  await log_build_default(dir);
669
667
  await resolve_catalog_dependencies_default(dir, core);
670
668
  await catalogToAstro(dir, core);
671
669
  const canEmbedPages = await isBackstagePluginEnabled();
670
+ checkForUpdate();
672
671
  (0, import_node_child_process.execSync)(
673
672
  `cross-env PROJECT_DIR='${dir}' CATALOG_DIR='${core}' ENABLE_EMBED=${canEmbedPages} npx astro build ${command.args.join(" ").trim()}`,
674
673
  {
@@ -6,14 +6,14 @@ import {
6
6
  } from "./chunk-OW2FQPYP.js";
7
7
  import {
8
8
  log_build_default
9
- } from "./chunk-F55C3RGO.js";
10
- import "./chunk-CLNIEHVG.js";
9
+ } from "./chunk-W3SPESBN.js";
10
+ import "./chunk-RMESKTDM.js";
11
11
  import {
12
12
  catalogToAstro
13
13
  } from "./chunk-CXKIF3EI.js";
14
14
  import {
15
15
  VERSION
16
- } from "./chunk-WNRZ5O5C.js";
16
+ } from "./chunk-OXD723LJ.js";
17
17
  import {
18
18
  isBackstagePluginEnabled
19
19
  } from "./chunk-XMDPVKIJ.js";
@@ -31,29 +31,22 @@ import fs from "fs";
31
31
  import path from "node:path";
32
32
  import { fileURLToPath } from "node:url";
33
33
  import concurrently from "concurrently";
34
- import semver from "semver";
35
34
  import boxen from "boxen";
36
- var boxenOptions = {
37
- padding: 1,
38
- margin: 1,
39
- align: "center",
40
- borderColor: "yellow",
41
- borderStyle: {
42
- topLeft: " ",
43
- topRight: " ",
44
- bottomLeft: " ",
45
- bottomRight: " ",
46
- right: " ",
47
- top: "-",
48
- bottom: "-",
49
- left: " "
50
- }
51
- };
35
+ import updateNotifier from "update-notifier";
52
36
  var currentDir = path.dirname(fileURLToPath(import.meta.url));
53
37
  var program = new Command().version(VERSION);
54
38
  var dir = path.resolve(process.env.PROJECT_DIR || process.cwd());
55
39
  var core = path.resolve(process.env.CATALOG_DIR || join(dir, ".eventcatalog-core"));
56
40
  var eventCatalogDir = path.resolve(join(currentDir, "../eventcatalog/"));
41
+ var getInstalledEventCatalogVersion = () => {
42
+ try {
43
+ const pkg = fs.readFileSync(join(dir, "package.json"), "utf8");
44
+ const json = JSON.parse(pkg);
45
+ return json.dependencies["@eventcatalog/core"];
46
+ } catch (error) {
47
+ return null;
48
+ }
49
+ };
57
50
  program.name("eventcatalog").description("Documentation tool for event-driven architectures");
58
51
  var ensureDir = (dir2) => {
59
52
  if (!fs.existsSync(dir2)) {
@@ -76,29 +69,35 @@ var clearCore = () => {
76
69
  if (fs.existsSync(core)) fs.rmSync(core, { recursive: true });
77
70
  };
78
71
  var checkForUpdate = () => {
79
- try {
80
- const packageJson = JSON.parse(fs.readFileSync(path.join(dir, "package.json"), "utf-8"));
81
- const userEventCatalogVersion = packageJson.dependencies["@eventcatalog/core"];
82
- const corePackageJson = JSON.parse(fs.readFileSync(path.join(core, "package.json"), "utf-8"));
83
- const coreVersion = corePackageJson.version;
84
- const userVersion = userEventCatalogVersion.replace(/[\^~]/, "");
85
- if (semver.lt(userVersion, coreVersion)) {
86
- const docusaurusUpdateMessage = boxen(
87
- `Update available for EventCatalog
88
- @eventcatalog/core ${userVersion} \u2192 ${coreVersion}
89
-
90
- Run \`npm i @eventcatalog/core@${coreVersion}\` to update your EventCatalog
91
- `,
92
- boxenOptions
93
- );
94
- console.log(docusaurusUpdateMessage);
95
- }
96
- } catch (error) {
72
+ const installedVersion = getInstalledEventCatalogVersion();
73
+ if (!installedVersion) return;
74
+ const pkg = { name: "@eventcatalog/core", version: installedVersion };
75
+ const notifier = updateNotifier({ pkg, updateCheckInterval: 0 });
76
+ if (notifier.update) {
77
+ const message = `EventCatalog update available ${notifier.update.current} \u2192 ${notifier.update.latest}
78
+ Run npm i @eventcatalog/core to update`;
79
+ console.log(
80
+ boxen(message, {
81
+ padding: 1,
82
+ margin: 1,
83
+ align: "center",
84
+ borderColor: "yellow",
85
+ borderStyle: {
86
+ topLeft: " ",
87
+ topRight: " ",
88
+ bottomLeft: " ",
89
+ bottomRight: " ",
90
+ right: " ",
91
+ top: "-",
92
+ bottom: "-",
93
+ left: " "
94
+ }
95
+ })
96
+ );
97
97
  }
98
98
  };
99
99
  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) => {
100
100
  console.log("Setting up EventCatalog....");
101
- checkForUpdate();
102
101
  if (options.debug) {
103
102
  console.log("Debug mode enabled");
104
103
  console.log("PROJECT_DIR", dir);
@@ -106,10 +105,10 @@ program.command("dev").description("Run development server of EventCatalog").opt
106
105
  }
107
106
  if (options.forceRecreate) clearCore();
108
107
  copyCore();
109
- console.log("EventCatalog is starting at http://localhost:3000/docs");
110
108
  await resolve_catalog_dependencies_default(dir, core);
111
109
  await catalogToAstro(dir, core);
112
110
  const canEmbedPages = await isBackstagePluginEnabled();
111
+ checkForUpdate();
113
112
  let watchUnsub;
114
113
  try {
115
114
  watchUnsub = await watch(dir, core);
@@ -134,12 +133,12 @@ program.command("dev").description("Run development server of EventCatalog").opt
134
133
  });
135
134
  program.command("build").description("Run build of EventCatalog").action(async (options, command) => {
136
135
  console.log("Building EventCatalog...");
137
- checkForUpdate();
138
136
  copyCore();
139
137
  await log_build_default(dir);
140
138
  await resolve_catalog_dependencies_default(dir, core);
141
139
  await catalogToAstro(dir, core);
142
140
  const canEmbedPages = await isBackstagePluginEnabled();
141
+ checkForUpdate();
143
142
  execSync(
144
143
  `cross-env PROJECT_DIR='${dir}' CATALOG_DIR='${core}' ENABLE_EMBED=${canEmbedPages} npx astro build ${command.args.join(" ").trim()}`,
145
144
  {
@@ -128,6 +128,18 @@ export const columns = () => [
128
128
  if (sends?.length === 0 || !sends)
129
129
  return <div className="text-sm text-gray-400/80 text-left italic">Service sends no messages.</div>;
130
130
 
131
+ const sendersWithIcons = useMemo(
132
+ () =>
133
+ sends?.map((sender) => {
134
+ const type = sender.collection.slice(0, -1);
135
+ return {
136
+ ...sender,
137
+ ...getColorAndIconForMessageType(type),
138
+ };
139
+ }) || [],
140
+ [sends]
141
+ );
142
+
131
143
  return (
132
144
  <div>
133
145
  {isExpandable && (
@@ -137,30 +149,25 @@ export const columns = () => [
137
149
  )}
138
150
  {isExpanded && (
139
151
  <ul>
140
- {sends.map((consumer, index) => {
141
- const type = consumer.collection.slice(0, -1);
142
- const color = type === 'event' ? 'orange' : 'blue';
143
- const Icon = type === 'event' ? BoltIcon : ChatBubbleLeftIcon;
144
- return (
145
- <li key={`${consumer.data.id}-${index}`} className="py-1 group font-light">
146
- <a
147
- href={buildUrl(`/docs/${consumer.collection}/${consumer.data.id}/${consumer.data.version}`)}
148
- className="group-hover:text-primary flex space-x-1 items-center "
149
- >
150
- <div className={`flex items-center border border-gray-300 shadow-sm rounded-md`}>
151
- <span className="flex items-center">
152
- <span className={`bg-${color}-500 h-full rounded-tl rounded-bl p-1`}>
153
- <Icon className="h-4 w-4 text-white" />
154
- </span>
155
- <span className="leading-none px-2 group-hover:underline ">
156
- {consumer.data.name} (v{consumer.data.version})
157
- </span>
152
+ {sendersWithIcons.map((sender, index) => (
153
+ <li key={`${sender.data.id}-${index}`} className="py-1 group font-light">
154
+ <a
155
+ href={buildUrl(`/docs/${sender.collection}/${sender.data.id}/${sender.data.version}`)}
156
+ className="group-hover:text-primary flex space-x-1 items-center "
157
+ >
158
+ <div className={`flex items-center border border-gray-300 shadow-sm rounded-md`}>
159
+ <span className="flex items-center">
160
+ <span className={`bg-${sender.color}-500 h-full rounded-tl rounded-bl p-1`}>
161
+ <sender.Icon className="h-4 w-4 text-white" />
158
162
  </span>
159
- </div>
160
- </a>
161
- </li>
162
- );
163
- })}
163
+ <span className="leading-none px-2 group-hover:underline ">
164
+ {sender.data.name} (v{sender.data.version})
165
+ </span>
166
+ </span>
167
+ </div>
168
+ </a>
169
+ </li>
170
+ ))}
164
171
  </ul>
165
172
  )}
166
173
  </div>
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.23.0",
9
+ "version": "2.23.2",
10
10
  "publishConfig": {
11
11
  "access": "public"
12
12
  },
@@ -37,7 +37,7 @@
37
37
  "@tailwindcss/typography": "^0.5.13",
38
38
  "@tanstack/react-table": "^8.17.3",
39
39
  "@xyflow/react": "^12.3.6",
40
- "astro": "^5.2.5",
40
+ "astro": "^5.3.0",
41
41
  "astro-expressive-code": "^0.40.1",
42
42
  "astro-pagefind": "^1.6.0",
43
43
  "astro-seo": "^0.8.4",
@@ -72,6 +72,7 @@
72
72
  "tailwindcss": "^3.4.3",
73
73
  "typescript": "^5.4.5",
74
74
  "unist-util-visit": "^5.0.0",
75
+ "update-notifier": "^7.3.1",
75
76
  "uuid": "^10.0.0"
76
77
  },
77
78
  "devDependencies": {
@@ -88,6 +89,7 @@
88
89
  "@types/react-dom": "^18.3.0",
89
90
  "@types/semver": "^7.5.8",
90
91
  "@types/shelljs": "^0.8.15",
92
+ "@types/update-notifier": "^6.0.8",
91
93
  "prettier": "^3.3.3",
92
94
  "prettier-plugin-astro": "^0.14.1",
93
95
  "tsup": "^8.1.0",