@orpc/server 0.0.0-next.e9dc36e → 0.0.0-next.ee0aeaf

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. package/dist/chunk-VARUID7X.js +273 -0
  2. package/dist/fetch.js +80 -650
  3. package/dist/index.js +193 -140
  4. package/dist/src/builder.d.ts +9 -4
  5. package/dist/src/fetch/handle.d.ts +7 -0
  6. package/dist/src/fetch/handler.d.ts +3 -0
  7. package/dist/src/fetch/index.d.ts +4 -0
  8. package/dist/src/fetch/types.d.ts +28 -0
  9. package/dist/src/index.d.ts +2 -0
  10. package/dist/src/lazy.d.ts +23 -0
  11. package/dist/src/procedure-caller.d.ts +18 -11
  12. package/dist/src/procedure-implementer.d.ts +5 -1
  13. package/dist/src/procedure.d.ts +5 -2
  14. package/dist/src/router-builder.d.ts +5 -0
  15. package/dist/src/router-caller.d.ts +7 -4
  16. package/dist/src/router-implementer.d.ts +7 -3
  17. package/dist/src/router.d.ts +7 -7
  18. package/dist/src/types.d.ts +7 -1
  19. package/package.json +15 -19
  20. package/dist/chunk-TDFYNRZV.js +0 -190
  21. package/dist/chunk-TDFYNRZV.js.map +0 -1
  22. package/dist/fetch.js.map +0 -1
  23. package/dist/index.js.map +0 -1
  24. package/dist/src/adapters/fetch.d.ts +0 -42
  25. package/dist/src/adapters/fetch.d.ts.map +0 -1
  26. package/dist/src/builder.d.ts.map +0 -1
  27. package/dist/src/index.d.ts.map +0 -1
  28. package/dist/src/middleware.d.ts.map +0 -1
  29. package/dist/src/procedure-builder.d.ts.map +0 -1
  30. package/dist/src/procedure-caller.d.ts.map +0 -1
  31. package/dist/src/procedure-implementer.d.ts.map +0 -1
  32. package/dist/src/procedure.d.ts.map +0 -1
  33. package/dist/src/router-builder.d.ts.map +0 -1
  34. package/dist/src/router-caller.d.ts.map +0 -1
  35. package/dist/src/router-implementer.d.ts.map +0 -1
  36. package/dist/src/router.d.ts.map +0 -1
  37. package/dist/src/types.d.ts.map +0 -1
  38. package/dist/src/utils.d.ts.map +0 -1
  39. package/dist/tsconfig.tsbuildinfo +0 -1
  40. package/src/adapters/fetch.test.ts +0 -629
  41. package/src/adapters/fetch.ts +0 -290
  42. package/src/builder.test.ts +0 -371
  43. package/src/builder.ts +0 -238
  44. package/src/index.ts +0 -16
  45. package/src/middleware.test.ts +0 -260
  46. package/src/middleware.ts +0 -136
  47. package/src/procedure-builder.test.ts +0 -223
  48. package/src/procedure-builder.ts +0 -158
  49. package/src/procedure-caller.test.ts +0 -171
  50. package/src/procedure-caller.ts +0 -138
  51. package/src/procedure-implementer.test.ts +0 -220
  52. package/src/procedure-implementer.ts +0 -102
  53. package/src/procedure.test.ts +0 -317
  54. package/src/procedure.ts +0 -237
  55. package/src/router-builder.test.ts +0 -106
  56. package/src/router-builder.ts +0 -122
  57. package/src/router-caller.test.ts +0 -126
  58. package/src/router-caller.ts +0 -64
  59. package/src/router-implementer.test.ts +0 -116
  60. package/src/router-implementer.ts +0 -113
  61. package/src/router.test-d.ts +0 -48
  62. package/src/router.test.ts +0 -142
  63. package/src/router.ts +0 -91
  64. package/src/types.test.ts +0 -18
  65. package/src/types.ts +0 -13
  66. package/src/utils.test.ts +0 -16
  67. package/src/utils.ts +0 -16
