@temporary-name/server 1.9.3-alpha.30822ad82102dcf9276d473ba372416778807e52 → 1.9.3-alpha.32780b2c7ad58cf8dcbc93a40f13494185223e6e
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/adapters/aws-lambda/index.d.mts +12 -6
- package/dist/adapters/aws-lambda/index.d.ts +12 -6
- package/dist/adapters/aws-lambda/index.mjs +12 -4
- package/dist/adapters/fetch/index.d.mts +12 -6
- package/dist/adapters/fetch/index.d.ts +12 -6
- package/dist/adapters/fetch/index.mjs +12 -11
- package/dist/adapters/node/index.d.mts +12 -6
- package/dist/adapters/node/index.d.ts +12 -6
- package/dist/adapters/node/index.mjs +12 -11
- package/dist/adapters/standard/index.d.mts +28 -13
- package/dist/adapters/standard/index.d.ts +28 -13
- package/dist/adapters/standard/index.mjs +8 -100
- package/dist/index.d.mts +66 -339
- package/dist/index.d.ts +66 -339
- package/dist/index.mjs +126 -355
- package/dist/openapi/index.d.mts +220 -0
- package/dist/openapi/index.d.ts +220 -0
- package/dist/openapi/index.mjs +759 -0
- package/dist/plugins/index.d.mts +2 -2
- package/dist/plugins/index.d.ts +2 -2
- package/dist/shared/{server.Btxrgkj5.d.ts → server.BRCH88Sb.d.mts} +7 -24
- package/dist/shared/server.Bb9Wxubg.d.ts +23 -0
- package/dist/shared/server.BbfNcgas.d.mts +23 -0
- package/dist/shared/{server.Bo94xDTv.d.mts → server.D24uJlXJ.d.ts} +7 -24
- package/dist/shared/server.DlRH_uit.mjs +409 -0
- package/dist/shared/server.Kxw442A9.mjs +247 -0
- package/dist/shared/{server.C1YnHvvf.d.ts → server.XpnxYU3D.d.mts} +128 -73
- package/dist/shared/{server.C1YnHvvf.d.mts → server.XpnxYU3D.d.ts} +128 -73
- package/dist/shared/server.u-02Z0mj.mjs +254 -0
- package/package.json +17 -10
- package/dist/shared/server.BEQrAa3A.mjs +0 -207
- package/dist/shared/server.D6K9uoPI.mjs +0 -35
- package/dist/shared/server.DZ5BIITo.mjs +0 -9
- package/dist/shared/server.X0YaZxSJ.mjs +0 -13
package/dist/index.mjs
CHANGED
|
@@ -1,335 +1,119 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { ValidationError, eventIterator,
|
|
1
|
+
import { mergePrefix, mergeTags, ContractProcedure, mergeErrorMap, mergeMeta, mergeRoute, prefixRoute, initialSchemas, isContractProcedure, getContractRouter } from '@temporary-name/contract';
|
|
2
|
+
export { ValidationError, eventIterator, validateORPCError } from '@temporary-name/contract';
|
|
3
3
|
import { onError, resolveMaybeOptionalOptions } from '@temporary-name/shared';
|
|
4
4
|
export { AsyncIteratorClass, EventPublisher, ORPCError, asyncIteratorToStream as eventIteratorToStream, isDefinedError, onError, onFinish, onStart, onSuccess, safe, streamToAsyncIteratorClass as streamToEventIterator } from '@temporary-name/shared';
|
|
5
|
-
import {
|
|
6
|
-
import { c as createProcedureClient,
|
|
7
|
-
export { L as LAZY_SYMBOL,
|
|
5
|
+
import { SchemaClass, gatingContext } from '@temporary-name/zod';
|
|
6
|
+
import { P as Procedure, c as createProcedureClient, e as enhanceRouter, a as addMiddleware, s as setHiddenRouterContract, l as lazyInternal, g as getLazyMeta, u as unlazy, i as isProcedure, b as isLazy, d as getRouter } from './shared/server.DlRH_uit.mjs';
|
|
7
|
+
export { L as LAZY_SYMBOL, p as createAccessibleLazyRouter, f as createORPCErrorConstructorMap, o as getHiddenRouterContract, k as isStartWithMiddlewares, h as lazy, m as mergeCurrentContext, n as mergeMiddlewares, j as middlewareOutputFn, r as resolveContractProcedures, t as traverseContractProcedures, q as unlazyRouter } from './shared/server.DlRH_uit.mjs';
|
|
8
8
|
export { getEventMeta, withEventMeta } from '@temporary-name/standard-server';
|
|
9
|
-
import 'node:async_hooks';
|
|
10
|
-
import 'zod';
|
|
11
|
-
import 'zod/v4/core';
|
|
12
9
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
{
|
|
29
|
-
...options,
|
|
30
|
-
context: { ...options.context, ...nextOptions1?.context },
|
|
31
|
-
next: (...[nextOptions2]) => options.next({ context: { ...nextOptions1?.context, ...nextOptions2?.context } })
|
|
32
|
-
},
|
|
33
|
-
input,
|
|
34
|
-
output,
|
|
35
|
-
...rest
|
|
36
|
-
)
|
|
37
|
-
},
|
|
38
|
-
input,
|
|
39
|
-
output,
|
|
40
|
-
...rest
|
|
41
|
-
);
|
|
42
|
-
return merged;
|
|
10
|
+
class DecoratedProcedure extends Procedure {
|
|
11
|
+
/**
|
|
12
|
+
* Make this procedure callable (works like a function while still being a procedure).
|
|
13
|
+
*
|
|
14
|
+
* @see {@link https://orpc.unnoq.com/docs/client/server-side Server-side Client Docs}
|
|
15
|
+
*/
|
|
16
|
+
callable(...rest) {
|
|
17
|
+
const client = createProcedureClient(this, ...rest);
|
|
18
|
+
return new Proxy(client, {
|
|
19
|
+
get: (target, key) => {
|
|
20
|
+
return Reflect.has(this, key) ? Reflect.get(this, key) : Reflect.get(target, key);
|
|
21
|
+
},
|
|
22
|
+
has: (target, key) => {
|
|
23
|
+
return Reflect.has(this, key) || Reflect.has(target, key);
|
|
24
|
+
}
|
|
43
25
|
});
|
|
44
|
-
return concatted;
|
|
45
|
-
};
|
|
46
|
-
return decorated;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function isStartWithMiddlewares(middlewares, compare) {
|
|
50
|
-
if (compare.length > middlewares.length) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
for (let i = 0; i < middlewares.length; i++) {
|
|
54
|
-
if (compare[i] === void 0) {
|
|
55
|
-
return true;
|
|
56
|
-
}
|
|
57
|
-
if (middlewares[i] !== compare[i]) {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
26
|
}
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
function mergeMiddlewares(first, second, options) {
|
|
64
|
-
if (options.dedupeLeading && isStartWithMiddlewares(second, first)) {
|
|
65
|
-
return second;
|
|
66
|
-
}
|
|
67
|
-
return [...first, ...second];
|
|
68
|
-
}
|
|
69
|
-
function addMiddleware(middlewares, addition) {
|
|
70
|
-
return [...middlewares, addition];
|
|
71
27
|
}
|
|
72
28
|
|
|
73
|
-
class
|
|
74
|
-
|
|
75
|
-
* This property holds the defined options.
|
|
76
|
-
*/
|
|
77
|
-
"~orpc";
|
|
29
|
+
class ProcedureBuilder extends ContractProcedure {
|
|
30
|
+
z;
|
|
78
31
|
constructor(def) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
function isProcedure(item) {
|
|
83
|
-
if (item instanceof Procedure) {
|
|
84
|
-
return true;
|
|
32
|
+
super(def);
|
|
33
|
+
this.z = new SchemaClass();
|
|
85
34
|
}
|
|
86
|
-
return isContractProcedure(item) && "middlewares" in item["~orpc"] && "inputValidationIndex" in item["~orpc"] && "outputValidationIndex" in item["~orpc"] && "handler" in item["~orpc"];
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
class DecoratedProcedure extends Procedure {
|
|
90
35
|
/**
|
|
91
|
-
* Adds type-safe custom errors.
|
|
92
|
-
* The provided errors are spared-merged with any existing errors.
|
|
36
|
+
* Adds type-safe custom errors to the contract.
|
|
37
|
+
* The provided errors are spared-merged with any existing errors in the contract.
|
|
93
38
|
*
|
|
94
39
|
* @see {@link https://orpc.unnoq.com/docs/error-handling#type%E2%80%90safe-error-handling Type-Safe Error Handling Docs}
|
|
95
40
|
*/
|
|
96
41
|
errors(errors) {
|
|
97
|
-
return new
|
|
42
|
+
return new ProcedureBuilder({
|
|
98
43
|
...this["~orpc"],
|
|
99
44
|
errorMap: mergeErrorMap(this["~orpc"].errorMap, errors)
|
|
100
45
|
});
|
|
101
46
|
}
|
|
102
47
|
/**
|
|
103
|
-
* Sets or updates the metadata.
|
|
104
|
-
* The provided metadata is spared-merged with any existing metadata.
|
|
48
|
+
* Sets or updates the metadata for the contract.
|
|
49
|
+
* The provided metadata is spared-merged with any existing metadata in the contract.
|
|
105
50
|
*
|
|
106
51
|
* @see {@link https://orpc.unnoq.com/docs/metadata Metadata Docs}
|
|
107
52
|
*/
|
|
108
53
|
meta(meta) {
|
|
109
|
-
return new
|
|
54
|
+
return new ProcedureBuilder({
|
|
110
55
|
...this["~orpc"],
|
|
111
56
|
meta: mergeMeta(this["~orpc"].meta, meta)
|
|
112
57
|
});
|
|
113
58
|
}
|
|
114
59
|
/**
|
|
115
|
-
* Sets or updates the route definition.
|
|
116
|
-
* The provided route is spared-merged with any existing route.
|
|
60
|
+
* Sets or updates the route definition for the contract.
|
|
61
|
+
* The provided route is spared-merged with any existing route in the contract.
|
|
117
62
|
* This option is typically relevant when integrating with OpenAPI.
|
|
118
63
|
*
|
|
119
64
|
* @see {@link https://orpc.unnoq.com/docs/openapi/routing OpenAPI Routing Docs}
|
|
120
65
|
* @see {@link https://orpc.unnoq.com/docs/openapi/input-output-structure OpenAPI Input/Output Structure Docs}
|
|
121
66
|
*/
|
|
122
67
|
route(route) {
|
|
123
|
-
|
|
68
|
+
const { prefix } = this["~orpc"];
|
|
69
|
+
return new ProcedureBuilder({
|
|
124
70
|
...this["~orpc"],
|
|
125
|
-
route: mergeRoute(this["~orpc"].route, route)
|
|
71
|
+
route: mergeRoute(this["~orpc"].route, prefix ? prefixRoute(route, prefix) : route)
|
|
126
72
|
});
|
|
127
73
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
return new DecoratedProcedure({
|
|
74
|
+
path(schema) {
|
|
75
|
+
return new ProcedureBuilder({
|
|
131
76
|
...this["~orpc"],
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Make this procedure callable (works like a function while still being a procedure).
|
|
137
|
-
*
|
|
138
|
-
* @see {@link https://orpc.unnoq.com/docs/client/server-side Server-side Client Docs}
|
|
139
|
-
*/
|
|
140
|
-
callable(...rest) {
|
|
141
|
-
const client = createProcedureClient(this, ...rest);
|
|
142
|
-
return new Proxy(client, {
|
|
143
|
-
get: (target, key) => {
|
|
144
|
-
return Reflect.has(this, key) ? Reflect.get(this, key) : Reflect.get(target, key);
|
|
77
|
+
schemas: {
|
|
78
|
+
...this["~orpc"].schemas,
|
|
79
|
+
pathSchema: schema
|
|
145
80
|
},
|
|
146
|
-
|
|
147
|
-
return Reflect.has(this, key) || Reflect.has(target, key);
|
|
148
|
-
}
|
|
81
|
+
inputValidationIndex: this["~orpc"].middlewares.length
|
|
149
82
|
});
|
|
150
83
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
if (key === HIDDEN_ROUTER_CONTRACT_SYMBOL) {
|
|
158
|
-
return contract;
|
|
159
|
-
}
|
|
160
|
-
return Reflect.get(target, key);
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
function getHiddenRouterContract(router) {
|
|
165
|
-
return router[HIDDEN_ROUTER_CONTRACT_SYMBOL];
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
function getRouter(router, path) {
|
|
169
|
-
let current = router;
|
|
170
|
-
for (let i = 0; i < path.length; i++) {
|
|
171
|
-
const segment = path[i];
|
|
172
|
-
if (!current) {
|
|
173
|
-
return void 0;
|
|
174
|
-
}
|
|
175
|
-
if (isProcedure(current)) {
|
|
176
|
-
return void 0;
|
|
177
|
-
}
|
|
178
|
-
if (!isLazy(current)) {
|
|
179
|
-
current = current[segment];
|
|
180
|
-
continue;
|
|
181
|
-
}
|
|
182
|
-
const lazied = current;
|
|
183
|
-
const rest = path.slice(i);
|
|
184
|
-
return lazy(async () => {
|
|
185
|
-
const unwrapped = await unlazy(lazied);
|
|
186
|
-
const next = getRouter(unwrapped.default, rest);
|
|
187
|
-
return unlazy(next);
|
|
188
|
-
}, getLazyMeta(lazied));
|
|
189
|
-
}
|
|
190
|
-
return current;
|
|
191
|
-
}
|
|
192
|
-
function createAccessibleLazyRouter(lazied) {
|
|
193
|
-
const recursive = new Proxy(lazied, {
|
|
194
|
-
get(target, key) {
|
|
195
|
-
if (typeof key !== "string") {
|
|
196
|
-
return Reflect.get(target, key);
|
|
197
|
-
}
|
|
198
|
-
const next = getRouter(lazied, [key]);
|
|
199
|
-
return createAccessibleLazyRouter(next);
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
return recursive;
|
|
203
|
-
}
|
|
204
|
-
function enhanceRouter(router, options) {
|
|
205
|
-
if (isLazy(router)) {
|
|
206
|
-
const laziedMeta = getLazyMeta(router);
|
|
207
|
-
const enhancedPrefix = laziedMeta?.prefix ? mergePrefix(options.prefix, laziedMeta?.prefix) : options.prefix;
|
|
208
|
-
const enhanced2 = lazy(
|
|
209
|
-
async () => {
|
|
210
|
-
const { default: unlaziedRouter } = await unlazy(router);
|
|
211
|
-
const enhanced3 = enhanceRouter(unlaziedRouter, options);
|
|
212
|
-
return unlazy(enhanced3);
|
|
84
|
+
query(schema) {
|
|
85
|
+
return new ProcedureBuilder({
|
|
86
|
+
...this["~orpc"],
|
|
87
|
+
schemas: {
|
|
88
|
+
...this["~orpc"].schemas,
|
|
89
|
+
querySchema: schema
|
|
213
90
|
},
|
|
214
|
-
|
|
215
|
-
...laziedMeta,
|
|
216
|
-
prefix: enhancedPrefix
|
|
217
|
-
}
|
|
218
|
-
);
|
|
219
|
-
const accessible = createAccessibleLazyRouter(enhanced2);
|
|
220
|
-
return accessible;
|
|
221
|
-
}
|
|
222
|
-
if (isProcedure(router)) {
|
|
223
|
-
const newMiddlewares = mergeMiddlewares(options.middlewares, router["~orpc"].middlewares, {
|
|
224
|
-
dedupeLeading: options.dedupeLeadingMiddlewares
|
|
225
|
-
});
|
|
226
|
-
const newMiddlewareAdded = newMiddlewares.length - router["~orpc"].middlewares.length;
|
|
227
|
-
const enhanced2 = new Procedure({
|
|
228
|
-
...router["~orpc"],
|
|
229
|
-
route: enhanceRoute(router["~orpc"].route, options),
|
|
230
|
-
errorMap: mergeErrorMap(options.errorMap, router["~orpc"].errorMap),
|
|
231
|
-
middlewares: newMiddlewares,
|
|
232
|
-
inputValidationIndex: router["~orpc"].inputValidationIndex + newMiddlewareAdded,
|
|
233
|
-
outputValidationIndex: router["~orpc"].outputValidationIndex + newMiddlewareAdded
|
|
91
|
+
inputValidationIndex: this["~orpc"].middlewares.length
|
|
234
92
|
});
|
|
235
|
-
return enhanced2;
|
|
236
|
-
}
|
|
237
|
-
const enhanced = {};
|
|
238
|
-
for (const key in router) {
|
|
239
|
-
enhanced[key] = enhanceRouter(router[key], options);
|
|
240
93
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
if (isLazy(currentRouter)) {
|
|
250
|
-
lazyOptions.push({
|
|
251
|
-
router: currentRouter,
|
|
252
|
-
path: options.path
|
|
253
|
-
});
|
|
254
|
-
} else if (isContractProcedure(currentRouter)) {
|
|
255
|
-
callback({
|
|
256
|
-
contract: currentRouter,
|
|
257
|
-
path: options.path
|
|
94
|
+
body(schema) {
|
|
95
|
+
return new ProcedureBuilder({
|
|
96
|
+
...this["~orpc"],
|
|
97
|
+
schemas: {
|
|
98
|
+
...this["~orpc"].schemas,
|
|
99
|
+
bodySchema: schema
|
|
100
|
+
},
|
|
101
|
+
inputValidationIndex: this["~orpc"].middlewares.length
|
|
258
102
|
});
|
|
259
|
-
} else {
|
|
260
|
-
for (const key in currentRouter) {
|
|
261
|
-
traverseContractProcedures(
|
|
262
|
-
{
|
|
263
|
-
router: currentRouter[key],
|
|
264
|
-
path: [...options.path, key]
|
|
265
|
-
},
|
|
266
|
-
callback,
|
|
267
|
-
lazyOptions
|
|
268
|
-
);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
return lazyOptions;
|
|
272
|
-
}
|
|
273
|
-
async function resolveContractProcedures(options, callback) {
|
|
274
|
-
const pending = [options];
|
|
275
|
-
for (const options2 of pending) {
|
|
276
|
-
const lazyOptions = traverseContractProcedures(options2, callback);
|
|
277
|
-
for (const options3 of lazyOptions) {
|
|
278
|
-
const { default: router } = await unlazy(options3.router);
|
|
279
|
-
pending.push({
|
|
280
|
-
router,
|
|
281
|
-
path: options3.path
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
async function unlazyRouter(router) {
|
|
287
|
-
if (isProcedure(router)) {
|
|
288
|
-
return router;
|
|
289
|
-
}
|
|
290
|
-
const unlazied = {};
|
|
291
|
-
for (const key in router) {
|
|
292
|
-
const item = router[key];
|
|
293
|
-
const { default: unlaziedRouter } = await unlazy(item);
|
|
294
|
-
unlazied[key] = await unlazyRouter(unlaziedRouter);
|
|
295
|
-
}
|
|
296
|
-
return unlazied;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
class Builder {
|
|
300
|
-
/**
|
|
301
|
-
* This property holds the defined options.
|
|
302
|
-
*/
|
|
303
|
-
"~orpc";
|
|
304
|
-
constructor(def) {
|
|
305
|
-
this["~orpc"] = def;
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* Set or override the initial context.
|
|
309
|
-
*
|
|
310
|
-
* @see {@link https://orpc.unnoq.com/docs/context Context Docs}
|
|
311
|
-
*/
|
|
312
|
-
$context() {
|
|
313
|
-
return this;
|
|
314
103
|
}
|
|
315
104
|
/**
|
|
316
|
-
*
|
|
317
|
-
*
|
|
318
|
-
* @see {@link https://orpc.unnoq.com/docs/middleware Middleware Docs}
|
|
319
|
-
*/
|
|
320
|
-
middleware(middleware) {
|
|
321
|
-
return decorateMiddleware(middleware);
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Adds type-safe custom errors.
|
|
325
|
-
* The provided errors are spared-merged with any existing errors.
|
|
105
|
+
* Defines the output validation schema.
|
|
326
106
|
*
|
|
327
|
-
* @see {@link https://orpc.unnoq.com/docs/
|
|
107
|
+
* @see {@link https://orpc.unnoq.com/docs/procedure#input-output-validation Output Validation Docs}
|
|
328
108
|
*/
|
|
329
|
-
|
|
330
|
-
return new
|
|
109
|
+
output(schema) {
|
|
110
|
+
return new ProcedureBuilder({
|
|
331
111
|
...this["~orpc"],
|
|
332
|
-
|
|
112
|
+
schemas: {
|
|
113
|
+
...this["~orpc"].schemas,
|
|
114
|
+
outputSchema: schema
|
|
115
|
+
},
|
|
116
|
+
outputValidationIndex: this["~orpc"].middlewares.length
|
|
333
117
|
});
|
|
334
118
|
}
|
|
335
119
|
/**
|
|
@@ -340,7 +124,7 @@ class Builder {
|
|
|
340
124
|
* @see {@link https://orpc.unnoq.com/docs/middleware Middleware Docs}
|
|
341
125
|
*/
|
|
342
126
|
use(middleware) {
|
|
343
|
-
return new
|
|
127
|
+
return new this.constructor({
|
|
344
128
|
...this["~orpc"],
|
|
345
129
|
middlewares: addMiddleware(this["~orpc"].middlewares, middleware)
|
|
346
130
|
});
|
|
@@ -353,56 +137,6 @@ class Builder {
|
|
|
353
137
|
);
|
|
354
138
|
});
|
|
355
139
|
}
|
|
356
|
-
/**
|
|
357
|
-
* Sets or updates the metadata.
|
|
358
|
-
* The provided metadata is spared-merged with any existing metadata.
|
|
359
|
-
*
|
|
360
|
-
* @see {@link https://orpc.unnoq.com/docs/metadata Metadata Docs}
|
|
361
|
-
*/
|
|
362
|
-
meta(meta) {
|
|
363
|
-
return new Builder({
|
|
364
|
-
...this["~orpc"],
|
|
365
|
-
meta: mergeMeta(this["~orpc"].meta, meta)
|
|
366
|
-
});
|
|
367
|
-
}
|
|
368
|
-
/**
|
|
369
|
-
* Sets or updates the route definition.
|
|
370
|
-
* The provided route is spared-merged with any existing route.
|
|
371
|
-
* This option is typically relevant when integrating with OpenAPI.
|
|
372
|
-
*
|
|
373
|
-
* @see {@link https://orpc.unnoq.com/docs/openapi/routing OpenAPI Routing Docs}
|
|
374
|
-
* @see {@link https://orpc.unnoq.com/docs/openapi/input-output-structure OpenAPI Input/Output Structure Docs}
|
|
375
|
-
*/
|
|
376
|
-
route(route) {
|
|
377
|
-
return new Builder({
|
|
378
|
-
...this["~orpc"],
|
|
379
|
-
route: mergeRoute(this["~orpc"].route, route)
|
|
380
|
-
});
|
|
381
|
-
}
|
|
382
|
-
/**
|
|
383
|
-
* Defines the input validation schema.
|
|
384
|
-
*
|
|
385
|
-
* @see {@link https://orpc.unnoq.com/docs/procedure#input-output-validation Input Validation Docs}
|
|
386
|
-
*/
|
|
387
|
-
input(schema) {
|
|
388
|
-
return new Builder({
|
|
389
|
-
...this["~orpc"],
|
|
390
|
-
inputSchema: schema,
|
|
391
|
-
inputValidationIndex: this["~orpc"].middlewares.length
|
|
392
|
-
});
|
|
393
|
-
}
|
|
394
|
-
/**
|
|
395
|
-
* Defines the output validation schema.
|
|
396
|
-
*
|
|
397
|
-
* @see {@link https://orpc.unnoq.com/docs/procedure#input-output-validation Output Validation Docs}
|
|
398
|
-
*/
|
|
399
|
-
output(schema) {
|
|
400
|
-
return new Builder({
|
|
401
|
-
...this["~orpc"],
|
|
402
|
-
outputSchema: schema,
|
|
403
|
-
outputValidationIndex: this["~orpc"].middlewares.length
|
|
404
|
-
});
|
|
405
|
-
}
|
|
406
140
|
/**
|
|
407
141
|
* Defines the handler of the procedure.
|
|
408
142
|
*
|
|
@@ -414,6 +148,8 @@ class Builder {
|
|
|
414
148
|
handler
|
|
415
149
|
});
|
|
416
150
|
}
|
|
151
|
+
}
|
|
152
|
+
class BuilderWithMiddlewares extends ProcedureBuilder {
|
|
417
153
|
/**
|
|
418
154
|
* Prefixes all procedures in the router.
|
|
419
155
|
* The provided prefix is post-appended to any existing router prefix.
|
|
@@ -423,7 +159,7 @@ class Builder {
|
|
|
423
159
|
* @see {@link https://orpc.unnoq.com/docs/openapi/routing#route-prefixes OpenAPI Route Prefixes Docs}
|
|
424
160
|
*/
|
|
425
161
|
prefix(prefix) {
|
|
426
|
-
return new
|
|
162
|
+
return new this.constructor({
|
|
427
163
|
...this["~orpc"],
|
|
428
164
|
prefix: mergePrefix(this["~orpc"].prefix, prefix)
|
|
429
165
|
});
|
|
@@ -435,7 +171,7 @@ class Builder {
|
|
|
435
171
|
* @see {@link https://orpc.unnoq.com/docs/openapi/openapi-specification#operation-metadata OpenAPI Operation Metadata Docs}
|
|
436
172
|
*/
|
|
437
173
|
tag(...tags) {
|
|
438
|
-
return new
|
|
174
|
+
return new this.constructor({
|
|
439
175
|
...this["~orpc"],
|
|
440
176
|
tags: mergeTags(this["~orpc"].tags, tags)
|
|
441
177
|
});
|
|
@@ -448,33 +184,79 @@ class Builder {
|
|
|
448
184
|
router(router) {
|
|
449
185
|
return enhanceRouter(router, this["~orpc"]);
|
|
450
186
|
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function decorateMiddleware(middleware) {
|
|
190
|
+
const decorated = ((...args) => middleware(...args));
|
|
191
|
+
decorated.mapInput = (mapInput) => {
|
|
192
|
+
const mapped = decorateMiddleware(
|
|
193
|
+
(options, input, ...rest) => middleware(options, mapInput(input), ...rest)
|
|
194
|
+
);
|
|
195
|
+
return mapped;
|
|
196
|
+
};
|
|
197
|
+
decorated.concat = (concatMiddleware, mapInput) => {
|
|
198
|
+
const mapped = mapInput ? decorateMiddleware(concatMiddleware).mapInput(mapInput) : concatMiddleware;
|
|
199
|
+
const concatted = decorateMiddleware((options, input, output, ...rest) => {
|
|
200
|
+
const merged = middleware(
|
|
201
|
+
{
|
|
202
|
+
...options,
|
|
203
|
+
next: (...[nextOptions1]) => mapped(
|
|
204
|
+
{
|
|
205
|
+
...options,
|
|
206
|
+
context: { ...options.context, ...nextOptions1?.context },
|
|
207
|
+
next: (...[nextOptions2]) => options.next({ context: { ...nextOptions1?.context, ...nextOptions2?.context } })
|
|
208
|
+
},
|
|
209
|
+
input,
|
|
210
|
+
output,
|
|
211
|
+
...rest
|
|
212
|
+
)
|
|
213
|
+
},
|
|
214
|
+
input,
|
|
215
|
+
output,
|
|
216
|
+
...rest
|
|
217
|
+
);
|
|
218
|
+
return merged;
|
|
219
|
+
});
|
|
220
|
+
return concatted;
|
|
221
|
+
};
|
|
222
|
+
return decorated;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
class Builder extends BuilderWithMiddlewares {
|
|
226
|
+
/**
|
|
227
|
+
* Set or override the initial context.
|
|
228
|
+
*
|
|
229
|
+
* @see {@link https://orpc.unnoq.com/docs/context Context Docs}
|
|
230
|
+
*/
|
|
231
|
+
$context() {
|
|
232
|
+
return this;
|
|
233
|
+
}
|
|
451
234
|
/**
|
|
452
|
-
*
|
|
453
|
-
* And applies all of the previously defined options to the specified router.
|
|
235
|
+
* Creates a middleware.
|
|
454
236
|
*
|
|
455
|
-
* @see {@link https://orpc.unnoq.com/docs/
|
|
237
|
+
* @see {@link https://orpc.unnoq.com/docs/middleware Middleware Docs}
|
|
456
238
|
*/
|
|
457
|
-
|
|
458
|
-
return
|
|
239
|
+
middleware(middleware) {
|
|
240
|
+
return decorateMiddleware(middleware);
|
|
459
241
|
}
|
|
460
242
|
}
|
|
461
243
|
function createApiBuilder(opts = {}) {
|
|
462
|
-
|
|
244
|
+
return new Builder({
|
|
463
245
|
route: {},
|
|
464
246
|
meta: opts.meta ?? {},
|
|
465
247
|
errorMap: {},
|
|
466
248
|
inputValidationIndex: 0,
|
|
467
249
|
outputValidationIndex: 0,
|
|
468
250
|
middlewares: [
|
|
469
|
-
onError((error,
|
|
251
|
+
onError((error, _options) => {
|
|
470
252
|
console.dir(error, { depth: null });
|
|
471
253
|
})
|
|
472
254
|
],
|
|
255
|
+
schemas: initialSchemas,
|
|
473
256
|
// NB: this is a relic from orpc -- I'm not convinced there's a need for this (or if there is, that it's
|
|
474
257
|
// the best solution). For now I've removed the interface to configure it externally.
|
|
475
258
|
dedupeLeadingMiddlewares: true
|
|
476
259
|
});
|
|
477
|
-
return base;
|
|
478
260
|
}
|
|
479
261
|
const os = createApiBuilder();
|
|
480
262
|
|
|
@@ -512,17 +294,6 @@ function implementerInternal(contract, middlewares) {
|
|
|
512
294
|
});
|
|
513
295
|
return setHiddenRouterContract(adapted, contract);
|
|
514
296
|
};
|
|
515
|
-
} else if (key === "lazyRoute") {
|
|
516
|
-
method = (loader) => {
|
|
517
|
-
const adapted = enhanceRouter(lazy(loader), {
|
|
518
|
-
middlewares,
|
|
519
|
-
errorMap: {},
|
|
520
|
-
prefix: void 0,
|
|
521
|
-
tags: void 0,
|
|
522
|
-
dedupeLeadingMiddlewares: true
|
|
523
|
-
});
|
|
524
|
-
return setHiddenRouterContract(adapted, contract);
|
|
525
|
-
};
|
|
526
297
|
}
|
|
527
298
|
const next = getContractRouter(target, [key]);
|
|
528
299
|
if (!next) {
|
|
@@ -564,7 +335,7 @@ function implement(contract) {
|
|
|
564
335
|
}
|
|
565
336
|
|
|
566
337
|
function createAssertedLazyProcedure(lazied) {
|
|
567
|
-
const lazyProcedure =
|
|
338
|
+
const lazyProcedure = lazyInternal(async () => {
|
|
568
339
|
const { default: maybeProcedure } = await unlazy(lazied);
|
|
569
340
|
if (!isProcedure(maybeProcedure)) {
|
|
570
341
|
throw new Error(`
|
|
@@ -615,4 +386,4 @@ function createRouterClient(router, ...rest) {
|
|
|
615
386
|
return recursive;
|
|
616
387
|
}
|
|
617
388
|
|
|
618
|
-
export { Builder, DecoratedProcedure, Procedure, addMiddleware, call,
|
|
389
|
+
export { Builder, BuilderWithMiddlewares, DecoratedProcedure, Procedure, ProcedureBuilder, addMiddleware, call, createApiBuilder, createAssertedLazyProcedure, createContractedProcedure, createProcedureClient, createRouterClient, decorateMiddleware, enhanceRouter, getLazyMeta, getRouter, implement, implementerInternal, isLazy, isProcedure, lazyInternal, os, setHiddenRouterContract, unlazy };
|