@orpc/server 0.0.0-next.83ec2e8 → 0.0.0-next.84ea648

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.
Files changed (119) hide show
  1. package/README.md +126 -0
  2. package/dist/adapters/aws-lambda/index.d.mts +46 -0
  3. package/dist/adapters/aws-lambda/index.d.ts +46 -0
  4. package/dist/adapters/aws-lambda/index.mjs +41 -0
  5. package/dist/adapters/bun-ws/index.d.mts +36 -0
  6. package/dist/adapters/bun-ws/index.d.ts +36 -0
  7. package/dist/adapters/bun-ws/index.mjs +47 -0
  8. package/dist/adapters/crossws/index.d.mts +33 -0
  9. package/dist/adapters/crossws/index.d.ts +33 -0
  10. package/dist/adapters/crossws/index.mjs +47 -0
  11. package/dist/adapters/fetch/index.d.mts +79 -0
  12. package/dist/adapters/fetch/index.d.ts +79 -0
  13. package/dist/adapters/fetch/index.mjs +110 -0
  14. package/dist/adapters/message-port/index.d.mts +31 -0
  15. package/dist/adapters/message-port/index.d.ts +31 -0
  16. package/dist/adapters/message-port/index.mjs +41 -0
  17. package/dist/adapters/node/index.d.mts +78 -0
  18. package/dist/adapters/node/index.d.ts +78 -0
  19. package/dist/adapters/node/index.mjs +95 -0
  20. package/dist/adapters/standard/index.d.mts +21 -0
  21. package/dist/adapters/standard/index.d.ts +21 -0
  22. package/dist/adapters/standard/index.mjs +8 -0
  23. package/dist/adapters/standard-peer/index.d.mts +14 -0
  24. package/dist/adapters/standard-peer/index.d.ts +14 -0
  25. package/dist/adapters/standard-peer/index.mjs +7 -0
  26. package/dist/adapters/websocket/index.d.mts +54 -0
  27. package/dist/adapters/websocket/index.d.ts +54 -0
  28. package/dist/adapters/websocket/index.mjs +69 -0
  29. package/dist/adapters/ws/index.d.mts +31 -0
  30. package/dist/adapters/ws/index.d.ts +31 -0
  31. package/dist/adapters/ws/index.mjs +39 -0
  32. package/dist/hibernation/index.d.mts +44 -0
  33. package/dist/hibernation/index.d.ts +44 -0
  34. package/dist/hibernation/index.mjs +65 -0
  35. package/dist/index.d.mts +803 -0
  36. package/dist/index.d.ts +803 -0
  37. package/dist/index.mjs +488 -0
  38. package/dist/plugins/index.d.mts +156 -0
  39. package/dist/plugins/index.d.ts +156 -0
  40. package/dist/plugins/index.mjs +259 -0
  41. package/dist/shared/server.Aqc4pYFD.mjs +194 -0
  42. package/dist/shared/server.BW-nUGgA.mjs +36 -0
  43. package/dist/shared/server.BX8Iro5z.d.ts +74 -0
  44. package/dist/shared/server.Bi2_bIHo.d.ts +42 -0
  45. package/dist/shared/server.C-F_fMXW.d.mts +32 -0
  46. package/dist/shared/server.C6Q5sqYw.mjs +20 -0
  47. package/dist/shared/server.CPC5w4d2.d.ts +32 -0
  48. package/dist/shared/server.CRejaM08.d.mts +192 -0
  49. package/dist/shared/server.CRejaM08.d.ts +192 -0
  50. package/dist/shared/server.DLJzqnSX.mjs +368 -0
  51. package/dist/shared/server.DZ5BIITo.mjs +9 -0
  52. package/dist/shared/server.De2J-WNx.d.mts +74 -0
  53. package/dist/shared/server.DrG30u7a.d.mts +42 -0
  54. package/dist/shared/server.VjZAmjFs.d.mts +12 -0
  55. package/dist/shared/server.mGrd7l1v.d.ts +12 -0
  56. package/package.json +88 -19
  57. package/dist/chunk-TDFYNRZV.js +0 -190
  58. package/dist/chunk-TDFYNRZV.js.map +0 -1
  59. package/dist/fetch.js +0 -681
  60. package/dist/fetch.js.map +0 -1
  61. package/dist/index.js +0 -394
  62. package/dist/index.js.map +0 -1
  63. package/dist/src/adapters/fetch.d.ts +0 -42
  64. package/dist/src/adapters/fetch.d.ts.map +0 -1
  65. package/dist/src/builder.d.ts +0 -49
  66. package/dist/src/builder.d.ts.map +0 -1
  67. package/dist/src/index.d.ts +0 -15
  68. package/dist/src/index.d.ts.map +0 -1
  69. package/dist/src/middleware.d.ts +0 -26
  70. package/dist/src/middleware.d.ts.map +0 -1
  71. package/dist/src/procedure-builder.d.ts +0 -31
  72. package/dist/src/procedure-builder.d.ts.map +0 -1
  73. package/dist/src/procedure-caller.d.ts +0 -19
  74. package/dist/src/procedure-caller.d.ts.map +0 -1
  75. package/dist/src/procedure-implementer.d.ts +0 -18
  76. package/dist/src/procedure-implementer.d.ts.map +0 -1
  77. package/dist/src/procedure.d.ts +0 -29
  78. package/dist/src/procedure.d.ts.map +0 -1
  79. package/dist/src/router-builder.d.ts +0 -22
  80. package/dist/src/router-builder.d.ts.map +0 -1
  81. package/dist/src/router-caller.d.ts +0 -22
  82. package/dist/src/router-caller.d.ts.map +0 -1
  83. package/dist/src/router-implementer.d.ts +0 -20
  84. package/dist/src/router-implementer.d.ts.map +0 -1
  85. package/dist/src/router.d.ts +0 -20
  86. package/dist/src/router.d.ts.map +0 -1
  87. package/dist/src/types.d.ts +0 -8
  88. package/dist/src/types.d.ts.map +0 -1
  89. package/dist/src/utils.d.ts +0 -3
  90. package/dist/src/utils.d.ts.map +0 -1
  91. package/dist/tsconfig.tsbuildinfo +0 -1
  92. package/src/adapters/fetch.test.ts +0 -629
  93. package/src/adapters/fetch.ts +0 -290
  94. package/src/builder.test.ts +0 -371
  95. package/src/builder.ts +0 -238
  96. package/src/index.ts +0 -16
  97. package/src/middleware.test.ts +0 -260
  98. package/src/middleware.ts +0 -136
  99. package/src/procedure-builder.test.ts +0 -223
  100. package/src/procedure-builder.ts +0 -158
  101. package/src/procedure-caller.test.ts +0 -171
  102. package/src/procedure-caller.ts +0 -138
  103. package/src/procedure-implementer.test.ts +0 -220
  104. package/src/procedure-implementer.ts +0 -102
  105. package/src/procedure.test.ts +0 -317
  106. package/src/procedure.ts +0 -237
  107. package/src/router-builder.test.ts +0 -106
  108. package/src/router-builder.ts +0 -122
  109. package/src/router-caller.test.ts +0 -126
  110. package/src/router-caller.ts +0 -64
  111. package/src/router-implementer.test.ts +0 -116
  112. package/src/router-implementer.ts +0 -113
  113. package/src/router.test-d.ts +0 -48
  114. package/src/router.test.ts +0 -142
  115. package/src/router.ts +0 -91
  116. package/src/types.test.ts +0 -18
  117. package/src/types.ts +0 -13
  118. package/src/utils.test.ts +0 -16
  119. package/src/utils.ts +0 -16
