@orpc/server 0.0.0-next.ef3ba82 → 0.0.0-next.f99e554

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-6A7XHEBH.js +189 -0
  2. package/dist/chunk-B2EZJB7X.js +303 -0
  3. package/dist/fetch.js +23 -96
  4. package/dist/index.js +405 -280
  5. package/dist/node.js +45 -0
  6. package/dist/src/adapters/fetch/composite-handler.d.ts +8 -0
  7. package/dist/src/adapters/fetch/index.d.ts +7 -0
  8. package/dist/src/adapters/fetch/orpc-handler.d.ts +20 -0
  9. package/dist/src/adapters/fetch/orpc-payload-codec.d.ts +16 -0
  10. package/dist/src/adapters/fetch/orpc-procedure-matcher.d.ts +12 -0
  11. package/dist/src/adapters/fetch/super-json.d.ts +12 -0
  12. package/dist/src/adapters/fetch/types.d.ts +16 -0
  13. package/dist/src/adapters/node/composite-handler.d.ts +9 -0
  14. package/dist/src/adapters/node/index.d.ts +5 -0
  15. package/dist/src/adapters/node/orpc-handler.d.ts +12 -0
  16. package/dist/src/adapters/node/types.d.ts +21 -0
  17. package/dist/src/builder.d.ts +28 -41
  18. package/dist/src/hidden.d.ts +6 -0
  19. package/dist/src/implementer-chainable.d.ts +10 -0
  20. package/dist/src/index.d.ts +12 -3
  21. package/dist/src/lazy-decorated.d.ts +10 -0
  22. package/dist/src/lazy-utils.d.ts +4 -0
  23. package/dist/src/lazy.d.ts +18 -0
  24. package/dist/src/middleware-decorated.d.ts +8 -0
  25. package/dist/src/middleware.d.ts +4 -6
  26. package/dist/src/procedure-builder.d.ts +16 -24
  27. package/dist/src/procedure-client.d.ts +34 -0
  28. package/dist/src/procedure-decorated.d.ts +14 -0
  29. package/dist/src/procedure-implementer.d.ts +14 -13
  30. package/dist/src/procedure.d.ts +19 -24
  31. package/dist/src/router-builder.d.ts +25 -17
  32. package/dist/src/router-client.d.ts +25 -0
  33. package/dist/src/router-implementer.d.ts +19 -17
  34. package/dist/src/router.d.ts +12 -15
  35. package/dist/src/types.d.ts +9 -4
  36. package/dist/src/utils.d.ts +1 -0
  37. package/package.json +14 -12
  38. package/dist/chunk-CVLK2PBB.js +0 -189
  39. package/dist/src/fetch/handle.d.ts +0 -6
  40. package/dist/src/fetch/handler.d.ts +0 -2
  41. package/dist/src/fetch/index.d.ts +0 -3
  42. package/dist/src/fetch/types.d.ts +0 -34
  43. package/dist/src/procedure-caller.d.ts +0 -18
  44. package/dist/src/router-caller.d.ts +0 -21
@@ -1,21 +1,29 @@
1
- import type { HandledRouter, Router } from './router';
1
+ import type { HTTPPath } from '@orpc/contract';
2
+ import type { FlattenLazy, Lazy } from './lazy';
3
+ import type { Middleware } from './middleware';
4
+ import type { Procedure } from './procedure';
5
+ import type { ANY_ROUTER, Router } from './router';
2
6
  import type { Context, MergeContext } from './types';
