@orpc/server 0.0.0-next.9ada823 → 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.
Files changed (44) hide show
  1. package/dist/{chunk-37HIYNDO.js → chunk-DNG2IB3R.js} +73 -28
  2. package/dist/chunk-V3I7RIRY.js +302 -0
  3. package/dist/chunk-WUOGVGWG.js +1 -0
  4. package/dist/fetch.js +9 -297
  5. package/dist/hono.js +30 -0
  6. package/dist/index.js +38 -11
  7. package/dist/next.js +36 -0
  8. package/dist/node.js +87 -0
  9. package/dist/src/{fetch → adapters/fetch}/index.d.ts +1 -1
  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/{fetch → adapters/fetch}/orpc-procedure-matcher.d.ts +2 -2
  13. package/dist/src/adapters/fetch/types.d.ts +21 -0
  14. package/dist/src/adapters/hono/index.d.ts +3 -0
  15. package/dist/src/adapters/hono/middleware.d.ts +12 -0
  16. package/dist/src/adapters/next/index.d.ts +3 -0
  17. package/dist/src/adapters/next/serve.d.ts +19 -0
  18. package/dist/src/adapters/node/index.d.ts +5 -0
  19. package/dist/src/adapters/node/orpc-handler.d.ts +12 -0
  20. package/dist/src/adapters/node/request-listener.d.ts +28 -0
  21. package/dist/src/adapters/node/types.d.ts +22 -0
  22. package/dist/src/builder.d.ts +10 -9
  23. package/dist/src/error.d.ts +10 -0
  24. package/dist/src/implementer-chainable.d.ts +2 -2
  25. package/dist/src/index.d.ts +2 -1
  26. package/dist/src/lazy-decorated.d.ts +2 -2
  27. package/dist/src/middleware-decorated.d.ts +6 -5
  28. package/dist/src/middleware.d.ts +20 -8
  29. package/dist/src/procedure-builder.d.ts +16 -14
  30. package/dist/src/procedure-client.d.ts +9 -9
  31. package/dist/src/procedure-decorated.d.ts +10 -9
  32. package/dist/src/procedure-implementer.d.ts +12 -11
  33. package/dist/src/procedure.d.ts +33 -13
  34. package/dist/src/router-builder.d.ts +3 -3
  35. package/dist/src/router-client.d.ts +2 -2
  36. package/dist/src/router-implementer.d.ts +2 -2
  37. package/dist/src/router.d.ts +3 -3
  38. package/dist/src/types.d.ts +2 -0
  39. package/package.json +24 -8
  40. package/dist/src/fetch/composite-handler.d.ts +0 -8
  41. package/dist/src/fetch/orpc-handler.d.ts +0 -20
  42. package/dist/src/fetch/orpc-payload-codec.d.ts +0 -11
  43. package/dist/src/fetch/types.d.ts +0 -16
  44. /package/dist/src/{fetch → adapters/fetch}/super-json.d.ts +0 -0
