trpc-nuxt-module 3.9.0 → 4.0.0
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/dist/index.js +5 -4
- package/dist/runtime/client/services/getLinkFetch.js +2 -1
- package/dist/runtime/client/services/useProcedureMutation.js +1 -1
- package/dist/runtime/client/services/useProcedureSubscription.js +3 -1
- package/dist/runtime/server/createTRPCEventHandler.d.ts +2 -2
- package/dist/runtime/server/createTRPCEventHandler.js +20 -6
- package/dist/runtime/server/models/TRPCEventHandlerOptions.d.ts +1 -1
- package/dist/services/getWebSocketHandlerTemplate.js +3 -3
- package/dist/services/getWebSocketHooksTypeTemplate.js +1 -1
- package/package.json +12 -12
- package/dist/runtime/server/services/getRequestSignal.d.ts +0 -4
- package/dist/runtime/server/services/getRequestSignal.js +0 -11
- package/dist/runtime/server/services/toRequest.d.ts +0 -4
- package/dist/runtime/server/services/toRequest.js +0 -20
package/dist/index.js
CHANGED
|
@@ -16,7 +16,7 @@ const WEBSOCKET_HANDLER_FILENAME = `#${MODULE_NAME}/webSocketHandler.mjs`;
|
|
|
16
16
|
const trpcNuxtModule = defineNuxtModule({
|
|
17
17
|
defaults: { endpoint: DEFAULT_ENDPOINT },
|
|
18
18
|
meta: {
|
|
19
|
-
compatibility: { nuxt: ">=
|
|
19
|
+
compatibility: { nuxt: ">=5.0.0-0" },
|
|
20
20
|
configKey: "trpc",
|
|
21
21
|
name: MODULE_NAME
|
|
22
22
|
},
|
|
@@ -29,17 +29,18 @@ const trpcNuxtModule = defineNuxtModule({
|
|
|
29
29
|
...createContext,
|
|
30
30
|
from: await resolvePath(createContext.from)
|
|
31
31
|
};
|
|
32
|
+
const routedEndpoint = `${nuxt.options.app.baseURL.replace(/\/$/u, "")}${endpoint}`;
|
|
32
33
|
addServerTemplate({
|
|
33
34
|
filename: EVENT_HANDLER_FILENAME,
|
|
34
|
-
getContents: () => getEventHandlerTemplate(resolvedRouter,
|
|
35
|
+
getContents: () => getEventHandlerTemplate(resolvedRouter, routedEndpoint, resolvedCreateContext)
|
|
35
36
|
});
|
|
36
37
|
addServerHandler({
|
|
37
38
|
handler: EVENT_HANDLER_FILENAME,
|
|
38
39
|
route: `${endpoint}/**`
|
|
39
40
|
});
|
|
40
41
|
if (webSocket) {
|
|
41
|
-
nuxt.options.nitro.
|
|
42
|
-
...nuxt.options.nitro.
|
|
42
|
+
nuxt.options.nitro.features = {
|
|
43
|
+
...nuxt.options.nitro.features,
|
|
43
44
|
websocket: true
|
|
44
45
|
};
|
|
45
46
|
addServerTemplate({
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { useRequestEvent } from "nuxt/app";
|
|
2
2
|
import { checkIsServer } from "@esposter/shared";
|
|
3
|
+
import { fetchWithEvent } from "nitro/h3";
|
|
3
4
|
//#region src/runtime/client/services/getLinkFetch.ts
|
|
4
5
|
const getLinkFetch = () => {
|
|
5
6
|
if (checkIsServer()) {
|
|
6
7
|
const event = useRequestEvent();
|
|
7
|
-
if (event) return event
|
|
8
|
+
if (event) return (url, options) => fetchWithEvent(event, url, options);
|
|
8
9
|
}
|
|
9
10
|
return (input, init) => fetch(new URL(input, window.location.href), init);
|
|
10
11
|
};
|
|
@@ -16,7 +16,7 @@ const useProcedureMutation = (client, path, { mutationKey = getProcedureKey(path
|
|
|
16
16
|
mutationInput = input;
|
|
17
17
|
await asyncData.execute();
|
|
18
18
|
if (asyncData.error.value) throw asyncData.error.value;
|
|
19
|
-
return asyncData.data.value;
|
|
19
|
+
else return asyncData.data.value;
|
|
20
20
|
} });
|
|
21
21
|
};
|
|
22
22
|
//#endregion
|
|
@@ -50,7 +50,9 @@ const useProcedureSubscription = (client, path, input, { enabled = true, ...opti
|
|
|
50
50
|
if (isEnabled) subscribe();
|
|
51
51
|
else unsubscribe();
|
|
52
52
|
}, { immediate: true });
|
|
53
|
-
if (getCurrentScope()) onScopeDispose(
|
|
53
|
+
if (getCurrentScope()) onScopeDispose(() => {
|
|
54
|
+
unsubscribe();
|
|
55
|
+
});
|
|
54
56
|
return {
|
|
55
57
|
data,
|
|
56
58
|
error,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TRPCEventHandlerOptions } from "./models/TRPCEventHandlerOptions.js";
|
|
2
2
|
import { AnyTRPCRouter } from "@trpc/server";
|
|
3
|
-
import { EventHandler
|
|
3
|
+
import { EventHandler } from "nitro/h3";
|
|
4
4
|
//#region src/runtime/server/createTRPCEventHandler.d.ts
|
|
5
|
-
export declare const createTRPCEventHandler: <TRouter extends AnyTRPCRouter>({ createContext, endpoint, ...options }: TRPCEventHandlerOptions<TRouter>) => EventHandler
|
|
5
|
+
export declare const createTRPCEventHandler: <TRouter extends AnyTRPCRouter>({ createContext, endpoint, ...options }: TRPCEventHandlerOptions<TRouter>) => EventHandler;
|
|
6
6
|
//#endregion
|
|
@@ -1,17 +1,31 @@
|
|
|
1
1
|
import { DEFAULT_ENDPOINT } from "../constants.js";
|
|
2
|
-
import {
|
|
3
|
-
import { defineEventHandler } from "h3";
|
|
2
|
+
import { defineHandler } from "nitro/h3";
|
|
4
3
|
import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
|
|
5
4
|
//#region src/runtime/server/createTRPCEventHandler.ts
|
|
6
|
-
const
|
|
5
|
+
const NULL_BODY_STATUSES = /* @__PURE__ */ new Set([
|
|
6
|
+
204,
|
|
7
|
+
205,
|
|
8
|
+
304
|
|
9
|
+
]);
|
|
10
|
+
const createTRPCEventHandler = ({ createContext, endpoint = DEFAULT_ENDPOINT, ...options }) => defineHandler(async (event) => {
|
|
7
11
|
const response = await fetchRequestHandler({
|
|
8
12
|
...options,
|
|
9
13
|
createContext: createContext && ((fetchCreateContextOptions) => createContext(event, fetchCreateContextOptions)),
|
|
10
14
|
endpoint,
|
|
11
|
-
req:
|
|
15
|
+
req: event.req
|
|
16
|
+
});
|
|
17
|
+
const { status } = event.res;
|
|
18
|
+
if (!status) return response;
|
|
19
|
+
else if (!NULL_BODY_STATUSES.has(status)) return new Response(response.body, {
|
|
20
|
+
headers: response.headers,
|
|
21
|
+
status
|
|
22
|
+
});
|
|
23
|
+
const headers = new Headers(response.headers);
|
|
24
|
+
headers.delete("content-length");
|
|
25
|
+
return new Response(null, {
|
|
26
|
+
headers,
|
|
27
|
+
status
|
|
12
28
|
});
|
|
13
|
-
if (event.handled) return void 0;
|
|
14
|
-
return response;
|
|
15
29
|
});
|
|
16
30
|
//#endregion
|
|
17
31
|
export { createTRPCEventHandler };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AnyTRPCRouter, inferRouterContext } from "@trpc/server";
|
|
2
|
-
import { H3Event } from "h3";
|
|
2
|
+
import { H3Event } from "nitro/h3";
|
|
3
3
|
import { FetchCreateContextFnOptions } from "@trpc/server/adapters/fetch";
|
|
4
4
|
import { Promisable } from "type-fest";
|
|
5
5
|
import { HTTPBaseHandlerOptions } from "@trpc/server/http";
|
|
@@ -2,13 +2,13 @@ import { MODULE_NAME } from "../runtime/constants.js";
|
|
|
2
2
|
import { getImportStatement } from "./getImportStatement.js";
|
|
3
3
|
//#region src/services/getWebSocketHandlerTemplate.ts
|
|
4
4
|
const getWebSocketHandlerTemplate = (router, { keepAlive }, createContext) => [
|
|
5
|
-
`import {
|
|
6
|
-
`import {
|
|
5
|
+
`import { useNitroHooks } from "nitro/app";`,
|
|
6
|
+
`import { defineWebSocketHandler } from "nitro/h3";`,
|
|
7
7
|
`import { WEBSOCKET_CLOSE_HOOK, WEBSOCKET_OPEN_HOOK } from "${MODULE_NAME}/runtime/constants";`,
|
|
8
8
|
`import { createTRPCWebSocketHandler } from "${MODULE_NAME}/runtime/server/createTRPCWebSocketHandler";`,
|
|
9
9
|
getImportStatement(router, "router"),
|
|
10
10
|
createContext ? getImportStatement(createContext, "createContext") : "const createContext = () => ({});",
|
|
11
|
-
`const
|
|
11
|
+
`const nitroHooks = useNitroHooks();`,
|
|
12
12
|
`const { broadcastReconnectNotification, hooks } = createTRPCWebSocketHandler({`,
|
|
13
13
|
` createContext,`,
|
|
14
14
|
` keepAlive: ${JSON.stringify(keepAlive)},`,
|
|
@@ -5,7 +5,7 @@ const getWebSocketHooksTypeTemplate = ({ from, name }) => {
|
|
|
5
5
|
return [
|
|
6
6
|
`import type { inferRouterContext } from "@trpc/server";`,
|
|
7
7
|
`import type { TRPCWebSocketConnection } from "${MODULE_NAME}/runtime/server/models/TRPCWebSocketConnection";`,
|
|
8
|
-
`declare module "
|
|
8
|
+
`declare module "nitro/types" {`,
|
|
9
9
|
` interface NitroRuntimeHooks {`,
|
|
10
10
|
` ${JSON.stringify(WEBSOCKET_CLOSE_HOOK)}: (connection: ${connectionType}) => Promise<void> | void;`,
|
|
11
11
|
` ${JSON.stringify(WEBSOCKET_OPEN_HOOK)}: (connection: ${connectionType}) => Promise<void> | void;`,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trpc-nuxt-module",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "tRPC for Nuxt — a Nuxt module that registers your router's HTTP and WebSocket handlers, fetches through the request event during SSR, and decorates the typed client with useQuery, useMutation and useSubscription over useAsyncData.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nitro",
|
|
@@ -82,18 +82,18 @@
|
|
|
82
82
|
"typecheck": "tsc"
|
|
83
83
|
},
|
|
84
84
|
"dependencies": {
|
|
85
|
-
"@esposter/shared": "
|
|
86
|
-
"@nuxt/kit": "
|
|
87
|
-
"@nuxt/schema": "
|
|
85
|
+
"@esposter/shared": "4.0.0",
|
|
86
|
+
"@nuxt/kit": "npm:@nuxt/kit-nightly@5x",
|
|
87
|
+
"@nuxt/schema": "npm:@nuxt/schema-nightly@5x",
|
|
88
88
|
"ohash": "^2.0.12",
|
|
89
89
|
"type-fest": "^5.10.0"
|
|
90
90
|
},
|
|
91
91
|
"devDependencies": {
|
|
92
92
|
"@arethetypeswrong/core": "^0.18.5",
|
|
93
|
-
"@esposter/configuration": "
|
|
94
|
-
"@esposter/shared-node": "
|
|
95
|
-
"@nuxt/nitro-server": "
|
|
96
|
-
"@nuxt/test-utils": "^4.3.
|
|
93
|
+
"@esposter/configuration": "4.0.0",
|
|
94
|
+
"@esposter/shared-node": "4.0.0",
|
|
95
|
+
"@nuxt/nitro-server": "npm:@nuxt/nitro-server-nightly@5x",
|
|
96
|
+
"@nuxt/test-utils": "^4.3.3",
|
|
97
97
|
"@types/node": "^26.6.4",
|
|
98
98
|
"happy-dom": "^20.14.5",
|
|
99
99
|
"publint": "^0.3.25",
|
|
@@ -105,10 +105,10 @@
|
|
|
105
105
|
"peerDependencies": {
|
|
106
106
|
"@trpc/client": "^11.19.0",
|
|
107
107
|
"@trpc/server": "^11.19.0",
|
|
108
|
-
"crossws": "^0.4.
|
|
109
|
-
"
|
|
110
|
-
"nuxt": "
|
|
108
|
+
"crossws": "^0.4.15",
|
|
109
|
+
"nitro": "npm:nitro-nightly@latest",
|
|
110
|
+
"nuxt": "npm:nuxt-nightly@5x",
|
|
111
111
|
"vue": "^3.5.43"
|
|
112
112
|
},
|
|
113
|
-
"gitHead": "
|
|
113
|
+
"gitHead": "7667bc8c9a2b4e9dcacd6b845ee8cc9951250ae7"
|
|
114
114
|
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
//#region src/runtime/server/services/getRequestSignal.ts
|
|
2
|
-
const getRequestSignal = (event) => {
|
|
3
|
-
const abortController = new AbortController();
|
|
4
|
-
const { res } = event.node;
|
|
5
|
-
res.once("close", () => {
|
|
6
|
-
if (!res.writableFinished) abortController.abort();
|
|
7
|
-
});
|
|
8
|
-
return abortController.signal;
|
|
9
|
-
};
|
|
10
|
-
//#endregion
|
|
11
|
-
export { getRequestSignal };
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { getRequestSignal } from "./getRequestSignal.js";
|
|
2
|
-
import { getRequestHost, getRequestProtocol, isMethod, readRawBody } from "h3";
|
|
3
|
-
//#region src/runtime/server/services/toRequest.ts
|
|
4
|
-
const PAYLOAD_METHODS = [
|
|
5
|
-
"DELETE",
|
|
6
|
-
"PATCH",
|
|
7
|
-
"POST",
|
|
8
|
-
"PUT"
|
|
9
|
-
];
|
|
10
|
-
const toRequest = async (event) => {
|
|
11
|
-
const body = isMethod(event, PAYLOAD_METHODS) ? await readRawBody(event, false) : void 0;
|
|
12
|
-
return new Request(`${getRequestProtocol(event)}://${getRequestHost(event)}${event.path}`, {
|
|
13
|
-
body: body && new Uint8Array(body),
|
|
14
|
-
headers: event.headers,
|
|
15
|
-
method: event.method,
|
|
16
|
-
signal: getRequestSignal(event)
|
|
17
|
-
});
|
|
18
|
-
};
|
|
19
|
-
//#endregion
|
|
20
|
-
export { toRequest };
|