Skip to content

Commit 2824de8

Browse files
committed
WIP @trigger.dev/rsc package
1 parent fe71000 commit 2824de8

File tree

21 files changed

+417
-20
lines changed

21 files changed

+417
-20
lines changed

packages/cli-v3/src/build/extensions.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,12 @@ function applyLayerToManifest(layer: BuildLayer, manifest: BuildManifest): Build
184184
}
185185
}
186186

187+
if (layer.conditions) {
188+
$manifest.customConditions ??= [];
189+
$manifest.customConditions = $manifest.customConditions.concat(layer.conditions);
190+
$manifest.customConditions = Array.from(new Set($manifest.customConditions));
191+
}
192+
187193
return $manifest;
188194
}
189195

packages/core/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,9 @@
204204
"nanoid": "^3.3.4",
205205
"socket.io-client": "4.7.5",
206206
"superjson": "^2.2.1",
207+
"zod": "3.22.3",
207208
"zod-error": "1.5.0",
208-
"zod-validation-error": "^1.5.0",
209-
"zod": "3.22.3"
209+
"zod-validation-error": "^1.5.0"
210210
},
211211
"devDependencies": {
212212
"@ai-sdk/provider-utils": "^1.0.22",

packages/core/src/v3/build/extensions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ export interface BuildLayer {
6565
override?: boolean;
6666
};
6767
dependencies?: Record<string, string>;
68+
conditions?: string[];
6869
}
6970

7071
export type PluginPlacement = "first" | "last";

