Skip to content

Commit 9396107

Browse files
committed
A couple tweaks to rsc and give up on rendering react in tasks for now
1 parent 962f8b9 commit 9396107

File tree

6 files changed

+38
-28
lines changed

6 files changed

+38
-28
lines changed

.vscode/launch.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@
4545
"cwd": "${workspaceFolder}/references/v3-catalog",
4646
"sourceMaps": true
4747
},
48+
{
49+
"type": "node-terminal",
50+
"request": "launch",
51+
"name": "Debug Dev Next.js Realtime",
52+
"command": "pnpm exec trigger dev",
53+
"cwd": "${workspaceFolder}/references/nextjs-realtime",
54+
"sourceMaps": true
55+
},
4856
{
4957
"type": "node-terminal",
5058
"request": "launch",

packages/react-hooks/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,4 @@
7474
"main": "./dist/commonjs/index.js",
7575
"types": "./dist/commonjs/index.d.ts",
7676
"module": "./dist/esm/index.js"
77-
}
77+
}

packages/rsc/src/build.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import { BuildExtension } from "@trigger.dev/core/v3/build";
22
import { sourceDir } from "./sourceDir.js";
33

4-
export function rscExtension(): BuildExtension {
4+
export type RSCExtensionOptions = {
5+
resolveDir?: string;
6+
reactDomEnvironment?: "node" | "worker" | "bun";
7+
};
8+
9+
export function rscExtension(options?: RSCExtensionOptions): BuildExtension {
510
return {
611
name: "rsc",
712
onBuildStart(context) {
@@ -10,6 +15,8 @@ export function rscExtension(): BuildExtension {
1015
conditions: ["react-server"],
1116
});
1217

18+
const srcDir = options?.resolveDir ?? sourceDir;
19+
1320
context.config.build.conditions ??= [];
1421
context.config.build.conditions.push("react-server");
1522

@@ -23,7 +30,7 @@ export function rscExtension(): BuildExtension {
2330

2431
try {
2532
const resolvedPath = esmResolveSync(args.path, {
26-
url: sourceDir,
33+
url: srcDir,
2734
conditions: ["react-server"],
2835
});
2936

@@ -44,7 +51,7 @@ export function rscExtension(): BuildExtension {
4451

4552
try {
4653
const resolvedPath = esmResolveSync(args.path, {
47-
url: sourceDir,
54+
url: srcDir,
4855
conditions: ["react-server"],
4956
});
5057

@@ -65,7 +72,7 @@ export function rscExtension(): BuildExtension {
6572

6673
try {
6774
const resolvedPath = esmResolveSync(args.path, {
68-
url: sourceDir,
75+
url: srcDir,
6976
conditions: ["react-server"],
7077
});
7178

@@ -82,12 +89,15 @@ export function rscExtension(): BuildExtension {
8289
});
8390

8491
build.onResolve({ filter: /^react-dom\/server$/ }, (args) => {
85-
context.logger.debug("Resolving react-dom/server", { args });
92+
const condition =
93+
context.config.runtime === "bun" ? "bun" : options?.reactDomEnvironment ?? "node";
94+
95+
context.logger.debug("Resolving react-dom/server", { args, condition });
8696

8797
try {
8898
const resolvedPath = esmResolveSync(args.path, {
89-
url: sourceDir,
90-
conditions: ["worker"],
99+
url: srcDir,
100+
conditions: [condition],
91101
});
92102

93103
context.logger.debug("Resolved react-dom/server", { resolvedPath });

references/nextjs-realtime/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@
3434
},
3535
"devDependencies": {
3636
"@next/bundle-analyzer": "^15.0.2",
37+
"@trigger.dev/rsc": "workspace:^3",
3738
"@types/node": "^20",
3839
"@types/react": "^18",
3940
"@types/react-dom": "^18",
4041
"postcss": "^8",
4142
"tailwindcss": "^3.4.1",
4243
"trigger.dev": "workspace:^3",
43-
"@trigger.dev/rsc": "workspace:^3",
4444
"typescript": "^5"
4545
}
4646
}

references/nextjs-realtime/src/trigger/rsc.tsx

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import { openai } from "@ai-sdk/openai";
22
import { logger, metadata, schemaTask } from "@trigger.dev/sdk/v3";
33
import { streamUI } from "ai/rsc";
4-
import { z } from "zod";
5-
import { createStreamableUI } from "ai/rsc";
64
import { renderToReadableStream } from "react-dom/server";
5+
import { z } from "zod";
76

87
const LoadingComponent = () => <div className="animate-pulse p-4">getting weather...</div>;
98

@@ -72,7 +71,6 @@ function App() {
7271
<head>
7372
<meta charSet="utf-8" />
7473
<meta name="viewport" content="width=device-width, initial-scale=1" />
75-
<link rel="stylesheet" href="/styles.css"></link>
7674
<title>My app</title>
7775
</head>
7876
<body></body>
@@ -87,26 +85,20 @@ export const weatherUI = schemaTask({
8785
message: z.string(),
8886
}),
8987
run: async ({ message }) => {
90-
const weatherUI = createStreamableUI();
88+
logger.info("Running weather UI", { message });
9189

92-
weatherUI.update(<div style={{ color: "gray" }}>Loading...</div>);
90+
const readableStream = await renderToReadableStream(<App />);
9391

94-
setTimeout(() => {
95-
weatherUI.done(<div>{message}</div>);
96-
}, 1000);
92+
const reader = readableStream.getReader();
9793

98-
const readableStream = await renderToReadableStream(<App />, {
99-
onError(error, errorInfo) {
100-
logger.error("Error rendering UI", { error, errorInfo });
101-
},
102-
});
94+
while (true) {
95+
const { done, value } = await reader.read();
10396

104-
const stream = await metadata.stream("weather-ui", readableStream);
97+
if (done) {
98+
break;
99+
}
105100

106-
for await (const chunk of stream) {
107-
logger.log("Received chunk", { chunk });
101+
logger.log("Received chunk", { value });
108102
}
109-
110-
return weatherUI.value;
111103
},
112104
});

references/nextjs-realtime/trigger.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ export default defineConfig({
55
project: "proj_bzhdaqhlymtuhlrcgbqy",
66
dirs: ["./src/trigger"],
77
build: {
8-
extensions: [rscExtension()],
8+
extensions: [rscExtension({ reactDomEnvironment: "worker" })],
99
},
1010
});

0 commit comments

Comments
 (0)