@evjs/runtime 0.0.1-rc.7 → 0.0.1-rc.8
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/AGENT.md +61 -36
- package/esm/client/query.d.ts +0 -2
- package/esm/client/query.d.ts.map +1 -1
- package/esm/client/query.js +0 -6
- package/esm/client/query.js.map +1 -1
- package/esm/server/dispatch.d.ts +1 -1
- package/esm/server/dispatch.js +1 -1
- package/package.json +14 -2
- package/esm/serializer.d.ts +0 -31
- package/esm/serializer.d.ts.map +0 -1
- package/esm/serializer.js +0 -7
- package/esm/serializer.js.map +0 -1
package/AGENT.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
|
-
Core runtime for evjs apps.
|
|
7
|
+
Core runtime for evjs apps. Three entry points:
|
|
8
8
|
- `@evjs/runtime` + `@evjs/runtime/client` — client-side (React, TanStack)
|
|
9
9
|
- `@evjs/runtime/server` — server-side (Hono)
|
|
10
10
|
- `@evjs/runtime/server/ecma` — edge/serverless adapter
|
|
@@ -13,8 +13,15 @@ Core runtime for evjs apps. Two entry points:
|
|
|
13
13
|
|
|
14
14
|
### App Bootstrap
|
|
15
15
|
|
|
16
|
+
Separate route definitions from app bootstrap:
|
|
17
|
+
|
|
16
18
|
```tsx
|
|
17
|
-
|
|
19
|
+
// src/routes.tsx — route tree + components
|
|
20
|
+
import { createAppRootRoute, createRoute, Outlet } from "@evjs/runtime";
|
|
21
|
+
|
|
22
|
+
function RootLayout() {
|
|
23
|
+
return <div><Outlet /></div>;
|
|
24
|
+
}
|
|
18
25
|
|
|
19
26
|
const rootRoute = createAppRootRoute({ component: RootLayout });
|
|
20
27
|
|
|
@@ -24,7 +31,13 @@ const homeRoute = createRoute({
|
|
|
24
31
|
component: HomePage,
|
|
25
32
|
});
|
|
26
33
|
|
|
27
|
-
const routeTree = rootRoute.addChildren([homeRoute]);
|
|
34
|
+
export const routeTree = rootRoute.addChildren([homeRoute]);
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
// src/main.tsx — app bootstrap (keep minimal)
|
|
39
|
+
import { createApp } from "@evjs/runtime";
|
|
40
|
+
import { routeTree } from "./routes";
|
|
28
41
|
|
|
29
42
|
const app = createApp({ routeTree });
|
|
30
43
|
|
|
@@ -61,17 +74,21 @@ const { data } = query(getUser).useQuery(userId);
|
|
|
61
74
|
|
|
62
75
|
// Mutations
|
|
63
76
|
const { mutate, isPending } = mutation(createUser).useMutation();
|
|
64
|
-
mutate(
|
|
77
|
+
mutate({ name: "Alice", email: "alice@example.com" });
|
|
65
78
|
|
|
66
79
|
// queryOptions — for route loaders, prefetching, cache control
|
|
67
80
|
const opts = query(getUsers).queryOptions();
|
|
68
81
|
queryClient.ensureQueryData(opts);
|
|
69
82
|
queryClient.prefetchQuery(opts);
|
|
70
83
|
|
|
71
|
-
// Cache invalidation
|
|
84
|
+
// Cache invalidation via queryKey
|
|
72
85
|
queryClient.invalidateQueries({ queryKey: query(getUsers).queryKey() });
|
|
73
|
-
|
|
74
|
-
|
|
86
|
+
|
|
87
|
+
// Auto-invalidation on mutation success
|
|
88
|
+
const { mutate } = mutation(createUser).useMutation({
|
|
89
|
+
invalidates: [getUsers], // auto-invalidates getUsers queries on success
|
|
90
|
+
});
|
|
91
|
+
mutate({ name: "Alice", email: "alice@example.com" });
|
|
75
92
|
|
|
76
93
|
// Module proxy (for grouping)
|
|
77
94
|
import { createQueryProxy, createMutationProxy } from "@evjs/runtime/client";
|
|
@@ -103,17 +120,18 @@ const usersRoute = createRoute({
|
|
|
103
120
|
|
|
104
121
|
```
|
|
105
122
|
src/
|
|
106
|
-
├── main.tsx ←
|
|
123
|
+
├── main.tsx ← app bootstrap (keep minimal ~12 lines)
|
|
124
|
+
├── routes.tsx ← route tree + components
|
|
107
125
|
├── api/*.server.ts ← server functions
|
|
108
|
-
└── pages/
|
|
109
|
-
├── __root.tsx
|
|
110
|
-
├── home.tsx
|
|
111
|
-
|
|
112
|
-
├── dashboard.tsx ← pathless layout + child route
|
|
113
|
-
├── search.tsx ← typed search params
|
|
114
|
-
└── catch.tsx ← redirect + 404
|
|
126
|
+
└── pages/ ← route components (for larger apps)
|
|
127
|
+
├── __root.tsx
|
|
128
|
+
├── home.tsx
|
|
129
|
+
└── posts/
|
|
115
130
|
```
|
|
116
131
|
|
|
132
|
+
> For small apps, define routes and components together in `routes.tsx`.
|
|
133
|
+
> For larger apps, split components into `pages/` directory (like `complex-routing` example).
|
|
134
|
+
|
|
117
135
|
**Key patterns:**
|
|
118
136
|
|
|
119
137
|
| Pattern | Code | Notes |
|
|
@@ -130,7 +148,10 @@ src/
|
|
|
130
148
|
**Type-safe routing (CRITICAL):**
|
|
131
149
|
|
|
132
150
|
```tsx
|
|
133
|
-
// main.tsx — ALWAYS register the router type
|
|
151
|
+
// src/main.tsx — ALWAYS register the router type
|
|
152
|
+
import { createApp } from "@evjs/runtime";
|
|
153
|
+
import { routeTree } from "./routes";
|
|
154
|
+
|
|
134
155
|
const app = createApp({ routeTree });
|
|
135
156
|
|
|
136
157
|
declare module "@tanstack/react-router" {
|
|
@@ -152,7 +173,7 @@ const { postId } = postDetailRoute.useParams();
|
|
|
152
173
|
|
|
153
174
|
// ❌ Untyped — returns any
|
|
154
175
|
const params = useParams({ from: "/posts/$postId" });
|
|
155
|
-
|
|
176
|
+
```
|
|
156
177
|
|
|
157
178
|
|
|
158
179
|
### Transport Configuration
|
|
@@ -181,8 +202,8 @@ initTransport({
|
|
|
181
202
|
// Custom codec (e.g., MessagePack)
|
|
182
203
|
initTransport({
|
|
183
204
|
codec: {
|
|
184
|
-
|
|
185
|
-
|
|
205
|
+
serialize: (data) => msgpack.encode(data),
|
|
206
|
+
deserialize: (buffer) => msgpack.decode(buffer),
|
|
186
207
|
contentType: "application/msgpack",
|
|
187
208
|
},
|
|
188
209
|
});
|
|
@@ -211,7 +232,7 @@ export async function getUsers() {
|
|
|
211
232
|
export async function getUser(id: string) {
|
|
212
233
|
const user = await db.users.find(id);
|
|
213
234
|
if (!user) {
|
|
214
|
-
throw new ServerError("
|
|
235
|
+
throw new ServerError("User not found", { status: 404, data: { id } });
|
|
215
236
|
}
|
|
216
237
|
return user;
|
|
217
238
|
}
|
|
@@ -254,10 +275,7 @@ const handler = createFetchHandler(app);
|
|
|
254
275
|
// Deno
|
|
255
276
|
Deno.serve(handler);
|
|
256
277
|
|
|
257
|
-
// Bun
|
|
258
|
-
export default { fetch: handler };
|
|
259
|
-
|
|
260
|
-
// Cloudflare Workers
|
|
278
|
+
// Bun / other edge runtimes
|
|
261
279
|
export default { fetch: handler };
|
|
262
280
|
```
|
|
263
281
|
|
|
@@ -269,33 +287,38 @@ import { ServerError } from "@evjs/runtime";
|
|
|
269
287
|
// Server — throw structured errors
|
|
270
288
|
export async function getUser(id: string) {
|
|
271
289
|
const user = await db.users.find(id);
|
|
272
|
-
if (!user) throw new ServerError("
|
|
290
|
+
if (!user) throw new ServerError("User not found", { status: 404, data: { id } });
|
|
273
291
|
return user;
|
|
274
292
|
}
|
|
275
293
|
|
|
276
294
|
// Client — catch typed errors
|
|
277
|
-
import {
|
|
295
|
+
import { ServerFunctionError } from "@evjs/runtime";
|
|
278
296
|
|
|
279
297
|
try {
|
|
280
298
|
await getUser("123");
|
|
281
299
|
} catch (e) {
|
|
282
|
-
if (e instanceof
|
|
283
|
-
e.
|
|
284
|
-
e.
|
|
300
|
+
if (e instanceof ServerFunctionError) {
|
|
301
|
+
e.message; // "Server function \"getUser\" threw: User not found"
|
|
302
|
+
e.fnId; // the function ID
|
|
303
|
+
e.status; // 404
|
|
285
304
|
}
|
|
286
305
|
}
|
|
287
306
|
```
|
|
288
307
|
|
|
289
308
|
## Middleware
|
|
290
309
|
|
|
310
|
+
Middleware wraps server function calls, not HTTP requests. Use for auth, logging, rate limiting:
|
|
311
|
+
|
|
291
312
|
```ts
|
|
292
|
-
// src/middleware/auth.ts
|
|
293
313
|
import { registerMiddleware } from "@evjs/runtime/server";
|
|
294
314
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
315
|
+
// ctx has { fnId: string, args: unknown[] }
|
|
316
|
+
registerMiddleware(async (ctx, next) => {
|
|
317
|
+
console.log(`Calling ${ctx.fnId} with`, ctx.args);
|
|
318
|
+
const start = Date.now();
|
|
319
|
+
const result = await next();
|
|
320
|
+
console.log(`${ctx.fnId} took ${Date.now() - start}ms`);
|
|
321
|
+
return result;
|
|
299
322
|
});
|
|
300
323
|
```
|
|
301
324
|
|
|
@@ -305,6 +328,8 @@ registerMiddleware(async (c, next) => {
|
|
|
305
328
|
2. **Arguments are spread, not wrapped** — `query(getUser).useQuery(id)` not `query(getUser).useQuery([id])`
|
|
306
329
|
3. **Don't call server functions directly in components** — wrap with `query()` or `mutation()`
|
|
307
330
|
4. **Don't forget `"use server";`** at the top of `.server.ts` files
|
|
308
|
-
5. **
|
|
309
|
-
6. **Always register the router type** — without `declare module "@tanstack/react-router" {
|
|
331
|
+
5. **Throw `ServerError`** on the server, catch `ServerFunctionError` on the client
|
|
332
|
+
6. **Always register the router type** — without `declare module "@tanstack/react-router" { ... }`, all route params/search will be `any`
|
|
310
333
|
7. **Use `route.useParams()`** not the global `useParams()` — the route-scoped version gives proper type inference
|
|
334
|
+
8. **Middleware receives `(ctx, next)`** where `ctx = { fnId, args }` — not a Hono context object
|
|
335
|
+
9. **Use `invalidates` on `useMutation()`** for auto cache invalidation — `invalidate()` was removed
|
package/esm/client/query.d.ts
CHANGED
|
@@ -29,8 +29,6 @@ export interface QueryProxyHandler<TArgs extends unknown[], TResponse> {
|
|
|
29
29
|
};
|
|
30
30
|
/** Returns the query key for this function and arguments. */
|
|
31
31
|
queryKey(...args: TArgs): unknown[];
|
|
32
|
-
/** Invalidate cached queries for this function. */
|
|
33
|
-
invalidate(...args: TArgs): void;
|
|
34
32
|
}
|
|
35
33
|
/**
|
|
36
34
|
* The interface for a single server function's mutation proxy.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/client/query.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAK5B,MAAM,uBAAuB,CAAC;AAG/B;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,SAAS,IAAI,CAC/D,GAAG,IAAI,EAAE,KAAK,KACX,OAAO,CAAC,SAAS,CAAC,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,SAAS;IACnE,yCAAyC;IACzC,CAAC,GAAG,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAErC,wCAAwC;IACxC,QAAQ,CACN,GAAG,IAAI,EAAE;QACP,GAAG,IAAI,EAAE,KAAK;QACd,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;KAC1E,GACA,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEpC,wCAAwC;IACxC,gBAAgB,CACd,GAAG,IAAI,EAAE;QACP,GAAG,IAAI,EAAE,KAAK;QACd,OAAO,CAAC,EAAE,IAAI,CACZ,uBAAuB,CAAC,SAAS,EAAE,KAAK,CAAC,EACzC,UAAU,GAAG,SAAS,CACvB;KACF,GACA,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAE5C,+CAA+C;IAC/C,YAAY,CACV,GAAG,IAAI,EAAE;QACP,GAAG,IAAI,EAAE,KAAK;QACd,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;KAC1E,GACA,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG;QACrC,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;KACnC,CAAC;IAEF,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,IAAI,EAAE,KAAK,GAAG,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/client/query.ts"],"names":[],"mappings":"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"}
|
package/esm/client/query.js
CHANGED
|
@@ -70,12 +70,6 @@ function createHandler(fn, path) {
|
|
|
70
70
|
queryKey: (...args) => {
|
|
71
71
|
return [fnId || path.join("."), ...args];
|
|
72
72
|
},
|
|
73
|
-
invalidate: (...args) => {
|
|
74
|
-
const queryClient = useQueryClient();
|
|
75
|
-
queryClient.invalidateQueries({
|
|
76
|
-
queryKey: [fnId || path.join("."), ...args],
|
|
77
|
-
});
|
|
78
|
-
},
|
|
79
73
|
path: path.join("."),
|
|
80
74
|
};
|
|
81
75
|
}
|
package/esm/client/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/client/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,WAAW,EACX,QAAQ,EACR,cAAc,EACd,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/client/query.ts"],"names":[],"mappings":"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"}
|
package/esm/server/dispatch.d.ts
CHANGED
|
@@ -51,7 +51,7 @@ export interface DispatchError {
|
|
|
51
51
|
}
|
|
52
52
|
export type DispatchResult = DispatchSuccess | DispatchError;
|
|
53
53
|
/**
|
|
54
|
-
* Dispatch
|
|
54
|
+
* Dispatch a server function call to a registered server function.
|
|
55
55
|
*
|
|
56
56
|
* @param fnId - The unique function ID.
|
|
57
57
|
* @param args - The arguments to pass to the function.
|
package/esm/server/dispatch.js
CHANGED
|
@@ -18,7 +18,7 @@ export function registerMiddleware(fn) {
|
|
|
18
18
|
middlewares.push(fn);
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* Dispatch
|
|
21
|
+
* Dispatch a server function call to a registered server function.
|
|
22
22
|
*
|
|
23
23
|
* @param fnId - The unique function ID.
|
|
24
24
|
* @param args - The arguments to pass to the function.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@evjs/runtime",
|
|
3
|
-
"version": "0.0.1-rc.
|
|
4
|
-
"description": "",
|
|
3
|
+
"version": "0.0.1-rc.8",
|
|
4
|
+
"description": "Client and server runtime for the evjs framework",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@hono/node-server": "^1.19.11",
|
|
7
7
|
"@logtape/logtape": "^2.0.4",
|
|
@@ -69,11 +69,23 @@
|
|
|
69
69
|
},
|
|
70
70
|
"scripts": {
|
|
71
71
|
"build": "tsc",
|
|
72
|
+
"test": "vitest run",
|
|
72
73
|
"check-types": "tsc --noEmit",
|
|
73
74
|
"prepublishOnly": "npm run build"
|
|
74
75
|
},
|
|
75
76
|
"files": [
|
|
76
77
|
"esm",
|
|
77
78
|
"AGENT.md"
|
|
79
|
+
],
|
|
80
|
+
"keywords": [
|
|
81
|
+
"evjs",
|
|
82
|
+
"react",
|
|
83
|
+
"server-functions",
|
|
84
|
+
"rpc",
|
|
85
|
+
"routing",
|
|
86
|
+
"tanstack",
|
|
87
|
+
"typescript",
|
|
88
|
+
"full-stack",
|
|
89
|
+
"framework"
|
|
78
90
|
]
|
|
79
91
|
}
|
package/esm/serializer.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pluggable serialization interface.
|
|
3
|
-
*
|
|
4
|
-
* By default the framework uses JSON. Implement this interface to use
|
|
5
|
-
* a custom serializer (e.g. protobuf, msgpack, superjson, devalue).
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```ts
|
|
9
|
-
* import superjson from "superjson";
|
|
10
|
-
*
|
|
11
|
-
* const superJsonSerializer: Serializer = {
|
|
12
|
-
* contentType: "application/json",
|
|
13
|
-
* serialize: (data) => superjson.stringify(data),
|
|
14
|
-
* deserialize: (raw) => superjson.parse(raw as string),
|
|
15
|
-
* };
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
export interface Serializer {
|
|
19
|
-
/**
|
|
20
|
-
* Content-Type header value for the serialized format.
|
|
21
|
-
* Defaults to `"application/json"` when not specified.
|
|
22
|
-
*/
|
|
23
|
-
contentType?: string;
|
|
24
|
-
/** Serialize a JS value for transmission. */
|
|
25
|
-
serialize(data: unknown): string | ArrayBuffer;
|
|
26
|
-
/** Deserialize a raw payload back to a JS value. */
|
|
27
|
-
deserialize(raw: string | ArrayBuffer): unknown;
|
|
28
|
-
}
|
|
29
|
-
/** Built-in JSON serializer (the default). */
|
|
30
|
-
export declare const jsonSerializer: Serializer;
|
|
31
|
-
//# sourceMappingURL=serializer.d.ts.map
|
package/esm/serializer.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,6CAA6C;IAC7C,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;IAE/C,oDAAoD;IACpD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;CACjD;AAED,8CAA8C;AAC9C,eAAO,MAAM,cAAc,EAAE,UAI5B,CAAC"}
|
package/esm/serializer.js
DELETED
package/esm/serializer.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"serializer.js","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"AA+BA,8CAA8C;AAC9C,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACzC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAa,CAAC;CAChD,CAAC"}
|