package/dist/fetch.js DELETED
@@ -1,681 +0,0 @@
1
- import {
2
- createProcedureCaller,
3
- isProcedure
4
- } from "./chunk-TDFYNRZV.js";
5
-
6
- // src/adapters/fetch.ts
7
- import {
8
- ORPC_HEADER,
9
- ORPC_HEADER_VALUE,
10
- standardizeHTTPPath
11
- } from "@orpc/contract";
12
- import {
13
- get,
14
- isPlainObject,
15
- mapValues,
16
- trim,
17
- value
18
- } from "@orpc/shared";
19
- import { ORPCError } from "@orpc/shared/error";
20
- import {
21
- OpenAPIDeserializer,
22
- OpenAPISerializer,
23
- ORPCDeserializer,
24
- ORPCSerializer,
25
- zodCoerce
26
- } from "@orpc/transformer";
27
-
28
- // ../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router.js
29
- var METHOD_NAME_ALL = "ALL";
30
- var MESSAGE_MATCHER_IS_ALREADY_BUILT = "Can not add a route since the matcher is already built.";
31
- var UnsupportedPathError = class extends Error {
32
- };
33
-
34
- // ../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/utils/url.js
35
- var checkOptionalParameter = (path) => {
36
- if (!path.match(/\:.+\?$/)) {
37
- return null;
38
- }
39
- const segments = path.split("/");
40
- const results = [];
41
- let basePath = "";
42
- segments.forEach((segment) => {
43
- if (segment !== "" && !/\:/.test(segment)) {
44
- basePath += "/" + segment;
45
- } else if (/\:/.test(segment)) {
46
- if (/\?/.test(segment)) {
47
- if (results.length === 0 && basePath === "") {
48
- results.push("/");
49
- } else {
50
- results.push(basePath);
51
- }
52
- const optionalSegment = segment.replace("?", "");
53
- basePath += "/" + optionalSegment;
54
- results.push(basePath);
55
- } else {
56
- basePath += "/" + segment;
57
- }
58
- }
59
- });
60
- return results.filter((v, i, a) => a.indexOf(v) === i);
61
- };
62
-
63
- // ../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/linear-router/router.js
64
- var emptyParams = /* @__PURE__ */ Object.create(null);
65
- var splitPathRe = /\/(:\w+(?:{(?:(?:{[\d,]+})|[^}])+})?)|\/[^\/\?]+|(\?)/g;
66
- var splitByStarRe = /\*/;
67
- var LinearRouter = class {
68
- name = "LinearRouter";
69
- routes = [];
70
- add(method, path, handler) {
71
- ;
72
- (checkOptionalParameter(path) || [path]).forEach((p) => {
73
- this.routes.push([method, p, handler]);
74
- });
75
- }
76
- match(method, path) {
77
- const handlers = [];
78
- ROUTES_LOOP:
79
- for (let i = 0, len = this.routes.length; i < len; i++) {
80
- const [routeMethod, routePath, handler] = this.routes[i];
81
- if (routeMethod !== method && routeMethod !== METHOD_NAME_ALL) {
82
- continue;
83
- }
84
- if (routePath === "*" || routePath === "/*") {
85
- handlers.push([handler, emptyParams]);
86
- continue;
87
- }
88
- const hasStar = routePath.indexOf("*") !== -1;
89
- const hasLabel = routePath.indexOf(":") !== -1;
90
- if (!hasStar && !hasLabel) {
91
- if (routePath === path || routePath + "/" === path) {
92
- handlers.push([handler, emptyParams]);
93
- }
94
- } else if (hasStar && !hasLabel) {
95
- const endsWithStar = routePath.charCodeAt(routePath.length - 1) === 42;
96
- const parts = (endsWithStar ? routePath.slice(0, -2) : routePath).split(splitByStarRe);
97
- const lastIndex = parts.length - 1;
98
- for (let j = 0, pos = 0, len2 = parts.length; j < len2; j++) {
99
- const part = parts[j];
100
- const index = path.indexOf(part, pos);
101
- if (index !== pos) {
102
- continue ROUTES_LOOP;
103
- }
104
- pos += part.length;
105
- if (j === lastIndex) {
106
- if (!endsWithStar && pos !== path.length && !(pos === path.length - 1 && path.charCodeAt(pos) === 47)) {
107
- continue ROUTES_LOOP;
108
- }
109
- } else {
110
- const index2 = path.indexOf("/", pos);
111
- if (index2 === -1) {
112
- continue ROUTES_LOOP;
113
- }
114
- pos = index2;
115
- }
116
- }
117
- handlers.push([handler, emptyParams]);
118
- } else if (hasLabel && !hasStar) {
119
- const params = /* @__PURE__ */ Object.create(null);
120
- const parts = routePath.match(splitPathRe);
121
- const lastIndex = parts.length - 1;
122
- for (let j = 0, pos = 0, len2 = parts.length; j < len2; j++) {
123
- if (pos === -1 || pos >= path.length) {
124
- continue ROUTES_LOOP;
125
- }
126
- const part = parts[j];
127
- if (part.charCodeAt(1) === 58) {
128
- let name = part.slice(2);
129
- let value2;
130
- if (name.charCodeAt(name.length - 1) === 125) {
131
- const openBracePos = name.indexOf("{");
132
- const pattern = name.slice(openBracePos + 1, -1);
133
- const restPath = path.slice(pos + 1);
134
- const match = new RegExp(pattern, "d").exec(restPath);
135
- if (!match || match.indices[0][0] !== 0 || match.indices[0][1] === 0) {
136
- continue ROUTES_LOOP;
137
- }
138
- name = name.slice(0, openBracePos);
139
- value2 = restPath.slice(...match.indices[0]);
140
- pos += match.indices[0][1] + 1;
141
- } else {
142
- let endValuePos = path.indexOf("/", pos + 1);
143
- if (endValuePos === -1) {
144
- if (pos + 1 === path.length) {
145
- continue ROUTES_LOOP;
146
- }
147
- endValuePos = path.length;
148
- }
149
- value2 = path.slice(pos + 1, endValuePos);
150
- pos = endValuePos;
151
- }
152
- params[name] ||= value2;
153
- } else {
154
- const index = path.indexOf(part, pos);
155
- if (index !== pos) {
156
- continue ROUTES_LOOP;
157
- }
158
- pos += part.length;
159
- }
160
- if (j === lastIndex) {
161
- if (pos !== path.length && !(pos === path.length - 1 && path.charCodeAt(pos) === 47)) {
162
- continue ROUTES_LOOP;
163
- }
164
- }
165
- }
166
- handlers.push([handler, params]);
167
- } else if (hasLabel && hasStar) {
168
- throw new UnsupportedPathError();
169
- }
170
- }
171
- return [handlers];
172
- }
173
- };
174
-
175
- // ../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/node.js
176
- var LABEL_REG_EXP_STR = "[^/]+";
177
- var ONLY_WILDCARD_REG_EXP_STR = ".*";
178
- var TAIL_WILDCARD_REG_EXP_STR = "(?:|/.*)";
179
- var PATH_ERROR = Symbol();
180
- var regExpMetaChars = new Set(".\\+*[^]$()");
181
- function compareKey(a, b) {
182
- if (a.length === 1) {
183
- return b.length === 1 ? a < b ? -1 : 1 : -1;
184
- }
185
- if (b.length === 1) {
186
- return 1;
187
- }
188
- if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {
189
- return 1;
190
- } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {
191
- return -1;
192
- }
193
- if (a === LABEL_REG_EXP_STR) {
194
- return 1;
195
- } else if (b === LABEL_REG_EXP_STR) {
196
- return -1;
197
- }
198
- return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;
199
- }
200
- var Node = class {
201
- index;
202
- varIndex;
203
- children = /* @__PURE__ */ Object.create(null);
204
- insert(tokens, index, paramMap, context, pathErrorCheckOnly) {
205
- if (tokens.length === 0) {
206
- if (this.index !== void 0) {
207
- throw PATH_ERROR;
208
- }
209
- if (pathErrorCheckOnly) {
210
- return;
211
- }
212
- this.index = index;
213
- return;
214
- }
215
- const [token, ...restTokens] = tokens;
216
- const pattern = token === "*" ? restTokens.length === 0 ? ["", "", ONLY_WILDCARD_REG_EXP_STR] : ["", "", LABEL_REG_EXP_STR] : token === "/*" ? ["", "", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);
217
- let node;
218
- if (pattern) {
219
- const name = pattern[1];
220
- let regexpStr = pattern[2] || LABEL_REG_EXP_STR;
221
- if (name && pattern[2]) {
222
- regexpStr = regexpStr.replace(/^\((?!\?:)(?=[^)]+\)$)/, "(?:");
223
- if (/\((?!\?:)/.test(regexpStr)) {
224
- throw PATH_ERROR;
225
- }
226
- }
227
- node = this.children[regexpStr];
228
- if (!node) {
229
- if (Object.keys(this.children).some(
230
- (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR
231
- )) {
232
- throw PATH_ERROR;
233
- }
234
- if (pathErrorCheckOnly) {
235
- return;
236
- }
237
- node = this.children[regexpStr] = new Node();
238
- if (name !== "") {
239
- node.varIndex = context.varIndex++;
240
- }
241
- }
242
- if (!pathErrorCheckOnly && name !== "") {
243
- paramMap.push([name, node.varIndex]);
244
- }
245
- } else {
246
- node = this.children[token];
247
- if (!node) {
248
- if (Object.keys(this.children).some(
249
- (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR
250
- )) {
251
- throw PATH_ERROR;
252
- }
253
- if (pathErrorCheckOnly) {
254
- return;
255
- }
256
- node = this.children[token] = new Node();
257
- }
258
- }
259
- node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);
260
- }
261
- buildRegExpStr() {
262
- const childKeys = Object.keys(this.children).sort(compareKey);
263
- const strList = childKeys.map((k) => {
264
- const c = this.children[k];
265
- return (typeof c.varIndex === "number" ? `(${k})@${c.varIndex}` : regExpMetaChars.has(k) ? `\\${k}` : k) + c.buildRegExpStr();
266
- });
267
- if (typeof this.index === "number") {
268
- strList.unshift(`#${this.index}`);
269
- }
270
- if (strList.length === 0) {
271
- return "";
272
- }
273
- if (strList.length === 1) {
274
- return strList[0];
275
- }
276
- return "(?:" + strList.join("|") + ")";
277
- }
278
- };
279
-
280
- // ../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/trie.js
281
- var Trie = class {
282
- context = { varIndex: 0 };
283
- root = new Node();
284
- insert(path, index, pathErrorCheckOnly) {
285
- const paramAssoc = [];
286
- const groups = [];
287
- for (let i = 0; ; ) {
288
- let replaced = false;
289
- path = path.replace(/\{[^}]+\}/g, (m) => {
290
- const mark = `@\\${i}`;
291
- groups[i] = [mark, m];
292
- i++;
293
- replaced = true;
294
- return mark;
295
- });
296
- if (!replaced) {
297
- break;
298
- }
299
- }
300
- const tokens = path.match(/(?::[^\/]+)|(?:\/\*$)|./g) || [];
301
- for (let i = groups.length - 1; i >= 0; i--) {
302
- const [mark] = groups[i];
303
- for (let j = tokens.length - 1; j >= 0; j--) {
304
- if (tokens[j].indexOf(mark) !== -1) {
305
- tokens[j] = tokens[j].replace(mark, groups[i][1]);
306
- break;
307
- }
308
- }
309
- }
310
- this.root.insert(tokens, index, paramAssoc, this.context, pathErrorCheckOnly);
311
- return paramAssoc;
312
- }
313
- buildRegExp() {
314
- let regexp = this.root.buildRegExpStr();
315
- if (regexp === "") {
316
- return [/^$/, [], []];
317
- }
318
- let captureIndex = 0;
319
- const indexReplacementMap = [];
320
- const paramReplacementMap = [];
321
- regexp = regexp.replace(/#(\d+)|@(\d+)|\.\*\$/g, (_, handlerIndex, paramIndex) => {
322
- if (typeof handlerIndex !== "undefined") {
323
- indexReplacementMap[++captureIndex] = Number(handlerIndex);
324
- return "$()";
325
- }
326
- if (typeof paramIndex !== "undefined") {
327
- paramReplacementMap[Number(paramIndex)] = ++captureIndex;
328
- return "";
329
- }
330
- return "";
331
- });
332
- return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];
333
- }
334
- };
335
-
336
- // ../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/router.js
337
- var emptyParam = [];
338
- var nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];
339
- var wildcardRegExpCache = /* @__PURE__ */ Object.create(null);
340
- function buildWildcardRegExp(path) {
341
- return wildcardRegExpCache[path] ??= new RegExp(
342
- path === "*" ? "" : `^${path.replace(
343
- /\/\*$|([.\\+*[^\]$()])/g,
344
- (_, metaChar) => metaChar ? `\\${metaChar}` : "(?:|/.*)"
345
- )}$`
346
- );
347
- }
348
- function clearWildcardRegExpCache() {
349
- wildcardRegExpCache = /* @__PURE__ */ Object.create(null);
350
- }
351
- function buildMatcherFromPreprocessedRoutes(routes) {
352
- const trie = new Trie();
353
- const handlerData = [];
354
- if (routes.length === 0) {
355
- return nullMatcher;
356
- }
357
- const routesWithStaticPathFlag = routes.map(
358
- (route) => [!/\*|\/:/.test(route[0]), ...route]
359
- ).sort(
360
- ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length
361
- );
362
- const staticMap = /* @__PURE__ */ Object.create(null);
363
- for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {
364
- const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];
365
- if (pathErrorCheckOnly) {
366
- staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];
367
- } else {
368
- j++;
369
- }
370
- let paramAssoc;
371
- try {
372
- paramAssoc = trie.insert(path, j, pathErrorCheckOnly);
373
- } catch (e) {
374
- throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;
375
- }
376
- if (pathErrorCheckOnly) {
377
- continue;
378
- }
379
- handlerData[j] = handlers.map(([h, paramCount]) => {
380
- const paramIndexMap = /* @__PURE__ */ Object.create(null);
381
- paramCount -= 1;
382
- for (; paramCount >= 0; paramCount--) {
383
- const [key, value2] = paramAssoc[paramCount];
384
- paramIndexMap[key] = value2;
385
- }
386
- return [h, paramIndexMap];
387
- });
388
- }
389
- const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();
390
- for (let i = 0, len = handlerData.length; i < len; i++) {
391
- for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {
392
- const map = handlerData[i][j]?.[1];
393
- if (!map) {
394
- continue;
395
- }
396
- const keys = Object.keys(map);
397
- for (let k = 0, len3 = keys.length; k < len3; k++) {
398
- map[keys[k]] = paramReplacementMap[map[keys[k]]];
399
- }
400
- }
401
- }
402
- const handlerMap = [];
403
- for (const i in indexReplacementMap) {
404
- handlerMap[i] = handlerData[indexReplacementMap[i]];
405
- }
406
- return [regexp, handlerMap, staticMap];
407
- }
408
- function findMiddleware(middleware, path) {
409
- if (!middleware) {
410
- return void 0;
411
- }
412
- for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {
413
- if (buildWildcardRegExp(k).test(path)) {
414
- return [...middleware[k]];
415
- }
416
- }
417
- return void 0;
418
- }
419
- var RegExpRouter = class {
420
- name = "RegExpRouter";
421
- middleware;
422
- routes;
423
- constructor() {
424
- this.middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };
425
- this.routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };
426
- }
427
- add(method, path, handler) {
428
- const { middleware, routes } = this;
429
- if (!middleware || !routes) {
430
- throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);
431
- }
432
- if (!middleware[method]) {
433
- ;
434
- [middleware, routes].forEach((handlerMap) => {
435
- handlerMap[method] = /* @__PURE__ */ Object.create(null);
436
- Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {
437
- handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];
438
- });
439
- });
440
- }
441
- if (path === "/*") {
442
- path = "*";
443
- }
444
- const paramCount = (path.match(/\/:/g) || []).length;
445
- if (/\*$/.test(path)) {
446
- const re = buildWildcardRegExp(path);
447
- if (method === METHOD_NAME_ALL) {
448
- Object.keys(middleware).forEach((m) => {
449
- middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];
450
- });
451
- } else {
452
- middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];
453
- }
454
- Object.keys(middleware).forEach((m) => {
455
- if (method === METHOD_NAME_ALL || method === m) {
456
- Object.keys(middleware[m]).forEach((p) => {
457
- re.test(p) && middleware[m][p].push([handler, paramCount]);
458
- });
459
- }
460
- });
461
- Object.keys(routes).forEach((m) => {
462
- if (method === METHOD_NAME_ALL || method === m) {
463
- Object.keys(routes[m]).forEach(
464
- (p) => re.test(p) && routes[m][p].push([handler, paramCount])
465
- );
466
- }
467
- });
468
- return;
469
- }
470
- const paths = checkOptionalParameter(path) || [path];
471
- for (let i = 0, len = paths.length; i < len; i++) {
472
- const path2 = paths[i];
473
- Object.keys(routes).forEach((m) => {
474
- if (method === METHOD_NAME_ALL || method === m) {
475
- routes[m][path2] ||= [
476
- ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []
477
- ];
478
- routes[m][path2].push([handler, paramCount - len + i + 1]);
479
- }
480
- });
481
- }
482
- }
483
- match(method, path) {
484
- clearWildcardRegExpCache();
485
- const matchers = this.buildAllMatchers();
486
- this.match = (method2, path2) => {
487
- const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];
488
- const staticMatch = matcher[2][path2];
489
- if (staticMatch) {
490
- return staticMatch;
491
- }
492
- const match = path2.match(matcher[0]);
493
- if (!match) {
494
- return [[], emptyParam];
495
- }
496
- const index = match.indexOf("", 1);
497
- return [matcher[1][index], match];
498
- };
499
- return this.match(method, path);
500
- }
501
- buildAllMatchers() {
502
- const matchers = /* @__PURE__ */ Object.create(null);
503
- [...Object.keys(this.routes), ...Object.keys(this.middleware)].forEach((method) => {
504
- matchers[method] ||= this.buildMatcher(method);
505
- });
506
- this.middleware = this.routes = void 0;
507
- return matchers;
508
- }
509
- buildMatcher(method) {
510
- const routes = [];
511
- let hasOwnRoute = method === METHOD_NAME_ALL;
512
- [this.middleware, this.routes].forEach((r) => {
513
- const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];
514
- if (ownRoute.length !== 0) {
515
- hasOwnRoute ||= true;
516
- routes.push(...ownRoute);
517
- } else if (method !== METHOD_NAME_ALL) {
518
- routes.push(
519
- ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])
520
- );
521
- }
522
- });
523
- if (!hasOwnRoute) {
524
- return null;
525
- } else {
526
- return buildMatcherFromPreprocessedRoutes(routes);
527
- }
528
- }
529
- };
530
-
531
- // src/adapters/fetch.ts
532
- function createFetchHandler(options) {
533
- const routing = options.serverless ? new LinearRouter() : new RegExpRouter();
534
- const addRouteRecursively = (router, basePath) => {
535
- for (const key in router) {
536
- const currentPath = [...basePath, key];
537
- const item = router[key];
538
- if (isProcedure(item)) {
539
- if (item.zz$p.contract.zz$cp.path) {
540
- const method = item.zz$p.contract.zz$cp.method ?? "POST";
541
- const path = openAPIPathToRouterPath(item.zz$p.contract.zz$cp.path);
542
- routing.add(method, path, [currentPath, item]);
543
- }
544
- } else {
545
- addRouteRecursively(item, currentPath);
546
- }
547
- }
548
- };
549
- addRouteRecursively(options.router, []);
550
- return async (requestOptions) => {
551
- const isORPCTransformer = requestOptions.request.headers.get(ORPC_HEADER) === ORPC_HEADER_VALUE;
552
- const accept = requestOptions.request.headers.get("Accept") || void 0;
553
- const serializer = isORPCTransformer ? new ORPCSerializer() : new OpenAPISerializer({ accept });
554
- const context = await value(requestOptions.context);
555
- const handler = async () => {
556
- const url = new URL(requestOptions.request.url);
557
- const pathname = `/${trim(url.pathname.replace(requestOptions.prefix ?? "", ""), "/")}`;
558
- let path;
559
- let procedure;
560
- let params;
561
- if (isORPCTransformer) {
562
- path = trim(pathname, "/").split("/").map(decodeURIComponent);
563
- const val = get(options.router, path);
564
- if (isProcedure(val)) {
565
- procedure = val;
566
- }
567
- } else {
568
- const customMethod = requestOptions.request.method === "POST" ? url.searchParams.get("method")?.toUpperCase() : void 0;
569
- const method = customMethod || requestOptions.request.method;
570
- const [matches, params_] = routing.match(method, pathname);
571
- const [match] = matches.sort((a, b) => {
572
- return Object.keys(a[1]).length - Object.keys(b[1]).length;
573
- });
574
- if (match) {
575
- path = match[0][0];
576
- procedure = match[0][1];
577
- if (params_) {
578
- params = mapValues(
579
- match[1],
580
- (v) => params_[v]
581
- );
582
- } else {
583
- params = match[1];
584
- }
585
- }
586
- if (!path || !procedure) {
587
- path = trim(pathname, "/").split("/").map(decodeURIComponent);
588
- const val = get(options.router, path);
589
- if (isProcedure(val)) {
590
- procedure = val;
591
- }
592
- }
593
- }
594
- if (!path || !procedure) {
595
- throw new ORPCError({ code: "NOT_FOUND", message: "Not found" });
596
- }
597
- const deserializer = isORPCTransformer ? new ORPCDeserializer() : new OpenAPIDeserializer({
598
- schema: procedure.zz$p.contract.zz$cp.InputSchema
599
- });
600
- const input_ = await (async () => {
601
- try {
602
- return await deserializer.deserialize(requestOptions.request);
603
- } catch (e) {
604
- throw new ORPCError({
605
- code: "BAD_REQUEST",
606
- message: "Cannot parse request. Please check the request body and Content-Type header.",
607
- cause: e
608
- });
609
- }
610
- })();
611
- const input = (() => {
612
- if (!params || Object.keys(params).length === 0) {
613
- return input_;
614
- }
615
- const coercedParams = procedure.zz$p.contract.zz$cp.InputSchema ? zodCoerce(
616
- procedure.zz$p.contract.zz$cp.InputSchema,
617
- { ...params },
618
- {
619
- bracketNotation: true
620
- }
621
- ) : params;
622
- if (!isPlainObject(input_)) {
623
- return coercedParams;
624
- }
625
- return {
626
- ...coercedParams,
627
- ...input_
628
- };
629
- })();
630
- const caller = createProcedureCaller({
631
- context,
632
- procedure,
633
- path
634
- });
635
- const output = await caller(input);
636
- const { body, headers } = serializer.serialize(output);
637
- return new Response(body, {
638
- status: 200,
639
- headers
640
- });
641
- };
642
- try {
643
- return await options.hooks?.(context, {
644
- next: handler,
645
- response: (response) => response
646
- }) ?? await handler();
647
- } catch (e) {
648
- const error = toORPCError(e);
649
- try {
650
- const { body, headers } = serializer.serialize(error.toJSON());
651
- return new Response(body, {
652
- status: error.status,
653
- headers
654
- });
655
- } catch (e2) {
656
- const error2 = toORPCError(e2);
657
- const { body, headers } = new OpenAPISerializer().serialize(
658
- error2.toJSON()
659
- );
660
- return new Response(body, {
661
- status: error2.status,
662
- headers
663
- });
664
- }
665
- }
666
- };
667
- }
668
- function openAPIPathToRouterPath(path) {
669
- return standardizeHTTPPath(path).replace(/\{([^}]+)\}/g, ":$1");
670
- }
671
- function toORPCError(e) {
672
- return e instanceof ORPCError ? e : new ORPCError({
673
- code: "INTERNAL_SERVER_ERROR",
674
- message: "Internal server error",
675
- cause: e
676
- });
677
- }
678
- export {
679
- createFetchHandler
680
- };
681
- //# sourceMappingURL=fetch.js.map