@orpc/server 0.0.0-next.c6c659d → 0.0.0-next.cba521d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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'",
|