3
- import { type HTTPPath } from '@orpc/contract';
4
- import { type MapInputMiddleware, type Middleware } from './middleware';
7
+ import { type DecoratedLazy } from './lazy-decorated';
8
+ import { type DecoratedProcedure } from './procedure-decorated';
9
+ export type AdaptedRouter<TContext extends Context, TRouter extends ANY_ROUTER> = TRouter extends Lazy<infer U extends ANY_ROUTER> ? DecoratedLazy<AdaptedRouter<TContext, U>> : TRouter extends Procedure<any, infer UExtraContext, infer UInputSchema, infer UOutputSchema, infer UFuncOutput> ? DecoratedProcedure<TContext, UExtraContext, UInputSchema, UOutputSchema, UFuncOutput> : {
10
+ [K in keyof TRouter]: TRouter[K] extends ANY_ROUTER ? AdaptedRouter<TContext, TRouter[K]> : never;
11
+ };
12
+ export type RouterBuilderDef<TContext extends Context, TExtraContext extends Context> = {
13
+ prefix?: HTTPPath;
14
+ tags?: readonly string[];
15
+ middlewares?: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any>[];
16
+ };
5
17
  export declare class RouterBuilder<TContext extends Context, TExtraContext extends Context> {
6
- zz$rb: {
7
- prefix?: HTTPPath;
8
- tags?: string[];
9
- middlewares?: Middleware<any, any, any, any>[];
10
- };
11
- constructor(zz$rb: {
12
- prefix?: HTTPPath;
13
- tags?: string[];
14
- middlewares?: Middleware<any, any, any, any>[];
15
- });
18
+ '~type': "RouterBuilder";
19
+ '~orpc': RouterBuilderDef<TContext, TExtraContext>;
20
+ constructor(def: RouterBuilderDef<TContext, TExtraContext>);
16
21
  prefix(prefix: HTTPPath): RouterBuilder<TContext, TExtraContext>;
17
- tags(...tags: string[]): RouterBuilder<TContext, TExtraContext>;
18
- use<UExtraContext extends Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, unknown, unknown>): RouterBuilder<TContext, MergeContext<TExtraContext, UExtraContext>>;
19
- use<UExtraContext extends Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>> | undefined = undefined, UMappedInput = unknown>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, UMappedInput, unknown>, mapInput: MapInputMiddleware<unknown, UMappedInput>): RouterBuilder<TContext, MergeContext<TExtraContext, UExtraContext>>;
20
- router<URouter extends Router<TContext>>(router: URouter): HandledRouter<URouter>;
22
+ tag(...tags: string[]): RouterBuilder<TContext, TExtraContext>;
23
+ use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, unknown, unknown>): RouterBuilder<TContext, MergeContext<TExtraContext, U>>;
24
+ router<U extends Router<MergeContext<TContext, TExtraContext>, any>>(router: U): AdaptedRouter<TContext, U>;
25
+ lazy<U extends Router<MergeContext<TContext, TExtraContext>, any>>(loader: () => Promise<{
26
+ default: U;
27
+ }>): AdaptedRouter<TContext, FlattenLazy<U>>;
21
28
  }
29
+ //# sourceMappingURL=router-builder.d.ts.map
@@ -0,0 +1,25 @@
1
+ import type { ContractProcedure, ContractRouter, SchemaInput, SchemaOutput } from '@orpc/contract';
2
+ import type { Hooks, Value } from '@orpc/shared';
3
+ import type { Lazy } from './lazy';
4
+ import type { Procedure } from './procedure';
5
+ import type { ProcedureClient } from './procedure-client';
6
+ import type { Meta } from './types';
7
+ import { type ANY_ROUTER, type Router } from './router';
8
+ export type RouterClient<TRouter extends ANY_ROUTER | ContractRouter, TClientContext> = TRouter extends Lazy<infer U extends ANY_ROUTER | ContractRouter> ? RouterClient<U, TClientContext> : TRouter extends ContractProcedure<infer UInputSchema, infer UOutputSchema> | Procedure<any, any, infer UInputSchema, infer UOutputSchema, infer UFuncOutput> ? ProcedureClient<SchemaInput<UInputSchema>, SchemaOutput<UOutputSchema, UFuncOutput>, TClientContext> : {
9
+ [K in keyof TRouter]: TRouter[K] extends ANY_ROUTER | ContractRouter ? RouterClient<TRouter[K], TClientContext> : never;
10
+ };
11
+ export type CreateRouterClientOptions<TRouter extends ANY_ROUTER> = {
12
+ router: TRouter | Lazy<undefined>;
13
+ /**
14
+ * This is helpful for logging and analytics.
15
+ *
16
+ * @internal
17
+ */
18
+ path?: string[];
19
+ } & (TRouter extends Router<infer UContext, any> ? undefined extends UContext ? {
20
+ context?: Value<UContext>;
21
+ } : {
22
+ context: Value<UContext>;
23
+ } : never) & Hooks<unknown, unknown, TRouter extends Router<infer UContext, any> ? UContext : never, Meta>;
24
+ export declare function createRouterClient<TRouter extends ANY_ROUTER>(options: CreateRouterClientOptions<TRouter>): RouterClient<TRouter, unknown>;
25
+ //# sourceMappingURL=router-client.d.ts.map
@@ -1,19 +1,21 @@
1
+ import type { ContractRouter } from '@orpc/contract';
2
+ import type { FlattenLazy } from './lazy';
1
3
  import type { Middleware } from './middleware';
