@orpc/server 0.0.0-next.31590a1 → 0.0.0-next.32cb70c

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.
Files changed (45) hide show
  1. package/dist/chunk-ESTRJAOX.js +299 -0
  2. package/dist/{chunk-NOA3GBJQ.js → chunk-KK4SDLC7.js} +9 -69
  3. package/dist/chunk-WUOGVGWG.js +1 -0
  4. package/dist/fetch.js +9 -12
  5. package/dist/hono.js +13 -25
  6. package/dist/index.js +2 -16
  7. package/dist/next.js +10 -13
  8. package/dist/node.js +61 -149
  9. package/dist/src/adapters/fetch/index.d.ts +4 -2
  10. package/dist/src/adapters/fetch/orpc-handler.d.ts +20 -0
  11. package/dist/src/adapters/fetch/orpc-payload-codec.d.ts +16 -0
  12. package/dist/src/adapters/fetch/orpc-procedure-matcher.d.ts +12 -0
  13. package/dist/src/adapters/fetch/super-json.d.ts +12 -0
  14. package/dist/src/adapters/fetch/types.d.ts +10 -2
  15. package/dist/src/adapters/hono/middleware.d.ts +2 -3
  16. package/dist/src/adapters/next/serve.d.ts +2 -3
  17. package/dist/src/adapters/node/index.d.ts +3 -2
  18. package/dist/src/adapters/node/orpc-handler.d.ts +12 -0
  19. package/dist/src/adapters/node/request-listener.d.ts +28 -0
  20. package/dist/src/adapters/node/types.d.ts +14 -13
  21. package/dist/src/implementer-variants.d.ts +5 -6
  22. package/dist/src/implementer.d.ts +6 -7
  23. package/dist/src/index.d.ts +1 -3
  24. package/package.json +3 -17
  25. package/dist/chunk-CVIWJKJC.js +0 -308
  26. package/dist/chunk-EYGVJA7A.js +0 -136
  27. package/dist/chunk-OXB4YX67.js +0 -111
  28. package/dist/plugins.js +0 -11
  29. package/dist/src/adapters/fetch/rpc-handler.d.ts +0 -10
  30. package/dist/src/adapters/fetch/utils.d.ts +0 -6
  31. package/dist/src/adapters/node/rpc-handler.d.ts +0 -10
  32. package/dist/src/adapters/node/utils.d.ts +0 -5
  33. package/dist/src/adapters/standard/handler.d.ts +0 -47
  34. package/dist/src/adapters/standard/index.d.ts +0 -7
  35. package/dist/src/adapters/standard/rpc-codec.d.ts +0 -15
  36. package/dist/src/adapters/standard/rpc-handler.d.ts +0 -8
  37. package/dist/src/adapters/standard/rpc-matcher.d.ts +0 -10
  38. package/dist/src/adapters/standard/rpc-serializer.d.ts +0 -16
  39. package/dist/src/adapters/standard/types.d.ts +0 -44
  40. package/dist/src/plugins/base.d.ts +0 -11
  41. package/dist/src/plugins/cors.d.ts +0 -18
  42. package/dist/src/plugins/index.d.ts +0 -4
  43. package/dist/src/plugins/response-headers.d.ts +0 -10
  44. package/dist/src/utils.d.ts +0 -24
  45. package/dist/standard.js +0 -17
package/dist/node.js CHANGED
@@ -1,175 +1,87 @@
1
1
  import {
2
- RPCCodec,
3
- RPCMatcher,
4
- StandardHandler
5
- } from "./chunk-CVIWJKJC.js";
6
- import "./chunk-NOA3GBJQ.js";
7
- import "./chunk-OXB4YX67.js";
2
+ RPCHandler
3
+ } from "./chunk-ESTRJAOX.js";
4
+ import "./chunk-KK4SDLC7.js";
8
5
 
