@temporary-name/server 1.9.3-alpha.4275e976ddda4d8be107c2cfde9899bdea9a337d → 1.9.3-alpha.47c8371db8c45c361b1db0b785980cc77971e6e6
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 -7
- package/dist/adapters/aws-lambda/index.d.ts +12 -7
- package/dist/adapters/aws-lambda/index.mjs +12 -4
- package/dist/adapters/fetch/index.d.mts +12 -7
- package/dist/adapters/fetch/index.d.ts +12 -7
- package/dist/adapters/fetch/index.mjs +12 -11
- package/dist/adapters/node/index.d.mts +12 -7
- package/dist/adapters/node/index.d.ts +12 -7
- package/dist/adapters/node/index.mjs +12 -11
- package/dist/adapters/standard/index.d.mts +27 -13
- package/dist/adapters/standard/index.d.ts +27 -13
- package/dist/adapters/standard/index.mjs +8 -100
- package/dist/index.d.mts +69 -441
- package/dist/index.d.ts +69 -441
- package/dist/index.mjs +135 -358
- 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 +4 -80
- package/dist/plugins/index.d.ts +4 -80
- package/dist/plugins/index.mjs +17 -189
- package/dist/shared/server.7aL9gcoU.d.mts +23 -0
- package/dist/shared/server.BL2R5jcp.d.mts +228 -0
- package/dist/shared/server.BL2R5jcp.d.ts +228 -0
- package/dist/shared/server.C61o1Zch.mjs +413 -0
- package/dist/shared/{server.Btxrgkj5.d.ts → server.D6Qs_UcF.d.mts} +6 -24
- package/dist/shared/server.DFptr1Nz.d.ts +23 -0
- package/dist/shared/{server.Bo94xDTv.d.mts → server.DpoO_ER_.d.ts} +6 -24
- package/dist/shared/server.DwbIdsnK.mjs +254 -0
- package/dist/shared/server.JtIZ8YG7.mjs +237 -0
- package/package.json +19 -13
- package/dist/shared/server.BEQrAa3A.mjs +0 -207
- package/dist/shared/server.C1YnHvvf.d.mts +0 -192
- package/dist/shared/server.C1YnHvvf.d.ts +0 -192
- 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,122 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { ValidationError, eventIterator,
|
|
1
|
+
import { mergePrefix, mergeTags, ContractProcedure, mergeErrorMap, mergeMeta, parseEndpointDefinition, 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, object, core, 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.C61o1Zch.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.C61o1Zch.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
|
}
|
|
59
|
+
endpoint(stringsOrEndpoint, ...values) {
|
|
60
|
+
const { method, path, pathSchema } = parseEndpointDefinition(stringsOrEndpoint, values);
|
|
61
|
+
const { prefix } = this["~orpc"];
|
|
62
|
+
const route = { method, path };
|
|
63
|
+
return new ProcedureBuilder({
|
|
64
|
+
...this["~orpc"],
|
|
65
|
+
route: mergeRoute(this["~orpc"].route, prefix ? prefixRoute(route, prefix) : route),
|
|
66
|
+
schemas: {
|
|
67
|
+
...this["~orpc"].schemas,
|
|
68
|
+
pathSchema
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
114
72
|
/**
|
|
115
|
-
* Sets or updates the route definition.
|
|
116
|
-
* The provided route is spared-merged with any existing route.
|
|
73
|
+
* Sets or updates the route definition for the contract.
|
|
74
|
+
* The provided route is spared-merged with any existing route in the contract.
|
|
117
75
|
* This option is typically relevant when integrating with OpenAPI.
|
|
118
76
|
*
|
|
119
77
|
* @see {@link https://orpc.unnoq.com/docs/openapi/routing OpenAPI Routing Docs}
|
|
120
78
|
* @see {@link https://orpc.unnoq.com/docs/openapi/input-output-structure OpenAPI Input/Output Structure Docs}
|
|
121
79
|
*/
|
|
122
|
-
|
|
123
|
-
|
|
80
|
+
endpointOpts(route) {
|
|
81
|
+
const { prefix } = this["~orpc"];
|
|
82
|
+
return new ProcedureBuilder({
|
|
124
83
|
...this["~orpc"],
|
|
125
|
-
route: mergeRoute(this["~orpc"].route, route)
|
|
84
|
+
route: mergeRoute(this["~orpc"].route, prefix ? prefixRoute(route, prefix) : route)
|
|
126
85
|
});
|
|
127
86
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
return new DecoratedProcedure({
|
|
87
|
+
query(schema) {
|
|
88
|
+
return new ProcedureBuilder({
|
|
131
89
|
...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);
|
|
90
|
+
schemas: {
|
|
91
|
+
...this["~orpc"].schemas,
|
|
92
|
+
querySchema: schema instanceof core.$ZodType ? schema : object(schema)
|
|
145
93
|
},
|
|
146
|
-
|
|
147
|
-
return Reflect.has(this, key) || Reflect.has(target, key);
|
|
148
|
-
}
|
|
94
|
+
inputValidationIndex: this["~orpc"].middlewares.length
|
|
149
95
|
});
|
|
150
96
|
}
|
|
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);
|
|
97
|
+
body(schema) {
|
|
98
|
+
return new ProcedureBuilder({
|
|
99
|
+
...this["~orpc"],
|
|
100
|
+
schemas: {
|
|
101
|
+
...this["~orpc"].schemas,
|
|
102
|
+
bodySchema: schema instanceof core.$ZodType ? schema : object(schema)
|
|
213
103
|
},
|
|
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
|
|
234
|
-
});
|
|
235
|
-
return enhanced2;
|
|
236
|
-
}
|
|
237
|
-
const enhanced = {};
|
|
238
|
-
for (const key in router) {
|
|
239
|
-
enhanced[key] = enhanceRouter(router[key], options);
|
|
240
|
-
}
|
|
241
|
-
return enhanced;
|
|
242
|
-
}
|
|
243
|
-
function traverseContractProcedures(options, callback, lazyOptions = []) {
|
|
244
|
-
let currentRouter = options.router;
|
|
245
|
-
const hiddenContract = getHiddenRouterContract(options.router);
|
|
246
|
-
if (hiddenContract !== void 0) {
|
|
247
|
-
currentRouter = hiddenContract;
|
|
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
|
|
104
|
+
inputValidationIndex: this["~orpc"].middlewares.length
|
|
258
105
|
});
|
|
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
106
|
}
|
|
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
107
|
/**
|
|
301
|
-
*
|
|
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
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* Creates a middleware.
|
|
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.
|
|
108
|
+
* Defines the output validation schema.
|
|
326
109
|
*
|
|
327
|
-
* @see {@link https://orpc.unnoq.com/docs/
|
|
110
|
+
* @see {@link https://orpc.unnoq.com/docs/procedure#input-output-validation Output Validation Docs}
|
|
328
111
|
*/
|
|
329
|
-
|
|
330
|
-
return new
|
|
112
|
+
output(schema) {
|
|
113
|
+
return new ProcedureBuilder({
|
|
331
114
|
...this["~orpc"],
|
|
332
|
-
|
|
115
|
+
schemas: {
|
|
116
|
+
...this["~orpc"].schemas,
|
|
117
|
+
outputSchema: schema instanceof core.$ZodType ? schema : object(schema)
|
|
118
|
+
},
|
|
119
|
+
outputValidationIndex: this["~orpc"].middlewares.length
|
|
333
120
|
});
|
|
334
121
|
}
|
|
335
122
|
/**
|
|
@@ -340,7 +127,7 @@ class Builder {
|
|
|
340
127
|
* @see {@link https://orpc.unnoq.com/docs/middleware Middleware Docs}
|
|
341
128
|
*/
|
|
342
129
|
use(middleware) {
|
|
343
|
-
return new
|
|
130
|
+
return new this.constructor({
|
|
344
131
|
...this["~orpc"],
|
|
345
132
|
middlewares: addMiddleware(this["~orpc"].middlewares, middleware)
|
|
346
133
|
});
|
|
@@ -353,67 +140,22 @@ class Builder {
|
|
|
353
140
|
);
|
|
354
141
|
});
|
|
355
142
|
}
|
|
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
143
|
/**
|
|
407
144
|
* Defines the handler of the procedure.
|
|
408
145
|
*
|
|
409
146
|
* @see {@link https://orpc.unnoq.com/docs/procedure Procedure Docs}
|
|
410
147
|
*/
|
|
411
148
|
handler(handler) {
|
|
149
|
+
if (this["~orpc"].schemas.outputSchema === initialSchemas.outputSchema) {
|
|
150
|
+
throw new Error("You must call .output() before calling .handler()");
|
|
151
|
+
}
|
|
412
152
|
return new DecoratedProcedure({
|
|
413
153
|
...this["~orpc"],
|
|
414
154
|
handler
|
|
415
155
|
});
|
|
416
156
|
}
|
|
157
|
+
}
|
|
158
|
+
class BuilderWithMiddlewares extends ProcedureBuilder {
|
|
417
159
|
/**
|
|
418
160
|
* Prefixes all procedures in the router.
|
|
419
161
|
* The provided prefix is post-appended to any existing router prefix.
|
|
@@ -423,7 +165,7 @@ class Builder {
|
|
|
423
165
|
* @see {@link https://orpc.unnoq.com/docs/openapi/routing#route-prefixes OpenAPI Route Prefixes Docs}
|
|
424
166
|
*/
|
|
425
167
|
prefix(prefix) {
|
|
426
|
-
return new
|
|
168
|
+
return new this.constructor({
|
|
427
169
|
...this["~orpc"],
|
|
428
170
|
prefix: mergePrefix(this["~orpc"].prefix, prefix)
|
|
429
171
|
});
|
|
@@ -435,7 +177,7 @@ class Builder {
|
|
|
435
177
|
* @see {@link https://orpc.unnoq.com/docs/openapi/openapi-specification#operation-metadata OpenAPI Operation Metadata Docs}
|
|
436
178
|
*/
|
|
437
179
|
tag(...tags) {
|
|
438
|
-
return new
|
|
180
|
+
return new this.constructor({
|
|
439
181
|
...this["~orpc"],
|
|
440
182
|
tags: mergeTags(this["~orpc"].tags, tags)
|
|
441
183
|
});
|
|
@@ -448,33 +190,79 @@ class Builder {
|
|
|
448
190
|
router(router) {
|
|
449
191
|
return enhanceRouter(router, this["~orpc"]);
|
|
450
192
|
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
function decorateMiddleware(middleware) {
|
|
196
|
+
const decorated = ((...args) => middleware(...args));
|
|
197
|
+
decorated.mapInput = (mapInput) => {
|
|
198
|
+
const mapped = decorateMiddleware(
|
|
199
|
+
(options, input, ...rest) => middleware(options, mapInput(input), ...rest)
|
|
200
|
+
);
|
|
201
|
+
return mapped;
|
|
202
|
+
};
|
|
203
|
+
decorated.concat = (concatMiddleware, mapInput) => {
|
|
204
|
+
const mapped = mapInput ? decorateMiddleware(concatMiddleware).mapInput(mapInput) : concatMiddleware;
|
|
205
|
+
const concatted = decorateMiddleware((options, input, output, ...rest) => {
|
|
206
|
+
const merged = middleware(
|
|
207
|
+
{
|
|
208
|
+
...options,
|
|
209
|
+
next: (...[nextOptions1]) => mapped(
|
|
210
|
+
{
|
|
211
|
+
...options,
|
|
212
|
+
context: { ...options.context, ...nextOptions1?.context },
|
|
213
|
+
next: (...[nextOptions2]) => options.next({ context: { ...nextOptions1?.context, ...nextOptions2?.context } })
|
|
214
|
+
},
|
|
215
|
+
input,
|
|
216
|
+
output,
|
|
217
|
+
...rest
|
|
218
|
+
)
|
|
219
|
+
},
|
|
220
|
+
input,
|
|
221
|
+
output,
|
|
222
|
+
...rest
|
|
223
|
+
);
|
|
224
|
+
return merged;
|
|
225
|
+
});
|
|
226
|
+
return concatted;
|
|
227
|
+
};
|
|
228
|
+
return decorated;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
class Builder extends BuilderWithMiddlewares {
|
|
451
232
|
/**
|
|
452
|
-
*
|
|
453
|
-
* And applies all of the previously defined options to the specified router.
|
|
233
|
+
* Set or override the initial context.
|
|
454
234
|
*
|
|
455
|
-
* @see {@link https://orpc.unnoq.com/docs/
|
|
235
|
+
* @see {@link https://orpc.unnoq.com/docs/context Context Docs}
|
|
236
|
+
*/
|
|
237
|
+
$context() {
|
|
238
|
+
return this;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Creates a middleware.
|
|
242
|
+
*
|
|
243
|
+
* @see {@link https://orpc.unnoq.com/docs/middleware Middleware Docs}
|
|
456
244
|
*/
|
|
457
|
-
|
|
458
|
-
return
|
|
245
|
+
middleware(middleware) {
|
|
246
|
+
return decorateMiddleware(middleware);
|
|
459
247
|
}
|
|
460
248
|
}
|
|
461
249
|
function createApiBuilder(opts = {}) {
|
|
462
|
-
|
|
250
|
+
return new Builder({
|
|
463
251
|
route: {},
|
|
464
252
|
meta: opts.meta ?? {},
|
|
465
253
|
errorMap: {},
|
|
466
254
|
inputValidationIndex: 0,
|
|
467
255
|
outputValidationIndex: 0,
|
|
468
256
|
middlewares: [
|
|
469
|
-
onError((error,
|
|
257
|
+
onError((error, _options) => {
|
|
470
258
|
console.dir(error, { depth: null });
|
|
471
259
|
})
|
|
472
260
|
],
|
|
261
|
+
schemas: initialSchemas,
|
|
473
262
|
// 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
263
|
// the best solution). For now I've removed the interface to configure it externally.
|
|
475
264
|
dedupeLeadingMiddlewares: true
|
|
476
265
|
});
|
|
477
|
-
return base;
|
|
478
266
|
}
|
|
479
267
|
const os = createApiBuilder();
|
|
480
268
|
|
|
@@ -512,17 +300,6 @@ function implementerInternal(contract, middlewares) {
|
|
|
512
300
|
});
|
|
513
301
|
return setHiddenRouterContract(adapted, contract);
|
|
514
302
|
};
|
|
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
303
|
}
|
|
527
304
|
const next = getContractRouter(target, [key]);
|
|
528
305
|
if (!next) {
|
|
@@ -564,7 +341,7 @@ function implement(contract) {
|
|
|
564
341
|
}
|
|
565
342
|
|
|
566
343
|
function createAssertedLazyProcedure(lazied) {
|
|
567
|
-
const lazyProcedure =
|
|
344
|
+
const lazyProcedure = lazyInternal(async () => {
|
|
568
345
|
const { default: maybeProcedure } = await unlazy(lazied);
|
|
569
346
|
if (!isProcedure(maybeProcedure)) {
|
|
570
347
|
throw new Error(`
|
|
@@ -615,4 +392,4 @@ function createRouterClient(router, ...rest) {
|
|
|
615
392
|
return recursive;
|
|
616
393
|
}
|
|
617
394
|
|
|
618
|
-
export { Builder, DecoratedProcedure, Procedure, addMiddleware, call,
|
|
395
|
+
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 };
|