@orpc/server 0.0.0-next.9588d75 → 0.0.0-next.9914009

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. package/dist/chunk-3EVCPLVI.js +301 -0
  2. package/dist/chunk-OUPZ7QGV.js +245 -0
  3. package/dist/chunk-WUOGVGWG.js +1 -0
  4. package/dist/fetch.js +10 -281
  5. package/dist/hono.js +30 -0
  6. package/dist/index.js +166 -122
  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 +11 -10
  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 +3 -1
  26. package/dist/src/lazy-decorated.d.ts +3 -6
  27. package/dist/src/middleware-decorated.d.ts +6 -5
  28. package/dist/src/middleware.d.ts +21 -8
  29. package/dist/src/procedure-builder.d.ts +17 -15
  30. package/dist/src/procedure-client.d.ts +9 -16
  31. package/dist/src/procedure-decorated.d.ts +22 -10
  32. package/dist/src/procedure-implementer.d.ts +14 -12
  33. package/dist/src/procedure-utils.d.ts +17 -0
  34. package/dist/src/procedure.d.ts +34 -13
  35. package/dist/src/router-builder.d.ts +4 -4
  36. package/dist/src/router-client.d.ts +7 -6
  37. package/dist/src/router-implementer.d.ts +2 -2
  38. package/dist/src/router.d.ts +4 -4
  39. package/dist/src/types.d.ts +2 -0
  40. package/package.json +24 -8
  41. package/dist/chunk-FN62GL22.js +0 -182
  42. package/dist/src/fetch/composite-handler.d.ts +0 -8
  43. package/dist/src/fetch/orpc-handler.d.ts +0 -20
  44. package/dist/src/fetch/orpc-payload-codec.d.ts +0 -9
  45. package/dist/src/fetch/types.d.ts +0 -16
  46. /package/dist/src/{fetch → adapters/fetch}/super-json.d.ts +0 -0
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,
@@ -8,32 +9,33 @@ import {
8
9
  isProcedure,
9
10
  lazy,
10
11
  mergeContext,
12
+ middlewareOutputFn,
11
13
  unlazy
12
- } from "./chunk-FN62GL22.js";
14
+ } from "./chunk-OUPZ7QGV.js";
13
15
 
14
16
  // src/builder.ts
15
17
  import { ContractProcedure } from "@orpc/contract";
16
18
 
17
19
  // src/implementer-chainable.ts
18
20
  import { isContractProcedure } from "@orpc/contract";
19
- import { createCallableObject } from "@orpc/shared";
21
+ import { createCallableObject as createCallableObject2 } from "@orpc/shared";
20
22
 
21
23
  // src/middleware-decorated.ts