packages/core/src/v3/runMetadata/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export class RunMetadataAPI implements RunMetadataManager {
6767

6868
public stream<T>(
6969
key: string,
70-
value: AsyncIterable<T>,
70+
value: AsyncIterable<T> | ReadableStream<T>,
7171
signal?: AbortSignal
7272
): Promise<AsyncIterable<T>> {
7373
return this.#getManager().stream(key, value, signal);

packages/core/src/v3/runMetadata/manager.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,13 @@ export class StandardMetadataManager implements RunMetadataManager {
164164

165165
public async stream<T>(
166166
key: string,
167-
value: AsyncIterable<T>,
167+
value: AsyncIterable<T> | ReadableStream<T>,
168168
signal?: AbortSignal
169169
): Promise<AsyncIterable<T>> {
170+
const $value = value as AsyncIterable<T>;
171+
170172
if (!this.runId) {
171-
return value;
173+
return $value;
172174
}
173175

174176
// Add the key to the special stream metadata object
@@ -179,7 +181,7 @@ export class StandardMetadataManager implements RunMetadataManager {
179181
const streamInstance = new MetadataStream({
180182
key,
181183
runId: this.runId,
182-
iterator: value[Symbol.asyncIterator](),
184+
iterator: $value[Symbol.asyncIterator](),
183185
baseUrl: this.streamsBaseUrl,
184186
signal,
185187
});

packages/core/src/v3/runMetadata/metadataStream.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,6 @@ export class MetadataStream<T> {
6363
cancel: () => this.controller.abort(),
6464
});
6565

66-
console.log("Posting server stream to ", this.options.baseUrl);
67-
6866
return fetch(
6967
`${this.options.baseUrl}/realtime/v1/streams/${this.options.runId}/${this.options.key}`,
7068
{

packages/core/src/v3/runMetadata/types.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,9 @@ export interface RunMetadataManager {
1313
decrementKey(key: string, value: number): void;
1414
update(metadata: Record<string, DeserializedJson>): void;
1515
flush(requestOptions?: ApiRequestOptions): Promise<void>;
16-
stream<T>(key: string, value: AsyncIterable<T>, signal?: AbortSignal): Promise<AsyncIterable<T>>;
16+
stream<T>(
17+
key: string,
18+
value: AsyncIterable<T> | ReadableStream<T>,
19+
signal?: AbortSignal
20+
): Promise<AsyncIterable<T>>;
1721
}

packages/rsc/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# @trigger.dev/rsc

packages/rsc/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
## trigger.dev rsc

packages/rsc/package.json

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
{
2+
"name": "@trigger.dev/rsc",
3+
"version": "3.1.2",
4+
"description": "trigger.dev rsc",
5+
"license": "MIT",
6+
"publishConfig": {
7+
"access": "public"
8+
},
9+
"repository": {
10+
"type": "git",
11+
"url": "https://github.com/triggerdotdev/trigger.dev",
12+
"directory": "packages/react-hooks"
13+
},
14+
"type": "module",
15+
"files": [
16+
"dist"
17+
],
18+
"tshy": {
19+
"selfLink": false,
20+
"main": true,
21+
"module": true,
22+
"project": "./tsconfig.json",
23+
"exports": {
24+
"./package.json": "./package.json",
25+
".": "./src/index.ts"
26+
},
27+
"sourceDialects": [
28+
"@triggerdotdev/source"
29+
]
30+
},
31+
"scripts": {
32+
"clean": "rimraf dist",
33+
"build": "tshy && pnpm run update-version",
34+
"dev": "tshy --watch",
35+
"typecheck": "tsc --noEmit",
36+
"update-version": "tsx ../../scripts/updateVersion.ts",
37+
"check-exports": "attw --pack ."
38+
},
39+
"dependencies": {
40+
"@trigger.dev/core": "workspace:^3.1.2",
41+
"mlly": "^1.7.1",
42+
"react": "19.0.0-rc.1",
43+
"react-dom": "19.0.0-rc.1"
44+
},
45+
"devDependencies": {
46+
"@arethetypeswrong/cli": "^0.15.4",
47+
"@trigger.dev/build": "workspace:^3.1.2",
48+
"@types/node": "^20.14.14",
49+
"@types/react": "*",
50+
"@types/react-dom": "*",
51+
"rimraf": "^3.0.2",
52+
"tshy": "^3.0.2",
53+
"tsx": "4.17.0",
54+
"typescript": "^5.5.4"
55+
},
56+
"engines": {
57+
"node": ">=18.20.0"
58+
},
59+
"exports": {
60+
"./package.json": "./package.json",
61+
".": {
62+
"import": {
63+
"@triggerdotdev/source": "./src/index.ts",
64+
"types": "./dist/esm/index.d.ts",
65+
"default": "./dist/esm/index.js"
66+
},
67+
"require": {
68+
"types": "./dist/commonjs/index.d.ts",
69+
"default": "./dist/commonjs/index.js"
70+
}
71+
}
72+
},
73+
"main": "./dist/commonjs/index.js",
74+
"types": "./dist/commonjs/index.d.ts",
75+
"module": "./dist/esm/index.js"
76+
}

packages/rsc/src/build.ts

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
import { BuildExtension } from "@trigger.dev/core/v3/build";
2+
import { sourceDir } from "./sourceDir.js";
3+
4+
export function rscExtension(): BuildExtension {
5+
return {
6+
name: "rsc",
7+
onBuildStart(context) {
8+
context.addLayer({
9+
id: "rsc",
10+
conditions: ["react-server"],
11+
});
12+
13+
context.config.build.conditions ??= [];
14+
context.config.build.conditions.push("react-server");
15+
16+
context.registerPlugin({
17+
name: "rsc",
18+
async setup(build) {
19+
const { resolvePathSync: esmResolveSync } = await import("mlly");
20+
21+
build.onResolve({ filter: /^react\/jsx-dev-runtime$/ }, (args) => {
22+
context.logger.debug("Resolving jsx-dev-runtime", { args });
23+
24+
try {
25+
const resolvedPath = esmResolveSync(args.path, {
26+
url: sourceDir,
27+
conditions: ["react-server"],
28+
});
29+
30+
context.logger.debug("Resolved jsx-dev-runtime", { resolvedPath });
31+
32+
return {
33+
path: resolvedPath,
34+
};
35+
} catch (error) {
36+
context.logger.debug("Failed to resolve jsx-dev-runtime", { error });
37+
}
38+
39+
return undefined;
40+
});
41+
42+
build.onResolve({ filter: /^react\/jsx-runtime$/ }, (args) => {
43+
context.logger.debug("Resolving jsx-runtime", { args });
44+
45+
try {
46+
const resolvedPath = esmResolveSync(args.path, {
47+
url: sourceDir,
48+
conditions: ["react-server"],
49+
});
50+
51+
context.logger.debug("Resolved jsx-runtime", { resolvedPath });
52+
53+
return {
54+
path: resolvedPath,
55+
};
56+
} catch (error) {
57+
context.logger.debug("Failed to resolve jsx-runtime", { error });
58+
}
59+
60+
return undefined;
61+
});
62+
63+
build.onResolve({ filter: /^(react|react-dom)$/ }, (args) => {
64+
context.logger.debug("Resolving react", { args });
65+
66+
try {
67+
const resolvedPath = esmResolveSync(args.path, {
68+
url: sourceDir,
69+
conditions: ["react-server"],
70+
});
71+
72+
context.logger.debug("Resolved react", { resolvedPath });
73+
74+
return {
75+
path: resolvedPath,
76+
};
77+
} catch (error) {
78+
context.logger.debug("Failed to resolve react", { error });
79+
}
80+
81+
return undefined;
82+
});
83+
84+
build.onResolve({ filter: /^react-dom\/server$/ }, (args) => {
85+
context.logger.debug("Resolving react-dom/server", { args });
86+
87+
try {
88+
const resolvedPath = esmResolveSync(args.path, {
89+
url: sourceDir,
90+
conditions: ["worker"],
91+
});
92+
93+
context.logger.debug("Resolved react-dom/server", { resolvedPath });
94+
95+
return {
96+
path: resolvedPath,
97+
};
98+
} catch (error) {
99+
context.logger.debug("Failed to resolve react-dom/server", { error });
100+
}
101+
102+
return undefined;
103+
});
104+
},
105+
});
106+
},
107+
};
108+
}

packages/rsc/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./build.js";

packages/rsc/src/sourceDir-cjs.cts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { pathToFileURL } from "node:url";
2+
//@ts-ignore - Have to ignore because TSC thinks this is ESM
3+
export const sourceDir = pathToFileURL(__dirname).toString();

packages/rsc/src/sourceDir.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { fileURLToPath } from "node:url";
2+
//@ts-ignore
3+
export const sourceDir = fileURLToPath(new URL(".", import.meta.url));

packages/rsc/tsconfig.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"extends": "../../.configs/tsconfig.base.json",
3+
"compilerOptions": {
4+
"isolatedDeclarations": false,
5+
"composite": true,
6+
"sourceMap": true,
7+
"stripInternal": true
8+
},
9+
"include": ["./src/**/*.ts", "./src/**/*.tsx"]
10+
}

packages/trigger-sdk/src/v3/metadata.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ async function flushMetadata(requestOptions?: ApiRequestOptions): Promise<void>
142142

143143
async function stream<T>(
144144
key: string,
145-
value: AsyncIterable<T>,
145+
value: AsyncIterable<T> | ReadableStream<T>,
146146
signal?: AbortSignal
147147
): Promise<AsyncIterable<T>> {
148148
return runMetadata.stream(key, value, signal);

0 commit comments

Comments
 (0)