@orpc/server 0.0.0-next.6acfc62 → 0.0.0-next.6affcc9
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-L4ESXQX7.js +32 -0
- package/dist/{chunk-SUGWQSMQ.js → chunk-NXEANHUK.js} +68 -25
- package/dist/{chunk-OWMUECGT.js → chunk-XI6WGCB3.js} +20 -6
- package/dist/{chunk-NOA3GBJQ.js → chunk-XXBE6CYD.js} +18 -19
- package/dist/fetch.js +6 -14
- package/dist/hono.js +7 -15
- package/dist/index.js +15 -7
- package/dist/next.js +6 -14
- package/dist/node.js +7 -151
- package/dist/plugins.js +1 -1
- package/dist/src/adapters/fetch/index.d.ts +0 -1
- package/dist/src/adapters/fetch/rpc-handler.d.ts +3 -2
- package/dist/src/adapters/fetch/types.d.ts +3 -2
- package/dist/src/adapters/hono/middleware.d.ts +2 -3
- package/dist/src/adapters/next/serve.d.ts +2 -3
- package/dist/src/adapters/node/index.d.ts +0 -1
- package/dist/src/adapters/node/rpc-handler.d.ts +3 -2
- package/dist/src/adapters/node/types.d.ts +3 -2
- package/dist/src/adapters/standard/handler.d.ts +11 -7
- package/dist/src/adapters/standard/rpc-codec.d.ts +2 -1
- package/dist/src/adapters/standard/rpc-serializer.d.ts +7 -1
- package/dist/src/adapters/standard/types.d.ts +2 -26
- package/dist/src/context.d.ts +0 -1
- package/dist/src/implementer-procedure.d.ts +5 -4
- package/dist/src/index.d.ts +2 -1
- package/dist/src/middleware.d.ts +4 -4
- package/dist/src/plugins/base.d.ts +3 -1
- package/dist/src/plugins/cors.d.ts +2 -1
- package/dist/src/procedure-client.d.ts +19 -8
- package/dist/src/procedure-decorated.d.ts +5 -4
- package/dist/src/procedure-utils.d.ts +4 -3
- package/dist/src/procedure.d.ts +4 -3
- package/dist/src/router-client.d.ts +6 -17
- package/dist/src/router.d.ts +1 -0
- package/dist/standard.js +3 -3
- package/package.json +6 -4
- package/dist/chunk-JBPBLCBJ.js +0 -136
- package/dist/src/adapters/fetch/utils.d.ts +0 -6
- package/dist/src/adapters/node/utils.d.ts +0 -5
@@ -0,0 +1,32 @@
|
|
1
|
+
import {
|
2
|
+
RPCCodec,
|
3
|
+
RPCMatcher,
|
4
|
+
StandardHandler
|
5
|
+
} from "./chunk-NXEANHUK.js";
|
6
|
+
|
7
|
+
// src/adapters/fetch/rpc-handler.ts
|
8
|
+
import { toFetchResponse, toStandardRequest } from "@orpc/server-standard-fetch";
|
9
|
+
var RPCHandler = class {
|
10
|
+
standardHandler;
|
11
|
+
constructor(router, options) {
|
12
|
+
const matcher = options?.matcher ?? new RPCMatcher();
|
13
|
+
const codec = options?.codec ?? new RPCCodec();
|
14
|
+
this.standardHandler = new StandardHandler(router, matcher, codec, options);
|
15
|
+
}
|
16
|
+
async handle(request, ...rest) {
|
17
|
+
const standardRequest = toStandardRequest(request);
|
18
|
+
const result = await this.standardHandler.handle(standardRequest, ...rest);
|
19
|
+
if (!result.matched) {
|
20
|
+
return result;
|
21
|
+
}
|
22
|
+
return {
|
23
|
+
matched: true,
|
24
|
+
response: toFetchResponse(result.response)
|
25
|
+
};
|
26
|
+
}
|
27
|
+
};
|
28
|
+
|
29
|
+
export {
|
30
|
+
RPCHandler
|
31
|
+
};
|
32
|
+
//# sourceMappingURL=chunk-L4ESXQX7.js.map
|
@@ -6,13 +6,13 @@ import {
|
|
6
6
|
getRouterChild,
|
7
7
|
isProcedure,
|
8
8
|
unlazy
|
9
|
-
} from "./chunk-
|
9
|
+
} from "./chunk-XXBE6CYD.js";
|
10
10
|
import {
|
11
11
|
CompositePlugin
|
12
|
-
} from "./chunk-
|
12
|
+
} from "./chunk-XI6WGCB3.js";
|
13
13
|
|
14
14
|
// src/adapters/standard/handler.ts
|
15
|
-
import { toORPCError } from "@orpc/contract";
|
15
|
+
import { ORPCError, toORPCError } from "@orpc/contract";
|
16
16
|
import { intercept, trim } from "@orpc/shared";
|
17
17
|
var StandardHandler = class {
|
18
18
|
constructor(router, matcher, codec, options = {}) {
|
@@ -25,30 +25,39 @@ var StandardHandler = class {
|
|
25
25
|
}
|
26
26
|
plugin;
|
27
27
|
handle(request, ...[options]) {
|
28
|
-
const handleOptions = options ?? {};
|
29
|
-
handleOptions.context ??= {};
|
30
28
|
return intercept(
|
31
29
|
this.options.interceptorsRoot ?? [],
|
32
|
-
{
|
33
|
-
|
30
|
+
{
|
31
|
+
request,
|
32
|
+
...options,
|
33
|
+
context: options?.context ?? {}
|
34
|
+
// context is optional only when all fields are optional so we can safely force it to have a context
|
35
|
+
},
|
36
|
+
async (interceptorOptions) => {
|
37
|
+
let isDecoding = false;
|
34
38
|
try {
|
35
39
|
return await intercept(
|
36
40
|
this.options.interceptors ?? [],
|
37
|
-
|
38
|
-
async (
|
39
|
-
const method =
|
40
|
-
const url =
|
41
|
-
const pathname = `/${trim(url.pathname.replace(
|
41
|
+
interceptorOptions,
|
42
|
+
async (interceptorOptions2) => {
|
43
|
+
const method = interceptorOptions2.request.method;
|
44
|
+
const url = interceptorOptions2.request.url;
|
45
|
+
const pathname = `/${trim(url.pathname.replace(interceptorOptions2.prefix ?? "", ""), "/")}`;
|
42
46
|
const match = await this.matcher.match(method, pathname);
|
43
47
|
if (!match) {
|
44
48
|
return { matched: false, response: void 0 };
|
45
49
|
}
|
46
|
-
const
|
47
|
-
context,
|
50
|
+
const clientOptions = {
|
51
|
+
context: interceptorOptions2.context,
|
48
52
|
path: match.path
|
49
|
-
}
|
50
|
-
|
51
|
-
const
|
53
|
+
};
|
54
|
+
this.plugin.beforeCreateProcedureClient(clientOptions, interceptorOptions2);
|
55
|
+
const client = createProcedureClient(match.procedure, clientOptions);
|
56
|
+
isDecoding = true;
|
57
|
+
const input = await this.codec.decode(request, match.params, match.procedure);
|
58
|
+
isDecoding = false;
|
59
|
+
const lastEventId = Array.isArray(request.headers["last-event-id"]) ? request.headers["last-event-id"].at(-1) : request.headers["last-event-id"];
|
60
|
+
const output = await client(input, { signal: request.signal, lastEventId });
|
52
61
|
const response = this.codec.encode(output, match.procedure);
|
53
62
|
return {
|
54
63
|
matched: true,
|
@@ -57,7 +66,10 @@ var StandardHandler = class {
|
|
57
66
|
}
|
58
67
|
);
|
59
68
|
} catch (e) {
|
60
|
-
const error =
|
69
|
+
const error = isDecoding ? new ORPCError("BAD_REQUEST", {
|
70
|
+
message: `Malformed request. Ensure the request body is properly formatted and the 'Content-Type' header is set correctly.`,
|
71
|
+
cause: e
|
72
|
+
}) : toORPCError(e);
|
61
73
|
const response = this.codec.encodeError(error);
|
62
74
|
return {
|
63
75
|
matched: true,
|
@@ -70,11 +82,27 @@ var StandardHandler = class {
|
|
70
82
|
};
|
71
83
|
|
72
84
|
// src/adapters/standard/rpc-serializer.ts
|
73
|
-
import {
|
85
|
+
import { mapEventIterator, ORPCError as ORPCError2, toORPCError as toORPCError2 } from "@orpc/contract";
|
86
|
+
import { ErrorEvent, isAsyncIteratorObject } from "@orpc/server-standard";
|
87
|
+
import { findDeepMatches, isObject, set } from "@orpc/shared";
|
74
88
|
var RPCSerializer = class {
|
75
89
|
serialize(data) {
|
76
|
-
if (data
|
77
|
-
return data
|
90
|
+
if (isAsyncIteratorObject(data)) {
|
91
|
+
return mapEventIterator(data, {
|
92
|
+
value: async (value) => serializeRPCJson(value),
|
93
|
+
error: async (e) => {
|
94
|
+
if (e instanceof ErrorEvent) {
|
95
|
+
return new ErrorEvent({
|
96
|
+
data: serializeRPCJson(e.data),
|
97
|
+
cause: e
|
98
|
+
});
|
99
|
+
}
|
100
|
+
return new ErrorEvent({
|
101
|
+
data: serializeRPCJson(toORPCError2(e).toJSON()),
|
102
|
+
cause: e
|
103
|
+
});
|
104
|
+
}
|
105
|
+
});
|
78
106
|
}
|
79
107
|
const serializedJSON = serializeRPCJson(data);
|
80
108
|
const { maps, values: blobs } = findDeepMatches((v) => v instanceof Blob, serializedJSON.json);
|
@@ -90,8 +118,23 @@ var RPCSerializer = class {
|
|
90
118
|
return form;
|
91
119
|
}
|
92
120
|
deserialize(serialized) {
|
93
|
-
if (serialized
|
94
|
-
return serialized
|
121
|
+
if (isAsyncIteratorObject(serialized)) {
|
122
|
+
return mapEventIterator(serialized, {
|
123
|
+
value: async (value) => deserializeRPCJson(value),
|
124
|
+
error: async (e) => {
|
125
|
+
if (!(e instanceof ErrorEvent)) {
|
126
|
+
return e;
|
127
|
+
}
|
128
|
+
const deserialized = deserializeRPCJson(e.data);
|
129
|
+
if (ORPCError2.isValidJSON(deserialized)) {
|
130
|
+
return ORPCError2.fromJSON(deserialized, { cause: e });
|
131
|
+
}
|
132
|
+
return new ErrorEvent({
|
133
|
+
data: deserialized,
|
134
|
+
cause: e
|
135
|
+
});
|
136
|
+
}
|
137
|
+
});
|
95
138
|
}
|
96
139
|
if (!(serialized instanceof FormData)) {
|
97
140
|
return deserializeRPCJson(serialized);
|
@@ -126,7 +169,7 @@ function serializeRPCJson(value, segments = [], meta = []) {
|
|
126
169
|
meta.push(["url", segments]);
|
127
170
|
return { json: value.toString(), meta };
|
128
171
|
}
|
129
|
-
if (
|
172
|
+
if (isObject(value)) {
|
130
173
|
const json = {};
|
131
174
|
for (const k in value) {
|
132
175
|
json[k] = serializeRPCJson(value[k], [...segments, k], meta).json;
|
@@ -305,4 +348,4 @@ export {
|
|
305
348
|
RPCCodec,
|
306
349
|
RPCMatcher
|
307
350
|
};
|
308
|
-
//# sourceMappingURL=chunk-
|
351
|
+
//# sourceMappingURL=chunk-NXEANHUK.js.map
|
@@ -8,6 +8,11 @@ var CompositePlugin = class {
|
|
8
8
|
plugin.init?.(options);
|
9
9
|
}
|
10
10
|
}
|
11
|
+
beforeCreateProcedureClient(clientOptions, interceptorOptions) {
|
12
|
+
for (const plugin of this.plugins) {
|
13
|
+
plugin.beforeCreateProcedureClient?.(clientOptions, interceptorOptions);
|
14
|
+
}
|
15
|
+
}
|
11
16
|
};
|
12
17
|
|
13
18
|
// src/plugins/cors.ts
|
@@ -16,7 +21,7 @@ var CORSPlugin = class {
|
|
16
21
|
options;
|
17
22
|
constructor(options) {
|
18
23
|
const defaults = {
|
19
|
-
origin:
|
24
|
+
origin: (origin) => origin,
|
20
25
|
allowMethods: ["GET", "HEAD", "PUT", "POST", "DELETE", "PATCH"]
|
21
26
|
};
|
22
27
|
this.options = {
|
@@ -60,12 +65,21 @@ var CORSPlugin = class {
|
|
60
65
|
const origin = Array.isArray(interceptorOptions.request.headers.origin) ? interceptorOptions.request.headers.origin.join(",") : interceptorOptions.request.headers.origin || "";
|
61
66
|
const allowedOrigin = await value(this.options.origin, origin, interceptorOptions);
|
62
67
|
const allowedOriginArr = Array.isArray(allowedOrigin) ? allowedOrigin : [allowedOrigin];
|
63
|
-
if (allowedOriginArr.includes(
|
64
|
-
result.response.headers["access-control-allow-origin"] =
|
65
|
-
}
|
66
|
-
|
68
|
+
if (allowedOriginArr.includes("*")) {
|
69
|
+
result.response.headers["access-control-allow-origin"] = "*";
|
70
|
+
} else {
|
71
|
+
if (allowedOriginArr.includes(origin)) {
|
72
|
+
result.response.headers["access-control-allow-origin"] = origin;
|
73
|
+
}
|
67
74
|
result.response.headers.vary = interceptorOptions.request.headers.vary ?? "origin";
|
68
75
|
}
|
76
|
+
const allowedTimingOrigin = await value(this.options.timingOrigin, origin, interceptorOptions);
|
77
|
+
const allowedTimingOriginArr = Array.isArray(allowedTimingOrigin) ? allowedTimingOrigin : [allowedTimingOrigin];
|
78
|
+
if (allowedTimingOriginArr.includes("*")) {
|
79
|
+
result.response.headers["timing-allow-origin"] = "*";
|
80
|
+
} else if (allowedTimingOriginArr.includes(origin)) {
|
81
|
+
result.response.headers["timing-allow-origin"] = origin;
|
82
|
+
}
|
69
83
|
if (this.options.credentials) {
|
70
84
|
result.response.headers["access-control-allow-credentials"] = "true";
|
71
85
|
}
|
@@ -108,4 +122,4 @@ export {
|
|
108
122
|
CORSPlugin,
|
109
123
|
ResponseHeadersPlugin
|
110
124
|
};
|
111
|
-
//# sourceMappingURL=chunk-
|
125
|
+
//# sourceMappingURL=chunk-XI6WGCB3.js.map
|
@@ -63,30 +63,29 @@ function middlewareOutputFn(output) {
|
|
63
63
|
|
64
64
|
// src/procedure-client.ts
|
65
65
|
import { createORPCErrorConstructorMap, ORPCError, validateORPCError, ValidationError } from "@orpc/contract";
|
66
|
-
import {
|
66
|
+
import { intercept, toError, value } from "@orpc/shared";
|
67
67
|
function createProcedureClient(lazyableProcedure, ...[options]) {
|
68
68
|
return async (...[input, callerOptions]) => {
|
69
69
|
const path = options?.path ?? [];
|
70
70
|
const { default: procedure } = await unlazy(lazyableProcedure);
|
71
|
-
const
|
71
|
+
const clientContext = callerOptions?.context ?? {};
|
72
|
+
const context = await value(options?.context ?? {}, clientContext);
|
72
73
|
const errors = createORPCErrorConstructorMap(procedure["~orpc"].errorMap);
|
73
|
-
const executeOptions = {
|
74
|
-
input,
|
75
|
-
context,
|
76
|
-
errors,
|
77
|
-
path,
|
78
|
-
procedure,
|
79
|
-
signal: callerOptions?.signal
|
80
|
-
};
|
81
74
|
try {
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
75
|
+
return await intercept(
|
76
|
+
options?.interceptors ?? [],
|
77
|
+
{
|
78
|
+
context,
|
79
|
+
input,
|
80
|
+
// input only optional when it undefinable so we can safely cast it
|
81
|
+
errors,
|
82
|
+
path,
|
83
|
+
procedure,
|
84
|
+
signal: callerOptions?.signal,
|
85
|
+
lastEventId: callerOptions?.lastEventId
|
86
|
+
},
|
87
|
+
(interceptorOptions) => executeProcedureInternal(interceptorOptions.procedure, interceptorOptions)
|
88
|
+
);
|
90
89
|
} catch (e) {
|
91
90
|
if (!(e instanceof ORPCError)) {
|
92
91
|
throw toError(e);
|
@@ -377,4 +376,4 @@ export {
|
|
377
376
|
convertPathToHttpPath,
|
378
377
|
createContractedProcedure
|
379
378
|
};
|
380
|
-
//# sourceMappingURL=chunk-
|
379
|
+
//# sourceMappingURL=chunk-XXBE6CYD.js.map
|
package/dist/fetch.js
CHANGED
@@ -1,18 +1,10 @@
|
|
1
1
|
import {
|
2
|
-
RPCHandler
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
} from "./chunk-JBPBLCBJ.js";
|
8
|
-
import "./chunk-SUGWQSMQ.js";
|
9
|
-
import "./chunk-NOA3GBJQ.js";
|
10
|
-
import "./chunk-OWMUECGT.js";
|
2
|
+
RPCHandler
|
3
|
+
} from "./chunk-L4ESXQX7.js";
|
4
|
+
import "./chunk-NXEANHUK.js";
|
5
|
+
import "./chunk-XXBE6CYD.js";
|
6
|
+
import "./chunk-XI6WGCB3.js";
|
11
7
|
export {
|
12
|
-
RPCHandler
|
13
|
-
fetchReToStandardBody,
|
14
|
-
fetchRequestToStandardRequest,
|
15
|
-
standardBodyToFetchBody,
|
16
|
-
standardResponseToFetchResponse
|
8
|
+
RPCHandler
|
17
9
|
};
|
18
10
|
//# sourceMappingURL=fetch.js.map
|
package/dist/hono.js
CHANGED
@@ -1,13 +1,9 @@
|
|
1
1
|
import {
|
2
|
-
RPCHandler
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
} from "./chunk-JBPBLCBJ.js";
|
8
|
-
import "./chunk-SUGWQSMQ.js";
|
9
|
-
import "./chunk-NOA3GBJQ.js";
|
10
|
-
import "./chunk-OWMUECGT.js";
|
2
|
+
RPCHandler
|
3
|
+
} from "./chunk-L4ESXQX7.js";
|
4
|
+
import "./chunk-NXEANHUK.js";
|
5
|
+
import "./chunk-XXBE6CYD.js";
|
6
|
+
import "./chunk-XI6WGCB3.js";
|
11
7
|
|
12
8
|
// src/adapters/hono/middleware.ts
|
13
9
|
import { value } from "@orpc/shared";
|
@@ -26,17 +22,13 @@ function createMiddleware(handler, ...[options]) {
|
|
26
22
|
const context = await value(options?.context ?? {}, c);
|
27
23
|
const { matched, response } = await handler.handle(request, { ...options, context });
|
28
24
|
if (matched) {
|
29
|
-
return c.
|
25
|
+
return c.newResponse(response.body, response);
|
30
26
|
}
|
31
27
|
await next();
|
32
28
|
};
|
33
29
|
}
|
34
30
|
export {
|
35
31
|
RPCHandler,
|
36
|
-
createMiddleware
|
37
|
-
fetchReToStandardBody,
|
38
|
-
fetchRequestToStandardRequest,
|
39
|
-
standardBodyToFetchBody,
|
40
|
-
standardResponseToFetchResponse
|
32
|
+
createMiddleware
|
41
33
|
};
|
42
34
|
//# sourceMappingURL=hono.js.map
|
package/dist/index.js
CHANGED
@@ -21,7 +21,7 @@ import {
|
|
21
21
|
middlewareOutputFn,
|
22
22
|
setRouterContract,
|
23
23
|
unlazy
|
24
|
-
} from "./chunk-
|
24
|
+
} from "./chunk-XXBE6CYD.js";
|
25
25
|
|
26
26
|
// src/builder.ts
|
27
27
|
import { mergeErrorMap as mergeErrorMap2, mergeMeta as mergeMeta2, mergePrefix, mergeRoute as mergeRoute2, mergeTags } from "@orpc/contract";
|
@@ -50,10 +50,14 @@ function decorateMiddleware(middleware) {
|
|
50
50
|
decorated.concat = (concatMiddleware, mapInput) => {
|
51
51
|
const mapped = mapInput ? decorateMiddleware(concatMiddleware).mapInput(mapInput) : concatMiddleware;
|
52
52
|
const concatted = decorateMiddleware((options, input, output, ...rest) => {
|
53
|
-
const
|
54
|
-
|
55
|
-
|
56
|
-
|
53
|
+
const merged = middleware({
|
54
|
+
...options,
|
55
|
+
next: (...[nextOptions1]) => mapped({
|
56
|
+
...options,
|
57
|
+
context: { ...options.context, ...nextOptions1?.context },
|
58
|
+
next: (...[nextOptions2]) => options.next({ context: { ...nextOptions1?.context, ...nextOptions2?.context } })
|
59
|
+
}, input, output, ...rest)
|
60
|
+
}, input, output, ...rest);
|
57
61
|
return merged;
|
58
62
|
});
|
59
63
|
return concatted;
|
@@ -357,7 +361,8 @@ function createRouterClient(router, ...rest) {
|
|
357
361
|
}
|
358
362
|
|
359
363
|
// src/index.ts
|
360
|
-
import { isDefinedError, ORPCError, safe, type, ValidationError } from "@orpc/contract";
|
364
|
+
import { eventIterator, isDefinedError, ORPCError, safe, type, ValidationError } from "@orpc/contract";
|
365
|
+
import { getEventMeta, withEventMeta } from "@orpc/server-standard";
|
361
366
|
import { onError, onFinish, onStart, onSuccess } from "@orpc/shared";
|
362
367
|
export {
|
363
368
|
Builder,
|
@@ -378,8 +383,10 @@ export {
|
|
378
383
|
deepSetLazyRouterPrefix,
|
379
384
|
eachAllContractProcedure,
|
380
385
|
eachContractProcedure,
|
386
|
+
eventIterator,
|
381
387
|
fallbackConfig,
|
382
388
|
flatLazy,
|
389
|
+
getEventMeta,
|
383
390
|
getLazyRouterPrefix,
|
384
391
|
getRouterChild,
|
385
392
|
getRouterContract,
|
@@ -399,6 +406,7 @@ export {
|
|
399
406
|
safe,
|
400
407
|
setRouterContract,
|
401
408
|
type,
|
402
|
-
unlazy
|
409
|
+
unlazy,
|
410
|
+
withEventMeta
|
403
411
|
};
|
404
412
|
//# sourceMappingURL=index.js.map
|
package/dist/next.js
CHANGED
@@ -1,13 +1,9 @@
|
|
1
1
|
import {
|
2
|
-
RPCHandler
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
} from "./chunk-JBPBLCBJ.js";
|
8
|
-
import "./chunk-SUGWQSMQ.js";
|
9
|
-
import "./chunk-NOA3GBJQ.js";
|
10
|
-
import "./chunk-OWMUECGT.js";
|
2
|
+
RPCHandler
|
3
|
+
} from "./chunk-L4ESXQX7.js";
|
4
|
+
import "./chunk-NXEANHUK.js";
|
5
|
+
import "./chunk-XXBE6CYD.js";
|
6
|
+
import "./chunk-XI6WGCB3.js";
|
11
7
|
|
12
8
|
// src/adapters/next/serve.ts
|
13
9
|
import { value } from "@orpc/shared";
|
@@ -30,10 +26,6 @@ function serve(handler, ...[options]) {
|
|
30
26
|
}
|
31
27
|
export {
|
32
28
|
RPCHandler,
|
33
|
-
|
34
|
-
fetchRequestToStandardRequest,
|
35
|
-
serve,
|
36
|
-
standardBodyToFetchBody,
|
37
|
-
standardResponseToFetchResponse
|
29
|
+
serve
|
38
30
|
};
|
39
31
|
//# sourceMappingURL=next.js.map
|
package/dist/node.js
CHANGED
@@ -2,154 +2,12 @@ import {
|
|
2
2
|
RPCCodec,
|
3
3
|
RPCMatcher,
|
4
4
|
StandardHandler
|
5
|
-
} from "./chunk-
|
6
|
-
import "./chunk-
|
7
|
-
import "./chunk-
|
8
|
-
|
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) {
|
15
|
-
const method = req.method ?? "GET";
|
16
|
-
const protocol = "encrypted" in req.socket && req.socket.encrypted ? "https:" : "http:";
|
17
|
-
const host = req.headers.host ?? "localhost";
|
18
|
-
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");
|
54
|
-
}
|
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
|
-
});
|
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");
|
101
|
-
}
|
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);
|
118
|
-
}
|
119
|
-
return streamToFile(req, "blob", contentType);
|
120
|
-
}
|
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
|
126
|
-
}
|
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
|
-
}
|
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);
|
141
|
-
}
|
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;
|
150
|
-
}
|
5
|
+
} from "./chunk-NXEANHUK.js";
|
6
|
+
import "./chunk-XXBE6CYD.js";
|
7
|
+
import "./chunk-XI6WGCB3.js";
|
151
8
|
|
152
9
|
// src/adapters/node/rpc-handler.ts
|
10
|
+
import { sendStandardResponse, toStandardRequest } from "@orpc/server-standard-node";
|
153
11
|
var RPCHandler = class {
|
154
12
|
standardHandler;
|
155
13
|
constructor(router, options) {
|
@@ -158,18 +16,16 @@ var RPCHandler = class {
|
|
158
16
|
this.standardHandler = new StandardHandler(router, matcher, codec, options);
|
159
17
|
}
|
160
18
|
async handle(req, res, ...rest) {
|
161
|
-
const standardRequest =
|
19
|
+
const standardRequest = toStandardRequest(req, res);
|
162
20
|
const result = await this.standardHandler.handle(standardRequest, ...rest);
|
163
21
|
if (!result.matched) {
|
164
22
|
return { matched: false };
|
165
23
|
}
|
166
|
-
await
|
24
|
+
await sendStandardResponse(res, result.response);
|
167
25
|
return { matched: true };
|
168
26
|
}
|
169
27
|
};
|
170
28
|
export {
|
171
|
-
RPCHandler
|
172
|
-
nodeHttpResponseSendStandardResponse,
|
173
|
-
nodeHttpToStandardRequest
|
29
|
+
RPCHandler
|
174
30
|
};
|
175
31
|
//# sourceMappingURL=node.js.map
|
package/dist/plugins.js
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
+
import type { MaybeOptionalOptions } from '@orpc/shared';
|
1
2
|
import type { Context } from '../../context';
|
2
3
|
import type { Router } from '../../router';
|
3
|
-
import type { RPCHandlerOptions,
|
4
|
+
import type { RPCHandlerOptions, StandardHandleOptions } from '../standard';
|
4
5
|
import type { FetchHandler, FetchHandleResult } from './types';
|
5
6
|
export declare class RPCHandler<T extends Context> implements FetchHandler<T> {
|
6
7
|
private readonly standardHandler;
|
7
8
|
constructor(router: Router<T, any>, options?: NoInfer<RPCHandlerOptions<T>>);
|
8
|
-
handle(request: Request, ...rest:
|
9
|
+
handle(request: Request, ...rest: MaybeOptionalOptions<StandardHandleOptions<T>>): Promise<FetchHandleResult>;
|
9
10
|
}
|
10
11
|
//# sourceMappingURL=rpc-handler.d.ts.map
|
@@ -1,5 +1,6 @@
|
|
1
|
+
import type { MaybeOptionalOptions } from '@orpc/shared';
|
1
2
|
import type { Context } from '../../context';
|
2
|
-
import type {
|
3
|
+
import type { StandardHandleOptions } from '../standard';
|
3
4
|
export type FetchHandleResult = {
|
4
5
|
matched: true;
|
5
6
|
response: Response;
|
@@ -8,6 +9,6 @@ export type FetchHandleResult = {
|
|
8
9
|
response: undefined;
|
9
10
|
};
|
10
11
|
export interface FetchHandler<T extends Context> {
|
11
|
-
handle(request: Request, ...rest:
|
12
|
+
handle(request: Request, ...rest: MaybeOptionalOptions<StandardHandleOptions<T>>): Promise<FetchHandleResult>;
|
12
13
|
}
|
13
14
|
//# sourceMappingURL=types.d.ts.map
|