22
24
  function decorateMiddleware(middleware) {
23
25
  const decorated = middleware;
24
26
  decorated.mapInput = (mapInput) => {
25
27
  const mapped = decorateMiddleware(
26
- (input, ...rest) => middleware(mapInput(input), ...rest)
28
+ (options, input, ...rest) => middleware(options, mapInput(input), ...rest)
27
29
  );
28
30
  return mapped;
29
31
  };
30
32
  decorated.concat = (concatMiddleware, mapInput) => {
31
33
  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);
34
+ const concatted = decorateMiddleware((options, input, output, ...rest) => {
35
+ const next = async (nextOptions) => {
36
+ return mapped({ ...options, context: mergeContext(nextOptions.context, options.context) }, input, output, ...rest);
35
37
  };
36
- const merged = middleware(input, context, { ...meta, next }, ...rest);
38
+ const merged = middleware({ ...options, next }, input, output, ...rest);
37
39
  return merged;
38
40
  });
39
41
  return concatted;
@@ -43,58 +45,72 @@ function decorateMiddleware(middleware) {
43
45
 
44
46
  // src/procedure-decorated.ts
45
47
  import { DecoratedContractProcedure } from "@orpc/contract";
46
- function decorateProcedure(procedure) {
47
- const caller = createProcedureClient({
48
- procedure,
49
- context: void 0
50
- });
51
- const decorated = caller;
52
- decorated["~type"] = procedure["~type"];
53
- decorated["~orpc"] = procedure["~orpc"];
54
- decorated.prefix = (prefix) => {
55
- return decorateProcedure(new Procedure({
56
- ...procedure["~orpc"],
57
- contract: DecoratedContractProcedure.decorate(procedure["~orpc"].contract).prefix(prefix)
58
- }));
59
- };
60
- decorated.route = (route) => {
61
- return decorateProcedure(new Procedure({
62
- ...procedure["~orpc"],
63
- contract: DecoratedContractProcedure.decorate(procedure["~orpc"].contract).route(route)
64
- }));
65
- };
66
- decorated.use = (middleware, mapInput) => {
48
+ import { createCallableObject } from "@orpc/shared";
49
+ var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
50
+ static decorate(procedure) {
51
+ if (procedure instanceof _DecoratedProcedure) {
52
+ return procedure;
53
+ }
54
+ return new _DecoratedProcedure(procedure["~orpc"]);
55
+ }
56
+ prefix(prefix) {
57
+ return new _DecoratedProcedure({
58
+ ...this["~orpc"],
59
+ contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).prefix(prefix)
60
+ });
61
+ }
62
+ route(route) {
63
+ return new _DecoratedProcedure({
64
+ ...this["~orpc"],
65
+ contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).route(route)
66
+ });
67
+ }
68
+ use(middleware, mapInput) {
67
69
  const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
68
- return decorateProcedure(new Procedure({
69
- ...procedure["~orpc"],
70
- middlewares: [...procedure["~orpc"].middlewares ?? [], middleware_]
71
- }));
72
- };
73
- decorated.unshiftTag = (...tags) => {
74
- return decorateProcedure(new Procedure({
75
- ...procedure["~orpc"],
76
- contract: DecoratedContractProcedure.decorate(procedure["~orpc"].contract).unshiftTag(...tags)
77
- }));
78
- };
79
- decorated.unshiftMiddleware = (...middlewares) => {
80
- if (procedure["~orpc"].middlewares?.length) {
70
+ return new _DecoratedProcedure({
71
+ ...this["~orpc"],
72
+ postMiddlewares: [...this["~orpc"].postMiddlewares, middleware_]
73
+ });
74
+ }
75
+ unshiftTag(...tags) {
76
+ return new _DecoratedProcedure({
77
+ ...this["~orpc"],
78
+ contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).unshiftTag(...tags)
79
+ });
80
+ }
81
+ unshiftMiddleware(...middlewares) {
82
+ const castedMiddlewares = middlewares;
83
+ if (this["~orpc"].preMiddlewares.length) {
81
84
  let min = 0;
82
- for (let i = 0; i < procedure["~orpc"].middlewares.length; i++) {
83
- const index = middlewares.indexOf(procedure["~orpc"].middlewares[i], min);
85
+ for (let i = 0; i < this["~orpc"].preMiddlewares.length; i++) {
86
+ const index = castedMiddlewares.indexOf(this["~orpc"].preMiddlewares[i], min);
84
87
  if (index === -1) {
85
- middlewares.push(...procedure["~orpc"].middlewares.slice(i));
88
+ castedMiddlewares.push(...this["~orpc"].preMiddlewares.slice(i));
86
89
  break;
87
90
  }
88
91
  min = index + 1;
89
92
  }
90
93
  }
91
- return decorateProcedure(new Procedure({
92
- ...procedure["~orpc"],
93
- middlewares
94
- }));
95
- };
96
- return decorated;
97
- }
94
+ return new _DecoratedProcedure({
95
+ ...this["~orpc"],
96
+ preMiddlewares: castedMiddlewares
97
+ });
98
+ }
99
+ /**
100
+ * Make this procedure callable (works like a function while still being a procedure).
101
+ * **Note**: this only takes effect when this method is called at the end of the chain.
102
+ */
103
+ callable(...rest) {
104
+ return createCallableObject(this, createProcedureClient(this, ...rest));
105
+ }
106
+ /**
107
+ * Make this procedure compatible with server action (the same as .callable, but the type is compatible with server action).
108
+ * **Note**: this only takes effect when this method is called at the end of the chain.
109
+ */
110
+ actionable(...rest) {
111
+ return this.callable(...rest);
112
+ }
113
+ };
98
114
 
