@orpc/server 0.0.0-next.97446ff → 0.0.0-next.9b3a030
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/{chunk-FN62GL22.js → chunk-DNG2IB3R.js} +74 -29
- package/dist/chunk-V3I7RIRY.js +302 -0
- package/dist/chunk-WUOGVGWG.js +1 -0
- package/dist/fetch.js +11 -108
- package/dist/hono.js +30 -0
- package/dist/index.js +44 -17
- package/dist/next.js +36 -0
- package/dist/node.js +87 -0
- package/dist/src/adapters/fetch/index.d.ts +6 -0
- package/dist/src/adapters/fetch/orpc-handler.d.ts +20 -0
- package/dist/src/adapters/fetch/orpc-payload-codec.d.ts +16 -0
- package/dist/src/adapters/fetch/orpc-procedure-matcher.d.ts +12 -0
- package/dist/src/adapters/fetch/super-json.d.ts +12 -0
- package/dist/src/adapters/fetch/types.d.ts +21 -0
- package/dist/src/adapters/hono/index.d.ts +3 -0
- package/dist/src/adapters/hono/middleware.d.ts +12 -0
- package/dist/src/adapters/next/index.d.ts +3 -0
- package/dist/src/adapters/next/serve.d.ts +19 -0
- package/dist/src/adapters/node/index.d.ts +5 -0
- package/dist/src/adapters/node/orpc-handler.d.ts +12 -0
- package/dist/src/adapters/node/request-listener.d.ts +28 -0
- package/dist/src/adapters/node/types.d.ts +22 -0
- package/dist/src/builder.d.ts +10 -9
- package/dist/src/error.d.ts +10 -0
- package/dist/src/implementer-chainable.d.ts +2 -2
- package/dist/src/index.d.ts +2 -1
- package/dist/src/lazy-decorated.d.ts +2 -2
- package/dist/src/middleware-decorated.d.ts +6 -5
- package/dist/src/middleware.d.ts +20 -8
- package/dist/src/procedure-builder.d.ts +16 -14
- package/dist/src/procedure-client.d.ts +14 -9
- package/dist/src/procedure-decorated.d.ts +10 -9
- package/dist/src/procedure-implementer.d.ts +12 -11
- package/dist/src/procedure.d.ts +33 -13
- package/dist/src/router-builder.d.ts +3 -3
- package/dist/src/router-client.d.ts +4 -4
- package/dist/src/router-implementer.d.ts +2 -2
- package/dist/src/router.d.ts +3 -3
- package/dist/src/types.d.ts +2 -0
- package/package.json +22 -10
- package/dist/src/fetch/handle-request.d.ts +0 -7
- package/dist/src/fetch/index.d.ts +0 -4
- package/dist/src/fetch/orpc-handler.d.ts +0 -3
- package/dist/src/fetch/types.d.ts +0 -28
package/dist/index.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import {
|
2
2
|
LAZY_LOADER_SYMBOL,
|
3
3
|
Procedure,
|
4
|
+
createORPCErrorConstructorMap,
|
4
5
|
createProcedureClient,
|
5
6
|
flatLazy,
|
6
7
|
getRouterChild,
|
@@ -9,7 +10,7 @@ import {
|
|
9
10
|
lazy,
|
10
11
|
mergeContext,
|
11
12
|
unlazy
|
12
|
-
} from "./chunk-
|
13
|
+
} from "./chunk-DNG2IB3R.js";
|
13
14
|
|
14
15
|
// src/builder.ts
|
15
16
|
import { ContractProcedure } from "@orpc/contract";
|
@@ -23,17 +24,17 @@ function decorateMiddleware(middleware) {
|
|
23
24
|
const decorated = middleware;
|
24
25
|
decorated.mapInput = (mapInput) => {
|
25
26
|
const mapped = decorateMiddleware(
|
26
|
-
(input, ...rest) => middleware(mapInput(input), ...rest)
|
27
|
+
(options, input, ...rest) => middleware(options, mapInput(input), ...rest)
|
27
28
|
);
|
28
29
|
return mapped;
|
29
30
|
};
|
30
31
|
decorated.concat = (concatMiddleware, mapInput) => {
|
31
32
|
const mapped = mapInput ? decorateMiddleware(concatMiddleware).mapInput(mapInput) : concatMiddleware;
|
32
|
-
const concatted = decorateMiddleware((
|
33
|
-
const next = async (
|
34
|
-
return mapped(
|
33
|
+
const concatted = decorateMiddleware((options, input, output, ...rest) => {
|
34
|
+
const next = async (nextOptions) => {
|
35
|
+
return mapped({ ...options, context: mergeContext(nextOptions.context, options.context) }, input, output, ...rest);
|
35
36
|
};
|
36
|
-
const merged = middleware(
|
37
|
+
const merged = middleware({ ...options, next }, input, output, ...rest);
|
37
38
|
return merged;
|
38
39
|
});
|
39
40
|
return concatted;
|
@@ -110,11 +111,11 @@ var ProcedureImplementer = class _ProcedureImplementer {
|
|
110
111
|
middlewares: [...this["~orpc"].middlewares ?? [], mappedMiddleware]
|
111
112
|
});
|
112
113
|
}
|
113
|
-
|
114
|
+
handler(handler) {
|
114
115
|
return decorateProcedure(new Procedure({
|
115
116
|
middlewares: this["~orpc"].middlewares,
|
116
117
|
contract: this["~orpc"].contract,
|
117
|
-
|
118
|
+
handler
|
118
119
|
}));
|
119
120
|
}
|
120
121
|
};
|
@@ -346,6 +347,12 @@ var ProcedureBuilder = class _ProcedureBuilder {
|
|
346
347
|
contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).output(schema, example)
|
347
348
|
});
|
348
349
|
}
|
350
|
+
errors(errors) {
|
351
|
+
return new _ProcedureBuilder({
|
352
|
+
...this["~orpc"],
|
353
|
+
contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).errors(errors)
|
354
|
+
});
|
355
|
+
}
|
349
356
|
use(middleware, mapInput) {
|
350
357
|
if (!mapInput) {
|
351
358
|
return new ProcedureImplementer({
|
@@ -358,11 +365,11 @@ var ProcedureBuilder = class _ProcedureBuilder {
|
|
358
365
|
middlewares: this["~orpc"].middlewares
|
359
366
|
}).use(middleware, mapInput);
|
360
367
|
}
|
361
|
-
|
368
|
+
handler(handler) {
|
362
369
|
return decorateProcedure(new Procedure({
|
363
370
|
middlewares: this["~orpc"].middlewares,
|
364
371
|
contract: this["~orpc"].contract,
|
365
|
-
|
372
|
+
handler
|
366
373
|
}));
|
367
374
|
}
|
368
375
|
};
|
@@ -392,7 +399,8 @@ var Builder = class _Builder {
|
|
392
399
|
contract: new ContractProcedure({
|
393
400
|
route,
|
394
401
|
InputSchema: void 0,
|
395
|
-
OutputSchema: void 0
|
402
|
+
OutputSchema: void 0,
|
403
|
+
errorMap: void 0
|
396
404
|
})
|
397
405
|
});
|
398
406
|
}
|
@@ -402,7 +410,8 @@ var Builder = class _Builder {
|
|
402
410
|
contract: new ContractProcedure({
|
403
411
|
OutputSchema: void 0,
|
404
412
|
InputSchema: schema,
|
405
|
-
inputExample: example
|
413
|
+
inputExample: example,
|
414
|
+
errorMap: void 0
|
406
415
|
})
|
407
416
|
});
|
408
417
|
}
|
@@ -412,18 +421,30 @@ var Builder = class _Builder {
|
|
412
421
|
contract: new ContractProcedure({
|
413
422
|
InputSchema: void 0,
|
414
423
|
OutputSchema: schema,
|
415
|
-
outputExample: example
|
424
|
+
outputExample: example,
|
425
|
+
errorMap: void 0
|
426
|
+
})
|
427
|
+
});
|
428
|
+
}
|
429
|
+
errors(errors) {
|
430
|
+
return new ProcedureBuilder({
|
431
|
+
middlewares: this["~orpc"].middlewares,
|
432
|
+
contract: new ContractProcedure({
|
433
|
+
InputSchema: void 0,
|
434
|
+
OutputSchema: void 0,
|
435
|
+
errorMap: errors
|
416
436
|
})
|
417
437
|
});
|
418
438
|
}
|
419
|
-
|
439
|
+
handler(handler) {
|
420
440
|
return decorateProcedure(new Procedure({
|
421
441
|
middlewares: this["~orpc"].middlewares,
|
422
442
|
contract: new ContractProcedure({
|
423
443
|
InputSchema: void 0,
|
424
|
-
OutputSchema: void 0
|
444
|
+
OutputSchema: void 0,
|
445
|
+
errorMap: void 0
|
425
446
|
}),
|
426
|
-
|
447
|
+
handler
|
427
448
|
}));
|
428
449
|
}
|
429
450
|
prefix(prefix) {
|
@@ -486,32 +507,38 @@ function createRouterClient(options) {
|
|
486
507
|
}
|
487
508
|
|
488
509
|
// src/index.ts
|
489
|
-
|
510
|
+
import { configGlobal, fallbackToGlobalConfig, isDefinedError, ORPCError, safe } from "@orpc/contract";
|
490
511
|
var os = new Builder({});
|
491
512
|
export {
|
492
513
|
Builder,
|
493
514
|
LAZY_LOADER_SYMBOL,
|
515
|
+
ORPCError,
|
494
516
|
Procedure,
|
495
517
|
ProcedureBuilder,
|
496
518
|
ProcedureImplementer,
|
497
519
|
RouterBuilder,
|
498
520
|
RouterImplementer,
|
521
|
+
configGlobal,
|
499
522
|
createChainableImplementer,
|
523
|
+
createORPCErrorConstructorMap,
|
500
524
|
createProcedureClient,
|
501
525
|
createRouterClient,
|
502
526
|
decorateLazy,
|
503
527
|
decorateMiddleware,
|
504
528
|
decorateProcedure,
|
505
529
|
deepSetLazyRouterPrefix,
|
530
|
+
fallbackToGlobalConfig,
|
506
531
|
flatLazy,
|
507
532
|
getLazyRouterPrefix,
|
508
533
|
getRouterChild,
|
509
534
|
getRouterContract,
|
535
|
+
isDefinedError,
|
510
536
|
isLazy,
|
511
537
|
isProcedure,
|
512
538
|
lazy,
|
513
539
|
mergeContext,
|
514
540
|
os,
|
541
|
+
safe,
|
515
542
|
setRouterContract,
|
516
543
|
unlazy
|
517
544
|
};
|
package/dist/next.js
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
import "./chunk-WUOGVGWG.js";
|
2
|
+
import {
|
3
|
+
ORPCHandler,
|
4
|
+
ORPCPayloadCodec,
|
5
|
+
ORPCProcedureMatcher,
|
6
|
+
super_json_exports
|
7
|
+
} from "./chunk-V3I7RIRY.js";
|
8
|
+
import "./chunk-DNG2IB3R.js";
|
9
|
+
|
10
|
+
// src/adapters/next/serve.ts
|
11
|
+
import { value } from "@orpc/shared";
|
12
|
+
function serve(handler, ...[options]) {
|
13
|
+
const main = async (req) => {
|
14
|
+
const context = await value(options?.context, req);
|
15
|
+
const { matched, response } = await handler.handle(req, { ...options, context });
|
16
|
+
if (matched) {
|
17
|
+
return response;
|
18
|
+
}
|
19
|
+
return new Response(`Cannot find a matching procedure for ${req.url}`, { status: 404 });
|
20
|
+
};
|
21
|
+
return {
|
22
|
+
GET: main,
|
23
|
+
POST: main,
|
24
|
+
PUT: main,
|
25
|
+
PATCH: main,
|
26
|
+
DELETE: main
|
27
|
+
};
|
28
|
+
}
|
29
|
+
export {
|
30
|
+
ORPCHandler,
|
31
|
+
ORPCPayloadCodec,
|
32
|
+
ORPCProcedureMatcher,
|
33
|
+
super_json_exports as SuperJSON,
|
34
|
+
serve
|
35
|
+
};
|
36
|
+
//# sourceMappingURL=next.js.map
|
package/dist/node.js
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
import {
|
2
|
+
ORPCHandler
|
3
|
+
} from "./chunk-V3I7RIRY.js";
|
4
|
+
import "./chunk-DNG2IB3R.js";
|
5
|
+
|
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
|
+
});
|
12
|
+
const method = req.method ?? "GET";
|
13
|
+
const headers = createHeaders(req);
|
14
|
+
const protocol = "encrypted" in req.socket && req.socket.encrypted ? "https:" : "http:";
|
15
|
+
const host = headers.get("Host") ?? "localhost";
|
16
|
+
const url = new URL(req.originalUrl ?? req.url ?? "/", `${protocol}//${host}`);
|
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
|
+
});
|
27
|
+
}
|
28
|
+
});
|
29
|
+
init.duplex = "half";
|
30
|
+
}
|
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]);
|
38
|
+
}
|
39
|
+
return headers;
|
40
|
+
}
|
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;
|
52
|
+
}
|
53
|
+
}
|
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
|
+
}
|
59
|
+
}
|
60
|
+
res.end();
|
61
|
+
}
|
62
|
+
|
63
|
+
// src/adapters/node/orpc-handler.ts
|
64
|
+
var ORPCHandler2 = class {
|
65
|
+
orpcFetchHandler;
|
66
|
+
constructor(router, options) {
|
67
|
+
this.orpcFetchHandler = new ORPCHandler(router, options);
|
68
|
+
}
|
69
|
+
async handle(req, res, ...[options]) {
|
70
|
+
const request = createRequest(req, res);
|
71
|
+
const castedOptions = options ?? {};
|
72
|
+
const result = await this.orpcFetchHandler.handle(request, castedOptions);
|
73
|
+
if (result.matched === false) {
|
74
|
+
return { matched: false };
|
75
|
+
}
|
76
|
+
await options?.beforeSend?.(result.response, castedOptions.context);
|
77
|
+
await sendResponse(res, result.response);
|
78
|
+
return { matched: true };
|
79
|
+
}
|
80
|
+
};
|
81
|
+
export {
|
82
|
+
ORPCHandler2 as ORPCHandler,
|
83
|
+
createHeaders,
|
84
|
+
createRequest,
|
85
|
+
sendResponse
|
86
|
+
};
|
87
|
+
//# sourceMappingURL=node.js.map
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import type { Hooks } from '@orpc/shared';
|
2
|
+
import type { Router } from '../../router';
|
3
|
+
import type { Context } from '../../types';
|
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 ORPCHandlerOptions<T extends Context> = Hooks<Request, FetchHandleResult, T, {
|
8
|
+
signal?: AbortSignal;
|
9
|
+
}> & {
|
10
|
+
procedureMatcher?: PublicORPCProcedureMatcher;
|
11
|
+
payloadCodec?: PublicORPCPayloadCodec;
|
12
|
+
};
|
13
|
+
export declare class ORPCHandler<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<ORPCHandlerOptions<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 { ANY_PROCEDURE } from '../../procedure';
|
2
|
+
import { type ANY_ROUTER } from '../../router';
|
3
|
+
export declare class ORPCProcedureMatcher {
|
4
|
+
private readonly router;
|
5
|
+
constructor(router: ANY_ROUTER);
|
6
|
+
match(pathname: string): Promise<{
|
7
|
+
path: string[];
|
8
|
+
procedure: ANY_PROCEDURE;
|
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
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import type { HTTPPath } from '@orpc/contract';
|
2
|
+
import type { Context } from '../../types';
|
3
|
+
export type FetchHandleOptions<T extends Context> = {
|
4
|
+
prefix?: HTTPPath;
|
5
|
+
} & (undefined extends T ? {
|
6
|
+
context?: T;
|
7
|
+
} : {
|
8
|
+
context: T;
|
9
|
+
});
|
10
|
+
export type FetchHandleRest<T extends Context> = [options: FetchHandleOptions<T>] | (undefined extends T ? [] : never);
|
11
|
+
export type FetchHandleResult = {
|
12
|
+
matched: true;
|
13
|
+
response: Response;
|
14
|
+
} | {
|
15
|
+
matched: false;
|
16
|
+
response: undefined;
|
17
|
+
};
|
18
|
+
export interface FetchHandler<T extends Context> {
|
19
|
+
handle: (request: Request, ...rest: FetchHandleRest<T>) => Promise<FetchHandleResult>;
|
20
|
+
}
|
21
|
+
//# sourceMappingURL=types.d.ts.map
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import type { Context as HonoContext, MiddlewareHandler } from 'hono';
|
2
|
+
import type { Context } from '../../types';
|
3
|
+
import type { FetchHandleOptions, FetchHandler } from '../fetch';
|
4
|
+
import { type Value } from '@orpc/shared';
|
5
|
+
export type CreateMiddlewareOptions<T extends Context> = Omit<FetchHandleOptions<T>, 'context'> & (undefined extends T ? {
|
6
|
+
context?: Value<T, [HonoContext]>;
|
7
|
+
} : {
|
8
|
+
context: Value<T, [HonoContext]>;
|
9
|
+
});
|
10
|
+
export type CreateMiddlewareRest<T extends Context> = [options: CreateMiddlewareOptions<T>] | (undefined extends T ? [] : never);
|
11
|
+
export declare function createMiddleware<T extends Context>(handler: FetchHandler<T>, ...[options]: CreateMiddlewareRest<T>): MiddlewareHandler;
|
12
|
+
//# sourceMappingURL=middleware.d.ts.map
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import type { NextRequest } from 'next/server';
|
2
|
+
import type { Context } from '../../types';
|
3
|
+
import type { FetchHandleOptions, FetchHandler } from '../fetch';
|
4
|
+
import { type Value } from '@orpc/shared';
|
5
|
+
export type ServeOptions<T extends Context> = Omit<FetchHandleOptions<T>, 'context'> & (undefined extends T ? {
|
6
|
+
context?: Value<T, [NextRequest]>;
|
7
|
+
} : {
|
8
|
+
context: Value<T, [NextRequest]>;
|
9
|
+
});
|
10
|
+
export type ServeRest<T extends Context> = [options: ServeOptions<T>] | (undefined extends T ? [] : never);
|
11
|
+
export interface ServeResult {
|
12
|
+
GET: (req: NextRequest) => Promise<Response>;
|
13
|
+
POST: (req: NextRequest) => Promise<Response>;
|
14
|
+
PUT: (req: NextRequest) => Promise<Response>;
|
15
|
+
PATCH: (req: NextRequest) => Promise<Response>;
|
16
|
+
DELETE: (req: NextRequest) => Promise<Response>;
|
17
|
+
}
|
18
|
+
export declare function serve<T extends Context>(handler: FetchHandler<T>, ...[options]: ServeRest<T>): ServeResult;
|
19
|
+
//# sourceMappingURL=serve.d.ts.map
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import type { ServerResponse } from 'node:http';
|
2
|
+
import type { Router } from '../../router';
|
3
|
+
import type { Context } from '../../types';
|
4
|
+
import type { ORPCHandlerOptions } from '../fetch/orpc-handler';
|
5
|
+
import type { RequestHandler, RequestHandleRest, RequestHandleResult } from './types';
|
6
|
+
import { type ExpressableIncomingMessage } from './request-listener';
|
7
|
+
export declare class ORPCHandler<T extends Context> implements RequestHandler<T> {
|
8
|
+
private readonly orpcFetchHandler;
|
9
|
+
constructor(router: Router<T, any>, options?: NoInfer<ORPCHandlerOptions<T>>);
|
10
|
+
handle(req: ExpressableIncomingMessage, res: ServerResponse, ...[options]: 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
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import type { HTTPPath } from '@orpc/contract';
|
2
|
+
import type { Promisable } from '@orpc/shared';
|
3
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
4
|
+
import type { Context } from '../../types';
|
5
|
+
export type RequestHandleOptions<T extends Context> = {
|
6
|
+
prefix?: HTTPPath;
|
7
|
+
beforeSend?: (response: Response, context: T) => Promisable<void>;
|
8
|
+
} & (undefined extends T ? {
|
9
|
+
context?: T;
|
10
|
+
} : {
|
11
|
+
context: T;
|
12
|
+
});
|
13
|
+
export type RequestHandleRest<T extends Context> = [options: RequestHandleOptions<T>] | (undefined extends T ? [] : never);
|
14
|
+
export type RequestHandleResult = {
|
15
|
+
matched: true;
|
16
|
+
} | {
|
17
|
+
matched: false;
|
18
|
+
};
|
19
|
+
export interface RequestHandler<T extends Context> {
|
20
|
+
handle: (req: IncomingMessage, res: ServerResponse, ...rest: RequestHandleRest<T>) => Promise<RequestHandleResult>;
|
21
|
+
}
|
22
|
+
//# sourceMappingURL=types.d.ts.map
|
package/dist/src/builder.d.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import type { ANY_CONTRACT_PROCEDURE, ContractRouter, HTTPPath, RouteOptions, Schema, SchemaInput, SchemaOutput } from '@orpc/contract';
|
1
|
+
import type { ANY_CONTRACT_PROCEDURE, ContractRouter, ErrorMap, HTTPPath, RouteOptions, Schema, SchemaInput, SchemaOutput } from '@orpc/contract';
|
2
2
|
import type { FlattenLazy } from './lazy';
|
3
3
|
import type { Middleware } from './middleware';
|
4
4
|
import type { DecoratedMiddleware } from './middleware-decorated';
|
@@ -6,24 +6,25 @@ import type { Router } from './router';
|
|
6
6
|
import type { AdaptedRouter } from './router-builder';
|
7
7
|
import type { Context, MergeContext, WELL_CONTEXT } from './types';
|
8
8
|
import { type ChainableImplementer } from './implementer-chainable';
|
9
|
-
import { type
|
9
|
+
import { type ProcedureHandler } from './procedure';
|
10
10
|
import { ProcedureBuilder } from './procedure-builder';
|
11
11
|
import { type DecoratedProcedure } from './procedure-decorated';
|
12
12
|
import { RouterBuilder } from './router-builder';
|
13
13
|
export interface BuilderDef<TContext extends Context, TExtraContext extends Context> {
|
14
|
-
middlewares?: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any
|
14
|
+
middlewares?: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[];
|
15
15
|
}
|
16
16
|
export declare class Builder<TContext extends Context, TExtraContext extends Context> {
|
17
17
|
'~type': "Builder";
|
18
18
|
'~orpc': BuilderDef<TContext, TExtraContext>;
|
19
19
|
constructor(def: BuilderDef<TContext, TExtraContext>);
|
20
20
|
context<UContext extends Context = WELL_CONTEXT>(): Builder<UContext, undefined>;
|
21
|
-
use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, unknown, unknown
|
22
|
-
middleware<UExtraContext extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined, TInput = unknown, TOutput = any>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, TInput, TOutput
|
23
|
-
route(route: RouteOptions): ProcedureBuilder<TContext, TExtraContext, undefined, undefined>;
|
24
|
-
input<USchema extends Schema
|
25
|
-
output<USchema extends Schema
|
26
|
-
|
21
|
+
use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, unknown, unknown, Record<string, unknown>>): Builder<TContext, MergeContext<TExtraContext, U>>;
|
22
|
+
middleware<UExtraContext extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined, TInput = unknown, TOutput = any>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, TInput, TOutput, Record<string, unknown>>): DecoratedMiddleware<MergeContext<TContext, TExtraContext>, UExtraContext, TInput, TOutput, Record<string, unknown>>;
|
23
|
+
route(route: RouteOptions): ProcedureBuilder<TContext, TExtraContext, undefined, undefined, undefined>;
|
24
|
+
input<USchema extends Schema>(schema: USchema, example?: SchemaInput<USchema>): ProcedureBuilder<TContext, TExtraContext, USchema, undefined, undefined>;
|
25
|
+
output<USchema extends Schema>(schema: USchema, example?: SchemaOutput<USchema>): ProcedureBuilder<TContext, TExtraContext, undefined, USchema, undefined>;
|
26
|
+
errors<UErrorMap extends ErrorMap>(errors: UErrorMap): ProcedureBuilder<TContext, TExtraContext, undefined, undefined, UErrorMap>;
|
27
|
+
handler<UFuncOutput = undefined>(handler: ProcedureHandler<TContext, TExtraContext, undefined, undefined, UFuncOutput, undefined>): DecoratedProcedure<TContext, TExtraContext, undefined, undefined, UFuncOutput, undefined>;
|
27
28
|
prefix(prefix: HTTPPath): RouterBuilder<TContext, TExtraContext>;
|
28
29
|
tag(...tags: string[]): RouterBuilder<TContext, TExtraContext>;
|
29
30
|
router<U extends Router<MergeContext<TContext, TExtraContext>, any>>(router: U): AdaptedRouter<TContext, U>;
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import type { ErrorMap, ErrorMapItem, ORPCErrorOptions, Schema, SchemaInput, SchemaOutput } from '@orpc/contract';
|
2
|
+
import { ORPCError } from '@orpc/contract';
|
3
|
+
export type ORPCErrorConstructorMapItemOptions<TData> = Omit<ORPCErrorOptions<any, TData>, 'defined' | 'code' | 'status'>;
|
4
|
+
export type ORPCErrorConstructorMapItemRest<TData> = [options: ORPCErrorConstructorMapItemOptions<TData>] | (undefined extends TData ? [] : never);
|
5
|
+
export type ORPCErrorConstructorMapItem<TCode extends string, TDataSchema extends Schema> = (...rest: ORPCErrorConstructorMapItemRest<SchemaInput<TDataSchema>>) => ORPCError<TCode, SchemaOutput<TDataSchema>>;
|
6
|
+
export type ORPCErrorConstructorMap<T extends ErrorMap> = T extends undefined ? Record<string, unknown> : {
|
7
|
+
[K in keyof T]: K extends string ? T[K] extends ErrorMapItem<infer UInputSchema> ? ORPCErrorConstructorMapItem<K, UInputSchema> : never : never;
|
8
|
+
};
|
9
|
+
export declare function createORPCErrorConstructorMap<T extends ErrorMap>(errors: T): ORPCErrorConstructorMap<T>;
|
10
|
+
//# sourceMappingURL=error.d.ts.map
|
@@ -3,8 +3,8 @@ import type { Context, MergeContext, WELL_CONTEXT } from './types';
|
|
3
3
|
import { type ContractProcedure, type ContractRouter } from '@orpc/contract';
|
4
4
|
import { ProcedureImplementer } from './procedure-implementer';
|
5
5
|
import { RouterImplementer } from './router-implementer';
|
6
|
-
export type ChainableImplementer<TContext extends Context, TExtraContext extends Context, TContract extends ContractRouter> = TContract extends ContractProcedure<infer UInputSchema, infer UOutputSchema> ? ProcedureImplementer<TContext, TExtraContext, UInputSchema, UOutputSchema> : {
|
6
|
+
export type ChainableImplementer<TContext extends Context, TExtraContext extends Context, TContract extends ContractRouter> = TContract extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrorMap> ? ProcedureImplementer<TContext, TExtraContext, UInputSchema, UOutputSchema, UErrorMap> : {
|
7
7
|
[K in keyof TContract]: TContract[K] extends ContractRouter ? ChainableImplementer<TContext, TExtraContext, TContract[K]> : never;
|
8
8
|
} & Omit<RouterImplementer<TContext, TExtraContext, TContract>, '~type' | '~orpc'>;
|
9
|
-
export declare function createChainableImplementer<TContext extends Context = WELL_CONTEXT, TExtraContext extends Context = undefined, TContract extends ContractRouter = any>(contract: TContract, middlewares?: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any
|
9
|
+
export declare function createChainableImplementer<TContext extends Context = WELL_CONTEXT, TExtraContext extends Context = undefined, TContract extends ContractRouter = any>(contract: TContract, middlewares?: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[]): ChainableImplementer<TContext, TExtraContext, TContract>;
|
10
10
|
//# sourceMappingURL=implementer-chainable.d.ts.map
|
package/dist/src/index.d.ts
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import type { WELL_CONTEXT } from './types';
|
2
2
|
import { Builder } from './builder';
|
3
3
|
export * from './builder';
|
4
|
+
export * from './error';
|
4
5
|
export * from './hidden';
|
5
6
|
export * from './implementer-chainable';
|
6
7
|
export * from './lazy';
|
@@ -18,6 +19,6 @@ export * from './router-client';
|
|
18
19
|
export * from './router-implementer';
|
19
20
|
export * from './types';
|
20
21
|
export * from './utils';
|
21
|
-
export
|
22
|
+
export { configGlobal, fallbackToGlobalConfig, isDefinedError, ORPCError, safe } from '@orpc/contract';
|
22
23
|
export declare const os: Builder<WELL_CONTEXT, undefined>;
|
23
24
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1,9 +1,9 @@
|
|
1
|
-
import type { SchemaInput, SchemaOutput } from '@orpc/contract';
|
1
|
+
import type { ErrorFromErrorMap, SchemaInput, SchemaOutput } from '@orpc/contract';
|
2
2
|
import type { Lazy } from './lazy';
|
3
3
|
import type { Procedure } from './procedure';
|
4
4
|
import type { ProcedureClient } from './procedure-client';
|
5
5
|
import { type ANY_ROUTER } from './router';
|
6
|
-
export type DecoratedLazy<T> = T extends Lazy<infer U> ? DecoratedLazy<U> : Lazy<T> & (T extends Procedure<infer UContext, any, infer UInputSchema, infer UOutputSchema, infer UFuncOutput> ? undefined extends UContext ? ProcedureClient<SchemaInput<UInputSchema>, SchemaOutput<UOutputSchema, UFuncOutput>> : unknown : {
|
6
|
+
export type DecoratedLazy<T> = T extends Lazy<infer U> ? DecoratedLazy<U> : Lazy<T> & (T extends Procedure<infer UContext, any, infer UInputSchema, infer UOutputSchema, infer UFuncOutput, infer UErrorMap> ? undefined extends UContext ? ProcedureClient<unknown, SchemaInput<UInputSchema>, SchemaOutput<UOutputSchema, UFuncOutput>, ErrorFromErrorMap<UErrorMap>> : unknown : {
|
7
7
|
[K in keyof T]: T[K] extends object ? DecoratedLazy<T[K]> : never;
|
8
8
|
});
|
9
9
|
export declare function decorateLazy<T extends Lazy<ANY_ROUTER | undefined>>(lazied: T): DecoratedLazy<T>;
|
@@ -1,8 +1,9 @@
|
|
1
|
+
import type { ORPCErrorConstructorMap } from './error';
|
1
2
|
import type { MapInputMiddleware, Middleware } from './middleware';
|
2
|
-
import type { Context, MergeContext
|
3
|
-
export interface DecoratedMiddleware<TContext extends Context, TExtraContext extends Context, TInput, TOutput
|
4
|
-
concat: (<UExtraContext extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined, UInput = unknown>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, UInput & TInput, TOutput>) => DecoratedMiddleware<TContext, MergeContext<TExtraContext, UExtraContext>, UInput & TInput, TOutput>) & (<UExtraContext extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined, UInput = TInput, UMappedInput = unknown>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, UMappedInput, TOutput>, mapInput: MapInputMiddleware<UInput & TInput, UMappedInput>) => DecoratedMiddleware<TContext, MergeContext<TExtraContext, UExtraContext>, UInput & TInput, TOutput>);
|
5
|
-
mapInput: <UInput = unknown>(map: MapInputMiddleware<UInput, TInput>) => DecoratedMiddleware<TContext, TExtraContext, UInput, TOutput>;
|
3
|
+
import type { Context, MergeContext } from './types';
|
4
|
+
export interface DecoratedMiddleware<TContext extends Context, TExtraContext extends Context, TInput, TOutput, TErrorConstructorMap extends ORPCErrorConstructorMap<any>> extends Middleware<TContext, TExtraContext, TInput, TOutput, TErrorConstructorMap> {
|
5
|
+
concat: (<UExtraContext extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined, UInput = unknown>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, UInput & TInput, TOutput, TErrorConstructorMap>) => DecoratedMiddleware<TContext, MergeContext<TExtraContext, UExtraContext>, UInput & TInput, TOutput, TErrorConstructorMap>) & (<UExtraContext extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined, UInput = TInput, UMappedInput = unknown>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, UMappedInput, TOutput, TErrorConstructorMap>, mapInput: MapInputMiddleware<UInput & TInput, UMappedInput>) => DecoratedMiddleware<TContext, MergeContext<TExtraContext, UExtraContext>, UInput & TInput, TOutput, TErrorConstructorMap>);
|
6
|
+
mapInput: <UInput = unknown>(map: MapInputMiddleware<UInput, TInput>) => DecoratedMiddleware<TContext, TExtraContext, UInput, TOutput, TErrorConstructorMap>;
|
6
7
|
}
|
7
|
-
export declare function decorateMiddleware<TContext extends Context
|
8
|
+
export declare function decorateMiddleware<TContext extends Context, TExtraContext extends Context, TInput, TOutput, TErrorConstructorMap extends ORPCErrorConstructorMap<any>>(middleware: Middleware<TContext, TExtraContext, TInput, TOutput, TErrorConstructorMap>): DecoratedMiddleware<TContext, TExtraContext, TInput, TOutput, TErrorConstructorMap>;
|
8
9
|
//# sourceMappingURL=middleware-decorated.d.ts.map
|