trpc-nuxt-module 3.8.1 → 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 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: ">=4.0.0" },
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, endpoint, resolvedCreateContext)
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.experimental = {
42
- ...nuxt.options.nitro.experimental,
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.fetch;
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(unsubscribe);
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, EventHandlerRequest } from "h3";
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<EventHandlerRequest, Promise<Response | undefined>>;
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 { toRequest } from "./services/toRequest.js";
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 createTRPCEventHandler = ({ createContext, endpoint = DEFAULT_ENDPOINT, ...options }) => defineEventHandler(async (event) => {
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: await toRequest(event)
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 { defineWebSocketHandler } from "h3";`,
6
- `import { useNitroApp } from "nitropack/runtime";`,
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 { hooks: nitroHooks } = useNitroApp();`,
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 "nitropack/types" {`,
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.8.1",
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,21 +82,21 @@
82
82
  "typecheck": "tsc"
83
83
  },
84
84
  "dependencies": {
85
- "@esposter/shared": "3.8.1",
86
- "@nuxt/kit": "^4.5.2",
87
- "@nuxt/schema": "^4.5.2",
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": "3.8.1",
94
- "@esposter/shared-node": "3.8.1",
95
- "@nuxt/nitro-server": "^4.5.2",
96
- "@nuxt/test-utils": "^4.3.2",
97
- "@types/node": "^26.6.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
+ "@types/node": "^26.6.4",
98
98
  "happy-dom": "^20.14.5",
99
- "publint": "^0.3.24",
99
+ "publint": "^0.3.25",
100
100
  "superjson": "^2.2.6",
101
101
  "tsdown": "^0.23.0",
102
102
  "vitest": "^5.0.3",
@@ -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.12",
109
- "h3": "^1.15.11",
110
- "nuxt": "^4.5.2",
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": "1cc0b24081a5fd56ec0c57b784f978f1ad0df0f4"
113
+ "gitHead": "7667bc8c9a2b4e9dcacd6b845ee8cc9951250ae7"
114
114
  }
@@ -1,4 +0,0 @@
1
- import { H3Event } from "h3";
2
- //#region src/runtime/server/services/getRequestSignal.d.ts
3
- export declare const getRequestSignal: (event: H3Event) => AbortSignal;
4
- //#endregion
@@ -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,4 +0,0 @@
1
- import { H3Event } from "h3";
2
- //#region src/runtime/server/services/toRequest.d.ts
3
- export declare const toRequest: (event: H3Event) => Promise<Request>;
4
- //#endregion
@@ -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 };