99
115
  // src/procedure-implementer.ts
100
116
  var ProcedureImplementer = class _ProcedureImplementer {
@@ -107,15 +123,16 @@ var ProcedureImplementer = class _ProcedureImplementer {
107
123
  const mappedMiddleware = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
108
124
  return new _ProcedureImplementer({
109
125
  ...this["~orpc"],
110
- middlewares: [...this["~orpc"].middlewares ?? [], mappedMiddleware]
126
+ postMiddlewares: [...this["~orpc"].postMiddlewares, mappedMiddleware]
111
127
  });
112
128
  }
113
- func(func) {
114
- return decorateProcedure(new Procedure({
115
- middlewares: this["~orpc"].middlewares,
129
+ handler(handler) {
130
+ return new DecoratedProcedure({
131
+ postMiddlewares: this["~orpc"].postMiddlewares,
132
+ preMiddlewares: this["~orpc"].preMiddlewares,
116
133
  contract: this["~orpc"].contract,
117
- func
118
- }));
134
+ handler
135
+ });
119
136
  }
120
137
  };
121
138
 
@@ -153,31 +170,10 @@ function getLazyRouterPrefix(obj) {
153
170
  return obj[LAZY_ROUTER_PREFIX_SYMBOL];
154
171
  }
155
172
 
156
- // src/lazy-utils.ts
157
- function createLazyProcedureFormAnyLazy(lazied) {
158
- const lazyProcedure = lazy(async () => {
159
- const { default: maybeProcedure } = await unlazy(flatLazy(lazied));
160
- if (!isProcedure(maybeProcedure)) {
161
- throw new Error(`
162
- Expected a lazy<procedure> but got lazy<unknown>.
163
- This should be caught by TypeScript compilation.
164
- Please report this issue if this makes you feel uncomfortable.
165
- `);
166
- }
167
- return { default: maybeProcedure };
168
- });
169
- return lazyProcedure;
170
- }
171
-
172
173
  // src/lazy-decorated.ts
173
174
  function decorateLazy(lazied) {
174
175
  const flattenLazy = flatLazy(lazied);
175
- const procedureProcedureClient = createProcedureClient({
176
- procedure: createLazyProcedureFormAnyLazy(flattenLazy),
177
- context: void 0
178
- });
179
- Object.assign(procedureProcedureClient, flattenLazy);
180
- const recursive = new Proxy(procedureProcedureClient, {
176
+ const recursive = new Proxy(flattenLazy, {
181
177
  get(target, key) {
182
178
  if (typeof key !== "string") {
183
179
  return Reflect.get(target, key);
@@ -217,7 +213,7 @@ var RouterBuilder = class _RouterBuilder {
217
213
  use(middleware) {
218
214
  return new _RouterBuilder({
219
215
  ...this["~orpc"],
220
- middlewares: [...this["~orpc"].middlewares ?? [], middleware]
216
+ middlewares: [...this["~orpc"].middlewares, middleware]
221
217
  });
222
218
  }
223
219
  router(router) {
@@ -244,7 +240,7 @@ function adapt(item, options) {
244
240
  return adaptedLazy;
245
241
  }
246
242
  if (isProcedure(item)) {
247
- let decorated = decorateProcedure(item);
243
+ let decorated = DecoratedProcedure.decorate(item);
248
244
  if (options.tags?.length) {
249
245
  decorated = decorated.unshiftTag(...options.tags);
250
246
  }
@@ -289,11 +285,12 @@ var RouterImplementer = class _RouterImplementer {
289
285
  };
290
286
 
291
287
  // src/implementer-chainable.ts
292
- function createChainableImplementer(contract, middlewares) {
288
+ function createChainableImplementer(contract, middlewares = []) {
293
289
  if (isContractProcedure(contract)) {
294
290
  const implementer = new ProcedureImplementer({
295
291
  contract,
296
- middlewares
292
+ preMiddlewares: middlewares,
293
+ postMiddlewares: []
297
294
  });
298
295
  return implementer;
299
296
  }
@@ -312,7 +309,7 @@ function createChainableImplementer(contract, middlewares) {
312
309
  if (!next) {
313
310
  return method.bind(routerImplementer);
314
311
  }
315
- return createCallableObject(next, method.bind(routerImplementer));
312
+ return createCallableObject2(next, method.bind(routerImplementer));
316
313
  }
317
314
  });
318
315
  return merged;
@@ -346,24 +343,33 @@ var ProcedureBuilder = class _ProcedureBuilder {
346
343
  contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).output(schema, example)
347
344
  });
348
345
  }
346
+ errors(errors) {
347
+ return new _ProcedureBuilder({
348
+ ...this["~orpc"],
349
+ contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).errors(errors)
350
+ });
351
+ }
349
352
  use(middleware, mapInput) {
350
353
  if (!mapInput) {
351
354
  return new ProcedureImplementer({
352
355
  contract: this["~orpc"].contract,
353
- middlewares: this["~orpc"].middlewares
356
+ preMiddlewares: this["~orpc"].middlewares,
357
+ postMiddlewares: []
354
358
  }).use(middleware);
355
359
  }
356
360
  return new ProcedureImplementer({
357
361
  contract: this["~orpc"].contract,
358
- middlewares: this["~orpc"].middlewares
362
+ preMiddlewares: this["~orpc"].middlewares,
363
+ postMiddlewares: []
359
364
  }).use(middleware, mapInput);
360
365
  }
361
- func(func) {
362
- return decorateProcedure(new Procedure({
363
- middlewares: this["~orpc"].middlewares,
366
+ handler(handler) {
367
+ return new DecoratedProcedure({
368
+ preMiddlewares: this["~orpc"].middlewares,
369
+ postMiddlewares: [],
364
370
  contract: this["~orpc"].contract,
365
- func
366
- }));
371
+ handler
372
+ });
367
373
  }
368
374
  };
369
375
 
@@ -375,12 +381,14 @@ var Builder = class _Builder {
375
381
  this["~orpc"] = def;
376
382
  }
377
383
  context() {
378
- return new _Builder({});
384
+ return new _Builder({
385
+ middlewares: []
386
+ });
379
387
  }
380
388
  use(middleware) {
381
389
  return new _Builder({
382
390
  ...this["~orpc"],
383
- middlewares: [...this["~orpc"].middlewares ?? [], middleware]
391
+ middlewares: [...this["~orpc"].middlewares, middleware]
384
392
  });
385
393
  }
386
394
  middleware(middleware) {
@@ -392,7 +400,8 @@ var Builder = class _Builder {
392
400
  contract: new ContractProcedure({
393
401
  route,
394
402
  InputSchema: void 0,
395
- OutputSchema: void 0
403
+ OutputSchema: void 0,
404
+ errorMap: void 0
396
405
  })
397
406
  });
398
407
  }
@@ -402,7 +411,8 @@ var Builder = class _Builder {
402
411
  contract: new ContractProcedure({
403
412
  OutputSchema: void 0,
404
413
  InputSchema: schema,
405
- inputExample: example
414
+ inputExample: example,
415
+ errorMap: void 0
406
416
  })
407
417
  });
408
418
  }
@@ -412,19 +422,32 @@ var Builder = class _Builder {
412
422
  contract: new ContractProcedure({
413
423
  InputSchema: void 0,
414
424
  OutputSchema: schema,
415
- outputExample: example
425
+ outputExample: example,
426
+ errorMap: void 0
416
427
  })
417
428
  });
418
429
  }
419
- func(func) {
420
- return decorateProcedure(new Procedure({
430
+ errors(errors) {
431
+ return new ProcedureBuilder({
421
432
  middlewares: this["~orpc"].middlewares,
422
433
  contract: new ContractProcedure({
423
434
  InputSchema: void 0,
424
- OutputSchema: void 0
435
+ OutputSchema: void 0,
436
+ errorMap: errors
437
+ })
438
+ });
439
+ }
440
+ handler(handler) {
441
+ return new DecoratedProcedure({
442
+ preMiddlewares: this["~orpc"].middlewares,
443
+ postMiddlewares: [],
444
+ contract: new ContractProcedure({
445
+ InputSchema: void 0,
446
+ OutputSchema: void 0,
447
+ errorMap: void 0
425
448
  }),
426
- func
427
- }));
449
+ handler
450
+ });
428
451
  }
429
452
  prefix(prefix) {
430
453
  return new RouterBuilder({
@@ -449,36 +472,47 @@ var Builder = class _Builder {
449
472
  }
450
473
  };
451
474
 
475
+ // src/procedure-utils.ts
476
+ function call(procedure, input, ...rest) {
477
+ return createProcedureClient(procedure, ...rest)(input);
478
+ }
479
+
480
+ // src/lazy-utils.ts
481
+ function createLazyProcedureFormAnyLazy(lazied) {
482
+ const lazyProcedure = lazy(async () => {
483
+ const { default: maybeProcedure } = await unlazy(flatLazy(lazied));
484
+ if (!isProcedure(maybeProcedure)) {
485
+ throw new Error(`
486
+ Expected a lazy<procedure> but got lazy<unknown>.
487
+ This should be caught by TypeScript compilation.
488
+ Please report this issue if this makes you feel uncomfortable.
489
+ `);
490
+ }
491
+ return { default: maybeProcedure };
492
+ });
493
+ return lazyProcedure;
494
+ }
495
+
452
496
  // src/router-client.ts
453
- function createRouterClient(options) {
454
- if (isProcedure(options.router)) {
455
- const caller = createProcedureClient({
456
- ...options,
457
- procedure: options.router,
458
- context: options.context,
459
- path: options.path
460
- });
497
+ function createRouterClient(router, ...rest) {
498
+ if (isProcedure(router)) {
499
+ const caller = createProcedureClient(router, ...rest);
461
500
  return caller;
462
501
  }
463
- const procedureCaller = isLazy(options.router) ? createProcedureClient({
464
- ...options,
465
- procedure: createLazyProcedureFormAnyLazy(options.router),
466
- context: options.context,
467
- path: options.path
468
- }) : {};
502
+ const procedureCaller = isLazy(router) ? createProcedureClient(createLazyProcedureFormAnyLazy(router), ...rest) : {};
469
503
  const recursive = new Proxy(procedureCaller, {
470
504
  get(target, key) {
471
505
  if (typeof key !== "string") {
472
506
  return Reflect.get(target, key);
473
507
  }
474
- const next = getRouterChild(options.router, key);
508
+ const next = getRouterChild(router, key);
475
509
  if (!next) {
476
510
  return Reflect.get(target, key);
477
511
  }
478
- return createRouterClient({
512
+ const [options] = rest;
513
+ return createRouterClient(next, {
479
514
  ...options,
480
- router: next,
481
- path: [...options.path ?? [], key]
515
+ path: [...options?.path ?? [], key]
482
516
  });
483
517
  }
484
518
  });
@@ -486,32 +520,42 @@ function createRouterClient(options) {
486
520
  }
487
521
 
488
522
  // src/index.ts
489
- export * from "@orpc/shared/error";
490
- var os = new Builder({});
523
+ import { configGlobal, fallbackToGlobalConfig, isDefinedError, ORPCError, safe } from "@orpc/contract";
524
+ var os = new Builder({
525
+ middlewares: []
526
+ });
491
527
  export {
492
528
  Builder,
529
+ DecoratedProcedure,
493
530
  LAZY_LOADER_SYMBOL,
531
+ ORPCError,
494
532
  Procedure,
495
533
  ProcedureBuilder,
496
534
  ProcedureImplementer,
497
535
  RouterBuilder,
498
536
  RouterImplementer,
537
+ call,
538
+ configGlobal,
499
539
  createChainableImplementer,
540
+ createORPCErrorConstructorMap,
500
541
  createProcedureClient,
501
542
  createRouterClient,
502
543
  decorateLazy,
503
544
  decorateMiddleware,
504
- decorateProcedure,
505
545
  deepSetLazyRouterPrefix,
546
+ fallbackToGlobalConfig,
506
547
  flatLazy,
507
548
  getLazyRouterPrefix,
508
549
  getRouterChild,
509
550
  getRouterContract,
551
+ isDefinedError,
510
552
  isLazy,
511
553
  isProcedure,
512
554
  lazy,
513
555
  mergeContext,
556
+ middlewareOutputFn,
514
557
  os,
558
+ safe,
515
559
  setRouterContract,
516
560
  unlazy
517
561
  };
package/dist/next.js ADDED
@@ -0,0 +1,36 @@
1
+ import "./chunk-WUOGVGWG.js";
2
+ import {
3
+ ORPCPayloadCodec,
4
+ ORPCProcedureMatcher,
5
+ RPCHandler,
6
+ super_json_exports
7
+ } from "./chunk-3EVCPLVI.js";
8
+ import "./chunk-OUPZ7QGV.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
+ ORPCPayloadCodec,
31
+ ORPCProcedureMatcher,
32
+ RPCHandler,
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
+ RPCHandler
3
+ } from "./chunk-3EVCPLVI.js";
4
+ import "./chunk-OUPZ7QGV.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 RPCHandler2 = class {
65
+ orpcFetchHandler;
66
+ constructor(router, options) {
67
+ this.orpcFetchHandler = new RPCHandler(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
+ RPCHandler2 as RPCHandler,
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 RPCHandlerOptions<T extends Context> = Hooks<Request, FetchHandleResult, T, {
8
+ signal?: AbortSignal;
9
+ }> & {
10
+ procedureMatcher?: PublicORPCProcedureMatcher;
11
+ payloadCodec?: PublicORPCPayloadCodec;
12
+ };
13
+ export declare class RPCHandler<T extends Context> implements FetchHandler<T> {
14
+ private readonly options?;
15
+ private readonly procedureMatcher;
16
+ private readonly payloadCodec;
17
+ constructor(router: Router<T, any>, options?: NoInfer<RPCHandlerOptions<T>> | undefined);
18
+ handle(request: Request, ...[options]: FetchHandleRest<T>): Promise<FetchHandleResult>;
19
+ }
20
+ //# sourceMappingURL=orpc-handler.d.ts.map
@@ -0,0 +1,16 @@
1
+ import { type HTTPMethod } from '@orpc/contract';
2
+ export declare class ORPCPayloadCodec {
3
+ /**
4
+ * If method is GET, the payload will be encoded as query string.
5
+ * If method is GET and payload contain file, the method will be fallback to fallbackMethod. (fallbackMethod = GET will force to use GET method)
6
+ */
7
+ encode(payload: unknown, method?: HTTPMethod, fallbackMethod?: HTTPMethod): {
8
+ query?: URLSearchParams;
9
+ body?: FormData | string;
10
+ headers?: Headers;
11
+ method: HTTPMethod;
12
+ };
13
+ decode(re: Request | Response): Promise<unknown>;
14
+ }
15
+ export type PublicORPCPayloadCodec = Pick<ORPCPayloadCodec, keyof ORPCPayloadCodec>;
16
+ //# sourceMappingURL=orpc-payload-codec.d.ts.map
@@ -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);