@orpc/server 0.0.0-next.3f6c426 → 0.0.0-next.43c0c87
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-6A7XHEBH.js → chunk-GK2Z6B6W.js} +85 -44
- package/dist/{chunk-B2EZJB7X.js → chunk-SXUFCJBY.js} +18 -20
- package/dist/chunk-WUOGVGWG.js +1 -0
- package/dist/fetch.js +5 -22
- package/dist/hono.js +30 -0
- package/dist/index.js +630 -165
- package/dist/next.js +36 -0
- package/dist/node.js +69 -27
- package/dist/src/adapters/fetch/index.d.ts +0 -1
- package/dist/src/adapters/fetch/orpc-handler.d.ts +9 -9
- package/dist/src/adapters/fetch/orpc-payload-codec.d.ts +1 -1
- package/dist/src/adapters/fetch/types.d.ts +11 -6
- package/dist/src/adapters/hono/index.d.ts +3 -0
- package/dist/src/adapters/hono/middleware.d.ts +12 -0
- package/dist/src/adapters/next/index.d.ts +3 -0
- package/dist/src/adapters/next/serve.d.ts +19 -0
- package/dist/src/adapters/node/index.d.ts +1 -1
- package/dist/src/adapters/node/orpc-handler.d.ts +7 -7
- package/dist/src/adapters/node/request-listener.d.ts +28 -0
- package/dist/src/adapters/node/types.d.ts +10 -9
- package/dist/src/builder-with-errors-middlewares.d.ts +50 -0
- package/dist/src/builder-with-errors.d.ts +49 -0
- package/dist/src/builder-with-middlewares.d.ts +47 -0
- package/dist/src/builder.d.ts +30 -22
- package/dist/src/context.d.ts +11 -0
- package/dist/src/error.d.ts +10 -0
- package/dist/src/hidden.d.ts +2 -2
- package/dist/src/implementer-chainable.d.ts +7 -3
- package/dist/src/index.d.ts +4 -3
- package/dist/src/lazy-decorated.d.ts +3 -6
- package/dist/src/middleware-decorated.d.ts +7 -5
- package/dist/src/middleware.d.ts +21 -8
- package/dist/src/procedure-builder-with-input.d.ts +34 -0
- package/dist/src/procedure-builder-with-output.d.ts +33 -0
- package/dist/src/procedure-builder.d.ts +22 -17
- package/dist/src/procedure-client.d.ts +8 -20
- package/dist/src/procedure-decorated.d.ts +22 -10
- package/dist/src/procedure-implementer.d.ts +16 -12
- package/dist/src/procedure-utils.d.ts +17 -0
- package/dist/src/procedure.d.ts +35 -13
- package/dist/src/router-builder.d.ts +19 -15
- package/dist/src/router-client.d.ts +7 -6
- package/dist/src/router-implementer.d.ts +7 -6
- package/dist/src/router.d.ts +5 -5
- package/dist/src/types.d.ts +2 -0
- package/package.json +18 -8
- package/dist/src/adapters/fetch/composite-handler.d.ts +0 -8
- package/dist/src/adapters/node/composite-handler.d.ts +0 -9
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,41 @@ import {
|
|
8
9
|
isProcedure,
|
9
10
|
lazy,
|
10
11
|
mergeContext,
|
12
|
+
middlewareOutputFn,
|
11
13
|
unlazy
|
12
|
-
} from "./chunk-
|
14
|
+
} from "./chunk-GK2Z6B6W.js";
|
13
15
|
|
14
16
|
// src/builder.ts
|
17
|
+
import { ContractProcedure as ContractProcedure4 } from "@orpc/contract";
|
18
|
+
|
19
|
+
// src/builder-with-errors.ts
|
20
|
+
import { ContractProcedure as ContractProcedure2 } from "@orpc/contract";
|
21
|
+
|
22
|
+
// src/builder-with-errors-middlewares.ts
|
15
23
|
import { ContractProcedure } from "@orpc/contract";
|
16
24
|
|
17
|
-
// src/
|
18
|
-
import {
|
19
|
-
|
25
|
+
// src/procedure-builder.ts
|
26
|
+
import { ContractProcedureBuilder, DecoratedContractProcedure as DecoratedContractProcedure4 } from "@orpc/contract";
|
27
|
+
|
28
|
+
// src/procedure-builder-with-input.ts
|
29
|
+
import { ContractProcedureBuilderWithInput, DecoratedContractProcedure as DecoratedContractProcedure2 } from "@orpc/contract";
|
20
30
|
|
21
31
|
// src/middleware-decorated.ts
|
22
32
|
function decorateMiddleware(middleware) {
|
23
33
|
const decorated = middleware;
|
24
34
|
decorated.mapInput = (mapInput) => {
|
25
35
|
const mapped = decorateMiddleware(
|
26
|
-
(input, ...rest) => middleware(mapInput(input), ...rest)
|
36
|
+
(options, input, ...rest) => middleware(options, mapInput(input), ...rest)
|
27
37
|
);
|
28
38
|
return mapped;
|
29
39
|
};
|
30
40
|
decorated.concat = (concatMiddleware, mapInput) => {
|
31
41
|
const mapped = mapInput ? decorateMiddleware(concatMiddleware).mapInput(mapInput) : concatMiddleware;
|
32
|
-
const concatted = decorateMiddleware((
|
33
|
-
const next = async (
|
34
|
-
return mapped(
|
42
|
+
const concatted = decorateMiddleware((options, input, output, ...rest) => {
|
43
|
+
const next = async (nextOptions) => {
|
44
|
+
return mapped({ ...options, context: mergeContext(nextOptions.context, options.context) }, input, output, ...rest);
|
35
45
|
};
|
36
|
-
const merged = middleware(
|
46
|
+
const merged = middleware({ ...options, next }, input, output, ...rest);
|
37
47
|
return merged;
|
38
48
|
});
|
39
49
|
return concatted;
|
@@ -43,58 +53,81 @@ function decorateMiddleware(middleware) {
|
|
43
53
|
|
44
54
|
// src/procedure-decorated.ts
|
45
55
|
import { DecoratedContractProcedure } from "@orpc/contract";
|
46
|
-
|
47
|
-
|
48
|
-
procedure
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
56
|
+
var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
|
57
|
+
static decorate(procedure) {
|
58
|
+
if (procedure instanceof _DecoratedProcedure) {
|
59
|
+
return procedure;
|
60
|
+
}
|
61
|
+
return new _DecoratedProcedure(procedure["~orpc"]);
|
62
|
+
}
|
63
|
+
prefix(prefix) {
|
64
|
+
return new _DecoratedProcedure({
|
65
|
+
...this["~orpc"],
|
66
|
+
contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).prefix(prefix)
|
67
|
+
});
|
68
|
+
}
|
69
|
+
route(route) {
|
70
|
+
return new _DecoratedProcedure({
|
71
|
+
...this["~orpc"],
|
72
|
+
contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).route(route)
|
73
|
+
});
|
74
|
+
}
|
75
|
+
errors(errors) {
|
76
|
+
return new _DecoratedProcedure({
|
77
|
+
...this["~orpc"],
|
78
|
+
contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).errors(errors)
|
79
|
+
});
|
80
|
+
}
|
81
|
+
use(middleware, mapInput) {
|
67
82
|
const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
|
68
|
-
return
|
69
|
-
...
|
70
|
-
middlewares: [...
|
71
|
-
})
|
72
|
-
}
|
73
|
-
|
74
|
-
return
|
75
|
-
...
|
76
|
-
contract: DecoratedContractProcedure.decorate(
|
77
|
-
})
|
78
|
-
}
|
79
|
-
|
80
|
-
|
83
|
+
return new _DecoratedProcedure({
|
84
|
+
...this["~orpc"],
|
85
|
+
middlewares: [...this["~orpc"].middlewares, middleware_]
|
86
|
+
});
|
87
|
+
}
|
88
|
+
unshiftTag(...tags) {
|
89
|
+
return new _DecoratedProcedure({
|
90
|
+
...this["~orpc"],
|
91
|
+
contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).unshiftTag(...tags)
|
92
|
+
});
|
93
|
+
}
|
94
|
+
unshiftMiddleware(...middlewares) {
|
95
|
+
const castedMiddlewares = middlewares;
|
96
|
+
if (this["~orpc"].middlewares.length) {
|
81
97
|
let min = 0;
|
82
|
-
for (let i = 0; i <
|
83
|
-
const index =
|
98
|
+
for (let i = 0; i < this["~orpc"].middlewares.length; i++) {
|
99
|
+
const index = castedMiddlewares.indexOf(this["~orpc"].middlewares[i], min);
|
84
100
|
if (index === -1) {
|
85
|
-
|
101
|
+
castedMiddlewares.push(...this["~orpc"].middlewares.slice(i));
|
86
102
|
break;
|
87
103
|
}
|
88
104
|
min = index + 1;
|
89
105
|
}
|
90
106
|
}
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
}
|
107
|
+
const numNewMiddlewares = castedMiddlewares.length - this["~orpc"].middlewares.length;
|
108
|
+
return new _DecoratedProcedure({
|
109
|
+
...this["~orpc"],
|
110
|
+
inputValidationIndex: this["~orpc"].inputValidationIndex + numNewMiddlewares,
|
111
|
+
outputValidationIndex: this["~orpc"].outputValidationIndex + numNewMiddlewares,
|
112
|
+
middlewares: castedMiddlewares
|
113
|
+
});
|
114
|
+
}
|
115
|
+
/**
|
116
|
+
* Make this procedure callable (works like a function while still being a procedure).
|
117
|
+
*/
|
118
|
+
callable(...rest) {
|
119
|
+
return Object.assign(createProcedureClient(this, ...rest), {
|
120
|
+
"~type": "Procedure",
|
121
|
+
"~orpc": this["~orpc"]
|
122
|
+
});
|
123
|
+
}
|
124
|
+
/**
|
125
|
+
* Make this procedure compatible with server action (the same as .callable, but the type is compatible with server action).
|
126
|
+
*/
|
127
|
+
actionable(...rest) {
|
128
|
+
return this.callable(...rest);
|
129
|
+
}
|
130
|
+
};
|
98
131
|
|
99
132
|
// src/procedure-implementer.ts
|
100
133
|
var ProcedureImplementer = class _ProcedureImplementer {
|
@@ -107,15 +140,143 @@ var ProcedureImplementer = class _ProcedureImplementer {
|
|
107
140
|
const mappedMiddleware = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
|
108
141
|
return new _ProcedureImplementer({
|
109
142
|
...this["~orpc"],
|
110
|
-
middlewares: [...this["~orpc"].middlewares
|
143
|
+
middlewares: [...this["~orpc"].middlewares, mappedMiddleware]
|
111
144
|
});
|
112
145
|
}
|
113
146
|
handler(handler) {
|
114
|
-
return
|
115
|
-
|
116
|
-
contract: this["~orpc"].contract,
|
147
|
+
return new DecoratedProcedure({
|
148
|
+
...this["~orpc"],
|
117
149
|
handler
|
118
|
-
})
|
150
|
+
});
|
151
|
+
}
|
152
|
+
};
|
153
|
+
|
154
|
+
// src/procedure-builder-with-input.ts
|
155
|
+
var ProcedureBuilderWithInput = class _ProcedureBuilderWithInput {
|
156
|
+
"~type" = "ProcedureBuilderWithInput";
|
157
|
+
"~orpc";
|
158
|
+
constructor(def) {
|
159
|
+
this["~orpc"] = def;
|
160
|
+
}
|
161
|
+
errors(errors) {
|
162
|
+
return new _ProcedureBuilderWithInput({
|
163
|
+
...this["~orpc"],
|
164
|
+
contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).errors(errors)
|
165
|
+
});
|
166
|
+
}
|
167
|
+
route(route) {
|
168
|
+
return new _ProcedureBuilderWithInput({
|
169
|
+
...this["~orpc"],
|
170
|
+
contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).route(route)
|
171
|
+
});
|
172
|
+
}
|
173
|
+
use(middleware, mapInput) {
|
174
|
+
const maybeWithMapInput = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
|
175
|
+
return new _ProcedureBuilderWithInput({
|
176
|
+
...this["~orpc"],
|
177
|
+
outputValidationIndex: this["~orpc"].outputValidationIndex + 1,
|
178
|
+
middlewares: [...this["~orpc"].middlewares, maybeWithMapInput]
|
179
|
+
});
|
180
|
+
}
|
181
|
+
output(schema, example) {
|
182
|
+
return new ProcedureImplementer({
|
183
|
+
...this["~orpc"],
|
184
|
+
contract: new ContractProcedureBuilderWithInput(this["~orpc"].contract["~orpc"]).output(schema, example)
|
185
|
+
});
|
186
|
+
}
|
187
|
+
handler(handler) {
|
188
|
+
return new DecoratedProcedure({
|
189
|
+
...this["~orpc"],
|
190
|
+
handler
|
191
|
+
});
|
192
|
+
}
|
193
|
+
};
|
194
|
+
|
195
|
+
// src/procedure-builder-with-output.ts
|
196
|
+
import { ContractProcedureBuilderWithOutput, DecoratedContractProcedure as DecoratedContractProcedure3 } from "@orpc/contract";
|
197
|
+
var ProcedureBuilderWithOutput = class _ProcedureBuilderWithOutput {
|
198
|
+
"~type" = "ProcedureBuilderWithOutput";
|
199
|
+
"~orpc";
|
200
|
+
constructor(def) {
|
201
|
+
this["~orpc"] = def;
|
202
|
+
}
|
203
|
+
errors(errors) {
|
204
|
+
return new _ProcedureBuilderWithOutput({
|
205
|
+
...this["~orpc"],
|
206
|
+
contract: DecoratedContractProcedure3.decorate(this["~orpc"].contract).errors(errors)
|
207
|
+
});
|
208
|
+
}
|
209
|
+
route(route) {
|
210
|
+
return new _ProcedureBuilderWithOutput({
|
211
|
+
...this["~orpc"],
|
212
|
+
contract: DecoratedContractProcedure3.decorate(this["~orpc"].contract).route(route)
|
213
|
+
});
|
214
|
+
}
|
215
|
+
use(middleware) {
|
216
|
+
return new _ProcedureBuilderWithOutput({
|
217
|
+
...this["~orpc"],
|
218
|
+
inputValidationIndex: this["~orpc"].inputValidationIndex + 1,
|
219
|
+
middlewares: [...this["~orpc"].middlewares, middleware]
|
220
|
+
});
|
221
|
+
}
|
222
|
+
input(schema, example) {
|
223
|
+
return new ProcedureImplementer({
|
224
|
+
...this["~orpc"],
|
225
|
+
contract: new ContractProcedureBuilderWithOutput(this["~orpc"].contract["~orpc"]).input(schema, example)
|
226
|
+
});
|
227
|
+
}
|
228
|
+
handler(handler) {
|
229
|
+
return new DecoratedProcedure({
|
230
|
+
...this["~orpc"],
|
231
|
+
handler
|
232
|
+
});
|
233
|
+
}
|
234
|
+
};
|
235
|
+
|
236
|
+
// src/procedure-builder.ts
|
237
|
+
var ProcedureBuilder = class _ProcedureBuilder {
|
238
|
+
"~type" = "ProcedureBuilder";
|
239
|
+
"~orpc";
|
240
|
+
constructor(def) {
|
241
|
+
this["~orpc"] = def;
|
242
|
+
}
|
243
|
+
errors(errors) {
|
244
|
+
return new _ProcedureBuilder({
|
245
|
+
...this["~orpc"],
|
246
|
+
contract: DecoratedContractProcedure4.decorate(this["~orpc"].contract).errors(errors)
|
247
|
+
});
|
248
|
+
}
|
249
|
+
route(route) {
|
250
|
+
return new _ProcedureBuilder({
|
251
|
+
...this["~orpc"],
|
252
|
+
contract: DecoratedContractProcedure4.decorate(this["~orpc"].contract).route(route)
|
253
|
+
});
|
254
|
+
}
|
255
|
+
use(middleware) {
|
256
|
+
return new _ProcedureBuilder({
|
257
|
+
...this["~orpc"],
|
258
|
+
inputValidationIndex: this["~orpc"].inputValidationIndex + 1,
|
259
|
+
outputValidationIndex: this["~orpc"].outputValidationIndex + 1,
|
260
|
+
middlewares: [...this["~orpc"].middlewares, middleware]
|
261
|
+
});
|
262
|
+
}
|
263
|
+
input(schema, example) {
|
264
|
+
return new ProcedureBuilderWithInput({
|
265
|
+
...this["~orpc"],
|
266
|
+
contract: new ContractProcedureBuilder(this["~orpc"].contract["~orpc"]).input(schema, example)
|
267
|
+
});
|
268
|
+
}
|
269
|
+
output(schema, example) {
|
270
|
+
return new ProcedureBuilderWithOutput({
|
271
|
+
...this["~orpc"],
|
272
|
+
contract: new ContractProcedureBuilder(this["~orpc"].contract["~orpc"]).output(schema, example)
|
273
|
+
});
|
274
|
+
}
|
275
|
+
handler(handler) {
|
276
|
+
return new DecoratedProcedure({
|
277
|
+
...this["~orpc"],
|
278
|
+
handler
|
279
|
+
});
|
119
280
|
}
|
120
281
|
};
|
121
282
|
|
@@ -153,31 +314,10 @@ function getLazyRouterPrefix(obj) {
|
|
153
314
|
return obj[LAZY_ROUTER_PREFIX_SYMBOL];
|
154
315
|
}
|
155
316
|
|
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
317
|
// src/lazy-decorated.ts
|
173
318
|
function decorateLazy(lazied) {
|
174
319
|
const flattenLazy = flatLazy(lazied);
|
175
|
-
const
|
176
|
-
procedure: createLazyProcedureFormAnyLazy(flattenLazy),
|
177
|
-
context: void 0
|
178
|
-
});
|
179
|
-
Object.assign(procedureProcedureClient, flattenLazy);
|
180
|
-
const recursive = new Proxy(procedureProcedureClient, {
|
320
|
+
const recursive = new Proxy(flattenLazy, {
|
181
321
|
get(target, key) {
|
182
322
|
if (typeof key !== "string") {
|
183
323
|
return Reflect.get(target, key);
|
@@ -214,10 +354,19 @@ var RouterBuilder = class _RouterBuilder {
|
|
214
354
|
tags: [...this["~orpc"].tags ?? [], ...tags]
|
215
355
|
});
|
216
356
|
}
|
357
|
+
errors(errors) {
|
358
|
+
return new _RouterBuilder({
|
359
|
+
...this["~orpc"],
|
360
|
+
errorMap: {
|
361
|
+
...this["~orpc"].errorMap,
|
362
|
+
...errors
|
363
|
+
}
|
364
|
+
});
|
365
|
+
}
|
217
366
|
use(middleware) {
|
218
367
|
return new _RouterBuilder({
|
219
368
|
...this["~orpc"],
|
220
|
-
middlewares: [...this["~orpc"].middlewares
|
369
|
+
middlewares: [...this["~orpc"].middlewares, middleware]
|
221
370
|
});
|
222
371
|
}
|
223
372
|
router(router) {
|
@@ -244,7 +393,7 @@ function adapt(item, options) {
|
|
244
393
|
return adaptedLazy;
|
245
394
|
}
|
246
395
|
if (isProcedure(item)) {
|
247
|
-
let decorated =
|
396
|
+
let decorated = DecoratedProcedure.decorate(item);
|
248
397
|
if (options.tags?.length) {
|
249
398
|
decorated = decorated.unshiftTag(...options.tags);
|
250
399
|
}
|
@@ -254,6 +403,9 @@ function adapt(item, options) {
|
|
254
403
|
if (options.middlewares?.length) {
|
255
404
|
decorated = decorated.unshiftMiddleware(...options.middlewares);
|
256
405
|
}
|
406
|
+
if (Object.keys(options.errorMap).length) {
|
407
|
+
decorated = decorated.errors(options.errorMap);
|
408
|
+
}
|
257
409
|
return decorated;
|
258
410
|
}
|
259
411
|
const adapted = {};
|
@@ -263,6 +415,213 @@ function adapt(item, options) {
|
|
263
415
|
return adapted;
|
264
416
|
}
|
265
417
|
|
418
|
+
// src/builder-with-errors-middlewares.ts
|
419
|
+
var BuilderWithErrorsMiddlewares = class _BuilderWithErrorsMiddlewares {
|
420
|
+
"~type" = "BuilderWithErrorsMiddlewares";
|
421
|
+
"~orpc";
|
422
|
+
constructor(def) {
|
423
|
+
this["~orpc"] = def;
|
424
|
+
}
|
425
|
+
errors(errors) {
|
426
|
+
return new _BuilderWithErrorsMiddlewares({
|
427
|
+
...this["~orpc"],
|
428
|
+
errorMap: {
|
429
|
+
...this["~orpc"].errorMap,
|
430
|
+
...errors
|
431
|
+
}
|
432
|
+
});
|
433
|
+
}
|
434
|
+
use(middleware) {
|
435
|
+
return new _BuilderWithErrorsMiddlewares({
|
436
|
+
...this["~orpc"],
|
437
|
+
inputValidationIndex: this["~orpc"].inputValidationIndex + 1,
|
438
|
+
outputValidationIndex: this["~orpc"].outputValidationIndex + 1,
|
439
|
+
middlewares: [...this["~orpc"].middlewares, middleware]
|
440
|
+
// FIXME: I believe we can remove `as any` here
|
441
|
+
});
|
442
|
+
}
|
443
|
+
route(route) {
|
444
|
+
return new ProcedureBuilder({
|
445
|
+
...this["~orpc"],
|
446
|
+
contract: new ContractProcedure({
|
447
|
+
route,
|
448
|
+
InputSchema: void 0,
|
449
|
+
OutputSchema: void 0,
|
450
|
+
errorMap: this["~orpc"].errorMap
|
451
|
+
})
|
452
|
+
});
|
453
|
+
}
|
454
|
+
input(schema, example) {
|
455
|
+
return new ProcedureBuilderWithInput({
|
456
|
+
...this["~orpc"],
|
457
|
+
contract: new ContractProcedure({
|
458
|
+
OutputSchema: void 0,
|
459
|
+
InputSchema: schema,
|
460
|
+
inputExample: example,
|
461
|
+
errorMap: this["~orpc"].errorMap
|
462
|
+
})
|
463
|
+
});
|
464
|
+
}
|
465
|
+
output(schema, example) {
|
466
|
+
return new ProcedureBuilderWithOutput({
|
467
|
+
...this["~orpc"],
|
468
|
+
contract: new ContractProcedure({
|
469
|
+
InputSchema: void 0,
|
470
|
+
OutputSchema: schema,
|
471
|
+
outputExample: example,
|
472
|
+
errorMap: this["~orpc"].errorMap
|
473
|
+
})
|
474
|
+
});
|
475
|
+
}
|
476
|
+
handler(handler) {
|
477
|
+
return new DecoratedProcedure({
|
478
|
+
...this["~orpc"],
|
479
|
+
contract: new ContractProcedure({
|
480
|
+
InputSchema: void 0,
|
481
|
+
OutputSchema: void 0,
|
482
|
+
errorMap: this["~orpc"].errorMap
|
483
|
+
}),
|
484
|
+
handler
|
485
|
+
});
|
486
|
+
}
|
487
|
+
prefix(prefix) {
|
488
|
+
return new RouterBuilder({
|
489
|
+
...this["~orpc"],
|
490
|
+
prefix
|
491
|
+
});
|
492
|
+
}
|
493
|
+
tag(...tags) {
|
494
|
+
return new RouterBuilder({
|
495
|
+
...this["~orpc"],
|
496
|
+
tags
|
497
|
+
});
|
498
|
+
}
|
499
|
+
router(router) {
|
500
|
+
return new RouterBuilder(this["~orpc"]).router(router);
|
501
|
+
}
|
502
|
+
lazy(loader) {
|
503
|
+
return new RouterBuilder(this["~orpc"]).lazy(loader);
|
504
|
+
}
|
505
|
+
};
|
506
|
+
|
507
|
+
// src/builder-with-errors.ts
|
508
|
+
var BuilderWithErrors = class _BuilderWithErrors {
|
509
|
+
"~type" = "BuilderWithErrors";
|
510
|
+
"~orpc";
|
511
|
+
constructor(def) {
|
512
|
+
this["~orpc"] = def;
|
513
|
+
}
|
514
|
+
context() {
|
515
|
+
return this;
|
516
|
+
}
|
517
|
+
errors(errors) {
|
518
|
+
return new _BuilderWithErrors({
|
519
|
+
...this["~orpc"],
|
520
|
+
errorMap: {
|
521
|
+
...this["~orpc"].errorMap,
|
522
|
+
...errors
|
523
|
+
}
|
524
|
+
});
|
525
|
+
}
|
526
|
+
middleware(middleware) {
|
527
|
+
return decorateMiddleware(middleware);
|
528
|
+
}
|
529
|
+
use(middleware) {
|
530
|
+
return new BuilderWithErrorsMiddlewares({
|
531
|
+
...this["~orpc"],
|
532
|
+
inputValidationIndex: 1,
|
533
|
+
outputValidationIndex: 1,
|
534
|
+
middlewares: [middleware]
|
535
|
+
// FIXME: I believe we can remove `as any` here
|
536
|
+
});
|
537
|
+
}
|
538
|
+
route(route) {
|
539
|
+
return new ProcedureBuilder({
|
540
|
+
middlewares: [],
|
541
|
+
inputValidationIndex: 0,
|
542
|
+
outputValidationIndex: 0,
|
543
|
+
contract: new ContractProcedure2({
|
544
|
+
route,
|
545
|
+
InputSchema: void 0,
|
546
|
+
OutputSchema: void 0,
|
547
|
+
errorMap: this["~orpc"].errorMap
|
548
|
+
})
|
549
|
+
});
|
550
|
+
}
|
551
|
+
input(schema, example) {
|
552
|
+
return new ProcedureBuilderWithInput({
|
553
|
+
middlewares: [],
|
554
|
+
inputValidationIndex: 0,
|
555
|
+
outputValidationIndex: 0,
|
556
|
+
contract: new ContractProcedure2({
|
557
|
+
OutputSchema: void 0,
|
558
|
+
InputSchema: schema,
|
559
|
+
inputExample: example,
|
560
|
+
errorMap: this["~orpc"].errorMap
|
561
|
+
})
|
562
|
+
});
|
563
|
+
}
|
564
|
+
output(schema, example) {
|
565
|
+
return new ProcedureBuilderWithOutput({
|
566
|
+
middlewares: [],
|
567
|
+
inputValidationIndex: 0,
|
568
|
+
outputValidationIndex: 0,
|
569
|
+
contract: new ContractProcedure2({
|
570
|
+
InputSchema: void 0,
|
571
|
+
OutputSchema: schema,
|
572
|
+
outputExample: example,
|
573
|
+
errorMap: this["~orpc"].errorMap
|
574
|
+
})
|
575
|
+
});
|
576
|
+
}
|
577
|
+
handler(handler) {
|
578
|
+
return new DecoratedProcedure({
|
579
|
+
middlewares: [],
|
580
|
+
inputValidationIndex: 0,
|
581
|
+
outputValidationIndex: 0,
|
582
|
+
contract: new ContractProcedure2({
|
583
|
+
InputSchema: void 0,
|
584
|
+
OutputSchema: void 0,
|
585
|
+
errorMap: this["~orpc"].errorMap
|
586
|
+
}),
|
587
|
+
handler
|
588
|
+
});
|
589
|
+
}
|
590
|
+
prefix(prefix) {
|
591
|
+
return new RouterBuilder({
|
592
|
+
middlewares: [],
|
593
|
+
errorMap: this["~orpc"].errorMap,
|
594
|
+
prefix
|
595
|
+
});
|
596
|
+
}
|
597
|
+
tag(...tags) {
|
598
|
+
return new RouterBuilder({
|
599
|
+
middlewares: [],
|
600
|
+
errorMap: this["~orpc"].errorMap,
|
601
|
+
tags
|
602
|
+
});
|
603
|
+
}
|
604
|
+
router(router) {
|
605
|
+
return new RouterBuilder({
|
606
|
+
middlewares: [],
|
607
|
+
...this["~orpc"]
|
608
|
+
}).router(router);
|
609
|
+
}
|
610
|
+
lazy(loader) {
|
611
|
+
return new RouterBuilder({
|
612
|
+
middlewares: [],
|
613
|
+
...this["~orpc"]
|
614
|
+
}).lazy(loader);
|
615
|
+
}
|
616
|
+
};
|
617
|
+
|
618
|
+
// src/builder-with-middlewares.ts
|
619
|
+
import { ContractProcedure as ContractProcedure3 } from "@orpc/contract";
|
620
|
+
|
621
|
+
// src/implementer-chainable.ts
|
622
|
+
import { isContractProcedure } from "@orpc/contract";
|
623
|
+
import { createCallableObject } from "@orpc/shared";
|
624
|
+
|
266
625
|
// src/router-implementer.ts
|
267
626
|
var RouterImplementer = class _RouterImplementer {
|
268
627
|
"~type" = "RouterImplementer";
|
@@ -277,31 +636,42 @@ var RouterImplementer = class _RouterImplementer {
|
|
277
636
|
});
|
278
637
|
}
|
279
638
|
router(router) {
|
280
|
-
const adapted = new RouterBuilder(
|
639
|
+
const adapted = new RouterBuilder({
|
640
|
+
...this["~orpc"],
|
641
|
+
errorMap: {}
|
642
|
+
}).router(router);
|
281
643
|
const contracted = setRouterContract(adapted, this["~orpc"].contract);
|
282
644
|
return contracted;
|
283
645
|
}
|
284
646
|
lazy(loader) {
|
285
|
-
const adapted = new RouterBuilder(
|
647
|
+
const adapted = new RouterBuilder({
|
648
|
+
...this["~orpc"],
|
649
|
+
errorMap: {}
|
650
|
+
}).lazy(loader);
|
286
651
|
const contracted = setRouterContract(adapted, this["~orpc"].contract);
|
287
652
|
return contracted;
|
288
653
|
}
|
289
654
|
};
|
290
655
|
|
291
656
|
// src/implementer-chainable.ts
|
292
|
-
function createChainableImplementer(contract,
|
657
|
+
function createChainableImplementer(contract, options) {
|
293
658
|
if (isContractProcedure(contract)) {
|
294
659
|
const implementer = new ProcedureImplementer({
|
295
660
|
contract,
|
296
|
-
middlewares
|
661
|
+
middlewares: options.middlewares,
|
662
|
+
inputValidationIndex: options.inputValidationIndex,
|
663
|
+
outputValidationIndex: options.outputValidationIndex
|
297
664
|
});
|
298
665
|
return implementer;
|
299
666
|
}
|
300
667
|
const chainable = {};
|
301
668
|
for (const key in contract) {
|
302
|
-
chainable[key] = createChainableImplementer(contract[key],
|
669
|
+
chainable[key] = createChainableImplementer(contract[key], options);
|
303
670
|
}
|
304
|
-
const routerImplementer = new RouterImplementer({
|
671
|
+
const routerImplementer = new RouterImplementer({
|
672
|
+
contract,
|
673
|
+
middlewares: options.middlewares
|
674
|
+
});
|
305
675
|
const merged = new Proxy(chainable, {
|
306
676
|
get(target, key) {
|
307
677
|
const next = Reflect.get(target, key);
|
@@ -318,167 +688,257 @@ function createChainableImplementer(contract, middlewares) {
|
|
318
688
|
return merged;
|
319
689
|
}
|
320
690
|
|
321
|
-
// src/
|
322
|
-
|
323
|
-
|
324
|
-
} from "@orpc/contract";
|
325
|
-
var ProcedureBuilder = class _ProcedureBuilder {
|
326
|
-
"~type" = "ProcedureBuilder";
|
691
|
+
// src/builder-with-middlewares.ts
|
692
|
+
var BuilderWithMiddlewares = class _BuilderWithMiddlewares {
|
693
|
+
"~type" = "BuilderHasMiddlewares";
|
327
694
|
"~orpc";
|
328
695
|
constructor(def) {
|
329
696
|
this["~orpc"] = def;
|
330
697
|
}
|
698
|
+
use(middleware) {
|
699
|
+
return new _BuilderWithMiddlewares({
|
700
|
+
...this["~orpc"],
|
701
|
+
inputValidationIndex: this["~orpc"].inputValidationIndex + 1,
|
702
|
+
outputValidationIndex: this["~orpc"].outputValidationIndex + 1,
|
703
|
+
middlewares: [...this["~orpc"].middlewares, middleware]
|
704
|
+
});
|
705
|
+
}
|
706
|
+
errors(errors) {
|
707
|
+
return new BuilderWithErrorsMiddlewares({
|
708
|
+
...this["~orpc"],
|
709
|
+
errorMap: errors
|
710
|
+
});
|
711
|
+
}
|
331
712
|
route(route) {
|
332
|
-
return new
|
713
|
+
return new ProcedureBuilder({
|
333
714
|
...this["~orpc"],
|
334
|
-
contract:
|
715
|
+
contract: new ContractProcedure3({
|
716
|
+
route,
|
717
|
+
InputSchema: void 0,
|
718
|
+
OutputSchema: void 0,
|
719
|
+
errorMap: {}
|
720
|
+
})
|
335
721
|
});
|
336
722
|
}
|
337
723
|
input(schema, example) {
|
338
|
-
return new
|
724
|
+
return new ProcedureBuilderWithInput({
|
339
725
|
...this["~orpc"],
|
340
|
-
contract:
|
726
|
+
contract: new ContractProcedure3({
|
727
|
+
OutputSchema: void 0,
|
728
|
+
InputSchema: schema,
|
729
|
+
inputExample: example,
|
730
|
+
errorMap: {}
|
731
|
+
})
|
341
732
|
});
|
342
733
|
}
|
343
734
|
output(schema, example) {
|
344
|
-
return new
|
735
|
+
return new ProcedureBuilderWithOutput({
|
345
736
|
...this["~orpc"],
|
346
|
-
contract:
|
737
|
+
contract: new ContractProcedure3({
|
738
|
+
InputSchema: void 0,
|
739
|
+
OutputSchema: schema,
|
740
|
+
outputExample: example,
|
741
|
+
errorMap: {}
|
742
|
+
})
|
347
743
|
});
|
348
744
|
}
|
349
|
-
use(middleware, mapInput) {
|
350
|
-
if (!mapInput) {
|
351
|
-
return new ProcedureImplementer({
|
352
|
-
contract: this["~orpc"].contract,
|
353
|
-
middlewares: this["~orpc"].middlewares
|
354
|
-
}).use(middleware);
|
355
|
-
}
|
356
|
-
return new ProcedureImplementer({
|
357
|
-
contract: this["~orpc"].contract,
|
358
|
-
middlewares: this["~orpc"].middlewares
|
359
|
-
}).use(middleware, mapInput);
|
360
|
-
}
|
361
745
|
handler(handler) {
|
362
|
-
return
|
363
|
-
|
364
|
-
contract:
|
746
|
+
return new DecoratedProcedure({
|
747
|
+
...this["~orpc"],
|
748
|
+
contract: new ContractProcedure3({
|
749
|
+
InputSchema: void 0,
|
750
|
+
OutputSchema: void 0,
|
751
|
+
errorMap: {}
|
752
|
+
}),
|
365
753
|
handler
|
366
|
-
})
|
754
|
+
});
|
755
|
+
}
|
756
|
+
prefix(prefix) {
|
757
|
+
return new RouterBuilder({
|
758
|
+
middlewares: this["~orpc"].middlewares,
|
759
|
+
errorMap: {},
|
760
|
+
prefix
|
761
|
+
});
|
762
|
+
}
|
763
|
+
tag(...tags) {
|
764
|
+
return new RouterBuilder({
|
765
|
+
middlewares: this["~orpc"].middlewares,
|
766
|
+
errorMap: {},
|
767
|
+
tags
|
768
|
+
});
|
769
|
+
}
|
770
|
+
router(router) {
|
771
|
+
return new RouterBuilder({
|
772
|
+
errorMap: {},
|
773
|
+
...this["~orpc"]
|
774
|
+
}).router(router);
|
775
|
+
}
|
776
|
+
lazy(loader) {
|
777
|
+
return new RouterBuilder({
|
778
|
+
errorMap: {},
|
779
|
+
...this["~orpc"]
|
780
|
+
}).lazy(loader);
|
781
|
+
}
|
782
|
+
contract(contract) {
|
783
|
+
return createChainableImplementer(contract, this["~orpc"]);
|
367
784
|
}
|
368
785
|
};
|
369
786
|
|
370
787
|
// src/builder.ts
|
371
|
-
var Builder = class
|
788
|
+
var Builder = class {
|
372
789
|
"~type" = "Builder";
|
373
790
|
"~orpc";
|
374
791
|
constructor(def) {
|
375
792
|
this["~orpc"] = def;
|
376
793
|
}
|
377
794
|
context() {
|
378
|
-
return
|
795
|
+
return this;
|
796
|
+
}
|
797
|
+
middleware(middleware) {
|
798
|
+
return decorateMiddleware(middleware);
|
799
|
+
}
|
800
|
+
errors(errors) {
|
801
|
+
return new BuilderWithErrors({
|
802
|
+
errorMap: errors
|
803
|
+
});
|
379
804
|
}
|
380
805
|
use(middleware) {
|
381
|
-
return new
|
806
|
+
return new BuilderWithMiddlewares({
|
382
807
|
...this["~orpc"],
|
383
|
-
|
808
|
+
inputValidationIndex: 1,
|
809
|
+
outputValidationIndex: 1,
|
810
|
+
middlewares: [middleware]
|
811
|
+
// FIXME: I believe we can remove `as any` here
|
384
812
|
});
|
385
813
|
}
|
386
|
-
middleware(middleware) {
|
387
|
-
return decorateMiddleware(middleware);
|
388
|
-
}
|
389
814
|
route(route) {
|
390
815
|
return new ProcedureBuilder({
|
391
|
-
middlewares:
|
392
|
-
|
816
|
+
middlewares: [],
|
817
|
+
inputValidationIndex: 0,
|
818
|
+
outputValidationIndex: 0,
|
819
|
+
contract: new ContractProcedure4({
|
393
820
|
route,
|
394
821
|
InputSchema: void 0,
|
395
|
-
OutputSchema: void 0
|
822
|
+
OutputSchema: void 0,
|
823
|
+
errorMap: {}
|
396
824
|
})
|
397
825
|
});
|
398
826
|
}
|
399
827
|
input(schema, example) {
|
400
|
-
return new
|
401
|
-
middlewares:
|
402
|
-
|
828
|
+
return new ProcedureBuilderWithInput({
|
829
|
+
middlewares: [],
|
830
|
+
inputValidationIndex: 0,
|
831
|
+
outputValidationIndex: 0,
|
832
|
+
contract: new ContractProcedure4({
|
403
833
|
OutputSchema: void 0,
|
404
834
|
InputSchema: schema,
|
405
|
-
inputExample: example
|
835
|
+
inputExample: example,
|
836
|
+
errorMap: {}
|
406
837
|
})
|
407
838
|
});
|
408
839
|
}
|
409
840
|
output(schema, example) {
|
410
|
-
return new
|
411
|
-
middlewares:
|
412
|
-
|
841
|
+
return new ProcedureBuilderWithOutput({
|
842
|
+
middlewares: [],
|
843
|
+
inputValidationIndex: 0,
|
844
|
+
outputValidationIndex: 0,
|
845
|
+
contract: new ContractProcedure4({
|
413
846
|
InputSchema: void 0,
|
414
847
|
OutputSchema: schema,
|
415
|
-
outputExample: example
|
848
|
+
outputExample: example,
|
849
|
+
errorMap: {}
|
416
850
|
})
|
417
851
|
});
|
418
852
|
}
|
419
853
|
handler(handler) {
|
420
|
-
return
|
421
|
-
middlewares:
|
422
|
-
|
854
|
+
return new DecoratedProcedure({
|
855
|
+
middlewares: [],
|
856
|
+
inputValidationIndex: 0,
|
857
|
+
outputValidationIndex: 0,
|
858
|
+
contract: new ContractProcedure4({
|
423
859
|
InputSchema: void 0,
|
424
|
-
OutputSchema: void 0
|
860
|
+
OutputSchema: void 0,
|
861
|
+
errorMap: {}
|
425
862
|
}),
|
426
863
|
handler
|
427
|
-
})
|
864
|
+
});
|
428
865
|
}
|
429
866
|
prefix(prefix) {
|
430
867
|
return new RouterBuilder({
|
431
|
-
middlewares:
|
868
|
+
middlewares: [],
|
869
|
+
errorMap: {},
|
432
870
|
prefix
|
433
871
|
});
|
434
872
|
}
|
435
873
|
tag(...tags) {
|
436
874
|
return new RouterBuilder({
|
437
|
-
middlewares:
|
875
|
+
middlewares: [],
|
876
|
+
errorMap: {},
|
438
877
|
tags
|
439
878
|
});
|
440
879
|
}
|
441
880
|
router(router) {
|
442
|
-
return new RouterBuilder(
|
881
|
+
return new RouterBuilder({
|
882
|
+
middlewares: [],
|
883
|
+
errorMap: []
|
884
|
+
}).router(router);
|
443
885
|
}
|
444
886
|
lazy(loader) {
|
445
|
-
return new RouterBuilder(
|
887
|
+
return new RouterBuilder({
|
888
|
+
middlewares: [],
|
889
|
+
errorMap: {}
|
890
|
+
}).lazy(loader);
|
446
891
|
}
|
447
892
|
contract(contract) {
|
448
|
-
return createChainableImplementer(contract,
|
893
|
+
return createChainableImplementer(contract, {
|
894
|
+
middlewares: [],
|
895
|
+
inputValidationIndex: 0,
|
896
|
+
outputValidationIndex: 0
|
897
|
+
});
|
449
898
|
}
|
450
899
|
};
|
451
900
|
|
901
|
+
// src/procedure-utils.ts
|
902
|
+
function call(procedure, input, ...rest) {
|
903
|
+
return createProcedureClient(procedure, ...rest)(input);
|
904
|
+
}
|
905
|
+
|
906
|
+
// src/lazy-utils.ts
|
907
|
+
function createLazyProcedureFormAnyLazy(lazied) {
|
908
|
+
const lazyProcedure = lazy(async () => {
|
909
|
+
const { default: maybeProcedure } = await unlazy(flatLazy(lazied));
|
910
|
+
if (!isProcedure(maybeProcedure)) {
|
911
|
+
throw new Error(`
|
912
|
+
Expected a lazy<procedure> but got lazy<unknown>.
|
913
|
+
This should be caught by TypeScript compilation.
|
914
|
+
Please report this issue if this makes you feel uncomfortable.
|
915
|
+
`);
|
916
|
+
}
|
917
|
+
return { default: maybeProcedure };
|
918
|
+
});
|
919
|
+
return lazyProcedure;
|
920
|
+
}
|
921
|
+
|
452
922
|
// src/router-client.ts
|
453
|
-
function createRouterClient(
|
454
|
-
if (isProcedure(
|
455
|
-
const caller = createProcedureClient(
|
456
|
-
...options,
|
457
|
-
procedure: options.router,
|
458
|
-
context: options.context,
|
459
|
-
path: options.path
|
460
|
-
});
|
923
|
+
function createRouterClient(router, ...rest) {
|
924
|
+
if (isProcedure(router)) {
|
925
|
+
const caller = createProcedureClient(router, ...rest);
|
461
926
|
return caller;
|
462
927
|
}
|
463
|
-
const procedureCaller = isLazy(
|
464
|
-
...options,
|
465
|
-
procedure: createLazyProcedureFormAnyLazy(options.router),
|
466
|
-
context: options.context,
|
467
|
-
path: options.path
|
468
|
-
}) : {};
|
928
|
+
const procedureCaller = isLazy(router) ? createProcedureClient(createLazyProcedureFormAnyLazy(router), ...rest) : {};
|
469
929
|
const recursive = new Proxy(procedureCaller, {
|
470
930
|
get(target, key) {
|
471
931
|
if (typeof key !== "string") {
|
472
932
|
return Reflect.get(target, key);
|
473
933
|
}
|
474
|
-
const next = getRouterChild(
|
934
|
+
const next = getRouterChild(router, key);
|
475
935
|
if (!next) {
|
476
936
|
return Reflect.get(target, key);
|
477
937
|
}
|
478
|
-
|
938
|
+
const [options] = rest;
|
939
|
+
return createRouterClient(next, {
|
479
940
|
...options,
|
480
|
-
|
481
|
-
path: [...options.path ?? [], key]
|
941
|
+
path: [...options?.path ?? [], key]
|
482
942
|
});
|
483
943
|
}
|
484
944
|
});
|
@@ -486,35 +946,40 @@ function createRouterClient(options) {
|
|
486
946
|
}
|
487
947
|
|
488
948
|
// src/index.ts
|
489
|
-
import { configGlobal, fallbackToGlobalConfig } from "@orpc/contract";
|
490
|
-
export * from "@orpc/shared/error";
|
949
|
+
import { configGlobal, fallbackToGlobalConfig, isDefinedError, ORPCError, safe } from "@orpc/contract";
|
491
950
|
var os = new Builder({});
|
492
951
|
export {
|
493
952
|
Builder,
|
953
|
+
DecoratedProcedure,
|
494
954
|
LAZY_LOADER_SYMBOL,
|
955
|
+
ORPCError,
|
495
956
|
Procedure,
|
496
957
|
ProcedureBuilder,
|
497
958
|
ProcedureImplementer,
|
498
959
|
RouterBuilder,
|
499
960
|
RouterImplementer,
|
961
|
+
call,
|
500
962
|
configGlobal,
|
501
963
|
createChainableImplementer,
|
964
|
+
createORPCErrorConstructorMap,
|
502
965
|
createProcedureClient,
|
503
966
|
createRouterClient,
|
504
967
|
decorateLazy,
|
505
968
|
decorateMiddleware,
|
506
|
-
decorateProcedure,
|
507
969
|
deepSetLazyRouterPrefix,
|
508
970
|
fallbackToGlobalConfig,
|
509
971
|
flatLazy,
|
510
972
|
getLazyRouterPrefix,
|
511
973
|
getRouterChild,
|
512
974
|
getRouterContract,
|
975
|
+
isDefinedError,
|
513
976
|
isLazy,
|
514
977
|
isProcedure,
|
515
978
|
lazy,
|
516
979
|
mergeContext,
|
980
|
+
middlewareOutputFn,
|
517
981
|
os,
|
982
|
+
safe,
|
518
983
|
setRouterContract,
|
519
984
|
unlazy
|
520
985
|
};
|