2
- import type { RouterWithContract } from './router';
3
- import type { Context } from './types';
4
- import { type ContractProcedure, type ContractRouter } from '@orpc/contract';
5
- import { ProcedureImplementer } from './procedure-implementer';
6
- export declare class RouterImplementer<TContext extends Context, TContract extends ContractRouter> {
7
- zz$ri: {
8
- contract: TContract;
9
- };
10
- constructor(zz$ri: {
11
- contract: TContract;
12
- });
13
- router(router: RouterWithContract<TContext, TContract>): RouterWithContract<TContext, TContract>;
4
+ import type { Router } from './router';
5
+ import type { AdaptedRouter } from './router-builder';
6
+ import type { Context, MergeContext } from './types';
7
+ export interface RouterImplementerDef<TContext extends Context, TExtraContext extends Context, TContract extends ContractRouter> {
8
+ middlewares?: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any>[];
9
+ contract: TContract;
14
10
  }
15
- export type ChainedRouterImplementer<TContext extends Context, TContract extends ContractRouter, TExtraContext extends Context> = {
16
- [K in keyof TContract]: TContract[K] extends ContractProcedure<infer UInputSchema, infer UOutputSchema> ? ProcedureImplementer<TContext, TExtraContext, UInputSchema, UOutputSchema> : TContract[K] extends ContractRouter ? ChainedRouterImplementer<TContext, TContract[K], TExtraContext> : never;
17
- } & RouterImplementer<TContext, TContract>;
18
- export declare function chainRouterImplementer<TContext extends Context, TContract extends ContractRouter, TExtraContext extends Context>(contract: TContract, middlewares?: Middleware<any, any, any, any>[]): ChainedRouterImplementer<TContext, TContract, TExtraContext>;
19
- export declare function assertRouterImplementation(contract: ContractRouter, router: RouterWithContract<any, any>, path?: string[]): void;
11
+ export declare class RouterImplementer<TContext extends Context, TExtraContext extends Context, TContract extends ContractRouter> {
12
+ '~type': "RouterImplementer";
13
+ '~orpc': RouterImplementerDef<TContext, TExtraContext, TContract>;
14
+ constructor(def: RouterImplementerDef<TContext, TExtraContext, TContract>);
15
+ use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, unknown, unknown>): RouterImplementer<TContext, MergeContext<TExtraContext, U>, TContract>;
16
+ router<U extends Router<MergeContext<TContext, TExtraContext>, TContract>>(router: U): AdaptedRouter<TContext, U>;
17
+ lazy<U extends Router<MergeContext<TContext, TExtraContext>, TContract>>(loader: () => Promise<{
18
+ default: U;
19
+ }>): AdaptedRouter<TContext, FlattenLazy<U>>;
20
+ }
21
+ //# sourceMappingURL=router-implementer.d.ts.map
@@ -1,19 +1,16 @@
1
1
  import type { ContractProcedure, ContractRouter, SchemaInput, SchemaOutput } from '@orpc/contract';
2
+ import type { ANY_LAZY, Lazy, Lazyable } from './lazy';
3
+ import type { ANY_PROCEDURE, Procedure } from './procedure';
2
4
  import type { Context } from './types';