package/dist/fetch.js CHANGED
@@ -1,303 +1,15 @@
1
+ import "./chunk-WUOGVGWG.js";
1
2
  import {
2
- createProcedureClient,
3
- getRouterChild,
4
- isProcedure,
5
- unlazy
6
- } from "./chunk-37HIYNDO.js";
7
-
8
- // src/fetch/composite-handler.ts
9
- var CompositeHandler = class {
10
- constructor(handlers) {
11
- this.handlers = handlers;
12
- }
13
- async fetch(request, ...opt) {
14
- for (const handler of this.handlers) {
15
- if (handler.condition(request)) {
16
- return handler.fetch(request, ...opt);
17
- }
18
- }
19
- return new Response("None of the handlers can handle the request.", {
20
- status: 404
21
- });
22
- }
23
- };
24
-
25
- // src/fetch/orpc-handler.ts
26
- import { executeWithHooks, ORPC_HANDLER_HEADER, ORPC_HANDLER_VALUE, trim as trim2 } from "@orpc/shared";
27
- import { ORPCError as ORPCError2 } from "@orpc/shared/error";
28
-
29
- // src/fetch/orpc-payload-codec.ts
30
- import { findDeepMatches, set } from "@orpc/shared";
31
- import { ORPCError } from "@orpc/shared/error";
32
-
33
- // ../../node_modules/.pnpm/is-what@5.0.2/node_modules/is-what/dist/getType.js
34
- function getType(payload) {
35
- return Object.prototype.toString.call(payload).slice(8, -1);
36
- }
37
-
38
- // ../../node_modules/.pnpm/is-what@5.0.2/node_modules/is-what/dist/isPlainObject.js
39
- function isPlainObject(payload) {
40
- if (getType(payload) !== "Object")
41
- return false;
42
- const prototype = Object.getPrototypeOf(payload);
43
- return !!prototype && prototype.constructor === Object && prototype === Object.prototype;
44
- }
45
-
46
- // src/fetch/super-json.ts
47
- function serialize(value, segments = [], meta = []) {
48
- if (typeof value === "bigint") {
49
- meta.push(["bigint", segments]);
50
- return { data: value.toString(), meta };
51
- }
52
- if (value instanceof Date) {
53
- meta.push(["date", segments]);
54
- const data = Number.isNaN(value.getTime()) ? "Invalid Date" : value.toISOString();
55
- return { data, meta };
56
- }
57
- if (Number.isNaN(value)) {
58
- meta.push(["nan", segments]);
59
- return { data: "NaN", meta };
60
- }
61
- if (value instanceof RegExp) {
62
- meta.push(["regexp", segments]);
63
- return { data: value.toString(), meta };
64
- }
65
- if (value instanceof URL) {
66
- meta.push(["url", segments]);
67
- return { data: value.toString(), meta };
68
- }
69
- if (isPlainObject(value)) {
70
- const data = {};
71
- for (const k in value) {
72
- data[k] = serialize(value[k], [...segments, k], meta).data;
73
- }
74
- return { data, meta };
75
- }
76
- if (Array.isArray(value)) {
77
- const data = value.map((v, i) => {
78
- if (v === void 0) {
79
- meta.push(["undefined", [...segments, i]]);
80
- return null;
81
- }
82
- return serialize(v, [...segments, i], meta).data;
83
- });
84
- return { data, meta };
85
- }
86
- if (value instanceof Set) {
87
- const result = serialize(Array.from(value), segments, meta);
88
- meta.push(["set", segments]);
89
- return result;
90
- }
91
- if (value instanceof Map) {
92
- const result = serialize(Array.from(value.entries()), segments, meta);
93
- meta.push(["map", segments]);
94
- return result;
95
- }
96
- return { data: value, meta };
97
- }
98
- function deserialize({
99
- data,
100
- meta
101
- }) {
102
- if (meta.length === 0) {
103
- return data;
104
- }
105
- const ref = { data };
106
- for (const [type, segments] of meta) {
107
- let currentRef = ref;
108
- let preSegment = "data";
109
- for (let i = 0; i < segments.length; i++) {
110
- currentRef = currentRef[preSegment];
111
- preSegment = segments[i];
112
- }
113
- switch (type) {
114
- case "nan":
115
- currentRef[preSegment] = Number.NaN;
116
- break;
117
- case "bigint":
118
- currentRef[preSegment] = BigInt(currentRef[preSegment]);
119
- break;
120
- case "date":
121
- currentRef[preSegment] = new Date(currentRef[preSegment]);
122
- break;
123
- case "regexp": {
124
- const [, pattern, flags] = currentRef[preSegment].match(/^\/(.*)\/([a-z]*)$/);
125
- currentRef[preSegment] = new RegExp(pattern, flags);
126
- break;
127
- }
128
- case "url":
129
- currentRef[preSegment] = new URL(currentRef[preSegment]);
130
- break;
131
- case "undefined":
132
- currentRef[preSegment] = void 0;
133
- break;
134
- case "map":
135
- currentRef[preSegment] = new Map(currentRef[preSegment]);
136
- break;
137
- case "set":
138
- currentRef[preSegment] = new Set(currentRef[preSegment]);
139
- break;
140
- /* v8 ignore next 3 */
141
- default: {
142
- const _expected = type;
143
- }
144
- }
145
- }
146
- return ref.data;
147
- }
148
-
149
- // src/fetch/orpc-payload-codec.ts
150
- var ORPCPayloadCodec = class {
151
- encode(payload, method = "POST") {
152
- const { data, meta } = serialize(payload);
153
- if (method === "GET") {
154
- const query = new URLSearchParams({
155
- data: JSON.stringify(data),
156
- meta: JSON.stringify(meta)
157
- });
158
- return { query };
159
- }
160
- const { maps, values } = findDeepMatches((v) => v instanceof Blob, data);
161
- if (values.length > 0) {
162
- const form = new FormData();
163
- if (data !== void 0) {
164
- form.append("data", JSON.stringify(data));
165
- }
166
- form.append("meta", JSON.stringify(meta));
167
- form.append("maps", JSON.stringify(maps));
168
- for (const i in values) {
169
- const value = values[i];
170
- form.append(i, value);
171
- }
172
- return { body: form };
173
- }
174
- return {
175
- body: JSON.stringify({ data, meta }),
176
- headers: new Headers({
177
- "content-type": "application/json"
178
- })
179
- };
180
- }
181
- async decode(re) {
182
- try {
183
- if ("method" in re && re.method === "GET") {
184
- const url = new URL(re.url);
185
- const query = url.searchParams;
186
- const data = JSON.parse(query.getAll("data").at(-1));
187
- const meta = JSON.parse(query.getAll("meta").at(-1));
188
- return deserialize({
189
- data,
190
- meta
191
- });
192
- }
193
- if (re.headers.get("content-type")?.startsWith("multipart/form-data")) {
194
- const form = await re.formData();
195
- const rawData = form.get("data");
196
- const rawMeta = form.get("meta");
197
- const rawMaps = form.get("maps");
198
- let data = JSON.parse(rawData);
199
- const meta = JSON.parse(rawMeta);
200
- const maps = JSON.parse(rawMaps);
201
- for (const i in maps) {
202
- data = set(data, maps[i], form.get(i));
203
- }
204
- return deserialize({
205
- data,
206
- meta
207
- });
208
- }
209
- const json = await re.json();
210
- return deserialize(json);
211
- } catch (e) {
212
- throw new ORPCError({
213
- code: "BAD_REQUEST",
214
- message: "Cannot parse request/response. Please check the request/response body and Content-Type header.",
215
- cause: e
216
- });
217
- }
218
- }
219
- };
220
-
221
- // src/fetch/orpc-procedure-matcher.ts
222
- import { trim } from "@orpc/shared";
223
- var ORPCProcedureMatcher = class {
224
- constructor(router) {
225
- this.router = router;
226
- }
227
- async match(pathname) {
228
- const path = trim(pathname, "/").split("/").map(decodeURIComponent);
229
- const match = getRouterChild(this.router, ...path);
230
- const { default: maybeProcedure } = await unlazy(match);
231
- if (!isProcedure(maybeProcedure)) {
232
- return void 0;
233
- }
234
- return {
235
- procedure: maybeProcedure,
236
- path
237
- };
238
- }
239
- };
240
-
241
- // src/fetch/orpc-handler.ts
242
- var ORPCHandler = class {
243
- constructor(router, options) {
244
- this.router = router;
245
- this.options = options;
246
- this.procedureMatcher = options?.procedureMatcher ?? new ORPCProcedureMatcher(router);
247
- this.payloadCodec = options?.payloadCodec ?? new ORPCPayloadCodec();
248
- }
249
- procedureMatcher;
250
- payloadCodec;
251
- condition(request) {
252
- return Boolean(request.headers.get(ORPC_HANDLER_HEADER)?.includes(ORPC_HANDLER_VALUE));
253
- }
254
- async fetch(request, ...[options]) {
255
- const context = options?.context;
256
- const execute = async () => {
257
- const url = new URL(request.url);
258
- const pathname = `/${trim2(url.pathname.replace(options?.prefix ?? "", ""), "/")}`;
259
- const match = await this.procedureMatcher.match(pathname);
260
- if (!match) {
261
- throw new ORPCError2({ code: "NOT_FOUND", message: "Not found" });
262
- }
263
- const input = await this.payloadCodec.decode(request);
264
- const client = createProcedureClient({
265
- context,
266
- procedure: match.procedure,
267
- path: match.path
268
- });
269
- const output = await client(input, { signal: options?.signal });
270
- const { body, headers } = this.payloadCodec.encode(output);
271
- return new Response(body, { headers });
272
- };
273
- try {
274
- return await executeWithHooks({
275
- context,
276
- execute,
277
- input: request,
278
- hooks: this.options,
279
- meta: {
280
- signal: options?.signal
281
- }
282
- });
283
- } catch (e) {
284
- const error = e instanceof ORPCError2 ? e : new ORPCError2({
285
- code: "INTERNAL_SERVER_ERROR",
286
- message: "Internal server error",
287
- cause: e
288
- });
289
- const { body, headers } = this.payloadCodec.encode(error.toJSON());
290
- return new Response(body, {
291
- headers,
292
- status: error.status
293
- });
294
- }
295
- }
296
- };
3
+ ORPCHandler,
4
+ ORPCPayloadCodec,
5
+ ORPCProcedureMatcher,
6
+ super_json_exports
7
+ } from "./chunk-V3I7RIRY.js";
8
+ import "./chunk-DNG2IB3R.js";
297
9
  export {
298
- CompositeHandler,
299
10
  ORPCHandler,
300
11
  ORPCPayloadCodec,
301
- ORPCProcedureMatcher
12
+ ORPCProcedureMatcher,
13
+ super_json_exports as SuperJSON
302
14
  };
