@orpc/server 0.0.0-next.9ada823 → 0.0.0-next.9b3a030

Sign up to get free protection for your applications and to get access to all the features.
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