@orpc/server 0.0.0-next.c6c659d → 0.0.0-next.cba521d
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/{chunk-MB74GD7C.js → chunk-3EVCPLVI.js} +2 -2
- package/dist/{chunk-ZBJYYEII.js → chunk-OUPZ7QGV.js} +47 -29
- package/dist/fetch.js +2 -2
- package/dist/hono.js +2 -2
- package/dist/index.js +31 -19
- package/dist/next.js +2 -2
- package/dist/node.js +2 -2
- package/dist/src/builder.d.ts +1 -1
- package/dist/src/middleware.d.ts +1 -0
- package/dist/src/procedure-builder.d.ts +1 -1
- package/dist/src/procedure-client.d.ts +2 -2
- package/dist/src/procedure-decorated.d.ts +6 -6
- package/dist/src/procedure-implementer.d.ts +2 -1
- package/dist/src/procedure.d.ts +3 -2
- package/dist/src/router-builder.d.ts +1 -1
- package/dist/src/router-client.d.ts +2 -3
- package/dist/src/router-implementer.d.ts +1 -1
- package/package.json +3 -3
@@ -4,7 +4,7 @@ import {
|
|
4
4
|
getRouterChild,
|
5
5
|
isProcedure,
|
6
6
|
unlazy
|
7
|
-
} from "./chunk-
|
7
|
+
} from "./chunk-OUPZ7QGV.js";
|
8
8
|
|
9
9
|
// src/adapters/fetch/super-json.ts
|
10
10
|
var super_json_exports = {};
|
@@ -298,4 +298,4 @@ export {
|
|
298
298
|
ORPCProcedureMatcher,
|
299
299
|
RPCHandler
|
300
300
|
};
|
301
|
-
//# sourceMappingURL=chunk-
|
301
|
+
//# sourceMappingURL=chunk-3EVCPLVI.js.map
|
@@ -86,6 +86,11 @@ function flatLazy(lazied) {
|
|
86
86
|
return lazy(flattenLoader);
|
87
87
|
}
|
88
88
|
|
89
|
+
// src/middleware.ts
|
90
|
+
function middlewareOutputFn(output) {
|
91
|
+
return { output, context: void 0 };
|
92
|
+
}
|
93
|
+
|
89
94
|
// src/procedure-client.ts
|
90
95
|
import { ORPCError as ORPCError2, validateORPCError, ValidationError } from "@orpc/contract";
|
91
96
|
import { executeWithHooks, toError, value } from "@orpc/shared";
|
@@ -94,30 +99,22 @@ function createProcedureClient(lazyableProcedure, ...[options]) {
|
|
94
99
|
const path = options?.path ?? [];
|
95
100
|
const { default: procedure } = await unlazy(lazyableProcedure);
|
96
101
|
const context = await value(options?.context, callerOptions?.context);
|
97
|
-
const
|
102
|
+
const errors = createORPCErrorConstructorMap(procedure["~orpc"].contract["~orpc"].errorMap);
|
103
|
+
const executeOptions = {
|
104
|
+
input,
|
105
|
+
context,
|
106
|
+
errors,
|
98
107
|
path,
|
99
108
|
procedure,
|
100
109
|
signal: callerOptions?.signal
|
101
110
|
};
|
102
|
-
const executeWithValidation = async () => {
|
103
|
-
const validInput = await validateInput(procedure, input);
|
104
|
-
const output = await executeMiddlewareChain({
|
105
|
-
context,
|
106
|
-
input: validInput,
|
107
|
-
path,
|
108
|
-
procedure,
|
109
|
-
signal: callerOptions?.signal,
|
110
|
-
errors: createORPCErrorConstructorMap(procedure["~orpc"].contract["~orpc"].errorMap)
|
111
|
-
});
|
112
|
-
return validateOutput(procedure, output);
|
113
|
-
};
|
114
111
|
try {
|
115
112
|
const output = await executeWithHooks({
|
116
113
|
hooks: options,
|
117
114
|
input,
|
118
115
|
context,
|
119
|
-
meta,
|
120
|
-
execute:
|
116
|
+
meta: executeOptions,
|
117
|
+
execute: () => executeProcedureInternal(procedure, executeOptions)
|
121
118
|
});
|
122
119
|
return output;
|
123
120
|
} catch (e) {
|
@@ -160,24 +157,44 @@ async function validateOutput(procedure, output) {
|
|
160
157
|
}
|
161
158
|
return result.value;
|
162
159
|
}
|
163
|
-
|
164
|
-
|
165
|
-
let currentMidIndex = 0;
|
160
|
+
function executeMiddlewareChain(middlewares, opt, input) {
|
161
|
+
let currentIndex = 0;
|
166
162
|
let currentContext = opt.context;
|
167
|
-
const
|
168
|
-
const mid = middlewares[
|
169
|
-
|
163
|
+
const executeMiddlewareChain2 = async (nextOptions) => {
|
164
|
+
const mid = middlewares[currentIndex];
|
165
|
+
currentIndex += 1;
|
170
166
|
currentContext = mergeContext(currentContext, nextOptions.context);
|
171
167
|
if (mid) {
|
172
|
-
return await mid({ ...opt, context: currentContext, next },
|
168
|
+
return await mid({ ...opt, context: currentContext, next: executeMiddlewareChain2 }, input, middlewareOutputFn);
|
173
169
|
}
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
170
|
+
return opt.next({ context: currentContext });
|
171
|
+
};
|
172
|
+
return executeMiddlewareChain2({});
|
173
|
+
}
|
174
|
+
async function executeProcedureInternal(procedure, options) {
|
175
|
+
const executeHandler = async (context, input) => {
|
176
|
+
return await procedure["~orpc"].handler({ ...options, context, input });
|
177
|
+
};
|
178
|
+
const executePostMiddlewares = async (context, input) => {
|
179
|
+
const validatedInput = await validateInput(procedure, input);
|
180
|
+
const result2 = await executeMiddlewareChain(procedure["~orpc"].postMiddlewares, {
|
181
|
+
...options,
|
182
|
+
context,
|
183
|
+
next: async ({ context: context2 }) => {
|
184
|
+
return middlewareOutputFn(
|
185
|
+
await executeHandler(context2, validatedInput)
|
186
|
+
);
|
187
|
+
}
|
188
|
+
}, validatedInput);
|
189
|
+
const validatedOutput = await validateOutput(procedure, result2.output);
|
190
|
+
return { ...result2, output: validatedOutput };
|
179
191
|
};
|
180
|
-
|
192
|
+
const result = await executeMiddlewareChain(procedure["~orpc"].preMiddlewares, {
|
193
|
+
...options,
|
194
|
+
context: options.context,
|
195
|
+
next: ({ context }) => executePostMiddlewares(context, options.input)
|
196
|
+
}, options.input);
|
197
|
+
return result.output;
|
181
198
|
}
|
182
199
|
|
183
200
|
// src/router.ts
|
@@ -221,7 +238,8 @@ export {
|
|
221
238
|
isLazy,
|
222
239
|
unlazy,
|
223
240
|
flatLazy,
|
241
|
+
middlewareOutputFn,
|
224
242
|
createProcedureClient,
|
225
243
|
getRouterChild
|
226
244
|
};
|
227
|
-
//# sourceMappingURL=chunk-
|
245
|
+
//# sourceMappingURL=chunk-OUPZ7QGV.js.map
|
package/dist/fetch.js
CHANGED
package/dist/hono.js
CHANGED
@@ -4,8 +4,8 @@ import {
|
|
4
4
|
ORPCProcedureMatcher,
|
5
5
|
RPCHandler,
|
6
6
|
super_json_exports
|
7
|
-
} from "./chunk-
|
8
|
-
import "./chunk-
|
7
|
+
} from "./chunk-3EVCPLVI.js";
|
8
|
+
import "./chunk-OUPZ7QGV.js";
|
9
9
|
|
10
10
|
// src/adapters/hono/middleware.ts
|
11
11
|
import { value } from "@orpc/shared";
|
package/dist/index.js
CHANGED
@@ -9,8 +9,9 @@ import {
|
|
9
9
|
isProcedure,
|
10
10
|
lazy,
|
11
11
|
mergeContext,
|
12
|
+
middlewareOutputFn,
|
12
13
|
unlazy
|
13
|
-
} from "./chunk-
|
14
|
+
} from "./chunk-OUPZ7QGV.js";
|
14
15
|
|
15
16
|
// src/builder.ts
|
16
17
|
import { ContractProcedure } from "@orpc/contract";
|
@@ -68,7 +69,7 @@ var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
|
|
68
69
|
const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
|
69
70
|
return new _DecoratedProcedure({
|
70
71
|
...this["~orpc"],
|
71
|
-
|
72
|
+
postMiddlewares: [...this["~orpc"].postMiddlewares, middleware_]
|
72
73
|
});
|
73
74
|
}
|
74
75
|
unshiftTag(...tags) {
|
@@ -79,12 +80,12 @@ var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
|
|
79
80
|
}
|
80
81
|
unshiftMiddleware(...middlewares) {
|
81
82
|
const castedMiddlewares = middlewares;
|
82
|
-
if (this["~orpc"].
|
83
|
+
if (this["~orpc"].preMiddlewares.length) {
|
83
84
|
let min = 0;
|
84
|
-
for (let i = 0; i < this["~orpc"].
|
85
|
-
const index = castedMiddlewares.indexOf(this["~orpc"].
|
85
|
+
for (let i = 0; i < this["~orpc"].preMiddlewares.length; i++) {
|
86
|
+
const index = castedMiddlewares.indexOf(this["~orpc"].preMiddlewares[i], min);
|
86
87
|
if (index === -1) {
|
87
|
-
castedMiddlewares.push(...this["~orpc"].
|
88
|
+
castedMiddlewares.push(...this["~orpc"].preMiddlewares.slice(i));
|
88
89
|
break;
|
89
90
|
}
|
90
91
|
min = index + 1;
|
@@ -92,7 +93,7 @@ var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
|
|
92
93
|
}
|
93
94
|
return new _DecoratedProcedure({
|
94
95
|
...this["~orpc"],
|
95
|
-
|
96
|
+
preMiddlewares: castedMiddlewares
|
96
97
|
});
|
97
98
|
}
|
98
99
|
/**
|
@@ -122,12 +123,13 @@ var ProcedureImplementer = class _ProcedureImplementer {
|
|
122
123
|
const mappedMiddleware = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
|
123
124
|
return new _ProcedureImplementer({
|
124
125
|
...this["~orpc"],
|
125
|
-
|
126
|
+
postMiddlewares: [...this["~orpc"].postMiddlewares, mappedMiddleware]
|
126
127
|
});
|
127
128
|
}
|
128
129
|
handler(handler) {
|
129
130
|
return new DecoratedProcedure({
|
130
|
-
|
131
|
+
postMiddlewares: this["~orpc"].postMiddlewares,
|
132
|
+
preMiddlewares: this["~orpc"].preMiddlewares,
|
131
133
|
contract: this["~orpc"].contract,
|
132
134
|
handler
|
133
135
|
});
|
@@ -211,7 +213,7 @@ var RouterBuilder = class _RouterBuilder {
|
|
211
213
|
use(middleware) {
|
212
214
|
return new _RouterBuilder({
|
213
215
|
...this["~orpc"],
|
214
|
-
middlewares: [...this["~orpc"].middlewares
|
216
|
+
middlewares: [...this["~orpc"].middlewares, middleware]
|
215
217
|
});
|
216
218
|
}
|
217
219
|
router(router) {
|
@@ -283,11 +285,12 @@ var RouterImplementer = class _RouterImplementer {
|
|
283
285
|
};
|
284
286
|
|
285
287
|
// src/implementer-chainable.ts
|
286
|
-
function createChainableImplementer(contract, middlewares) {
|
288
|
+
function createChainableImplementer(contract, middlewares = []) {
|
287
289
|
if (isContractProcedure(contract)) {
|
288
290
|
const implementer = new ProcedureImplementer({
|
289
291
|
contract,
|
290
|
-
middlewares
|
292
|
+
preMiddlewares: middlewares,
|
293
|
+
postMiddlewares: []
|
291
294
|
});
|
292
295
|
return implementer;
|
293
296
|
}
|
@@ -350,17 +353,20 @@ var ProcedureBuilder = class _ProcedureBuilder {
|
|
350
353
|
if (!mapInput) {
|
351
354
|
return new ProcedureImplementer({
|
352
355
|
contract: this["~orpc"].contract,
|
353
|
-
|
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
|
-
|
362
|
+
preMiddlewares: this["~orpc"].middlewares,
|
363
|
+
postMiddlewares: []
|
359
364
|
}).use(middleware, mapInput);
|
360
365
|
}
|
361
366
|
handler(handler) {
|
362
367
|
return new DecoratedProcedure({
|
363
|
-
|
368
|
+
preMiddlewares: this["~orpc"].middlewares,
|
369
|
+
postMiddlewares: [],
|
364
370
|
contract: this["~orpc"].contract,
|
365
371
|
handler
|
366
372
|
});
|
@@ -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
|
391
|
+
middlewares: [...this["~orpc"].middlewares, middleware]
|
384
392
|
});
|
385
393
|
}
|
386
394
|
middleware(middleware) {
|
@@ -431,7 +439,8 @@ var Builder = class _Builder {
|
|
431
439
|
}
|
432
440
|
handler(handler) {
|
433
441
|
return new DecoratedProcedure({
|
434
|
-
|
442
|
+
preMiddlewares: this["~orpc"].middlewares,
|
443
|
+
postMiddlewares: [],
|
435
444
|
contract: new ContractProcedure({
|
436
445
|
InputSchema: void 0,
|
437
446
|
OutputSchema: void 0,
|
@@ -512,7 +521,9 @@ function createRouterClient(router, ...rest) {
|
|
512
521
|
|
513
522
|
// src/index.ts
|
514
523
|
import { configGlobal, fallbackToGlobalConfig, isDefinedError, ORPCError, safe } from "@orpc/contract";
|
515
|
-
var os = new Builder({
|
524
|
+
var os = new Builder({
|
525
|
+
middlewares: []
|
526
|
+
});
|
516
527
|
export {
|
517
528
|
Builder,
|
518
529
|
DecoratedProcedure,
|
@@ -542,6 +553,7 @@ export {
|
|
542
553
|
isProcedure,
|
543
554
|
lazy,
|
544
555
|
mergeContext,
|
556
|
+
middlewareOutputFn,
|
545
557
|
os,
|
546
558
|
safe,
|
547
559
|
setRouterContract,
|
package/dist/next.js
CHANGED
@@ -4,8 +4,8 @@ import {
|
|
4
4
|
ORPCProcedureMatcher,
|
5
5
|
RPCHandler,
|
6
6
|
super_json_exports
|
7
|
-
} from "./chunk-
|
8
|
-
import "./chunk-
|
7
|
+
} from "./chunk-3EVCPLVI.js";
|
8
|
+
import "./chunk-OUPZ7QGV.js";
|
9
9
|
|
10
10
|
// src/adapters/next/serve.ts
|
11
11
|
import { value } from "@orpc/shared";
|
package/dist/node.js
CHANGED
package/dist/src/builder.d.ts
CHANGED
@@ -11,7 +11,7 @@ import { ProcedureBuilder } from './procedure-builder';
|
|
11
11
|
import { DecoratedProcedure } from './procedure-decorated';
|
12
12
|
import { RouterBuilder } from './router-builder';
|
13
13
|
export interface BuilderDef<TContext extends Context, TExtraContext extends Context> {
|
14
|
-
middlewares
|
14
|
+
middlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[];
|
15
15
|
}
|
16
16
|
export declare class Builder<TContext extends Context, TExtraContext extends Context> {
|
17
17
|
'~type': "Builder";
|
package/dist/src/middleware.d.ts
CHANGED
@@ -32,4 +32,5 @@ export interface MapInputMiddleware<TInput, TMappedInput> {
|
|
32
32
|
(input: TInput): TMappedInput;
|
33
33
|
}
|
34
34
|
export type ANY_MAP_INPUT_MIDDLEWARE = MapInputMiddleware<any, any>;
|
35
|
+
export declare function middlewareOutputFn<TOutput>(output: TOutput): MiddlewareResult<undefined, TOutput>;
|
35
36
|
//# sourceMappingURL=middleware.d.ts.map
|
@@ -7,7 +7,7 @@ import { DecoratedProcedure } from './procedure-decorated';
|
|
7
7
|
import { ProcedureImplementer } from './procedure-implementer';
|
8
8
|
export interface ProcedureBuilderDef<TContext extends Context, TExtraContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> {
|
9
9
|
contract: ContractProcedure<TInputSchema, TOutputSchema, TErrorMap>;
|
10
|
-
middlewares
|
10
|
+
middlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[];
|
11
11
|
}
|
12
12
|
export declare class ProcedureBuilder<TContext extends Context, TExtraContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> {
|
13
13
|
'~type': "ProcedureBuilder";
|
@@ -3,7 +3,7 @@ import type { Hooks, Value } from '@orpc/shared';
|
|
3
3
|
import type { Lazyable } from './lazy';
|
4
4
|
import type { Procedure } from './procedure';
|
5
5
|
import type { Context, Meta } from './types';
|
6
|
-
export type ProcedureClient<TClientContext,
|
6
|
+
export type ProcedureClient<TClientContext, TInputSchema extends Schema, TOutputSchema extends Schema, THandlerOutput extends SchemaInput<TOutputSchema>, TErrorMap extends ErrorMap> = Client<TClientContext, SchemaInput<TInputSchema>, SchemaOutput<TOutputSchema, THandlerOutput>, ErrorFromErrorMap<TErrorMap>>;
|
7
7
|
/**
|
8
8
|
* Options for creating a procedure caller with comprehensive type safety
|
9
9
|
*/
|
@@ -18,5 +18,5 @@ export type CreateProcedureClientOptions<TContext extends Context, TOutputSchema
|
|
18
18
|
context?: Value<TContext, [clientContext: TClientContext]>;
|
19
19
|
} : never)) & Hooks<unknown, SchemaOutput<TOutputSchema, THandlerOutput>, TContext, Meta>;
|
20
20
|
export type CreateProcedureClientRest<TContext extends Context, TOutputSchema extends Schema, THandlerOutput extends SchemaInput<TOutputSchema>, TClientContext> = [options: CreateProcedureClientOptions<TContext, TOutputSchema, THandlerOutput, TClientContext>] | (undefined extends TContext ? [] : never);
|
21
|
-
export declare function createProcedureClient<TContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, THandlerOutput extends SchemaInput<TOutputSchema>, TErrorMap extends ErrorMap, TClientContext>(lazyableProcedure: Lazyable<Procedure<TContext, any, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>>, ...[options]: CreateProcedureClientRest<TContext, TOutputSchema, THandlerOutput, TClientContext>): ProcedureClient<TClientContext,
|
21
|
+
export declare function createProcedureClient<TContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, THandlerOutput extends SchemaInput<TOutputSchema>, TErrorMap extends ErrorMap, TClientContext>(lazyableProcedure: Lazyable<Procedure<TContext, any, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>>, ...[options]: CreateProcedureClientRest<TContext, TOutputSchema, THandlerOutput, TClientContext>): ProcedureClient<TClientContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
|
22
22
|
//# sourceMappingURL=procedure-client.d.ts.map
|
@@ -1,22 +1,22 @@
|
|
1
|
-
import type {
|
1
|
+
import type { ClientRest, ErrorMap, HTTPPath, RouteOptions, Schema, SchemaInput, SchemaOutput } from '@orpc/contract';
|
2
2
|
import type { ORPCErrorConstructorMap } from './error';
|
3
3
|
import type { MapInputMiddleware, Middleware } from './middleware';
|
4
|
-
import type { CreateProcedureClientRest } from './procedure-client';
|
4
|
+
import type { CreateProcedureClientRest, ProcedureClient } from './procedure-client';
|
5
5
|
import type { Context, MergeContext } from './types';
|
6
6
|
import { Procedure } from './procedure';
|
7
7
|
export declare class DecoratedProcedure<TContext extends Context, TExtraContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, THandlerOutput extends SchemaInput<TOutputSchema>, TErrorMap extends ErrorMap> extends Procedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap> {
|
8
8
|
static decorate<UContext extends Context, UExtraContext extends Context, UInputSchema extends Schema, UOutputSchema extends Schema, UHandlerOutput extends SchemaInput<UOutputSchema>, UErrorMap extends ErrorMap>(procedure: Procedure<UContext, UExtraContext, UInputSchema, UOutputSchema, UHandlerOutput, UErrorMap>): DecoratedProcedure<any, any, any, any, any, any> | DecoratedProcedure<UContext, UExtraContext, UInputSchema, UOutputSchema, UHandlerOutput, UErrorMap>;
|
9
9
|
prefix(prefix: HTTPPath): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
|
10
10
|
route(route: RouteOptions): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
|
11
|
-
use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, SchemaOutput<TInputSchema>,
|
12
|
-
use<UExtra extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined, UInput = unknown>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtra, UInput,
|
11
|
+
use<U extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined>(middleware: Middleware<MergeContext<TContext, TExtraContext>, U, SchemaOutput<TInputSchema>, THandlerOutput, ORPCErrorConstructorMap<TErrorMap>>): DecoratedProcedure<TContext, MergeContext<TExtraContext, U>, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
|
12
|
+
use<UExtra extends Context & Partial<MergeContext<TContext, TExtraContext>> | undefined = undefined, UInput = unknown>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtra, UInput, THandlerOutput, ORPCErrorConstructorMap<TErrorMap>>, mapInput: MapInputMiddleware<SchemaOutput<TInputSchema, THandlerOutput>, UInput>): DecoratedProcedure<TContext, MergeContext<TExtraContext, UExtra>, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
|
13
13
|
unshiftTag(...tags: string[]): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
|
14
|
-
unshiftMiddleware<
|
14
|
+
unshiftMiddleware(...middlewares: Middleware<TContext, Context & Partial<MergeContext<TContext, TExtraContext>> | undefined, unknown, SchemaOutput<TOutputSchema, THandlerOutput>, ORPCErrorConstructorMap<TErrorMap>>[]): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
|
15
15
|
/**
|
16
16
|
* Make this procedure callable (works like a function while still being a procedure).
|
17
17
|
* **Note**: this only takes effect when this method is called at the end of the chain.
|
18
18
|
*/
|
19
|
-
callable<TClientContext>(...rest: CreateProcedureClientRest<TContext, TOutputSchema, THandlerOutput, TClientContext>): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap> &
|
19
|
+
callable<TClientContext>(...rest: CreateProcedureClientRest<TContext, TOutputSchema, THandlerOutput, TClientContext>): DecoratedProcedure<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap> & ProcedureClient<TClientContext, TInputSchema, TOutputSchema, THandlerOutput, TErrorMap>;
|
20
20
|
/**
|
21
21
|
* Make this procedure compatible with server action (the same as .callable, but the type is compatible with server action).
|
22
22
|
* **Note**: this only takes effect when this method is called at the end of the chain.
|
@@ -6,7 +6,8 @@ import type { Context, MergeContext } from './types';
|
|
6
6
|
import { DecoratedProcedure } from './procedure-decorated';
|
7
7
|
export type ProcedureImplementerDef<TContext extends Context, TExtraContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> = {
|
8
8
|
contract: ContractProcedure<TInputSchema, TOutputSchema, TErrorMap>;
|
9
|
-
|
9
|
+
preMiddlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[];
|
10
|
+
postMiddlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, SchemaOutput<TInputSchema>, SchemaInput<TOutputSchema>, Record<string, unknown>>[];
|
10
11
|
};
|
11
12
|
export declare class ProcedureImplementer<TContext extends Context, TExtraContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> {
|
12
13
|
'~type': "ProcedureImplementer";
|
package/dist/src/procedure.d.ts
CHANGED
@@ -16,7 +16,7 @@ export interface ProcedureHandler<TContext extends Context, TExtraContext extend
|
|
16
16
|
(opt: ProcedureHandlerOptions<TContext, TExtraContext, SchemaOutput<TInputSchema>, ORPCErrorConstructorMap<TErrorMap>>): Promisable<SchemaInput<TOutputSchema, THandlerOutput>>;
|
17
17
|
}
|
18
18
|
/**
|
19
|
-
* Why is `ErrorConstructorMap` passed to `
|
19
|
+
* Why is `ErrorConstructorMap` passed to `postMiddlewares` as `Record<string, unknown>`?
|
20
20
|
* Why is `ErrorMap` passed to `ProcedureHandler` as `any`?
|
21
21
|
*
|
22
22
|
* Passing `ErrorMap/ErrorConstructorMap` directly to `Middleware/ProcedureHandler`
|
@@ -27,7 +27,8 @@ export interface ProcedureHandler<TContext extends Context, TExtraContext extend
|
|
27
27
|
* The only downside is that direct access to them requires careful type checking to ensure safety.
|
28
28
|
*/
|
29
29
|
export interface ProcedureDef<TContext extends Context, TExtraContext extends Context, TInputSchema extends Schema, TOutputSchema extends Schema, THandlerOutput extends SchemaInput<TOutputSchema>, TErrorMap extends ErrorMap> {
|
30
|
-
|
30
|
+
preMiddlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[];
|
31
|
+
postMiddlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, SchemaOutput<TInputSchema>, SchemaInput<TOutputSchema>, Record<string, unknown>>[];
|
31
32
|
contract: ContractProcedure<TInputSchema, TOutputSchema, TErrorMap>;
|
32
33
|
handler: ProcedureHandler<TContext, TExtraContext, TInputSchema, TOutputSchema, THandlerOutput, any>;
|
33
34
|
}
|
@@ -12,7 +12,7 @@ export type AdaptedRouter<TContext extends Context, TRouter extends ANY_ROUTER>
|
|
12
12
|
export type RouterBuilderDef<TContext extends Context, TExtraContext extends Context> = {
|
13
13
|
prefix?: HTTPPath;
|
14
14
|
tags?: readonly string[];
|
15
|
-
middlewares
|
15
|
+
middlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[];
|
16
16
|
};
|
17
17
|
export declare class RouterBuilder<TContext extends Context, TExtraContext extends Context> {
|
18
18
|
'~type': "RouterBuilder";
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import type { ContractProcedure, ContractRouter, ErrorFromErrorMap, SchemaInput, SchemaOutput } from '@orpc/contract';
|
2
1
|
import type { Hooks, Value } from '@orpc/shared';
|
3
2
|
import type { Lazy } from './lazy';
|
4
3
|
import type { Procedure } from './procedure';
|
@@ -8,8 +7,8 @@ import { type ANY_ROUTER, type Router } from './router';
|
|
8
7
|
/**
|
9
8
|
* FIXME: separate RouterClient and ContractRouterClient, don't mix them
|
10
9
|
*/
|
11
|
-
export type RouterClient<TRouter extends ANY_ROUTER
|
12
|
-
[K in keyof TRouter]: TRouter[K] extends ANY_ROUTER
|
10
|
+
export type RouterClient<TRouter extends ANY_ROUTER, TClientContext> = TRouter extends Lazy<infer U extends ANY_ROUTER> ? RouterClient<U, TClientContext> : TRouter extends Procedure<any, any, infer UInputSchema, infer UOutputSchema, infer UFuncOutput, infer UErrorMap> ? ProcedureClient<TClientContext, UInputSchema, UOutputSchema, UFuncOutput, UErrorMap> : {
|
11
|
+
[K in keyof TRouter]: TRouter[K] extends ANY_ROUTER ? RouterClient<TRouter[K], TClientContext> : never;
|
13
12
|
};
|
14
13
|
export type CreateRouterClientOptions<TRouter extends ANY_ROUTER> = {
|
15
14
|
/**
|
@@ -5,7 +5,7 @@ import type { Router } from './router';
|
|
5
5
|
import type { AdaptedRouter } from './router-builder';
|
6
6
|
import type { Context, MergeContext } from './types';
|
7
7
|
export interface RouterImplementerDef<TContext extends Context, TExtraContext extends Context, TContract extends ContractRouter> {
|
8
|
-
middlewares
|
8
|
+
middlewares: Middleware<MergeContext<TContext, TExtraContext>, Partial<TExtraContext> | undefined, unknown, any, Record<string, unknown>>[];
|
9
9
|
contract: TContract;
|
10
10
|
}
|
11
11
|
export declare class RouterImplementer<TContext extends Context, TExtraContext extends Context, TContract extends ContractRouter> {
|
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.
|
4
|
+
"version": "0.0.0-next.cba521d",
|
5
5
|
"license": "MIT",
|
6
6
|
"homepage": "https://orpc.unnoq.com",
|
7
7
|
"repository": {
|
@@ -53,8 +53,8 @@
|
|
53
53
|
"next": ">=14.0.0"
|
54
54
|
},
|
55
55
|
"dependencies": {
|
56
|
-
"@orpc/contract": "0.0.0-next.
|
57
|
-
"@orpc/shared": "0.0.0-next.
|
56
|
+
"@orpc/contract": "0.0.0-next.cba521d",
|
57
|
+
"@orpc/shared": "0.0.0-next.cba521d"
|
58
58
|
},
|
59
59
|
"scripts": {
|
60
60
|
"build": "tsup --onSuccess='tsc -b --noCheck'",
|