303
15
  //# sourceMappingURL=fetch.js.map
package/dist/hono.js ADDED
@@ -0,0 +1,30 @@
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/hono/middleware.ts
11
+ import { value } from "@orpc/shared";
12
+ function createMiddleware(handler, ...[options]) {
13
+ return async (c, next) => {
14
+ const context = await value(options?.context, c);
15
+ const { matched, response } = await handler.handle(c.req.raw, { ...options, context });
16
+ if (matched) {
17
+ c.res = response;
18
+ return;
19
+ }
20
+ await next();
21
+ };
22
+ }
23
+ export {
24
+ ORPCHandler,
25
+ ORPCPayloadCodec,
26
+ ORPCProcedureMatcher,
27
+ super_json_exports as SuperJSON,
28
+ createMiddleware
29
+ };
30
+ //# sourceMappingURL=hono.js.map
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-37HIYNDO.js";
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((input, context, meta, ...rest) => {
33
- const next = async (options) => {
34
- return mapped(input, mergeContext(context, options.context), meta, ...rest);
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(input, context, { ...meta, next }, ...rest);
37
+ const merged = middleware({ ...options, next }, input, output, ...rest);
37
38
  return merged;
38
39
  });
39
40
  return concatted;
@@ -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({
@@ -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,7 +421,18 @@ 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
  }
@@ -421,7 +441,8 @@ var Builder = class _Builder {
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
  }));
@@ -486,32 +507,38 @@ function createRouterClient(options) {
486
507
  }
487
508
 
488
509
  // src/index.ts
489
- export * from "@orpc/shared/error";
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
@@ -1,6 +1,6 @@
1
- export * from './composite-handler';
2
1
  export * from './orpc-handler';
3
2
  export * from './orpc-payload-codec';
4
3
  export * from './orpc-procedure-matcher';
4
+ export * as SuperJSON from './super-json';
5
5
  export * from './types';
6
6
  //# sourceMappingURL=index.d.ts.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
@@ -1,5 +1,5 @@
1
- import type { ANY_PROCEDURE } from '../procedure';
2
- import { type ANY_ROUTER } from '../router';
1
+ import type { ANY_PROCEDURE } from '../../procedure';
2
+ import { type ANY_ROUTER } from '../../router';
3
3
  export declare class ORPCProcedureMatcher {
4
4
  private readonly router;
5
5
  constructor(router: ANY_ROUTER);
@@ -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,3 @@
1
+ export * from '../fetch';
2
+ export * from './middleware';
3
+ //# sourceMappingURL=index.d.ts.map