3
- import { type DecoratedProcedure, type Procedure } from './procedure';
4
- export interface Router<TContext extends Context> {
5
- [k: string]: Procedure<TContext, any, any, any, any> | Router<TContext>;
6
- }
7
- export type HandledRouter<TRouter extends Router<any>> = {
8
- [K in keyof TRouter]: TRouter[K] extends Procedure<infer UContext, infer UExtraContext, infer UInputSchema, infer UOutputSchema, infer UFuncOutput> ? DecoratedProcedure<UContext, UExtraContext, UInputSchema, UOutputSchema, UFuncOutput> : TRouter[K] extends Router<any> ? HandledRouter<TRouter[K]> : never;
5
+ export type Router<TContext extends Context, TContract extends ContractRouter> = Lazyable<TContract extends ContractProcedure<infer UInputSchema, infer UOutputSchema> ? Procedure<TContext, any, UInputSchema, UOutputSchema, any> : {
6
+ [K in keyof TContract]: TContract[K] extends ContractRouter ? Router<TContext, TContract[K]> : never;
7
+ }>;
8
+ export type ANY_ROUTER = Router<any, any>;
9
+ export type InferRouterInputs<T extends ANY_ROUTER> = T extends Lazy<infer U extends ANY_ROUTER> ? InferRouterInputs<U> : T extends Procedure<any, any, infer UInputSchema, any, any> ? SchemaInput<UInputSchema> : {
10
+ [K in keyof T]: T[K] extends ANY_ROUTER ? InferRouterInputs<T[K]> : never;
9
11
  };
10
- export type RouterWithContract<TContext extends Context, TContract extends ContractRouter> = {
11
- [K in keyof TContract]: TContract[K] extends ContractProcedure<infer UInputSchema, infer UOutputSchema> ? Procedure<TContext, any, UInputSchema, UOutputSchema, any> : TContract[K] extends ContractRouter ? RouterWithContract<TContext, TContract[K]> : never;
12
- };
13
- export declare function toContractRouter(router: ContractRouter | Router<any>): ContractRouter;
14
- export type InferRouterInputs<T extends Router<any>> = {
15
- [K in keyof T]: T[K] extends Procedure<any, any, infer UInputSchema, any, any> ? SchemaInput<UInputSchema> : T[K] extends Router<any> ? InferRouterInputs<T[K]> : never;
16
- };
17
- export type InferRouterOutputs<T extends Router<any>> = {
18
- [K in keyof T]: T[K] extends Procedure<any, any, any, infer UOutputSchema, infer UFuncOutput> ? SchemaOutput<UOutputSchema, UFuncOutput> : T[K] extends Router<any> ? InferRouterOutputs<T[K]> : never;
12
+ export type InferRouterOutputs<T extends ANY_ROUTER> = T extends Lazy<infer U extends ANY_ROUTER> ? InferRouterOutputs<U> : T extends Procedure<any, any, any, infer UOutputSchema, infer UFuncOutput> ? SchemaOutput<UOutputSchema, UFuncOutput> : {
13
+ [K in keyof T]: T[K] extends ANY_ROUTER ? InferRouterOutputs<T[K]> : never;
19
14
  };
15
+ export declare function getRouterChild<T extends ANY_ROUTER | Lazy<undefined>>(router: T, ...path: string[]): T extends ANY_LAZY ? Lazy<ANY_PROCEDURE | Record<string, ANY_ROUTER> | undefined> : ANY_ROUTER | Lazy<undefined> | undefined;
16
+ //# sourceMappingURL=router.d.ts.map
@@ -1,7 +1,12 @@
1
- import type { WELL_DEFINED_PROCEDURE } from './procedure';
2
- export type Context = Record<string, unknown> | undefined;
1
+ import type { ANY_PROCEDURE } from './procedure';
2
+ export type Context = Record<string, any> | undefined;
3
+ export type WELL_CONTEXT = Record<string, unknown> | undefined;
3
4
  export type MergeContext<TA extends Context, TB extends Context> = TA extends undefined ? TB : TB extends undefined ? TA : TA & TB;
4
- export interface Meta {
5
+ export interface WithSignal {
6
+ signal?: AbortSignal;
7
+ }
8
+ export interface Meta extends WithSignal {
5
9
  path: string[];
6
- procedure: WELL_DEFINED_PROCEDURE;
10
+ procedure: ANY_PROCEDURE;
7
11
  }
12
+ //# sourceMappingURL=types.d.ts.map
@@ -1,2 +1,3 @@
1
1
  import type { Context, MergeContext } from './types';
2
2
  export declare function mergeContext<A extends Context, B extends Context>(a: A, b: B): MergeContext<A, B>;
3
+ //# sourceMappingURL=utils.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orpc/server",
3
3
  "type": "module",
4
- "version": "0.0.0-next.ef3ba82",
4
+ "version": "0.0.0-next.f99e554",
5
5
  "license": "MIT",
6
6
  "homepage": "https://orpc.unnoq.com",
7
7
  "repository": {
@@ -20,32 +20,34 @@
20
20
  "default": "./dist/index.js"
21
21
  },
22
22
  "./fetch": {
23
- "types": "./dist/src/fetch/index.d.ts",
23
+ "types": "./dist/src/adapters/fetch/index.d.ts",
24
24
  "import": "./dist/fetch.js",
25
25
  "default": "./dist/fetch.js"
26
26
  },
27
+ "./node": {
28
+ "types": "./dist/src/adapters/node/index.d.ts",
29
+ "import": "./dist/node.js",
30
+ "default": "./dist/node.js"
31
+ },
27
32
  "./🔒/*": {
28
33
  "types": "./dist/src/*.d.ts"
29
34
  }
30
35
  },
31
36
  "files": [
32
- "!dist/*.tsbuildinfo",
37
+ "!**/*.map",
38
+ "!**/*.tsbuildinfo",
33
39
  "dist"
34
40
  ],
35
- "peerDependencies": {
36
- "zod": ">=3.23.0",
37
- "@orpc/zod": "0.0.0-next.ef3ba82"
38
- },
39
41
  "dependencies": {
40
- "@orpc/contract": "0.0.0-next.ef3ba82",
41
- "@orpc/transformer": "0.0.0-next.ef3ba82",
42
- "@orpc/shared": "0.0.0-next.ef3ba82"
42
+ "@mjackson/node-fetch-server": "^0.5.0",
43
+ "@orpc/contract": "0.0.0-next.f99e554",
44
+ "@orpc/shared": "0.0.0-next.f99e554"
43
45
  },
44
46
  "devDependencies": {
45
- "@orpc/openapi": "0.0.0-next.ef3ba82"
47
+ "zod": "^3.24.1"
46
48
  },
47
49
  "scripts": {
48
- "build": "tsup --clean --entry.index=src/index.ts --entry.fetch=src/fetch/index.ts --format=esm --onSuccess='tsc -b --noCheck'",
50
+ "build": "tsup --clean --sourcemap --entry.index=src/index.ts --entry.fetch=src/adapters/fetch/index.ts --entry.node=src/adapters/node/index.ts --format=esm --onSuccess='tsc -b --noCheck'",
49
51
  "build:watch": "pnpm run build --watch",
50
52
  "type:check": "tsc -b"
51
53
  }
@@ -1,189 +0,0 @@
1
- // src/utils.ts
2
- function mergeContext(a, b) {
3
- if (!a)
4
- return b;
5
- if (!b)
6
- return a;
7
- return {
8
- ...a,
9
- ...b
10
- };
11
- }
12
-
13
- // src/middleware.ts
14
- var decoratedMiddlewareSymbol = Symbol("\u{1F512}decoratedMiddleware");
15
- function decorateMiddleware(middleware) {
16
- if (Reflect.get(middleware, decoratedMiddlewareSymbol)) {
17
- return middleware;
18
- }
19
- const concat = (concatMiddleware, mapInput2) => {
20
- const concatMiddleware_ = mapInput2 ? decorateMiddleware(concatMiddleware).mapInput(mapInput2) : concatMiddleware;
21
- return decorateMiddleware(async (input, context, meta, ...rest) => {
22
- const input_ = input;
23
- const context_ = context;
24
- const meta_ = meta;
25
- const next = async (options) => {
26
- return concatMiddleware_(input_, mergeContext(context_, options.context), meta_, ...rest);
27
- };
28
- const m1 = await middleware(input_, context_, {
29
- ...meta_,
30
- next
31
- }, ...rest);
32
- return m1;
33
- });
34
- };
35
- const mapInput = (map) => {
36
- return decorateMiddleware(
37
- (input, ...rest) => middleware(map(input), ...rest)
38
- );
39
- };
40
- return Object.assign(middleware, {
41
- [decoratedMiddlewareSymbol]: true,
42
- concat,
43
- mapInput
44
- });
45
- }
46
-
47
- // src/procedure-caller.ts
48
- import { value } from "@orpc/shared";
49
- import { ORPCError } from "@orpc/shared/error";
50
- import { OpenAPIDeserializer } from "@orpc/transformer";
51
- function createProcedureCaller(options) {
52
- const path = options.path ?? [];
53
- const procedure = options.procedure;
54
- const caller = async (input) => {
55
- const input_ = (() => {
56
- if (!(input instanceof FormData)) {
57
- return input;
58
- }
59
- const transformer = new OpenAPIDeserializer({
60
- schema: procedure.zz$p.contract.zz$cp.InputSchema
61
- });
62
- return transformer.deserializeAsFormData(input);
63
- })();
64
- const validInput = (() => {
65
- const schema = procedure.zz$p.contract.zz$cp.InputSchema;
66
- if (!schema) {
67
- return input_;
68
- }
69
- try {
70
- return schema.parse(input_);
71
- } catch (e) {
72
- throw new ORPCError({
73
- message: "Validation input failed",
74
- code: "BAD_REQUEST",
75
- cause: e
76
- });
77
- }
78
- })();
79
- const middlewares = procedure.zz$p.middlewares ?? [];
80
- let currentMidIndex = 0;
81
- let currentContext = await value(options.context);
82
- const next = async (nextOptions) => {
83
- const mid = middlewares[currentMidIndex];
84
- currentMidIndex += 1;
85
- currentContext = mergeContext(currentContext, nextOptions.context);
86
- if (mid) {
87
- return await mid(validInput, currentContext, {
88
- path,
89
- procedure,
90
- next,
91
- output: (output2) => ({ output: output2, context: void 0 })
92
- });
93
- } else {
94
- return {
95
- output: await await procedure.zz$p.func(validInput, currentContext, {
96
- path,
97
- procedure
98
- }),
99
- context: currentContext
100
- };
101
- }
102
- };
103
- const output = (await next({})).output;
104
- const validOutput = await (async () => {
105
- const schema = procedure.zz$p.contract.zz$cp.OutputSchema;
106
- if (!schema) {
107
- return output;
108
- }
109
- const result = await schema.safeParseAsync(output);
110
- if (result.error) {
111
- throw new ORPCError({
112
- message: "Validation output failed",
113
- code: "INTERNAL_SERVER_ERROR",
114
- cause: result.error
115
- });
116
- }
117
- return result.data;
118
- })();
119
- return validOutput;
120
- };
121
- return caller;
122
- }
123
-
124
- // src/procedure.ts
125
- import {
126
- DecoratedContractProcedure,
127
- isContractProcedure
128
- } from "@orpc/contract";
129
- var Procedure = class {
130
- constructor(zz$p) {
131
- this.zz$p = zz$p;
132
- }
133
- };
134
- var DECORATED_PROCEDURE_SYMBOL = Symbol("DECORATED_PROCEDURE");
135
- function decorateProcedure(procedure) {
136
- if (DECORATED_PROCEDURE_SYMBOL in procedure) {
137
- return procedure;
138
- }
139
- return Object.assign(createProcedureCaller({
140
- procedure,
141
- context: void 0
142
- }), {
143
- [DECORATED_PROCEDURE_SYMBOL]: true,
144
- zz$p: procedure.zz$p,
145
- prefix(prefix) {
146
- return decorateProcedure({
147
- zz$p: {
148
- ...procedure.zz$p,
149
- contract: DecoratedContractProcedure.decorate(
150
- procedure.zz$p.contract
151
- ).prefix(prefix)
152
- }
153
- });
154
- },
155
- route(opts) {
156
- return decorateProcedure({
157
- zz$p: {
158
- ...procedure.zz$p,
159
- contract: DecoratedContractProcedure.decorate(
160
- procedure.zz$p.contract
161
- ).route(opts)
162
- }
163
- });
164
- },
165
- use(middleware, mapInput) {
166
- const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
167
- return decorateProcedure({
168
- zz$p: {
169
- ...procedure.zz$p,
170
- middlewares: [middleware_, ...procedure.zz$p.middlewares ?? []]
171
- }
172
- });
173
- }
174
- });
175
- }
176
- function isProcedure(item) {
177
- if (item instanceof Procedure)
178
- return true;
179
- return (typeof item === "object" || typeof item === "function") && item !== null && "zz$p" in item && typeof item.zz$p === "object" && item.zz$p !== null && "contract" in item.zz$p && isContractProcedure(item.zz$p.contract) && "func" in item.zz$p && typeof item.zz$p.func === "function";
180
- }
181
-
182
- export {
183
- mergeContext,
184
- decorateMiddleware,
185
- createProcedureCaller,
186
- Procedure,
187
- decorateProcedure,
188
- isProcedure
189
- };
@@ -1,6 +0,0 @@
1
- import type { Router } from '../router';
2
- import type { FetchHandler, FetchHandlerOptions } from './types';
3
- export type HandleFetchRequestOptions<TRouter extends Router<any>> = FetchHandlerOptions<TRouter> & {
4
- handlers: readonly [FetchHandler, ...FetchHandler[]];
5
- };
6
- export declare function handleFetchRequest<TRouter extends Router<any>>(options: HandleFetchRequestOptions<TRouter>): Promise<Response>;
@@ -1,2 +0,0 @@
1
- import type { FetchHandler } from './types';
2
- export declare function createORPCHandler(): FetchHandler;
@@ -1,3 +0,0 @@
1
- export * from './handle';
2
- export * from './handler';
3
- export * from './types';
@@ -1,34 +0,0 @@
1
- import type { PartialOnUndefinedDeep, Promisable, Value } from '@orpc/shared';
2
- import type { Router } from '../router';
3
- export interface FetchHandlerHooks {
4
- next: () => Promise<Response>;
5
- response: (response: Response) => Response;
6
- }
7
- export type FetchHandlerOptions<TRouter extends Router<any>> = {
8
- /**
9
- * The `router` used for handling the request and routing,
10
- *
11
- */
12
- router: TRouter;
13
- /**
14
- * The request need to be handled.
15
- */
16
- request: Request;
17
- /**
18
- * Remove the prefix from the request path.
19
- *
20
- * @example /orpc
21
- * @example /api
22
- */
23
- prefix?: string;
24
- /**
25
- * Hooks for executing logics on lifecycle events.
26
- */
27
- hooks?: (context: TRouter extends Router<infer UContext> ? UContext : never, hooks: FetchHandlerHooks) => Promisable<Response>;
28
- } & PartialOnUndefinedDeep<{
29
- /**
30
- * The context used to handle the request.
31
- */
32
- context: Value<TRouter extends Router<infer UContext> ? UContext : never>;
33
- }>;
34
- export type FetchHandler = <TRouter extends Router<any>>(options: FetchHandlerOptions<TRouter>) => Promise<Response | undefined>;
@@ -1,18 +0,0 @@
1
- import type { SchemaInput, SchemaOutput } from '@orpc/contract';
2
- import type { Procedure } from './procedure';
3
- import { type Value } from '@orpc/shared';
4
- export interface CreateProcedureCallerOptions<TProcedure extends Procedure<any, any, any, any, any>> {
5
- procedure: TProcedure;
6
- /**
7
- * The context used when calling the procedure.
8
- */
9
- context: Value<TProcedure extends Procedure<infer UContext, any, any, any, any> ? UContext : never>;
10
- /**
11
- * This is helpful for logging and analytics.
12
- *
13
- * @internal
14
- */
15
- path?: string[];
16
- }
17
- export type ProcedureCaller<TProcedure extends Procedure<any, any, any, any, any>> = TProcedure extends Procedure<any, any, infer UInputSchema, infer UOutputSchema, infer UFuncOutput> ? (...input: [input: SchemaInput<UInputSchema> | FormData] | (undefined extends SchemaInput<UInputSchema> ? [] : never)) => Promise<SchemaOutput<UOutputSchema, UFuncOutput>> : never;
18
- export declare function createProcedureCaller<TProcedure extends Procedure<any, any, any, any, any>>(options: CreateProcedureCallerOptions<TProcedure>): ProcedureCaller<TProcedure>;
@@ -1,21 +0,0 @@
1
- import type { Value } from '@orpc/shared';
2
- import type { Router } from './router';
3
- import { type Procedure } from './procedure';
4
- import { type ProcedureCaller } from './procedure-caller';
5
- export interface CreateRouterCallerOptions<TRouter extends Router<any>> {
6
- router: TRouter;
7
- /**
8
- * The context used when calling the procedure.
9
- */
10
- context: Value<TRouter extends Router<infer UContext> ? UContext : never>;
11
- /**
12
- * This is helpful for logging and analytics.
13
- *
14
- * @internal
15
- */
16
- basePath?: string[];
17
- }
18
- export type RouterCaller<TRouter extends Router<any>> = {
19
- [K in keyof TRouter]: TRouter[K] extends Procedure<any, any, any, any, any> ? ProcedureCaller<TRouter[K]> : TRouter[K] extends Router<any> ? RouterCaller<TRouter[K]> : never;
20
- };
21
- export declare function createRouterCaller<TRouter extends Router<any>>(options: CreateRouterCallerOptions<TRouter>): RouterCaller<TRouter>;