@@ -0,0 +1,273 @@
1
+ // src/utils.ts
2
+ function mergeContext(a, b) {
3
+ if (!a)
4
+ return b;
5
+ if (!b)
6
+ return a;
7
+ return {
8
+ ...a,
9
+ ...b
10
+ };
11
+ }
12
+
13
+ // src/middleware.ts
14
+ var decoratedMiddlewareSymbol = Symbol("\u{1F512}decoratedMiddleware");
15
+ function decorateMiddleware(middleware) {
16
+ if (Reflect.get(middleware, decoratedMiddlewareSymbol)) {
17
+ return middleware;
18
+ }
19
+ const concat = (concatMiddleware, mapInput2) => {
20
+ const concatMiddleware_ = mapInput2 ? decorateMiddleware(concatMiddleware).mapInput(mapInput2) : concatMiddleware;
21
+ return decorateMiddleware(async (input, context, meta, ...rest) => {
22
+ const input_ = input;
23
+ const context_ = context;
24
+ const meta_ = meta;
25
+ const next = async (options) => {
26
+ return concatMiddleware_(input_, mergeContext(context_, options.context), meta_, ...rest);
27
+ };
28
+ const m1 = await middleware(input_, context_, {
29
+ ...meta_,
30
+ next
31
+ }, ...rest);
32
+ return m1;
33
+ });
34
+ };
35
+ const mapInput = (map) => {
36
+ return decorateMiddleware(
37
+ (input, ...rest) => middleware(map(input), ...rest)
38
+ );
39
+ };
40
+ return Object.assign(middleware, {
41
+ [decoratedMiddlewareSymbol]: true,
42
+ concat,
43
+ mapInput
44
+ });
45
+ }
46
+
47
+ // src/procedure-caller.ts
48
+ import { executeWithHooks, trim, value } from "@orpc/shared";
49
+ import { ORPCError } from "@orpc/shared/error";
50
+
51
+ // src/procedure.ts
52
+ import {
53
+ DecoratedContractProcedure,
54
+ isContractProcedure
55
+ } from "@orpc/contract";
56
+ var Procedure = class {
57
+ constructor(zz$p) {
58
+ this.zz$p = zz$p;
59
+ }
60
+ };
61
+ var DECORATED_PROCEDURE_SYMBOL = Symbol("DECORATED_PROCEDURE");
62
+ function decorateProcedure(procedure) {
63
+ if (DECORATED_PROCEDURE_SYMBOL in procedure) {
64
+ return procedure;
65
+ }
66
+ return Object.assign(createProcedureCaller({
67
+ procedure,
68
+ context: void 0
69
+ }), {
70
+ [DECORATED_PROCEDURE_SYMBOL]: true,
71
+ zz$p: procedure.zz$p,
72
+ prefix(prefix) {
73
+ return decorateProcedure({
74
+ zz$p: {
75
+ ...procedure.zz$p,
76
+ contract: DecoratedContractProcedure.decorate(
77
+ procedure.zz$p.contract
78
+ ).prefix(prefix)
79
+ }
80
+ });
81
+ },
82
+ route(opts) {
83
+ return decorateProcedure({
84
+ zz$p: {
85
+ ...procedure.zz$p,
86
+ contract: DecoratedContractProcedure.decorate(
87
+ procedure.zz$p.contract
88
+ ).route(opts)
89
+ }
90
+ });
91
+ },
92
+ use(middleware, mapInput) {
93
+ const middleware_ = mapInput ? decorateMiddleware(middleware).mapInput(mapInput) : middleware;
94
+ return decorateProcedure({
95
+ zz$p: {
96
+ ...procedure.zz$p,
97
+ middlewares: [middleware_, ...procedure.zz$p.middlewares ?? []]
98
+ }
99
+ });
100
+ }
101
+ });
102
+ }
103
+ function isProcedure(item) {
104
+ if (item instanceof Procedure)
105
+ return true;
106
+ return (typeof item === "object" || typeof item === "function") && item !== null && "zz$p" in item && typeof item.zz$p === "object" && item.zz$p !== null && "contract" in item.zz$p && isContractProcedure(item.zz$p.contract) && "func" in item.zz$p && typeof item.zz$p.func === "function";
107
+ }
108
+
109
+ // src/procedure-caller.ts
110
+ function createProcedureCaller(options) {
111
+ const caller = async (...args) => {
112
+ const [input, callerOptions] = args;
113
+ const path = options.path ?? [];
114
+ const procedure = await loadProcedure(options.procedure);
115
+ const context = await value(options.context);
116
+ const execute = async () => {
117
+ const validInput = await (async () => {
118
+ const schema = procedure.zz$p.contract["~orpc"].InputSchema;
119
+ if (!schema) {
120
+ return input;
121
+ }
122
+ const result = await schema["~standard"].validate(input);
123
+ if (result.issues) {
124
+ throw new ORPCError({
125
+ message: "Validation input failed",
126
+ code: "BAD_REQUEST",
127
+ issues: result.issues
128
+ });
129
+ }
130
+ return result.value;
131
+ })();
132
+ const meta = {
133
+ path,
134
+ procedure,
135
+ signal: callerOptions?.signal
136
+ };
137
+ const middlewares = procedure.zz$p.middlewares ?? [];
138
+ let currentMidIndex = 0;
139
+ let currentContext = context;
140
+ const next = async (nextOptions) => {
141
+ const mid = middlewares[currentMidIndex];
142
+ currentMidIndex += 1;
143
+ currentContext = mergeContext(currentContext, nextOptions.context);
144
+ if (mid) {
145
+ return await mid(validInput, currentContext, {
146
+ ...meta,
147
+ next,
148
+ output: (output3) => ({ output: output3, context: void 0 })
149
+ });
150
+ } else {
151
+ return {
152
+ output: await await procedure.zz$p.func(validInput, currentContext, meta),
153
+ context: currentContext
154
+ };
155
+ }
156
+ };
157
+ const output2 = (await next({})).output;
158
+ const validOutput = await (async () => {
159
+ const schema = procedure.zz$p.contract["~orpc"].OutputSchema;
160
+ if (!schema) {
161
+ return output2;
162
+ }
163
+ const result = await schema["~standard"].validate(output2);
164
+ if (result.issues) {
165
+ throw new ORPCError({
166
+ message: "Validation output failed",
167
+ code: "INTERNAL_SERVER_ERROR"
168
+ });
169
+ }
170
+ return result.value;
171
+ })();
172
+ return validOutput;
173
+ };
174
+ const output = await executeWithHooks({
175
+ hooks: options,
176
+ input,
177
+ context,
178
+ meta: {
179
+ path,
180
+ procedure
181
+ },
182
+ execute
183
+ });
184
+ return output;
185
+ };
186
+ return caller;
187
+ }
188
+ async function loadProcedure(procedure) {
189
+ let loadedProcedure;
190
+ if (isLazy(procedure)) {
191
+ loadedProcedure = (await loadLazy(procedure)).default;
192
+ } else {
193
+ loadedProcedure = procedure;
194
+ }
195
+ if (!isProcedure(loadedProcedure)) {
196
+ throw new ORPCError({
197
+ code: "NOT_FOUND",
198
+ message: "Not found",
199
+ cause: new Error(trim(`
200
+ This error should be caught by the typescript compiler.
201
+ But if you still see this error, it means that you trying to call a lazy router (expected to be a lazy procedure).
202
+ `))
203
+ });
204
+ }
205
+ return loadedProcedure;
206
+ }
207
+
208
+ // src/lazy.ts
209
+ var LAZY_LOADER_SYMBOL = Symbol("ORPC_LAZY_LOADER");
210
+ function createLazy(loader) {
211
+ return {
212
+ [LAZY_LOADER_SYMBOL]: loader
213
+ };
214
+ }
215
+ function loadLazy(lazy) {
216
+ return lazy[LAZY_LOADER_SYMBOL]();
217
+ }
218
+ function isLazy(item) {
219
+ return (typeof item === "object" || typeof item === "function") && item !== null && LAZY_LOADER_SYMBOL in item && typeof item[LAZY_LOADER_SYMBOL] === "function";
220
+ }
221
+ function createFlattenLazy(lazy) {
222
+ const flattenLoader = async () => {
223
+ let current = await loadLazy(lazy);
224
+ while (true) {
225
+ if (!isLazy(current.default)) {
226
+ break;
227
+ }
228
+ current = await loadLazy(current.default);
229
+ }
230
+ return current;
231
+ };
232
+ const flattenLazy = {
233
+ [LAZY_LOADER_SYMBOL]: flattenLoader
234
+ };
235
+ return flattenLazy;
236
+ }
237
+ function decorateLazy(lazy) {
238
+ const flattenLazy = createFlattenLazy(lazy);
239
+ const procedureCaller = createProcedureCaller({
240
+ procedure: flattenLazy,
241
+ context: void 0
242
+ });
243
+ Object.assign(procedureCaller, flattenLazy);
244
+ const recursive = new Proxy(procedureCaller, {
245
+ get(target, key) {
246
+ if (typeof key !== "string") {
247
+ return Reflect.get(target, key);
248
+ }
249
+ return decorateLazy(createLazy(async () => {
250
+ const current = await loadLazy(flattenLazy);
251
+ return { default: current.default[key] };
252
+ }));
253
+ }
254
+ });
255
+ return recursive;
256
+ }
257
+
258
+ export {
259
+ mergeContext,
260
+ decorateMiddleware,
261
+ LAZY_LOADER_SYMBOL,
262
+ createLazy,
263
+ loadLazy,
264
+ isLazy,
265
+ createFlattenLazy,
266
+ decorateLazy,
267
+ createProcedureCaller,
268
+ loadProcedure,
269
+ Procedure,
270
+ decorateProcedure,
271
+ isProcedure
272
+ };
273
+ //# sourceMappingURL=chunk-VARUID7X.js.map