9
- // src/adapters/node/utils.ts
10
- import { Buffer, File } from "node:buffer";
11
- import { Readable } from "node:stream";
12
- import { once } from "@orpc/shared";
13
- import cd from "content-disposition";
14
- function nodeHttpToStandardRequest(req, res) {
6
+ // src/adapters/node/request-listener.ts
7
+ function createRequest(req, res) {
8
+ const controller = new AbortController();
9
+ res.on("close", () => {
10
+ controller.abort();
11
+ });
15
12
  const method = req.method ?? "GET";
13
+ const headers = createHeaders(req);
16
14
  const protocol = "encrypted" in req.socket && req.socket.encrypted ? "https:" : "http:";
17
- const host = req.headers.host ?? "localhost";
15
+ const host = headers.get("Host") ?? "localhost";
18
16
  const url = new URL(req.originalUrl ?? req.url ?? "/", `${protocol}//${host}`);
19
- return {
20
- raw: { request: req, response: res },
21
- method,
22
- url,
23
- headers: req.headers,
24
- body: once(() => {
25
- return nodeHttpRequestToStandardBody(req);
26
- }),
27
- get signal() {
28
- const signal = nodeHttpResponseToAbortSignal(res);
29
- Object.defineProperty(this, "signal", { value: signal, writable: true });
30
- return signal;
31
- },
32
- set signal(value) {
33
- Object.defineProperty(this, "signal", { value, writable: true });
34
- }
35
- };
36
- }
37
- function nodeHttpResponseSendStandardResponse(res, standardResponse) {
38
- return new Promise((resolve, reject) => {
39
- res.on("error", reject);
40
- res.on("finish", resolve);
41
- if (standardResponse.body === void 0) {
42
- res.writeHead(standardResponse.status, standardResponse.headers);
43
- res.end();
44
- return;
45
- }
46
- if (standardResponse.body instanceof Blob) {
47
- const resHeaders = {
48
- ...standardResponse.headers,
49
- "content-type": standardResponse.body.type,
50
- "content-length": standardResponse.body.size.toString()
51
- };
52
- if (!standardResponse.headers["content-disposition"] && standardResponse.body instanceof Blob) {
53
- resHeaders["content-disposition"] = cd(standardResponse.body instanceof File ? standardResponse.body.name : "blob");
17
+ const init = { method, headers, signal: controller.signal };
18
+ if (method !== "GET" && method !== "HEAD") {
19
+ init.body = new ReadableStream({
20
+ start(controller2) {
21
+ req.on("data", (chunk) => {
22
+ controller2.enqueue(new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength));
23
+ });
24
+ req.on("end", () => {
25
+ controller2.close();
26
+ });
54
27
  }
55
- res.writeHead(standardResponse.status, resHeaders);
56
- Readable.fromWeb(
57
- standardResponse.body.stream()
58
- // Conflict between types=node and lib=dom so we need to cast it
59
- ).pipe(res);
60
- return;
61
- }
62
- if (standardResponse.body instanceof FormData) {
63
- const response = new Response(standardResponse.body);
64
- res.writeHead(standardResponse.status, {
65
- ...standardResponse.headers,
66
- "content-type": response.headers.get("content-type")
67
- });
68
- Readable.fromWeb(
69
- response.body
70
- // Conflict between types=node and lib=dom so we need to cast it
71
- ).pipe(res);
72
- return;
73
- }
74
- if (standardResponse.body instanceof URLSearchParams) {
75
- res.writeHead(standardResponse.status, {
76
- ...standardResponse.headers,
77
- "content-type": "application/x-www-form-urlencoded"
78
- });
79
- const string2 = standardResponse.body.toString();
80
- res.end(string2);
81
- return;
82
- }
83
- res.writeHead(standardResponse.status, {
84
- ...standardResponse.headers,
85
- "content-type": "application/json"
86
28
  });
87
- const string = JSON.stringify(standardResponse.body);
88
- res.end(string);
89
- });
90
- }
91
- async function nodeHttpRequestToStandardBody(req) {
92
- const method = req.method ?? "GET";
93
- if (method === "GET" || method === "HEAD") {
94
- return void 0;
95
- }
96
- const contentDisposition = req.headers["content-disposition"];
97
- const fileName = contentDisposition ? cd.parse(contentDisposition).parameters.filename : void 0;
98
- const contentType = req.headers["content-type"];
99
- if (fileName) {
100
- return await streamToFile(req, fileName, contentType || "application/octet-stream");
29
+ init.duplex = "half";
101
30
  }
102
- if (!contentType || contentType.startsWith("application/json")) {
103
- const text = await streamToString(req);
104
- if (!text) {
105
- return void 0;
106
- }
107
- return JSON.parse(text);
108
- }
109
- if (contentType.startsWith("multipart/form-data")) {
110
- return await streamToFormData(req, contentType);
111
- }
112
- if (contentType.startsWith("application/x-www-form-urlencoded")) {
113
- const text = await streamToString(req);
114
- return new URLSearchParams(text);
115
- }
116
- if (contentType.startsWith("text/")) {
117
- return await streamToString(req);
31
+ return new Request(url, init);
32
+ }
33
+ function createHeaders(req) {
34
+ const headers = new Headers();
35
+ const rawHeaders = req.rawHeaders;
36
+ for (let i = 0; i < rawHeaders.length; i += 2) {
37
+ headers.append(rawHeaders[i], rawHeaders[i + 1]);
118
38
  }
119
- return streamToFile(req, "blob", contentType);
39
+ return headers;
120
40
  }
121
- function streamToFormData(stream, contentType) {
122
- const response = new Response(stream, {
123
- // Conflict between types=node and lib=dom so we need to cast it
124
- headers: {
125
- "content-type": contentType
41
+ async function sendResponse(res, response) {
42
+ const headers = {};
43
+ for (const [key, value] of response.headers) {
44
+ if (key in headers) {
45
+ if (Array.isArray(headers[key])) {
46
+ headers[key].push(value);
47
+ } else {
48
+ headers[key] = [headers[key], value];
49
+ }
50
+ } else {
51
+ headers[key] = value;
126
52
  }
127
- });
128
- return response.formData();
129
- }
130
- async function streamToString(stream) {
131
- let string = "";
132
- for await (const chunk of stream) {
133
- string += chunk.toString();
134
53
  }
135
- return string;
136
- }
137
- async function streamToFile(stream, fileName, contentType) {
138
- const chunks = [];
139
- for await (const chunk of stream) {
140
- chunks.push(chunk);
54
+ res.writeHead(response.status, headers);
55
+ if (response.body != null && res.req.method !== "HEAD") {
56
+ for await (const chunk of response.body) {
57
+ res.write(chunk);
58
+ }
141
59
  }
142
- return new File([Buffer.concat(chunks)], fileName, { type: contentType });
143
- }
144
- function nodeHttpResponseToAbortSignal(res) {
145
- const controller = new AbortController();
146
- res.on("close", () => {
147
- controller.abort();
148
- });
149
- return controller.signal;
60
+ res.end();
150
61
  }
151
62
 
152
- // src/adapters/node/rpc-handler.ts
153
- var RPCHandler = class {
154
- standardHandler;
63
+ // src/adapters/node/orpc-handler.ts
64
+ var RPCHandler2 = class {
65
+ orpcFetchHandler;
155
66
  constructor(router, options) {
156
- const codec = options?.codec ?? new RPCCodec();
157
- const matcher = options?.matcher ?? new RPCMatcher();
158
- this.standardHandler = new StandardHandler(router, matcher, codec, options);
67
+ this.orpcFetchHandler = new RPCHandler(router, options);
159
68
  }
160
69
  async handle(req, res, ...rest) {
161
- const standardRequest = nodeHttpToStandardRequest(req, res);
162
- const result = await this.standardHandler.handle(standardRequest, ...rest);
163
- if (!result.matched) {
70
+ const request = createRequest(req, res);
71
+ const result = await this.orpcFetchHandler.handle(request, ...rest);
72
+ if (result.matched === false) {
164
73
  return { matched: false };
165
74
  }
166
- await nodeHttpResponseSendStandardResponse(res, result.response);
75
+ const context = rest[0]?.context ?? {};
76
+ await rest[0]?.beforeSend?.(result.response, context);
77
+ await sendResponse(res, result.response);
167
78
  return { matched: true };
168
79
  }
169
80
  };
170
81
  export {
171
- RPCHandler,
172
- nodeHttpResponseSendStandardResponse,
173
- nodeHttpToStandardRequest
82
+ RPCHandler2 as RPCHandler,
83
+ createHeaders,
84
+ createRequest,
85
+ sendResponse
174
86
  };
175
87
  //# sourceMappingURL=node.js.map
@@ -1,4 +1,6 @@
1
- export * from './rpc-handler';
1
+ export * from './orpc-handler';
2
+ export * from './orpc-payload-codec';
3
+ export * from './orpc-procedure-matcher';
4
+ export * as SuperJSON from './super-json';
2
5
  export * from './types';
3
- export * from './utils';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,20 @@
1
+ import type { Hooks } from '@orpc/shared';
2
+ import type { Context } from '../../context';
3
+ import type { Router } from '../../router';
4
+ import type { FetchHandler, FetchHandleRest, FetchHandleResult } from './types';
5
+ import { type PublicORPCPayloadCodec } from './orpc-payload-codec';
6
+ import { type PublicORPCProcedureMatcher } from './orpc-procedure-matcher';
7
+ export type RPCHandlerOptions<T extends Context> = Hooks<Request, FetchHandleResult, T, {
8
+ signal?: AbortSignal;
9
+ }> & {
10
+ procedureMatcher?: PublicORPCProcedureMatcher;
11
+ payloadCodec?: PublicORPCPayloadCodec;
12
+ };
13
+ export declare class RPCHandler<T extends Context> implements FetchHandler<T> {
14
+ private readonly options?;
15
+ private readonly procedureMatcher;
16
+ private readonly payloadCodec;
17
+ constructor(router: Router<T, any>, options?: NoInfer<RPCHandlerOptions<T>> | undefined);
18
+ handle(request: Request, ...[options]: FetchHandleRest<T>): Promise<FetchHandleResult>;
19
+ }
20
+ //# sourceMappingURL=orpc-handler.d.ts.map
@@ -0,0 +1,16 @@
1
+ import { type HTTPMethod } from '@orpc/contract';
2
+ export declare class ORPCPayloadCodec {
3
+ /**
4
+ * If method is GET, the payload will be encoded as query string.
5
+ * If method is GET and payload contain file, the method will be fallback to fallbackMethod. (fallbackMethod = GET will force to use GET method)
6
+ */
7
+ encode(payload: unknown, method?: HTTPMethod, fallbackMethod?: HTTPMethod): {
8
+ query?: URLSearchParams;
9
+ body?: FormData | string;
10
+ headers?: Headers;
11
+ method: HTTPMethod;
12
+ };
13
+ decode(re: Request | Response): Promise<unknown>;
14
+ }
15
+ export type PublicORPCPayloadCodec = Pick<ORPCPayloadCodec, keyof ORPCPayloadCodec>;
16
+ //# sourceMappingURL=orpc-payload-codec.d.ts.map
@@ -0,0 +1,12 @@
1
+ import type { AnyProcedure } from '../../procedure';
2
+ import type { AnyRouter } from '../../router';
3
+ export declare class ORPCProcedureMatcher {
4
+ private readonly router;
5
+ constructor(router: AnyRouter);
6
+ match(pathname: string): Promise<{
7
+ path: string[];
8
+ procedure: AnyProcedure;
9
+ } | undefined>;
10
+ }
11
+ export type PublicORPCProcedureMatcher = Pick<ORPCProcedureMatcher, keyof ORPCProcedureMatcher>;
12
+ //# sourceMappingURL=orpc-procedure-matcher.d.ts.map
@@ -0,0 +1,12 @@
1
+ import type { Segment } from '@orpc/shared';
2
+ export type JSONExtraType = 'bigint' | 'date' | 'nan' | 'undefined' | 'set' | 'map' | 'regexp' | 'url';
3
+ export type JSONMeta = [JSONExtraType, Segment[]][];
4
+ export declare function serialize(value: unknown, segments?: Segment[], meta?: JSONMeta): {
5
+ data: unknown;
6
+ meta: JSONMeta;
7
+ };
8
+ export declare function deserialize({ data, meta, }: {
9
+ data: unknown;
10
+ meta: JSONMeta;
11
+ }): unknown;
12
+ //# sourceMappingURL=super-json.d.ts.map
@@ -1,5 +1,13 @@
1
+ import type { HTTPPath } from '@orpc/contract';
1
2
  import type { Context } from '../../context';
2
- import type { StandardHandleRest } from '../standard';
3
+ export type FetchHandleOptions<T extends Context> = {
4
+ prefix?: HTTPPath;
5
+ } & (Record<never, never> extends T ? {
6
+ context?: T;
7
+ } : {
8
+ context: T;
9
+ });
10
+ export type FetchHandleRest<T extends Context> = [options: FetchHandleOptions<T>] | (Record<never, never> extends T ? [] : never);
3
11
  export type FetchHandleResult = {
4
12
  matched: true;
5
13
  response: Response;
@@ -8,6 +16,6 @@ export type FetchHandleResult = {
8
16
  response: undefined;
9
17
  };
10
18
  export interface FetchHandler<T extends Context> {
11
- handle(request: Request, ...rest: StandardHandleRest<T>): Promise<FetchHandleResult>;
19
+ handle(request: Request, ...rest: FetchHandleRest<T>): Promise<FetchHandleResult>;
12
20
  }
13
21
  //# sourceMappingURL=types.d.ts.map
@@ -1,9 +1,8 @@
1
1
  import type { Context as HonoContext, MiddlewareHandler } from 'hono';
2
2
  import type { Context } from '../../context';
3
- import type { FetchHandler } from '../fetch';
4
- import type { StandardHandleOptions } from '../standard';
3
+ import type { FetchHandleOptions, FetchHandler } from '../fetch';
5
4
  import { type Value } from '@orpc/shared';
6
- export type CreateMiddlewareOptions<T extends Context> = Omit<StandardHandleOptions<T>, 'context'> & (Record<never, never> extends T ? {
5
+ export type CreateMiddlewareOptions<T extends Context> = Omit<FetchHandleOptions<T>, 'context'> & (Record<never, never> extends T ? {
7
6
  context?: Value<T, [HonoContext]>;
8
7
  } : {
9
8
  context: Value<T, [HonoContext]>;
@@ -1,9 +1,8 @@
1
1
  import type { NextRequest } from 'next/server';
2
2
  import type { Context } from '../../context';
3
- import type { FetchHandler } from '../fetch';
4
- import type { StandardHandleOptions } from '../standard';
3
+ import type { FetchHandleOptions, FetchHandler } from '../fetch';
5
4
  import { type Value } from '@orpc/shared';
6
- export type ServeOptions<T extends Context> = Omit<StandardHandleOptions<T>, 'context'> & (Record<never, never> extends T ? {
5
+ export type ServeOptions<T extends Context> = Omit<FetchHandleOptions<T>, 'context'> & (Record<never, never> extends T ? {
7
6
  context?: Value<T, [NextRequest]>;
8
7
  } : {
9
8
  context: Value<T, [NextRequest]>;
@@ -1,4 +1,5 @@
1
- export * from './rpc-handler';
1
+ export * from './orpc-handler';
2
+ export * from './orpc-handler';
3
+ export * from './request-listener';
2
4
  export * from './types';
3
- export * from './utils';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,12 @@
1
+ import type { ServerResponse } from 'node:http';
2
+ import type { Context } from '../../context';
3
+ import type { Router } from '../../router';
4
+ import type { RPCHandlerOptions } from '../fetch/orpc-handler';
5
+ import type { RequestHandler, RequestHandleRest, RequestHandleResult } from './types';
6
+ import { type ExpressableIncomingMessage } from './request-listener';
7
+ export declare class RPCHandler<T extends Context> implements RequestHandler<T> {
8
+ private readonly orpcFetchHandler;
9
+ constructor(router: Router<T, any>, options?: NoInfer<RPCHandlerOptions<T>>);
10
+ handle(req: ExpressableIncomingMessage, res: ServerResponse, ...rest: RequestHandleRest<T>): Promise<RequestHandleResult>;
11
+ }
12
+ //# sourceMappingURL=orpc-handler.d.ts.map
@@ -0,0 +1,28 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ export interface ExpressableIncomingMessage extends IncomingMessage {
3
+ originalUrl?: string;
4
+ }
5
+ /**
6
+ * Creates a [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) object from a Node.js
7
+ * [`IncomingMessage`](https://nodejs.org/api/http.html#class-httpincomingmessage) and
8
+ * [`http.ServerResponse`](https://nodejs.org/api/http.html#class-httpserverresponse) pair.
9
+ *
10
+ */
11
+ export declare function createRequest(req: ExpressableIncomingMessage, res: ServerResponse): Request;
12
+ /**
13
+ * Creates a [`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers) object from the headers
14
+ * in a Node.js [`IncomingMessage`](https://nodejs.org/api/http.html#class-httpincomingmessage).
15
+ *
16
+ * @param req The incoming request object.
17
+ * @returns A headers object.
18
+ */
19
+ export declare function createHeaders(req: IncomingMessage): Headers;
20
+ /**
21
+ * Sends a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) to the client using the
22
+ * Node.js [`http.ServerResponse`](https://nodejs.org/api/http.html#class-httpserverresponse) object.
23
+ *
24
+ * @param res The server response object.
25
+ * @param response The response to send.
26
+ */
27
+ export declare function sendResponse(res: ServerResponse, response: Response): Promise<void>;
28
+ //# sourceMappingURL=request-listener.d.ts.map
@@ -1,21 +1,22 @@
1
+ import type { HTTPPath } from '@orpc/contract';
2
+ import type { Promisable } from '@orpc/shared';
1
3
  import type { IncomingMessage, ServerResponse } from 'node:http';
2
- import type { Http2ServerRequest, Http2ServerResponse } from 'node:http2';
3
4
  import type { Context } from '../../context';
4
- import type { StandardHandleRest } from '../standard';
5
- export type NodeHttpRequest = (IncomingMessage | Http2ServerRequest) & {
6
- /**
7
- * Replace `req.url` with `req.originalUrl` when `req.originalUrl` is available.
8
- * This is useful for `express.js` middleware.
9
- */
10
- originalUrl?: string;
11
- };
12
- export type NodeHttpResponse = ServerResponse | Http2ServerResponse;
13
- export type NodeHttpHandleResult = {
5
+ export type RequestHandleOptions<T extends Context> = {
6
+ prefix?: HTTPPath;
7
+ beforeSend?(response: Response, context: T): Promisable<void>;
8
+ } & (Record<never, never> extends T ? {
9
+ context?: T;
10
+ } : {
11
+ context: T;
12
+ });
13
+ export type RequestHandleRest<T extends Context> = [options: RequestHandleOptions<T>] | (Record<never, never> extends T ? [] : never);
14
+ export type RequestHandleResult = {
14
15
  matched: true;
15
16
  } | {
16
17
  matched: false;
17
18
  };
18
- export interface NodeHttpHandler<T extends Context> {
19
- handle(req: NodeHttpRequest, res: NodeHttpResponse, ...rest: StandardHandleRest<T>): Promise<NodeHttpHandleResult>;
19
+ export interface RequestHandler<T extends Context> {
20
+ handle(req: IncomingMessage, res: ServerResponse, ...rest: RequestHandleRest<T>): Promise<RequestHandleResult>;
20
21
  }
21
22
  //# sourceMappingURL=types.d.ts.map
@@ -1,17 +1,16 @@
1
- import type { AnyContractRouter, ContractProcedure, ContractRouterToErrorMap, ContractRouterToMeta, ORPCErrorConstructorMap } from '@orpc/contract';
1
+ import type { AnyContractRouter, ContractProcedure, ContractRouter, ContractRouterToErrorMap, ORPCErrorConstructorMap } from '@orpc/contract';
2
2
  import type { ConflictContextGuard, Context, MergedContext } from './context';
3
3
  import type { ProcedureImplementer } from './implementer-procedure';
4
4
  import type { FlattenLazy } from './lazy-utils';
5
5
  import type { Middleware } from './middleware';
6
6
  import type { AdaptedRouter, Router } from './router';
7
- export interface RouterImplementerWithMiddlewares<TContract extends AnyContractRouter, TInitialContext extends Context, TCurrentContext extends Context> {
8
- use<U extends Context>(middleware: Middleware<TCurrentContext, U, unknown, unknown, ORPCErrorConstructorMap<ContractRouterToErrorMap<TContract>>, ContractRouterToMeta<TContract>>): ConflictContextGuard<MergedContext<TCurrentContext, U>> & ImplementerInternalWithMiddlewares<TContract, TInitialContext, MergedContext<TCurrentContext, U>>;
7
+ export type ImplementerInternalWithMiddlewares<TContract extends AnyContractRouter, TInitialContext extends Context, TCurrentContext extends Context> = (TContract extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrorMap, infer UMeta> ? ProcedureImplementer<TInitialContext, TCurrentContext, UInputSchema, UOutputSchema, UErrorMap, UMeta> : TContract extends ContractRouter<infer UMeta> ? {
8
+ use<U extends Context>(middleware: Middleware<TCurrentContext, U, unknown, unknown, ORPCErrorConstructorMap<ContractRouterToErrorMap<TContract>>, UMeta>): ConflictContextGuard<MergedContext<TCurrentContext, U>> & ImplementerInternalWithMiddlewares<TContract, TInitialContext, MergedContext<TCurrentContext, U>>;
9
9
  router<U extends Router<TCurrentContext, TContract>>(router: U): AdaptedRouter<U, TInitialContext, Record<never, never>>;
10
10
  lazy<U extends Router<TInitialContext, TContract>>(loader: () => Promise<{
11
11
  default: U;
12
12
  }>): AdaptedRouter<FlattenLazy<U>, TInitialContext, Record<never, never>>;
13
- }
14
- export type ImplementerInternalWithMiddlewares<TContract extends AnyContractRouter, TInitialContext extends Context, TCurrentContext extends Context> = (TContract extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrorMap, infer UMeta> ? ProcedureImplementer<TInitialContext, TCurrentContext, UInputSchema, UOutputSchema, UErrorMap, UMeta> : RouterImplementerWithMiddlewares<TContract, TInitialContext, TCurrentContext> & {
13
+ } & {
15
14
  [K in keyof TContract]: TContract[K] extends AnyContractRouter ? ImplementerInternalWithMiddlewares<TContract[K], TInitialContext, TCurrentContext> : never;
16
- });
15
+ } : never);
17
16
  //# sourceMappingURL=implementer-variants.d.ts.map
@@ -1,4 +1,4 @@
1
- import type { AnyContractRouter, ContractProcedure, ContractRouterToErrorMap, ContractRouterToMeta, ORPCErrorConstructorMap } from '@orpc/contract';
1
+ import type { AnyContractRouter, ContractProcedure, ContractRouter, ContractRouterToErrorMap, ContractRouterToMeta, ORPCErrorConstructorMap } from '@orpc/contract';
2
2
  import type { ConflictContextGuard, Context, MergedContext } from './context';
3
3
  import type { ProcedureImplementer } from './implementer-procedure';
4
4
  import type { ImplementerInternalWithMiddlewares } from './implementer-variants';
@@ -7,18 +7,17 @@ import { type BuilderConfig } from './builder';
7
7
  import { type FlattenLazy } from './lazy-utils';
8
8
  import { type DecoratedMiddleware } from './middleware-decorated';
9
9
  import { type AdaptedRouter, type Router } from './router';
10
- export interface RouterImplementer<TContract extends AnyContractRouter, TInitialContext extends Context, TCurrentContext extends Context> {
10
+ export type ImplementerInternal<TContract extends AnyContractRouter, TInitialContext extends Context, TCurrentContext extends Context> = (TContract extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrorMap, infer UMeta> ? ProcedureImplementer<TInitialContext, TCurrentContext, UInputSchema, UOutputSchema, UErrorMap, UMeta> : TContract extends ContractRouter<infer UMeta> ? {
11
11
  middleware<UOutContext extends Context, TInput, TOutput = any>(// = any here is important to make middleware can be used in any output by default
12
- middleware: Middleware<TCurrentContext, UOutContext, TInput, TOutput, ORPCErrorConstructorMap<ContractRouterToErrorMap<TContract>>, ContractRouterToMeta<TContract>>): DecoratedMiddleware<TCurrentContext, UOutContext, TInput, TOutput, ORPCErrorConstructorMap<any>, ContractRouterToMeta<TContract>>;
13
- use<U extends Context>(middleware: Middleware<TCurrentContext, U, unknown, unknown, ORPCErrorConstructorMap<ContractRouterToErrorMap<TContract>>, ContractRouterToMeta<TContract>>): ConflictContextGuard<MergedContext<TCurrentContext, U>> & ImplementerInternalWithMiddlewares<TContract, TInitialContext, MergedContext<TCurrentContext, U>>;
12
+ middleware: Middleware<TCurrentContext, UOutContext, TInput, TOutput, ORPCErrorConstructorMap<ContractRouterToErrorMap<TContract>>, ContractRouterToMeta<TContract>>): DecoratedMiddleware<TCurrentContext, UOutContext, TInput, TOutput, ORPCErrorConstructorMap<any>, UMeta>;
13
+ use<U extends Context>(middleware: Middleware<TCurrentContext, U, unknown, unknown, ORPCErrorConstructorMap<ContractRouterToErrorMap<TContract>>, UMeta>): ConflictContextGuard<MergedContext<TCurrentContext, U>> & ImplementerInternalWithMiddlewares<TContract, TInitialContext, MergedContext<TCurrentContext, U>>;
14
14
  router<U extends Router<TCurrentContext, TContract>>(router: U): AdaptedRouter<U, TInitialContext, Record<never, never>>;
15
15
  lazy<U extends Router<TCurrentContext, TContract>>(loader: () => Promise<{
16
16
  default: U;
17
17
  }>): AdaptedRouter<FlattenLazy<U>, TInitialContext, Record<never, never>>;
18
- }
19
- export type ImplementerInternal<TContract extends AnyContractRouter, TInitialContext extends Context, TCurrentContext extends Context> = (TContract extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrorMap, infer UMeta> ? ProcedureImplementer<TInitialContext, TCurrentContext, UInputSchema, UOutputSchema, UErrorMap, UMeta> : RouterImplementer<TContract, TInitialContext, TCurrentContext> & {
18
+ } & {
20
19
  [K in keyof TContract]: TContract[K] extends AnyContractRouter ? ImplementerInternal<TContract[K], TInitialContext, TCurrentContext> : never;
21
- });
20
+ } : never);
22
21
  export declare function implementerInternal<TContract extends AnyContractRouter, TInitialContext extends Context, TCurrentContext extends Context>(contract: TContract, config: BuilderConfig, middlewares: AnyMiddleware[]): ImplementerInternal<TContract, TInitialContext, TCurrentContext>;
23
22
  export type Implementer<TContract extends AnyContractRouter, TInitialContext extends Context, TCurrentContext extends Context> = {
24
23
  $context<U extends Context>(): Implementer<TContract, U, U>;
@@ -17,7 +17,5 @@ export * from './procedure-utils';
17
17
  export * from './router';
18
18
  export * from './router-accessible-lazy';
19
19
  export * from './router-client';
20
- export * from './utils';
21
- export { isDefinedError, ORPCError, safe, type, ValidationError } from '@orpc/contract';
22
- export { onError, onFinish, onStart, onSuccess } from '@orpc/shared';
20
+ export { isDefinedError, ORPCError, safe, type } from '@orpc/contract';
23
21
  //# sourceMappingURL=index.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orpc/server",
3
3
  "type": "module",
4
- "version": "0.0.0-next.31590a1",
4
+ "version": "0.0.0-next.32cb70c",
5
5
  "license": "MIT",
6
6
  "homepage": "https://orpc.unnoq.com",
7
7
  "repository": {
@@ -19,16 +19,6 @@
19
19
  "import": "./dist/index.js",
20
20
  "default": "./dist/index.js"
21
21
  },
22
- "./plugins": {
23
- "types": "./dist/src/plugins/index.d.ts",
24
- "import": "./dist/plugins.js",
25
- "default": "./dist/plugins.js"
26
- },
27
- "./standard": {
28
- "types": "./dist/src/adapters/standard/index.d.ts",
29
- "import": "./dist/standard.js",
30
- "default": "./dist/standard.js"
31
- },
32
22
  "./fetch": {
33
23
  "types": "./dist/src/adapters/fetch/index.d.ts",
34
24
  "import": "./dist/fetch.js",
@@ -63,12 +53,8 @@
63
53
  "next": ">=14.0.0"
64
54
  },
65
55
  "dependencies": {
66
- "content-disposition": "^0.5.4",
67
- "@orpc/contract": "0.0.0-next.31590a1",
68
- "@orpc/shared": "0.0.0-next.31590a1"
69
- },
70
- "devDependencies": {
71
- "light-my-request": "^6.5.1"
56
+ "@orpc/contract": "0.0.0-next.32cb70c",
57
+ "@orpc/shared": "0.0.0-next.32cb70c"
72
58
  },
73
59
  "scripts": {
74
60
  "build": "tsup --onSuccess='tsc -b --noCheck'",