Skip to content

Commit 6409d28

Browse files
fix(useTriggerChat): make AI SDK dependencies optional peer dependencies
1 parent ba97cb0 commit 6409d28

File tree

3 files changed

+57
-52
lines changed

3 files changed

+57
-52
lines changed

packages/react-hooks/package.json

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,7 @@
3737
"check-exports": "attw --pack ."
3838
},
3939
"dependencies": {
40-
"@ai-sdk/react": "^2.0.14",
41-
"@electric-sql/client": "1.0.14",
4240
"@trigger.dev/core": "workspace:^4.0.5",
43-
"ai": "^5.0.82",
44-
"eventsource-parser": "^3.0.0",
4541
"swr": "^2.2.5"
4642
},
4743
"devDependencies": {
@@ -54,7 +50,25 @@
5450
},
5551
"peerDependencies": {
5652
"react": "^18.0 || ^19.0 || ^19.0.0-rc",
57-
"react-dom": "^18.0 || ^19.0 || ^19.0.0-rc"
53+
"react-dom": "^18.0 || ^19.0 || ^19.0.0-rc",
54+
"@ai-sdk/react": "^2.0.0",
55+
"@electric-sql/client": "^1.0.0",
56+
"ai": "^5.0.0",
57+
"eventsource-parser": "^3.0.0"
58+
},
59+
"peerDependenciesMeta": {
60+
"@ai-sdk/react": {
61+
"optional": true
62+
},
63+
"@electric-sql/client": {
64+
"optional": true
65+
},
66+
"ai": {
67+
"optional": true
68+
},
69+
"eventsource-parser": {
70+
"optional": true
71+
}
5872
},
5973
"engines": {
6074
"node": ">=18.20.0"

packages/react-hooks/src/hooks/useTriggerChat.ts

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import { ShapeStream } from "@electric-sql/client";
44
import { EventSourceParserStream } from "eventsource-parser/stream";
5-
65
import { useChat, type UseChatHelpers } from "@ai-sdk/react";
76
import type {
87
UIMessage,
@@ -488,6 +487,39 @@ async function streamDataFromTrigger(params: {
488487
}
489488
}
490489

490+
function checkRequiredPeerDependencies() {
491+
const requiredPackages = [
492+
"@ai-sdk/react",
493+
"ai",
494+
"@electric-sql/client",
495+
"eventsource-parser",
496+
];
497+
498+
const missing = requiredPackages.filter((pkg) => {
499+
try {
500+
require.resolve(pkg);
501+
return false;
502+
} catch {
503+
return true;
504+
}
505+
});
506+
507+
if (!missing.length) return;
508+
509+
const packages = missing.join(" ");
510+
511+
throw new Error(
512+
`useTriggerChat requires the following packages:\n${missing
513+
.map((pkg) => ` - ${pkg}`)
514+
.join("\n")}\n\n` +
515+
`Install them with:\n` +
516+
` npm install ${packages}\n` +
517+
` yarn add ${packages}\n` +
518+
` pnpm add ${packages}\n` +
519+
` bun add ${packages}`,
520+
);
521+
}
522+
491523
type UseTriggerChatOptions = {
492524
transportOptions: TriggerChatTransportOptions;
493525
} & Omit<ChatInit<UIMessage>, "transport">;
@@ -575,6 +607,7 @@ type UseTriggerChatOptions = {
575607
export function useTriggerChat(
576608
options: UseTriggerChatOptions,
577609
): UseChatHelpers<UIMessage> {
610+
checkRequiredPeerDependencies();
578611
const { transportOptions, ...chatOptions } = options;
579612

580613
return useChat({

pnpm-lock.yaml

Lines changed: 4 additions & 46 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)