@orpc/server 0.0.0-next.ee0aeaf → 0.0.0-next.f22c7ec
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-2HRHHZJD.js +301 -0
- package/dist/chunk-SA7HGGVY.js +242 -0
- package/dist/chunk-WUOGVGWG.js +1 -0
- package/dist/fetch.js +11 -107
- package/dist/hono.js +30 -0
- package/dist/index.js +435 -291
- package/dist/next.js +36 -0
- package/dist/node.js +87 -0
- package/dist/src/adapters/fetch/index.d.ts +6 -0
- package/dist/src/adapters/fetch/orpc-handler.d.ts +20 -0
- package/dist/src/adapters/fetch/orpc-payload-codec.d.ts +16 -0
- package/dist/src/adapters/fetch/orpc-procedure-matcher.d.ts +12 -0
- package/dist/src/adapters/fetch/super-json.d.ts +12 -0
- package/dist/src/adapters/fetch/types.d.ts +21 -0
- 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 +5 -0
- package/dist/src/adapters/node/orpc-handler.d.ts +12 -0
- package/dist/src/adapters/node/request-listener.d.ts +28 -0
- package/dist/src/adapters/node/types.d.ts +22 -0
- package/dist/src/builder.d.ts +33 -49
- package/dist/src/error.d.ts +10 -0
- package/dist/src/hidden.d.ts +6 -0
- package/dist/src/implementer-chainable.d.ts +10 -0
- package/dist/src/index.d.ts +12 -4
- package/dist/src/lazy-decorated.d.ts +7 -0
- package/dist/src/lazy-utils.d.ts +4 -0
- package/dist/src/lazy.d.ts +6 -11
- package/dist/src/middleware-decorated.d.ts +9 -0
- package/dist/src/middleware.d.ts +22 -12
- package/dist/src/procedure-builder.d.ts +19 -26
- package/dist/src/procedure-client.d.ts +22 -0
- package/dist/src/procedure-decorated.d.ts +25 -0
- package/dist/src/procedure-implementer.d.ts +17 -19
- package/dist/src/procedure-utils.d.ts +17 -0
- package/dist/src/procedure.d.ts +38 -26
- package/dist/src/router-builder.d.ts +27 -23
- package/dist/src/router-client.d.ts +26 -0
- package/dist/src/router-implementer.d.ts +17 -20
- package/dist/src/router.d.ts +11 -15
- package/dist/src/types.d.ts +8 -8
- package/package.json +22 -10
- package/dist/chunk-VARUID7X.js +0 -273
- package/dist/src/fetch/handle.d.ts +0 -7
- package/dist/src/fetch/handler.d.ts +0 -3
- package/dist/src/fetch/index.d.ts +0 -4
- package/dist/src/fetch/types.d.ts +0 -28
- package/dist/src/procedure-caller.d.ts +0 -26
- package/dist/src/router-caller.d.ts +0 -25
package/dist/index.js
CHANGED
@@ -1,415 +1,546 @@
|
|
1
1
|
import {
|
2
2
|
LAZY_LOADER_SYMBOL,
|
3
3
|
Procedure,
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
decorateMiddleware,
|
9
|
-
decorateProcedure,
|
4
|
+
createORPCErrorConstructorMap,
|
5
|
+
createProcedureClient,
|
6
|
+
flatLazy,
|
7
|
+
getRouterChild,
|
10
8
|
isLazy,
|
11
9
|
isProcedure,
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
lazy,
|
11
|
+
mergeContext,
|
12
|
+
middlewareOutputFn,
|
13
|
+
unlazy
|
14
|
+
} from "./chunk-SA7HGGVY.js";
|
16
15
|
|
17
16
|
// src/builder.ts
|
18
|
-
import {
|
19
|
-
ContractProcedure,
|
20
|
-
isContractProcedure as isContractProcedure2
|
21
|
-
} from "@orpc/contract";
|
17
|
+
import { ContractProcedure } from "@orpc/contract";
|
22
18
|
|
23
|
-
// src/
|
24
|
-
import {
|
25
|
-
|
26
|
-
} from "@orpc/contract";
|
19
|
+
// src/implementer-chainable.ts
|
20
|
+
import { isContractProcedure } from "@orpc/contract";
|
21
|
+
import { createCallableObject } from "@orpc/shared";
|
27
22
|
|
28
|
-
// src/
|
23
|
+
// src/middleware-decorated.ts
|
24
|
+
function decorateMiddleware(middleware) {
|
25
|
+
const decorated = middleware;
|
26
|
+
decorated.mapInput = (mapInput) => {
|
27
|
+
const mapped = decorateMiddleware(
|
28
|
+
(options, input, ...rest) => middleware(options, mapInput(input), ...rest)
|
29
|
+
);
|
30
|
+
return mapped;
|
31
|
+
};
|
32
|
+
decorated.concat = (concatMiddleware, mapInput) => {
|
33
|
+
const mapped = mapInput ? decorateMiddleware(concatMiddleware).mapInput(mapInput) : concatMiddleware;
|
34
|
+
const concatted = decorateMiddleware((options, input, output, ...rest) => {
|
35
|
+
const next = async (nextOptions) => {
|
36
|
+
return mapped({ ...options, context: mergeContext(nextOptions.context, options.context) }, input, output, ...rest);
|
37
|
+
};
|
38
|
+
const merged = middleware({ ...options, next }, input, output, ...rest);
|
39
|
+
return merged;
|
40
|
+
});
|
41
|
+
return concatted;
|
42
|
+
};
|
43
|
+
return decorated;
|
44
|
+
}
|
45
|
+
|
46
|
+
// src/procedure-decorated.ts
|
29
47
|
import { DecoratedContractProcedure } from "@orpc/contract";
|
30
|
-
var
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
if (zz$rb.prefix && zz$rb.prefix.includes("{")) {
|
35
|
-
throw new Error('Prefix cannot contain "{" for dynamic routing');
|
48
|
+
var DecoratedProcedure = class _DecoratedProcedure extends Procedure {
|
49
|
+
static decorate(procedure) {
|
50
|
+
if (procedure instanceof _DecoratedProcedure) {
|
51
|
+
return procedure;
|
36
52
|
}
|
53
|
+
return new _DecoratedProcedure(procedure["~orpc"]);
|
37
54
|
}
|
38
55
|
prefix(prefix) {
|
39
|
-
return new
|
40
|
-
...this
|
41
|
-
|
56
|
+
return new _DecoratedProcedure({
|
57
|
+
...this["~orpc"],
|
58
|
+
contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).prefix(prefix)
|
42
59
|
});
|
43
60
|
}
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
61
|
+
route(route) {
|
62
|
+
return new _DecoratedProcedure({
|
63
|
+
...this["~orpc"],
|
64
|
+
contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).route(route)
|
65
|
+
});
|
66
|
+
}
|
67
|
+
errors(errors) {
|
68
|
+
return new _DecoratedProcedure({
|
69
|
+
...this["~orpc"],
|
70
|
+
contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).errors(errors)
|
50
71
|
});
|
51
72
|
}
|
52
73
|
use(middleware, mapInput) {
|
53
74
|
const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
|
54
|
-
return new
|
55
|
-
...this
|
56
|
-
|
75
|
+
return new _DecoratedProcedure({
|
76
|
+
...this["~orpc"],
|
77
|
+
postMiddlewares: [...this["~orpc"].postMiddlewares, middleware_]
|
57
78
|
});
|
58
79
|
}
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
tags: this.zz$rb.tags,
|
64
|
-
prefix: this.zz$rb.prefix
|
80
|
+
unshiftTag(...tags) {
|
81
|
+
return new _DecoratedProcedure({
|
82
|
+
...this["~orpc"],
|
83
|
+
contract: DecoratedContractProcedure.decorate(this["~orpc"].contract).unshiftTag(...tags)
|
65
84
|
});
|
66
|
-
return handled;
|
67
85
|
}
|
68
|
-
|
69
|
-
const
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
86
|
+
unshiftMiddleware(...middlewares) {
|
87
|
+
const castedMiddlewares = middlewares;
|
88
|
+
if (this["~orpc"].preMiddlewares.length) {
|
89
|
+
let min = 0;
|
90
|
+
for (let i = 0; i < this["~orpc"].preMiddlewares.length; i++) {
|
91
|
+
const index = castedMiddlewares.indexOf(this["~orpc"].preMiddlewares[i], min);
|
92
|
+
if (index === -1) {
|
93
|
+
castedMiddlewares.push(...this["~orpc"].preMiddlewares.slice(i));
|
94
|
+
break;
|
95
|
+
}
|
96
|
+
min = index + 1;
|
97
|
+
}
|
98
|
+
}
|
99
|
+
return new _DecoratedProcedure({
|
100
|
+
...this["~orpc"],
|
101
|
+
preMiddlewares: castedMiddlewares
|
74
102
|
});
|
75
|
-
return lazy;
|
76
103
|
}
|
77
|
-
|
78
|
-
function
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
104
|
+
/**
|
105
|
+
* Make this procedure callable (works like a function while still being a procedure).
|
106
|
+
*/
|
107
|
+
callable(...rest) {
|
108
|
+
return Object.assign(createProcedureClient(this, ...rest), {
|
109
|
+
"~type": "Procedure",
|
110
|
+
"~orpc": this["~orpc"]
|
83
111
|
});
|
84
112
|
}
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
113
|
+
/**
|
114
|
+
* Make this procedure compatible with server action (the same as .callable, but the type is compatible with server action).
|
115
|
+
*/
|
116
|
+
actionable(...rest) {
|
117
|
+
return this.callable(...rest);
|
118
|
+
}
|
119
|
+
};
|
120
|
+
|
121
|
+
// src/procedure-implementer.ts
|
122
|
+
var ProcedureImplementer = class _ProcedureImplementer {
|
123
|
+
"~type" = "ProcedureImplementer";
|
124
|
+
"~orpc";
|
125
|
+
constructor(def) {
|
126
|
+
this["~orpc"] = def;
|
127
|
+
}
|
128
|
+
use(middleware, mapInput) {
|
129
|
+
const mappedMiddleware = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
|
130
|
+
return new _ProcedureImplementer({
|
131
|
+
...this["~orpc"],
|
132
|
+
postMiddlewares: [...this["~orpc"].postMiddlewares, mappedMiddleware]
|
89
133
|
});
|
90
134
|
}
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
135
|
+
handler(handler) {
|
136
|
+
return new DecoratedProcedure({
|
137
|
+
postMiddlewares: this["~orpc"].postMiddlewares,
|
138
|
+
preMiddlewares: this["~orpc"].preMiddlewares,
|
139
|
+
contract: this["~orpc"].contract,
|
140
|
+
handler
|
96
141
|
});
|
97
142
|
}
|
98
|
-
|
143
|
+
};
|
144
|
+
|
145
|
+
// src/hidden.ts
|
146
|
+
var ROUTER_CONTRACT_SYMBOL = Symbol("ORPC_ROUTER_CONTRACT");
|
147
|
+
function setRouterContract(obj, contract) {
|
148
|
+
return new Proxy(obj, {
|
149
|
+
get(target, key) {
|
150
|
+
if (key === ROUTER_CONTRACT_SYMBOL) {
|
151
|
+
return contract;
|
152
|
+
}
|
153
|
+
return Reflect.get(target, key);
|
154
|
+
}
|
155
|
+
});
|
99
156
|
}
|
100
|
-
function
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
157
|
+
function getRouterContract(obj) {
|
158
|
+
return obj[ROUTER_CONTRACT_SYMBOL];
|
159
|
+
}
|
160
|
+
var LAZY_ROUTER_PREFIX_SYMBOL = Symbol("ORPC_LAZY_ROUTER_PREFIX");
|
161
|
+
function deepSetLazyRouterPrefix(router, prefix) {
|
162
|
+
return new Proxy(router, {
|
163
|
+
get(target, key) {
|
164
|
+
if (key !== LAZY_ROUTER_PREFIX_SYMBOL) {
|
165
|
+
const val = Reflect.get(target, key);
|
166
|
+
if (val && (typeof val === "object" || typeof val === "function")) {
|
167
|
+
return deepSetLazyRouterPrefix(val, prefix);
|
168
|
+
}
|
169
|
+
return val;
|
170
|
+
}
|
171
|
+
return prefix;
|
172
|
+
}
|
116
173
|
});
|
117
|
-
|
174
|
+
}
|
175
|
+
function getLazyRouterPrefix(obj) {
|
176
|
+
return obj[LAZY_ROUTER_PREFIX_SYMBOL];
|
177
|
+
}
|
178
|
+
|
179
|
+
// src/lazy-decorated.ts
|
180
|
+
function decorateLazy(lazied) {
|
181
|
+
const flattenLazy = flatLazy(lazied);
|
182
|
+
const recursive = new Proxy(flattenLazy, {
|
118
183
|
get(target, key) {
|
119
184
|
if (typeof key !== "string") {
|
120
185
|
return Reflect.get(target, key);
|
121
186
|
}
|
122
|
-
|
123
|
-
|
124
|
-
current: createLazy(async () => {
|
125
|
-
const current = (await loadLazy(options.current)).default;
|
126
|
-
return { default: current[key] };
|
127
|
-
})
|
128
|
-
});
|
187
|
+
const next = getRouterChild(flattenLazy, key);
|
188
|
+
return decorateLazy(next);
|
129
189
|
}
|
130
190
|
});
|
131
191
|
return recursive;
|
132
192
|
}
|
133
|
-
function adaptProcedure(options) {
|
134
|
-
const builderMiddlewares = options.middlewares ?? [];
|
135
|
-
const procedureMiddlewares = options.procedure.zz$p.middlewares ?? [];
|
136
|
-
const middlewares = [
|
137
|
-
...builderMiddlewares,
|
138
|
-
...procedureMiddlewares.filter(
|
139
|
-
(item) => !builderMiddlewares.includes(item)
|
140
|
-
)
|
141
|
-
];
|
142
|
-
let contract = DecoratedContractProcedure.decorate(
|
143
|
-
options.procedure.zz$p.contract
|
144
|
-
).pushTag(...options.tags ?? []);
|
145
|
-
if (options.prefix) {
|
146
|
-
contract = contract.prefix(options.prefix);
|
147
|
-
}
|
148
|
-
return decorateProcedure({
|
149
|
-
zz$p: {
|
150
|
-
...options.procedure.zz$p,
|
151
|
-
contract,
|
152
|
-
middlewares
|
153
|
-
}
|
154
|
-
});
|
155
|
-
}
|
156
193
|
|
157
|
-
// src/
|
158
|
-
var
|
159
|
-
|
160
|
-
|
194
|
+
// src/router-builder.ts
|
195
|
+
var RouterBuilder = class _RouterBuilder {
|
196
|
+
"~type" = "RouterBuilder";
|
197
|
+
"~orpc";
|
198
|
+
constructor(def) {
|
199
|
+
this["~orpc"] = def;
|
200
|
+
if (def.prefix && def.prefix.includes("{")) {
|
201
|
+
throw new Error(`
|
202
|
+
Dynamic routing in prefix not supported yet.
|
203
|
+
Please remove "{" from "${def.prefix}".
|
204
|
+
`);
|
205
|
+
}
|
161
206
|
}
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
207
|
+
prefix(prefix) {
|
208
|
+
return new _RouterBuilder({
|
209
|
+
...this["~orpc"],
|
210
|
+
prefix: `${this["~orpc"].prefix ?? ""}${prefix}`
|
211
|
+
});
|
212
|
+
}
|
213
|
+
tag(...tags) {
|
214
|
+
return new _RouterBuilder({
|
215
|
+
...this["~orpc"],
|
216
|
+
tags: [...this["~orpc"].tags ?? [], ...tags]
|
167
217
|
});
|
168
218
|
}
|
169
|
-
|
170
|
-
return
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
219
|
+
errors(errors) {
|
220
|
+
return new _RouterBuilder({
|
221
|
+
...this["~orpc"],
|
222
|
+
errorMap: {
|
223
|
+
...this["~orpc"].errorMap,
|
224
|
+
...errors
|
175
225
|
}
|
176
226
|
});
|
177
227
|
}
|
228
|
+
use(middleware) {
|
229
|
+
return new _RouterBuilder({
|
230
|
+
...this["~orpc"],
|
231
|
+
middlewares: [...this["~orpc"].middlewares, middleware]
|
232
|
+
});
|
233
|
+
}
|
234
|
+
router(router) {
|
235
|
+
const adapted = adapt(router, this["~orpc"]);
|
236
|
+
return adapted;
|
237
|
+
}
|
178
238
|
lazy(loader) {
|
179
|
-
|
239
|
+
const adapted = adapt(flatLazy(lazy(loader)), this["~orpc"]);
|
240
|
+
return adapted;
|
180
241
|
}
|
181
242
|
};
|
243
|
+
function adapt(item, options) {
|
244
|
+
if (isLazy(item)) {
|
245
|
+
const adaptedLazy = decorateLazy(lazy(async () => {
|
246
|
+
const routerOrProcedure = (await unlazy(item)).default;
|
247
|
+
const adapted2 = adapt(routerOrProcedure, options);
|
248
|
+
return { default: adapted2 };
|
249
|
+
}));
|
250
|
+
const lazyPrefix = getLazyRouterPrefix(item);
|
251
|
+
if (options.prefix || lazyPrefix) {
|
252
|
+
const prefixed = deepSetLazyRouterPrefix(adaptedLazy, `${options.prefix ?? ""}${lazyPrefix ?? ""}`);
|
253
|
+
return prefixed;
|
254
|
+
}
|
255
|
+
return adaptedLazy;
|
256
|
+
}
|
257
|
+
if (isProcedure(item)) {
|
258
|
+
let decorated = DecoratedProcedure.decorate(item);
|
259
|
+
if (options.tags?.length) {
|
260
|
+
decorated = decorated.unshiftTag(...options.tags);
|
261
|
+
}
|
262
|
+
if (options.prefix) {
|
263
|
+
decorated = decorated.prefix(options.prefix);
|
264
|
+
}
|
265
|
+
if (options.middlewares?.length) {
|
266
|
+
decorated = decorated.unshiftMiddleware(...options.middlewares);
|
267
|
+
}
|
268
|
+
if (Object.keys(options.errorMap).length) {
|
269
|
+
decorated = decorated.errors(options.errorMap);
|
270
|
+
}
|
271
|
+
return decorated;
|
272
|
+
}
|
273
|
+
const adapted = {};
|
274
|
+
for (const key in item) {
|
275
|
+
adapted[key] = adapt(item[key], options);
|
276
|
+
}
|
277
|
+
return adapted;
|
278
|
+
}
|
279
|
+
|
280
|
+
// src/router-implementer.ts
|
281
|
+
var RouterImplementer = class _RouterImplementer {
|
282
|
+
"~type" = "RouterImplementer";
|
283
|
+
"~orpc";
|
284
|
+
constructor(def) {
|
285
|
+
this["~orpc"] = def;
|
286
|
+
}
|
287
|
+
use(middleware) {
|
288
|
+
return new _RouterImplementer({
|
289
|
+
...this["~orpc"],
|
290
|
+
middlewares: [...this["~orpc"].middlewares ?? [], middleware]
|
291
|
+
});
|
292
|
+
}
|
293
|
+
router(router) {
|
294
|
+
const adapted = new RouterBuilder({
|
295
|
+
...this["~orpc"],
|
296
|
+
errorMap: {}
|
297
|
+
}).router(router);
|
298
|
+
const contracted = setRouterContract(adapted, this["~orpc"].contract);
|
299
|
+
return contracted;
|
300
|
+
}
|
301
|
+
lazy(loader) {
|
302
|
+
const adapted = new RouterBuilder({
|
303
|
+
...this["~orpc"],
|
304
|
+
errorMap: {}
|
305
|
+
}).lazy(loader);
|
306
|
+
const contracted = setRouterContract(adapted, this["~orpc"].contract);
|
307
|
+
return contracted;
|
308
|
+
}
|
309
|
+
};
|
310
|
+
|
311
|
+
// src/implementer-chainable.ts
|
312
|
+
function createChainableImplementer(contract, middlewares = []) {
|
313
|
+
if (isContractProcedure(contract)) {
|
314
|
+
const implementer = new ProcedureImplementer({
|
315
|
+
contract,
|
316
|
+
preMiddlewares: middlewares,
|
317
|
+
postMiddlewares: []
|
318
|
+
});
|
319
|
+
return implementer;
|
320
|
+
}
|
321
|
+
const chainable = {};
|
322
|
+
for (const key in contract) {
|
323
|
+
chainable[key] = createChainableImplementer(contract[key], middlewares);
|
324
|
+
}
|
325
|
+
const routerImplementer = new RouterImplementer({ contract, middlewares });
|
326
|
+
const merged = new Proxy(chainable, {
|
327
|
+
get(target, key) {
|
328
|
+
const next = Reflect.get(target, key);
|
329
|
+
const method = Reflect.get(routerImplementer, key);
|
330
|
+
if (typeof key !== "string" || typeof method !== "function") {
|
331
|
+
return next;
|
332
|
+
}
|
333
|
+
if (!next) {
|
334
|
+
return method.bind(routerImplementer);
|
335
|
+
}
|
336
|
+
return createCallableObject(next, method.bind(routerImplementer));
|
337
|
+
}
|
338
|
+
});
|
339
|
+
return merged;
|
340
|
+
}
|
182
341
|
|
183
342
|
// src/procedure-builder.ts
|
343
|
+
import {
|
344
|
+
DecoratedContractProcedure as DecoratedContractProcedure2
|
345
|
+
} from "@orpc/contract";
|
184
346
|
var ProcedureBuilder = class _ProcedureBuilder {
|
185
|
-
|
186
|
-
|
347
|
+
"~type" = "ProcedureBuilder";
|
348
|
+
"~orpc";
|
349
|
+
constructor(def) {
|
350
|
+
this["~orpc"] = def;
|
187
351
|
}
|
188
|
-
|
189
|
-
* Self chainable
|
190
|
-
*/
|
191
|
-
route(opts) {
|
352
|
+
route(route) {
|
192
353
|
return new _ProcedureBuilder({
|
193
|
-
...this
|
194
|
-
contract: DecoratedContractProcedure2.decorate(this.
|
195
|
-
opts
|
196
|
-
)
|
354
|
+
...this["~orpc"],
|
355
|
+
contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).route(route)
|
197
356
|
});
|
198
357
|
}
|
199
358
|
input(schema, example) {
|
200
359
|
return new _ProcedureBuilder({
|
201
|
-
...this
|
202
|
-
contract: DecoratedContractProcedure2.decorate(this.
|
203
|
-
schema,
|
204
|
-
example
|
205
|
-
)
|
360
|
+
...this["~orpc"],
|
361
|
+
contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).input(schema, example)
|
206
362
|
});
|
207
363
|
}
|
208
364
|
output(schema, example) {
|
209
365
|
return new _ProcedureBuilder({
|
210
|
-
...this
|
211
|
-
contract: DecoratedContractProcedure2.decorate(this.
|
212
|
-
|
213
|
-
|
214
|
-
|
366
|
+
...this["~orpc"],
|
367
|
+
contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).output(schema, example)
|
368
|
+
});
|
369
|
+
}
|
370
|
+
errors(errors) {
|
371
|
+
return new _ProcedureBuilder({
|
372
|
+
...this["~orpc"],
|
373
|
+
contract: DecoratedContractProcedure2.decorate(this["~orpc"].contract).errors(errors)
|
215
374
|
});
|
216
375
|
}
|
217
376
|
use(middleware, mapInput) {
|
218
377
|
if (!mapInput) {
|
219
378
|
return new ProcedureImplementer({
|
220
|
-
contract: this.
|
221
|
-
|
379
|
+
contract: this["~orpc"].contract,
|
380
|
+
preMiddlewares: this["~orpc"].middlewares,
|
381
|
+
postMiddlewares: []
|
222
382
|
}).use(middleware);
|
223
383
|
}
|
224
384
|
return new ProcedureImplementer({
|
225
|
-
contract: this.
|
226
|
-
|
385
|
+
contract: this["~orpc"].contract,
|
386
|
+
preMiddlewares: this["~orpc"].middlewares,
|
387
|
+
postMiddlewares: []
|
227
388
|
}).use(middleware, mapInput);
|
228
389
|
}
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
middlewares: this.zz$pb.middlewares,
|
236
|
-
contract: this.zz$pb.contract,
|
237
|
-
func
|
238
|
-
}
|
239
|
-
});
|
240
|
-
}
|
241
|
-
};
|
242
|
-
|
243
|
-
// src/router-implementer.ts
|
244
|
-
import { isContractProcedure } from "@orpc/contract";
|
245
|
-
var ROUTER_CONTRACT_SYMBOL = Symbol("ORPC_ROUTER_CONTRACT");
|
246
|
-
var RouterImplementer = class {
|
247
|
-
constructor(zz$ri) {
|
248
|
-
this.zz$ri = zz$ri;
|
249
|
-
}
|
250
|
-
router(router) {
|
251
|
-
return Object.assign(new RouterBuilder({}).router(router), {
|
252
|
-
[ROUTER_CONTRACT_SYMBOL]: this.zz$ri.contract
|
253
|
-
});
|
254
|
-
}
|
255
|
-
lazy(loader) {
|
256
|
-
const lazy = createLazy(loader);
|
257
|
-
const decorated = decorateLazy(lazy);
|
258
|
-
return Object.assign(decorated, {
|
259
|
-
[ROUTER_CONTRACT_SYMBOL]: this.zz$ri.contract
|
390
|
+
handler(handler) {
|
391
|
+
return new DecoratedProcedure({
|
392
|
+
preMiddlewares: this["~orpc"].middlewares,
|
393
|
+
postMiddlewares: [],
|
394
|
+
contract: this["~orpc"].contract,
|
395
|
+
handler
|
260
396
|
});
|
261
397
|
}
|
262
398
|
};
|
263
|
-
function chainRouterImplementer(contract, middlewares) {
|
264
|
-
const result = {};
|
265
|
-
for (const key in contract) {
|
266
|
-
const item = contract[key];
|
267
|
-
if (isContractProcedure(item)) {
|
268
|
-
result[key] = new ProcedureImplementer({
|
269
|
-
contract: item,
|
270
|
-
middlewares
|
271
|
-
});
|
272
|
-
} else {
|
273
|
-
result[key] = chainRouterImplementer(item, middlewares);
|
274
|
-
}
|
275
|
-
}
|
276
|
-
const implementer = new RouterImplementer({ contract });
|
277
|
-
return Object.assign(implementer, result);
|
278
|
-
}
|
279
399
|
|
280
400
|
// src/builder.ts
|
281
401
|
var Builder = class _Builder {
|
282
|
-
|
283
|
-
|
402
|
+
"~type" = "Builder";
|
403
|
+
"~orpc";
|
404
|
+
constructor(def) {
|
405
|
+
this["~orpc"] = def;
|
284
406
|
}
|
285
|
-
|
286
|
-
* Self chainable
|
287
|
-
*/
|
407
|
+
// TODO: separate it
|
288
408
|
context() {
|
289
|
-
return
|
409
|
+
return new _Builder({
|
410
|
+
middlewares: [],
|
411
|
+
errorMap: {}
|
412
|
+
});
|
290
413
|
}
|
291
|
-
use(middleware
|
292
|
-
const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
|
414
|
+
use(middleware) {
|
293
415
|
return new _Builder({
|
294
|
-
...this
|
295
|
-
middlewares: [...this.
|
416
|
+
...this["~orpc"],
|
417
|
+
middlewares: [...this["~orpc"].middlewares, middleware]
|
296
418
|
});
|
297
419
|
}
|
298
|
-
|
299
|
-
|
300
|
-
|
420
|
+
errors(errors) {
|
421
|
+
return new _Builder({
|
422
|
+
...this["~orpc"],
|
423
|
+
errorMap: {
|
424
|
+
...this["~orpc"].errorMap,
|
425
|
+
...errors
|
426
|
+
}
|
427
|
+
});
|
428
|
+
}
|
429
|
+
// TODO: not allow define middleware after has context, or anything else
|
430
|
+
middleware(middleware) {
|
431
|
+
return decorateMiddleware(middleware);
|
432
|
+
}
|
301
433
|
route(route) {
|
302
434
|
return new ProcedureBuilder({
|
303
|
-
middlewares: this.
|
435
|
+
middlewares: this["~orpc"].middlewares,
|
304
436
|
contract: new ContractProcedure({
|
305
437
|
route,
|
306
438
|
InputSchema: void 0,
|
307
|
-
OutputSchema: void 0
|
439
|
+
OutputSchema: void 0,
|
440
|
+
errorMap: this["~orpc"].errorMap
|
308
441
|
})
|
309
442
|
});
|
310
443
|
}
|
311
444
|
input(schema, example) {
|
312
445
|
return new ProcedureBuilder({
|
313
|
-
middlewares: this.
|
446
|
+
middlewares: this["~orpc"].middlewares,
|
314
447
|
contract: new ContractProcedure({
|
315
448
|
OutputSchema: void 0,
|
316
449
|
InputSchema: schema,
|
317
|
-
inputExample: example
|
450
|
+
inputExample: example,
|
451
|
+
errorMap: this["~orpc"].errorMap
|
318
452
|
})
|
319
453
|
});
|
320
454
|
}
|
321
455
|
output(schema, example) {
|
322
456
|
return new ProcedureBuilder({
|
323
|
-
middlewares: this.
|
457
|
+
middlewares: this["~orpc"].middlewares,
|
324
458
|
contract: new ContractProcedure({
|
325
459
|
InputSchema: void 0,
|
326
460
|
OutputSchema: schema,
|
327
|
-
outputExample: example
|
461
|
+
outputExample: example,
|
462
|
+
errorMap: this["~orpc"].errorMap
|
328
463
|
})
|
329
464
|
});
|
330
465
|
}
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
}),
|
342
|
-
func
|
343
|
-
}
|
466
|
+
handler(handler) {
|
467
|
+
return new DecoratedProcedure({
|
468
|
+
preMiddlewares: this["~orpc"].middlewares,
|
469
|
+
postMiddlewares: [],
|
470
|
+
contract: new ContractProcedure({
|
471
|
+
InputSchema: void 0,
|
472
|
+
OutputSchema: void 0,
|
473
|
+
errorMap: this["~orpc"].errorMap
|
474
|
+
}),
|
475
|
+
handler
|
344
476
|
});
|
345
477
|
}
|
346
|
-
/**
|
347
|
-
* Convert to ProcedureImplementer | RouterBuilder
|
348
|
-
*/
|
349
|
-
contract(contract) {
|
350
|
-
if (isContractProcedure2(contract)) {
|
351
|
-
return new ProcedureImplementer({
|
352
|
-
contract,
|
353
|
-
middlewares: this.zz$b.middlewares
|
354
|
-
});
|
355
|
-
}
|
356
|
-
return chainRouterImplementer(
|
357
|
-
contract,
|
358
|
-
this.zz$b.middlewares
|
359
|
-
);
|
360
|
-
}
|
361
|
-
/**
|
362
|
-
* Create ExtendedMiddleware
|
363
|
-
*/
|
364
|
-
// TODO: TOutput always any, infer not work at all, because TOutput used inside middleware params,
|
365
|
-
// solution (maybe): create new generic for .output() method
|
366
|
-
middleware(middleware) {
|
367
|
-
return decorateMiddleware(middleware);
|
368
|
-
}
|
369
478
|
prefix(prefix) {
|
370
479
|
return new RouterBuilder({
|
371
|
-
|
480
|
+
middlewares: this["~orpc"].middlewares,
|
481
|
+
errorMap: this["~orpc"].errorMap,
|
372
482
|
prefix
|
373
483
|
});
|
374
484
|
}
|
375
|
-
|
485
|
+
tag(...tags) {
|
376
486
|
return new RouterBuilder({
|
377
|
-
|
487
|
+
middlewares: this["~orpc"].middlewares,
|
488
|
+
errorMap: this["~orpc"].errorMap,
|
378
489
|
tags
|
379
490
|
});
|
380
491
|
}
|
381
|
-
/**
|
382
|
-
* Create DecoratedRouter
|
383
|
-
*/
|
384
492
|
router(router) {
|
385
|
-
return new RouterBuilder(this
|
493
|
+
return new RouterBuilder(this["~orpc"]).router(router);
|
386
494
|
}
|
387
495
|
lazy(loader) {
|
388
|
-
return new RouterBuilder(this
|
496
|
+
return new RouterBuilder(this["~orpc"]).lazy(loader);
|
497
|
+
}
|
498
|
+
contract(contract) {
|
499
|
+
return createChainableImplementer(contract, this["~orpc"].middlewares);
|
389
500
|
}
|
390
501
|
};
|
391
502
|
|
392
|
-
// src/
|
393
|
-
function
|
394
|
-
return
|
503
|
+
// src/procedure-utils.ts
|
504
|
+
function call(procedure, input, ...rest) {
|
505
|
+
return createProcedureClient(procedure, ...rest)(input);
|
506
|
+
}
|
507
|
+
|
508
|
+
// src/lazy-utils.ts
|
509
|
+
function createLazyProcedureFormAnyLazy(lazied) {
|
510
|
+
const lazyProcedure = lazy(async () => {
|
511
|
+
const { default: maybeProcedure } = await unlazy(flatLazy(lazied));
|
512
|
+
if (!isProcedure(maybeProcedure)) {
|
513
|
+
throw new Error(`
|
514
|
+
Expected a lazy<procedure> but got lazy<unknown>.
|
515
|
+
This should be caught by TypeScript compilation.
|
516
|
+
Please report this issue if this makes you feel uncomfortable.
|
517
|
+
`);
|
518
|
+
}
|
519
|
+
return { default: maybeProcedure };
|
520
|
+
});
|
521
|
+
return lazyProcedure;
|
395
522
|
}
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
}
|
523
|
+
|
524
|
+
// src/router-client.ts
|
525
|
+
function createRouterClient(router, ...rest) {
|
526
|
+
if (isProcedure(router)) {
|
527
|
+
const caller = createProcedureClient(router, ...rest);
|
528
|
+
return caller;
|
529
|
+
}
|
530
|
+
const procedureCaller = isLazy(router) ? createProcedureClient(createLazyProcedureFormAnyLazy(router), ...rest) : {};
|
403
531
|
const recursive = new Proxy(procedureCaller, {
|
404
532
|
get(target, key) {
|
405
533
|
if (typeof key !== "string") {
|
406
534
|
return Reflect.get(target, key);
|
407
535
|
}
|
408
|
-
const next =
|
409
|
-
|
536
|
+
const next = getRouterChild(router, key);
|
537
|
+
if (!next) {
|
538
|
+
return Reflect.get(target, key);
|
539
|
+
}
|
540
|
+
const [options] = rest;
|
541
|
+
return createRouterClient(next, {
|
410
542
|
...options,
|
411
|
-
|
412
|
-
basePath: [...options.basePath ?? [], key]
|
543
|
+
path: [...options?.path ?? [], key]
|
413
544
|
});
|
414
545
|
}
|
415
546
|
});
|
@@ -417,31 +548,44 @@ function createRouterCallerInternal(options) {
|
|
417
548
|
}
|
418
549
|
|
419
550
|
// src/index.ts
|
420
|
-
|
421
|
-
var os = new Builder(
|
551
|
+
import { configGlobal, fallbackToGlobalConfig, isDefinedError, ORPCError, safe } from "@orpc/contract";
|
552
|
+
var os = new Builder({
|
553
|
+
middlewares: [],
|
554
|
+
errorMap: {}
|
555
|
+
});
|
422
556
|
export {
|
423
557
|
Builder,
|
558
|
+
DecoratedProcedure,
|
424
559
|
LAZY_LOADER_SYMBOL,
|
425
|
-
|
560
|
+
ORPCError,
|
426
561
|
Procedure,
|
427
562
|
ProcedureBuilder,
|
428
563
|
ProcedureImplementer,
|
429
|
-
ROUTER_CONTRACT_SYMBOL,
|
430
564
|
RouterBuilder,
|
431
565
|
RouterImplementer,
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
566
|
+
call,
|
567
|
+
configGlobal,
|
568
|
+
createChainableImplementer,
|
569
|
+
createORPCErrorConstructorMap,
|
570
|
+
createProcedureClient,
|
571
|
+
createRouterClient,
|
437
572
|
decorateLazy,
|
438
573
|
decorateMiddleware,
|
439
|
-
|
574
|
+
deepSetLazyRouterPrefix,
|
575
|
+
fallbackToGlobalConfig,
|
576
|
+
flatLazy,
|
577
|
+
getLazyRouterPrefix,
|
578
|
+
getRouterChild,
|
579
|
+
getRouterContract,
|
580
|
+
isDefinedError,
|
440
581
|
isLazy,
|
441
582
|
isProcedure,
|
442
|
-
|
443
|
-
loadProcedure,
|
583
|
+
lazy,
|
444
584
|
mergeContext,
|
445
|
-
|
585
|
+
middlewareOutputFn,
|
586
|
+
os,
|
587
|
+
safe,
|
588
|
+
setRouterContract,
|
589
|
+
unlazy
|
446
590
|
};
|
447
591
|
//# sourceMappingURL=index.js.map
|