@orpc/server 0.1.0 → 0.1.2

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 (65) hide show
  1. package/dist/chunk-26DTFWOI.js +200 -0
  2. package/dist/chunk-26DTFWOI.js.map +1 -0
  3. package/dist/fetch.js +87 -91
  4. package/dist/fetch.js.map +1 -1
  5. package/dist/index.js +6 -9
  6. package/dist/index.js.map +1 -1
  7. package/dist/src/adapters/fetch.d.ts +9 -3
  8. package/dist/src/adapters/fetch.d.ts.map +1 -1
  9. package/dist/src/builder.d.ts +4 -4
  10. package/dist/src/builder.d.ts.map +1 -1
  11. package/dist/src/index.d.ts +2 -2
  12. package/dist/src/index.d.ts.map +1 -1
  13. package/dist/src/middleware.d.ts +17 -7
  14. package/dist/src/middleware.d.ts.map +1 -1
  15. package/dist/src/procedure-builder.d.ts +4 -4
  16. package/dist/src/procedure-builder.d.ts.map +1 -1
  17. package/dist/src/procedure-caller.d.ts +0 -5
  18. package/dist/src/procedure-caller.d.ts.map +1 -1
  19. package/dist/src/procedure-implementer.d.ts +4 -5
  20. package/dist/src/procedure-implementer.d.ts.map +1 -1
  21. package/dist/src/procedure.d.ts +8 -9
  22. package/dist/src/procedure.d.ts.map +1 -1
  23. package/dist/src/router-builder.d.ts +2 -2
  24. package/dist/src/router-builder.d.ts.map +1 -1
  25. package/dist/src/router-caller.d.ts +1 -6
  26. package/dist/src/router-caller.d.ts.map +1 -1
  27. package/dist/src/router-implementer.d.ts +2 -2
  28. package/dist/src/router-implementer.d.ts.map +1 -1
  29. package/dist/src/router.d.ts +1 -1
  30. package/dist/src/router.d.ts.map +1 -1
  31. package/dist/src/types.d.ts +1 -10
  32. package/dist/src/types.d.ts.map +1 -1
  33. package/dist/src/utils.d.ts +1 -2
  34. package/dist/src/utils.d.ts.map +1 -1
  35. package/dist/tsconfig.tsbuildinfo +1 -1
  36. package/package.json +5 -5
  37. package/src/adapters/fetch.test.ts +32 -17
  38. package/src/adapters/fetch.ts +134 -123
  39. package/src/builder.test.ts +48 -39
  40. package/src/builder.ts +32 -30
  41. package/src/index.ts +2 -2
  42. package/src/middleware.test.ts +54 -73
  43. package/src/middleware.ts +39 -22
  44. package/src/procedure-builder.test.ts +26 -22
  45. package/src/procedure-builder.ts +15 -15
  46. package/src/procedure-caller.test.ts +25 -70
  47. package/src/procedure-caller.ts +69 -88
  48. package/src/procedure-implementer.test.ts +27 -22
  49. package/src/procedure-implementer.ts +16 -17
  50. package/src/procedure.test.ts +17 -12
  51. package/src/procedure.ts +46 -45
  52. package/src/router-builder.test.ts +4 -4
  53. package/src/router-builder.ts +12 -10
  54. package/src/router-caller.test.ts +6 -6
  55. package/src/router-caller.ts +5 -16
  56. package/src/router-implementer.test.ts +12 -12
  57. package/src/router-implementer.ts +9 -6
  58. package/src/router.test.ts +4 -4
  59. package/src/router.ts +12 -10
  60. package/src/types.test.ts +1 -1
  61. package/src/types.ts +1 -15
  62. package/src/utils.test.ts +2 -229
  63. package/src/utils.ts +5 -84
  64. package/dist/chunk-ACLC6USM.js +0 -262
  65. package/dist/chunk-ACLC6USM.js.map +0 -1
package/dist/fetch.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/adapters/fetch.ts","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/utils/url.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/linear-router/router.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/node.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/trie.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/router.js"],"sourcesContent":["/// <reference lib=\"dom\" />\n\nimport {\n type HTTPPath,\n ORPC_HEADER,\n ORPC_HEADER_VALUE,\n standardizeHTTPPath,\n} from '@orpc/contract'\nimport {\n type PartialOnUndefinedDeep,\n get,\n isPlainObject,\n mapValues,\n trim,\n} from '@orpc/shared'\nimport { ORPCError } from '@orpc/shared/error'\nimport {\n ORPCDeserializer,\n ORPCSerializer,\n OpenAPIDeserializer,\n OpenAPISerializer,\n zodCoerce,\n} from '@orpc/transformer'\nimport { LinearRouter } from 'hono/router/linear-router'\nimport { RegExpRouter } from 'hono/router/reg-exp-router'\nimport { type WELL_DEFINED_PROCEDURE, isProcedure } from '../procedure'\nimport { createProcedureCaller } from '../procedure-caller'\nimport type { Router } from '../router'\nimport type { Meta, Promisable } from '../types'\nimport { hook } from '../utils'\n\nexport interface CreateFetchHandlerOptions<TRouter extends Router<any>> {\n router: TRouter\n\n hooks?: (\n context: TRouter extends Router<infer UContext> ? UContext : never,\n meta: Meta<unknown>,\n ) => Promisable<void>\n\n /**\n * It will help improve the cold start time. But it will increase the performance.\n *\n * @default false\n */\n serverless?: boolean\n}\n\nexport function createFetchHandler<TRouter extends Router<any>>(\n options: CreateFetchHandlerOptions<TRouter>,\n): FetchHandler<TRouter> {\n const routing = options.serverless\n ? new LinearRouter<[string[], WELL_DEFINED_PROCEDURE]>()\n : new RegExpRouter<[string[], WELL_DEFINED_PROCEDURE]>()\n\n const addRouteRecursively = (router: Router<any>, basePath: string[]) => {\n for (const key in router) {\n const currentPath = [...basePath, key]\n const item = router[key] as WELL_DEFINED_PROCEDURE | Router<any>\n\n if (isProcedure(item)) {\n if (item.zz$p.contract.zz$cp.path) {\n const method = item.zz$p.contract.zz$cp.method ?? 'POST'\n const path = openAPIPathToRouterPath(item.zz$p.contract.zz$cp.path)\n\n routing.add(method, path, [currentPath, item])\n }\n } else {\n addRouteRecursively(item, currentPath)\n }\n }\n }\n\n addRouteRecursively(options.router, [])\n\n return async (requestOptions) => {\n const isORPCTransformer =\n requestOptions.request.headers.get(ORPC_HEADER) === ORPC_HEADER_VALUE\n const accept = requestOptions.request.headers.get('Accept') || undefined\n\n const serializer = isORPCTransformer\n ? new ORPCSerializer()\n : new OpenAPISerializer({ accept })\n\n try {\n return await hook(async (hooks) => {\n const url = new URL(requestOptions.request.url)\n const pathname = `/${trim(url.pathname.replace(requestOptions.prefix ?? '', ''), '/')}`\n\n let path: string[] | undefined\n let procedure: WELL_DEFINED_PROCEDURE | undefined\n let params: Record<string, string> | undefined\n\n if (isORPCTransformer) {\n path = trim(pathname, '/').split('/').map(decodeURIComponent)\n const val = get(options.router, path)\n\n if (isProcedure(val)) {\n procedure = val\n }\n } else {\n const customMethod =\n requestOptions.request.method === 'POST'\n ? url.searchParams.get('method')?.toUpperCase()\n : undefined\n const method = customMethod || requestOptions.request.method\n\n const [matches, params_] = routing.match(method, pathname)\n\n const [match] = matches.sort((a, b) => {\n return Object.keys(a[1]).length - Object.keys(b[1]).length\n })\n\n if (match) {\n path = match[0][0]\n procedure = match[0][1]\n\n if (params_) {\n params = mapValues(\n (match as any)[1]!,\n (v) => params_[v as number]!,\n )\n } else {\n params = match[1] as Record<string, string>\n }\n }\n\n if (!path || !procedure) {\n path = trim(pathname, '/').split('/').map(decodeURIComponent)\n\n const val = get(options.router, path)\n\n if (isProcedure(val)) {\n procedure = val\n }\n }\n }\n\n if (!path || !procedure) {\n throw new ORPCError({ code: 'NOT_FOUND', message: 'Not found' })\n }\n\n const meta: Meta<unknown> = {\n ...hooks,\n procedure,\n path: path,\n internal: false,\n }\n\n await options.hooks?.(requestOptions.context as any, meta)\n\n const deserializer = isORPCTransformer\n ? new ORPCDeserializer()\n : new OpenAPIDeserializer({\n schema: procedure.zz$p.contract.zz$cp.InputSchema,\n })\n\n const input_ = await (async () => {\n try {\n return await deserializer.deserialize(requestOptions.request)\n } catch (e) {\n throw new ORPCError({\n code: 'BAD_REQUEST',\n message:\n 'Cannot parse request. Please check the request body and Content-Type header.',\n cause: e,\n })\n }\n })()\n\n const input = (() => {\n if (!params || Object.keys(params).length === 0) {\n return input_\n }\n\n const coercedParams = procedure.zz$p.contract.zz$cp.InputSchema\n ? (zodCoerce(\n procedure.zz$p.contract.zz$cp.InputSchema,\n { ...params },\n {\n bracketNotation: true,\n },\n ) as object)\n : params\n\n if (!isPlainObject(input_)) {\n return coercedParams\n }\n\n return {\n ...coercedParams,\n ...input_,\n }\n })()\n\n const caller = createProcedureCaller({\n context: requestOptions.context,\n internal: false,\n validate: true,\n procedure,\n path,\n })\n\n const output = await caller(input)\n\n const { body, headers } = serializer.serialize(output)\n\n return new Response(body, {\n status: 200,\n headers,\n })\n })\n } catch (e) {\n const error = toORPCError(e)\n\n try {\n const { body, headers } = serializer.serialize(error.toJSON())\n\n return new Response(body, {\n status: error.status,\n headers: headers,\n })\n } catch (e) {\n const error = toORPCError(e)\n\n // fallback to OpenAPI serializer (without accept) when expected serializer has failed\n const { body, headers } = new OpenAPISerializer().serialize(\n error.toJSON(),\n )\n\n return new Response(body, {\n status: error.status,\n headers: headers,\n })\n }\n }\n }\n}\n\nfunction openAPIPathToRouterPath(path: HTTPPath): string {\n return standardizeHTTPPath(path).replace(/\\{([^}]+)\\}/g, ':$1')\n}\n\nexport type FetchHandlerOptions<TRouter extends Router<any>> = {\n /**\n * The request need to be handled.\n */\n request: Request\n\n /**\n * Remove the prefix from the request path.\n *\n * @example /orpc\n * @example /api\n */\n prefix?: string\n} & PartialOnUndefinedDeep<{\n /**\n * The context used to handle the request.\n */\n context: TRouter extends Router<infer UContext> ? UContext : never\n}>\n\nexport interface FetchHandler<TRouter extends Router<any>> {\n (options: FetchHandlerOptions<TRouter>): Promise<Response>\n}\n\nfunction toORPCError(e: unknown): ORPCError<any, any> {\n return e instanceof ORPCError\n ? e\n : new ORPCError({\n code: 'INTERNAL_SERVER_ERROR',\n message: 'Internal server error',\n cause: e,\n })\n}\n","// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n","// src/utils/url.ts\nvar splitPath = (path) => {\n const paths = path.split(\"/\");\n if (paths[0] === \"\") {\n paths.shift();\n }\n return paths;\n};\nvar splitRoutingPath = (routePath) => {\n const { groups, path } = extractGroupsFromPath(routePath);\n const paths = splitPath(path);\n return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n const groups = [];\n path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n const mark = `@${index}`;\n groups.push([mark, match]);\n return mark;\n });\n return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = paths.length - 1; j >= 0; j--) {\n if (paths[j].includes(mark)) {\n paths[j] = paths[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n return paths;\n};\nvar patternCache = {};\nvar getPattern = (label) => {\n if (label === \"*\") {\n return \"*\";\n }\n const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n if (match) {\n if (!patternCache[label]) {\n if (match[2]) {\n patternCache[label] = [label, match[1], new RegExp(\"^\" + match[2] + \"$\")];\n } else {\n patternCache[label] = [label, match[1], true];\n }\n }\n return patternCache[label];\n }\n return null;\n};\nvar tryDecodeURI = (str) => {\n try {\n return decodeURI(str);\n } catch {\n return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n try {\n return decodeURI(match);\n } catch {\n return match;\n }\n });\n }\n};\nvar getPath = (request) => {\n const url = request.url;\n const start = url.indexOf(\"/\", 8);\n let i = start;\n for (; i < url.length; i++) {\n const charCode = url.charCodeAt(i);\n if (charCode === 37) {\n const queryIndex = url.indexOf(\"?\", i);\n const path = url.slice(start, queryIndex === -1 ? void 0 : queryIndex);\n return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n } else if (charCode === 63) {\n break;\n }\n }\n return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n const queryIndex = url.indexOf(\"?\", 8);\n return queryIndex === -1 ? \"\" : \"?\" + url.slice(queryIndex + 1);\n};\nvar getPathNoStrict = (request) => {\n const result = getPath(request);\n return result.length > 1 && result[result.length - 1] === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (...paths) => {\n let p = \"\";\n let endsWithSlash = false;\n for (let path of paths) {\n if (p[p.length - 1] === \"/\") {\n p = p.slice(0, -1);\n endsWithSlash = true;\n }\n if (path[0] !== \"/\") {\n path = `/${path}`;\n }\n if (path === \"/\" && endsWithSlash) {\n p = `${p}/`;\n } else if (path !== \"/\") {\n p = `${p}${path}`;\n }\n if (path === \"/\" && p === \"\") {\n p = \"/\";\n }\n }\n return p;\n};\nvar checkOptionalParameter = (path) => {\n if (!path.match(/\\:.+\\?$/)) {\n return null;\n }\n const segments = path.split(\"/\");\n const results = [];\n let basePath = \"\";\n segments.forEach((segment) => {\n if (segment !== \"\" && !/\\:/.test(segment)) {\n basePath += \"/\" + segment;\n } else if (/\\:/.test(segment)) {\n if (/\\?/.test(segment)) {\n if (results.length === 0 && basePath === \"\") {\n results.push(\"/\");\n } else {\n results.push(basePath);\n }\n const optionalSegment = segment.replace(\"?\", \"\");\n basePath += \"/\" + optionalSegment;\n results.push(basePath);\n } else {\n basePath += \"/\" + segment;\n }\n }\n });\n return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar _decodeURI = (value) => {\n if (!/[%+]/.test(value)) {\n return value;\n }\n if (value.indexOf(\"+\") !== -1) {\n value = value.replace(/\\+/g, \" \");\n }\n return /%/.test(value) ? decodeURIComponent_(value) : value;\n};\nvar _getQueryParam = (url, key, multiple) => {\n let encoded;\n if (!multiple && key && !/[%+]/.test(key)) {\n let keyIndex2 = url.indexOf(`?${key}`, 8);\n if (keyIndex2 === -1) {\n keyIndex2 = url.indexOf(`&${key}`, 8);\n }\n while (keyIndex2 !== -1) {\n const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n if (trailingKeyCode === 61) {\n const valueIndex = keyIndex2 + key.length + 2;\n const endIndex = url.indexOf(\"&\", valueIndex);\n return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n return \"\";\n }\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n encoded = /[%+]/.test(url);\n if (!encoded) {\n return void 0;\n }\n }\n const results = {};\n encoded ??= /[%+]/.test(url);\n let keyIndex = url.indexOf(\"?\", 8);\n while (keyIndex !== -1) {\n const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n let valueIndex = url.indexOf(\"=\", keyIndex);\n if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n valueIndex = -1;\n }\n let name = url.slice(\n keyIndex + 1,\n valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n );\n if (encoded) {\n name = _decodeURI(name);\n }\n keyIndex = nextKeyIndex;\n if (name === \"\") {\n continue;\n }\n let value;\n if (valueIndex === -1) {\n value = \"\";\n } else {\n value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n if (encoded) {\n value = _decodeURI(value);\n }\n }\n if (multiple) {\n if (!(results[name] && Array.isArray(results[name]))) {\n results[name] = [];\n }\n ;\n results[name].push(value);\n } else {\n results[name] ??= value;\n }\n }\n return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n checkOptionalParameter,\n decodeURIComponent_,\n getPath,\n getPathNoStrict,\n getPattern,\n getQueryParam,\n getQueryParams,\n getQueryStrings,\n mergePath,\n splitPath,\n splitRoutingPath\n};\n","// src/router/linear-router/router.ts\nimport { METHOD_NAME_ALL, UnsupportedPathError } from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar splitPathRe = /\\/(:\\w+(?:{(?:(?:{[\\d,]+})|[^}])+})?)|\\/[^\\/\\?]+|(\\?)/g;\nvar splitByStarRe = /\\*/;\nvar LinearRouter = class {\n name = \"LinearRouter\";\n routes = [];\n add(method, path, handler) {\n ;\n (checkOptionalParameter(path) || [path]).forEach((p) => {\n this.routes.push([method, p, handler]);\n });\n }\n match(method, path) {\n const handlers = [];\n ROUTES_LOOP:\n for (let i = 0, len = this.routes.length; i < len; i++) {\n const [routeMethod, routePath, handler] = this.routes[i];\n if (routeMethod !== method && routeMethod !== METHOD_NAME_ALL) {\n continue;\n }\n if (routePath === \"*\" || routePath === \"/*\") {\n handlers.push([handler, emptyParams]);\n continue;\n }\n const hasStar = routePath.indexOf(\"*\") !== -1;\n const hasLabel = routePath.indexOf(\":\") !== -1;\n if (!hasStar && !hasLabel) {\n if (routePath === path || routePath + \"/\" === path) {\n handlers.push([handler, emptyParams]);\n }\n } else if (hasStar && !hasLabel) {\n const endsWithStar = routePath.charCodeAt(routePath.length - 1) === 42;\n const parts = (endsWithStar ? routePath.slice(0, -2) : routePath).split(splitByStarRe);\n const lastIndex = parts.length - 1;\n for (let j = 0, pos = 0, len2 = parts.length; j < len2; j++) {\n const part = parts[j];\n const index = path.indexOf(part, pos);\n if (index !== pos) {\n continue ROUTES_LOOP;\n }\n pos += part.length;\n if (j === lastIndex) {\n if (!endsWithStar && pos !== path.length && !(pos === path.length - 1 && path.charCodeAt(pos) === 47)) {\n continue ROUTES_LOOP;\n }\n } else {\n const index2 = path.indexOf(\"/\", pos);\n if (index2 === -1) {\n continue ROUTES_LOOP;\n }\n pos = index2;\n }\n }\n handlers.push([handler, emptyParams]);\n } else if (hasLabel && !hasStar) {\n const params = /* @__PURE__ */ Object.create(null);\n const parts = routePath.match(splitPathRe);\n const lastIndex = parts.length - 1;\n for (let j = 0, pos = 0, len2 = parts.length; j < len2; j++) {\n if (pos === -1 || pos >= path.length) {\n continue ROUTES_LOOP;\n }\n const part = parts[j];\n if (part.charCodeAt(1) === 58) {\n let name = part.slice(2);\n let value;\n if (name.charCodeAt(name.length - 1) === 125) {\n const openBracePos = name.indexOf(\"{\");\n const pattern = name.slice(openBracePos + 1, -1);\n const restPath = path.slice(pos + 1);\n const match = new RegExp(pattern, \"d\").exec(restPath);\n if (!match || match.indices[0][0] !== 0 || match.indices[0][1] === 0) {\n continue ROUTES_LOOP;\n }\n name = name.slice(0, openBracePos);\n value = restPath.slice(...match.indices[0]);\n pos += match.indices[0][1] + 1;\n } else {\n let endValuePos = path.indexOf(\"/\", pos + 1);\n if (endValuePos === -1) {\n if (pos + 1 === path.length) {\n continue ROUTES_LOOP;\n }\n endValuePos = path.length;\n }\n value = path.slice(pos + 1, endValuePos);\n pos = endValuePos;\n }\n params[name] ||= value;\n } else {\n const index = path.indexOf(part, pos);\n if (index !== pos) {\n continue ROUTES_LOOP;\n }\n pos += part.length;\n }\n if (j === lastIndex) {\n if (pos !== path.length && !(pos === path.length - 1 && path.charCodeAt(pos) === 47)) {\n continue ROUTES_LOOP;\n }\n }\n }\n handlers.push([handler, params]);\n } else if (hasLabel && hasStar) {\n throw new UnsupportedPathError();\n }\n }\n return [handlers];\n }\n};\nexport {\n LinearRouter\n};\n","// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class {\n index;\n varIndex;\n children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.children[regexpStr];\n if (!node) {\n if (Object.keys(this.children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.children[regexpStr] = new Node();\n if (name !== \"\") {\n node.varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.varIndex]);\n }\n } else {\n node = this.children[token];\n if (!node) {\n if (Object.keys(this.children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.children[token] = new Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.children[k];\n return (typeof c.varIndex === \"number\" ? `(${k})@${c.varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.index === \"number\") {\n strList.unshift(`#${this.index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n","// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n context = { varIndex: 0 };\n root = new Node();\n insert(path, index, pathErrorCheckOnly) {\n const paramAssoc = [];\n const groups = [];\n for (let i = 0; ; ) {\n let replaced = false;\n path = path.replace(/\\{[^}]+\\}/g, (m) => {\n const mark = `@\\\\${i}`;\n groups[i] = [mark, m];\n i++;\n replaced = true;\n return mark;\n });\n if (!replaced) {\n break;\n }\n }\n const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = tokens.length - 1; j >= 0; j--) {\n if (tokens[j].indexOf(mark) !== -1) {\n tokens[j] = tokens[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n this.root.insert(tokens, index, paramAssoc, this.context, pathErrorCheckOnly);\n return paramAssoc;\n }\n buildRegExp() {\n let regexp = this.root.buildRegExpStr();\n if (regexp === \"\") {\n return [/^$/, [], []];\n }\n let captureIndex = 0;\n const indexReplacementMap = [];\n const paramReplacementMap = [];\n regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n if (typeof handlerIndex !== \"undefined\") {\n indexReplacementMap[++captureIndex] = Number(handlerIndex);\n return \"$()\";\n }\n if (typeof paramIndex !== \"undefined\") {\n paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n return \"\";\n }\n return \"\";\n });\n return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n }\n};\nexport {\n Trie\n};\n","// src/router/reg-exp-router/router.ts\nimport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHOD_NAME_ALL,\n UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar emptyParam = [];\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n return wildcardRegExpCache[path] ??= new RegExp(\n path === \"*\" ? \"\" : `^${path.replace(\n /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n )}$`\n );\n}\nfunction clearWildcardRegExpCache() {\n wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n const trie = new Trie();\n const handlerData = [];\n if (routes.length === 0) {\n return nullMatcher;\n }\n const routesWithStaticPathFlag = routes.map(\n (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n ).sort(\n ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n );\n const staticMap = /* @__PURE__ */ Object.create(null);\n for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n if (pathErrorCheckOnly) {\n staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n } else {\n j++;\n }\n let paramAssoc;\n try {\n paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n } catch (e) {\n throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n }\n if (pathErrorCheckOnly) {\n continue;\n }\n handlerData[j] = handlers.map(([h, paramCount]) => {\n const paramIndexMap = /* @__PURE__ */ Object.create(null);\n paramCount -= 1;\n for (; paramCount >= 0; paramCount--) {\n const [key, value] = paramAssoc[paramCount];\n paramIndexMap[key] = value;\n }\n return [h, paramIndexMap];\n });\n }\n const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n for (let i = 0, len = handlerData.length; i < len; i++) {\n for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n const map = handlerData[i][j]?.[1];\n if (!map) {\n continue;\n }\n const keys = Object.keys(map);\n for (let k = 0, len3 = keys.length; k < len3; k++) {\n map[keys[k]] = paramReplacementMap[map[keys[k]]];\n }\n }\n }\n const handlerMap = [];\n for (const i in indexReplacementMap) {\n handlerMap[i] = handlerData[indexReplacementMap[i]];\n }\n return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n if (!middleware) {\n return void 0;\n }\n for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n if (buildWildcardRegExp(k).test(path)) {\n return [...middleware[k]];\n }\n }\n return void 0;\n}\nvar RegExpRouter = class {\n name = \"RegExpRouter\";\n middleware;\n routes;\n constructor() {\n this.middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n }\n add(method, path, handler) {\n const { middleware, routes } = this;\n if (!middleware || !routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n if (!middleware[method]) {\n ;\n [middleware, routes].forEach((handlerMap) => {\n handlerMap[method] = /* @__PURE__ */ Object.create(null);\n Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n });\n });\n }\n if (path === \"/*\") {\n path = \"*\";\n }\n const paramCount = (path.match(/\\/:/g) || []).length;\n if (/\\*$/.test(path)) {\n const re = buildWildcardRegExp(path);\n if (method === METHOD_NAME_ALL) {\n Object.keys(middleware).forEach((m) => {\n middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n });\n } else {\n middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n }\n Object.keys(middleware).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(middleware[m]).forEach((p) => {\n re.test(p) && middleware[m][p].push([handler, paramCount]);\n });\n }\n });\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(routes[m]).forEach(\n (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n );\n }\n });\n return;\n }\n const paths = checkOptionalParameter(path) || [path];\n for (let i = 0, len = paths.length; i < len; i++) {\n const path2 = paths[i];\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n routes[m][path2] ||= [\n ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n ];\n routes[m][path2].push([handler, paramCount - len + i + 1]);\n }\n });\n }\n }\n match(method, path) {\n clearWildcardRegExpCache();\n const matchers = this.buildAllMatchers();\n this.match = (method2, path2) => {\n const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n const staticMatch = matcher[2][path2];\n if (staticMatch) {\n return staticMatch;\n }\n const match = path2.match(matcher[0]);\n if (!match) {\n return [[], emptyParam];\n }\n const index = match.indexOf(\"\", 1);\n return [matcher[1][index], match];\n };\n return this.match(method, path);\n }\n buildAllMatchers() {\n const matchers = /* @__PURE__ */ Object.create(null);\n [...Object.keys(this.routes), ...Object.keys(this.middleware)].forEach((method) => {\n matchers[method] ||= this.buildMatcher(method);\n });\n this.middleware = this.routes = void 0;\n return matchers;\n }\n buildMatcher(method) {\n const routes = [];\n let hasOwnRoute = method === METHOD_NAME_ALL;\n [this.middleware, this.routes].forEach((r) => {\n const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n if (ownRoute.length !== 0) {\n hasOwnRoute ||= true;\n routes.push(...ownRoute);\n } else if (method !== METHOD_NAME_ALL) {\n routes.push(\n ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n );\n }\n });\n if (!hasOwnRoute) {\n return null;\n } else {\n return buildMatcherFromPreprocessedRoutes(routes);\n }\n }\n};\nexport {\n RegExpRouter\n};\n"],"mappings":"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","names":["e","error"]}
1
+ {"version":3,"sources":["../src/adapters/fetch.ts","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/utils/url.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/linear-router/router.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/node.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/trie.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/router.js"],"sourcesContent":["/// <reference lib=\"dom\" />\n\nimport type {\n PartialOnUndefinedDeep,\n Promisable,\n} from '@orpc/shared'\nimport type { Router } from '../router'\nimport {\n type HTTPPath,\n ORPC_HEADER,\n ORPC_HEADER_VALUE,\n standardizeHTTPPath,\n} from '@orpc/contract'\nimport {\n get,\n isPlainObject,\n mapValues,\n trim,\n} from '@orpc/shared'\nimport { ORPCError } from '@orpc/shared/error'\nimport {\n OpenAPIDeserializer,\n OpenAPISerializer,\n ORPCDeserializer,\n ORPCSerializer,\n zodCoerce,\n} from '@orpc/transformer'\nimport { LinearRouter } from 'hono/router/linear-router'\nimport { RegExpRouter } from 'hono/router/reg-exp-router'\nimport { isProcedure, type WELL_DEFINED_PROCEDURE } from '../procedure'\nimport { createProcedureCaller } from '../procedure-caller'\n\nexport interface FetchHandlerHooks {\n next: () => Promise<Response>\n response: (response: Response) => Response\n}\n\nexport interface CreateFetchHandlerOptions<TRouter extends Router<any>> {\n router: TRouter\n\n /**\n * Hooks for executing logics on lifecycle events.\n */\n hooks?: (\n context: TRouter extends Router<infer UContext> ? UContext : never,\n hooks: FetchHandlerHooks,\n ) => Promisable<Response>\n\n /**\n * It will help improve the cold start time. But it will increase the performance.\n *\n * @default false\n */\n serverless?: boolean\n}\n\nexport function createFetchHandler<TRouter extends Router<any>>(\n options: CreateFetchHandlerOptions<TRouter>,\n): FetchHandler<TRouter> {\n const routing = options.serverless\n ? new LinearRouter<[string[], WELL_DEFINED_PROCEDURE]>()\n : new RegExpRouter<[string[], WELL_DEFINED_PROCEDURE]>()\n\n const addRouteRecursively = (router: Router<any>, basePath: string[]) => {\n for (const key in router) {\n const currentPath = [...basePath, key]\n const item = router[key] as WELL_DEFINED_PROCEDURE | Router<any>\n\n if (isProcedure(item)) {\n if (item.zz$p.contract.zz$cp.path) {\n const method = item.zz$p.contract.zz$cp.method ?? 'POST'\n const path = openAPIPathToRouterPath(item.zz$p.contract.zz$cp.path)\n\n routing.add(method, path, [currentPath, item])\n }\n }\n else {\n addRouteRecursively(item, currentPath)\n }\n }\n }\n\n addRouteRecursively(options.router, [])\n\n return async (requestOptions) => {\n const isORPCTransformer\n = requestOptions.request.headers.get(ORPC_HEADER) === ORPC_HEADER_VALUE\n const accept = requestOptions.request.headers.get('Accept') || undefined\n\n const serializer = isORPCTransformer\n ? new ORPCSerializer()\n : new OpenAPISerializer({ accept })\n\n const handler = async () => {\n const url = new URL(requestOptions.request.url)\n const pathname = `/${trim(url.pathname.replace(requestOptions.prefix ?? '', ''), '/')}`\n\n let path: string[] | undefined\n let procedure: WELL_DEFINED_PROCEDURE | undefined\n let params: Record<string, string> | undefined\n\n if (isORPCTransformer) {\n path = trim(pathname, '/').split('/').map(decodeURIComponent)\n const val = get(options.router, path)\n\n if (isProcedure(val)) {\n procedure = val\n }\n }\n else {\n const customMethod\n = requestOptions.request.method === 'POST'\n ? url.searchParams.get('method')?.toUpperCase()\n : undefined\n const method = customMethod || requestOptions.request.method\n\n const [matches, params_] = routing.match(method, pathname)\n\n const [match] = matches.sort((a, b) => {\n return Object.keys(a[1]).length - Object.keys(b[1]).length\n })\n\n if (match) {\n path = match[0][0]\n procedure = match[0][1]\n\n if (params_) {\n params = mapValues(\n (match as any)[1]!,\n v => params_[v as number]!,\n )\n }\n else {\n params = match[1] as Record<string, string>\n }\n }\n\n if (!path || !procedure) {\n path = trim(pathname, '/').split('/').map(decodeURIComponent)\n\n const val = get(options.router, path)\n\n if (isProcedure(val)) {\n procedure = val\n }\n }\n }\n\n if (!path || !procedure) {\n throw new ORPCError({ code: 'NOT_FOUND', message: 'Not found' })\n }\n\n const deserializer = isORPCTransformer\n ? new ORPCDeserializer()\n : new OpenAPIDeserializer({\n schema: procedure.zz$p.contract.zz$cp.InputSchema,\n })\n\n const input_ = await (async () => {\n try {\n return await deserializer.deserialize(requestOptions.request)\n }\n catch (e) {\n throw new ORPCError({\n code: 'BAD_REQUEST',\n message:\n 'Cannot parse request. Please check the request body and Content-Type header.',\n cause: e,\n })\n }\n })()\n\n const input = (() => {\n if (!params || Object.keys(params).length === 0) {\n return input_\n }\n\n const coercedParams = procedure.zz$p.contract.zz$cp.InputSchema\n ? (zodCoerce(\n procedure.zz$p.contract.zz$cp.InputSchema,\n { ...params },\n {\n bracketNotation: true,\n },\n ) as object)\n : params\n\n if (!isPlainObject(input_)) {\n return coercedParams\n }\n\n return {\n ...coercedParams,\n ...input_,\n }\n })()\n\n const caller = createProcedureCaller({\n context: requestOptions.context,\n internal: false,\n validate: true,\n procedure,\n path,\n })\n\n const output = await caller(input)\n\n const { body, headers } = serializer.serialize(output)\n\n return new Response(body, {\n status: 200,\n headers,\n })\n }\n\n try {\n return await options.hooks?.(requestOptions.context as any, {\n next: handler,\n response: response => response,\n }) ?? await handler()\n }\n catch (e) {\n const error = toORPCError(e)\n\n try {\n const { body, headers } = serializer.serialize(error.toJSON())\n\n return new Response(body, {\n status: error.status,\n headers,\n })\n }\n catch (e) {\n const error = toORPCError(e)\n\n // fallback to OpenAPI serializer (without accept) when expected serializer has failed\n const { body, headers } = new OpenAPISerializer().serialize(\n error.toJSON(),\n )\n\n return new Response(body, {\n status: error.status,\n headers,\n })\n }\n }\n }\n}\n\nfunction openAPIPathToRouterPath(path: HTTPPath): string {\n return standardizeHTTPPath(path).replace(/\\{([^}]+)\\}/g, ':$1')\n}\n\nexport type FetchHandlerOptions<TRouter extends Router<any>> = {\n /**\n * The request need to be handled.\n */\n request: Request\n\n /**\n * Remove the prefix from the request path.\n *\n * @example /orpc\n * @example /api\n */\n prefix?: string\n} & PartialOnUndefinedDeep<{\n /**\n * The context used to handle the request.\n */\n context: TRouter extends Router<infer UContext> ? UContext : never\n}>\n\nexport interface FetchHandler<TRouter extends Router<any>> {\n (options: FetchHandlerOptions<TRouter>): Promise<Response>\n}\n\nfunction toORPCError(e: unknown): ORPCError<any, any> {\n return e instanceof ORPCError\n ? e\n : new ORPCError({\n code: 'INTERNAL_SERVER_ERROR',\n message: 'Internal server error',\n cause: e,\n })\n}\n","// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n","// src/utils/url.ts\nvar splitPath = (path) => {\n const paths = path.split(\"/\");\n if (paths[0] === \"\") {\n paths.shift();\n }\n return paths;\n};\nvar splitRoutingPath = (routePath) => {\n const { groups, path } = extractGroupsFromPath(routePath);\n const paths = splitPath(path);\n return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n const groups = [];\n path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n const mark = `@${index}`;\n groups.push([mark, match]);\n return mark;\n });\n return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = paths.length - 1; j >= 0; j--) {\n if (paths[j].includes(mark)) {\n paths[j] = paths[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n return paths;\n};\nvar patternCache = {};\nvar getPattern = (label) => {\n if (label === \"*\") {\n return \"*\";\n }\n const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n if (match) {\n if (!patternCache[label]) {\n if (match[2]) {\n patternCache[label] = [label, match[1], new RegExp(\"^\" + match[2] + \"$\")];\n } else {\n patternCache[label] = [label, match[1], true];\n }\n }\n return patternCache[label];\n }\n return null;\n};\nvar tryDecodeURI = (str) => {\n try {\n return decodeURI(str);\n } catch {\n return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n try {\n return decodeURI(match);\n } catch {\n return match;\n }\n });\n }\n};\nvar getPath = (request) => {\n const url = request.url;\n const start = url.indexOf(\"/\", 8);\n let i = start;\n for (; i < url.length; i++) {\n const charCode = url.charCodeAt(i);\n if (charCode === 37) {\n const queryIndex = url.indexOf(\"?\", i);\n const path = url.slice(start, queryIndex === -1 ? void 0 : queryIndex);\n return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n } else if (charCode === 63) {\n break;\n }\n }\n return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n const queryIndex = url.indexOf(\"?\", 8);\n return queryIndex === -1 ? \"\" : \"?\" + url.slice(queryIndex + 1);\n};\nvar getPathNoStrict = (request) => {\n const result = getPath(request);\n return result.length > 1 && result[result.length - 1] === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (...paths) => {\n let p = \"\";\n let endsWithSlash = false;\n for (let path of paths) {\n if (p[p.length - 1] === \"/\") {\n p = p.slice(0, -1);\n endsWithSlash = true;\n }\n if (path[0] !== \"/\") {\n path = `/${path}`;\n }\n if (path === \"/\" && endsWithSlash) {\n p = `${p}/`;\n } else if (path !== \"/\") {\n p = `${p}${path}`;\n }\n if (path === \"/\" && p === \"\") {\n p = \"/\";\n }\n }\n return p;\n};\nvar checkOptionalParameter = (path) => {\n if (!path.match(/\\:.+\\?$/)) {\n return null;\n }\n const segments = path.split(\"/\");\n const results = [];\n let basePath = \"\";\n segments.forEach((segment) => {\n if (segment !== \"\" && !/\\:/.test(segment)) {\n basePath += \"/\" + segment;\n } else if (/\\:/.test(segment)) {\n if (/\\?/.test(segment)) {\n if (results.length === 0 && basePath === \"\") {\n results.push(\"/\");\n } else {\n results.push(basePath);\n }\n const optionalSegment = segment.replace(\"?\", \"\");\n basePath += \"/\" + optionalSegment;\n results.push(basePath);\n } else {\n basePath += \"/\" + segment;\n }\n }\n });\n return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar _decodeURI = (value) => {\n if (!/[%+]/.test(value)) {\n return value;\n }\n if (value.indexOf(\"+\") !== -1) {\n value = value.replace(/\\+/g, \" \");\n }\n return /%/.test(value) ? decodeURIComponent_(value) : value;\n};\nvar _getQueryParam = (url, key, multiple) => {\n let encoded;\n if (!multiple && key && !/[%+]/.test(key)) {\n let keyIndex2 = url.indexOf(`?${key}`, 8);\n if (keyIndex2 === -1) {\n keyIndex2 = url.indexOf(`&${key}`, 8);\n }\n while (keyIndex2 !== -1) {\n const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n if (trailingKeyCode === 61) {\n const valueIndex = keyIndex2 + key.length + 2;\n const endIndex = url.indexOf(\"&\", valueIndex);\n return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n return \"\";\n }\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n encoded = /[%+]/.test(url);\n if (!encoded) {\n return void 0;\n }\n }\n const results = {};\n encoded ??= /[%+]/.test(url);\n let keyIndex = url.indexOf(\"?\", 8);\n while (keyIndex !== -1) {\n const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n let valueIndex = url.indexOf(\"=\", keyIndex);\n if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n valueIndex = -1;\n }\n let name = url.slice(\n keyIndex + 1,\n valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n );\n if (encoded) {\n name = _decodeURI(name);\n }\n keyIndex = nextKeyIndex;\n if (name === \"\") {\n continue;\n }\n let value;\n if (valueIndex === -1) {\n value = \"\";\n } else {\n value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n if (encoded) {\n value = _decodeURI(value);\n }\n }\n if (multiple) {\n if (!(results[name] && Array.isArray(results[name]))) {\n results[name] = [];\n }\n ;\n results[name].push(value);\n } else {\n results[name] ??= value;\n }\n }\n return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n checkOptionalParameter,\n decodeURIComponent_,\n getPath,\n getPathNoStrict,\n getPattern,\n getQueryParam,\n getQueryParams,\n getQueryStrings,\n mergePath,\n splitPath,\n splitRoutingPath\n};\n","// src/router/linear-router/router.ts\nimport { METHOD_NAME_ALL, UnsupportedPathError } from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar splitPathRe = /\\/(:\\w+(?:{(?:(?:{[\\d,]+})|[^}])+})?)|\\/[^\\/\\?]+|(\\?)/g;\nvar splitByStarRe = /\\*/;\nvar LinearRouter = class {\n name = \"LinearRouter\";\n routes = [];\n add(method, path, handler) {\n ;\n (checkOptionalParameter(path) || [path]).forEach((p) => {\n this.routes.push([method, p, handler]);\n });\n }\n match(method, path) {\n const handlers = [];\n ROUTES_LOOP:\n for (let i = 0, len = this.routes.length; i < len; i++) {\n const [routeMethod, routePath, handler] = this.routes[i];\n if (routeMethod !== method && routeMethod !== METHOD_NAME_ALL) {\n continue;\n }\n if (routePath === \"*\" || routePath === \"/*\") {\n handlers.push([handler, emptyParams]);\n continue;\n }\n const hasStar = routePath.indexOf(\"*\") !== -1;\n const hasLabel = routePath.indexOf(\":\") !== -1;\n if (!hasStar && !hasLabel) {\n if (routePath === path || routePath + \"/\" === path) {\n handlers.push([handler, emptyParams]);\n }\n } else if (hasStar && !hasLabel) {\n const endsWithStar = routePath.charCodeAt(routePath.length - 1) === 42;\n const parts = (endsWithStar ? routePath.slice(0, -2) : routePath).split(splitByStarRe);\n const lastIndex = parts.length - 1;\n for (let j = 0, pos = 0, len2 = parts.length; j < len2; j++) {\n const part = parts[j];\n const index = path.indexOf(part, pos);\n if (index !== pos) {\n continue ROUTES_LOOP;\n }\n pos += part.length;\n if (j === lastIndex) {\n if (!endsWithStar && pos !== path.length && !(pos === path.length - 1 && path.charCodeAt(pos) === 47)) {\n continue ROUTES_LOOP;\n }\n } else {\n const index2 = path.indexOf(\"/\", pos);\n if (index2 === -1) {\n continue ROUTES_LOOP;\n }\n pos = index2;\n }\n }\n handlers.push([handler, emptyParams]);\n } else if (hasLabel && !hasStar) {\n const params = /* @__PURE__ */ Object.create(null);\n const parts = routePath.match(splitPathRe);\n const lastIndex = parts.length - 1;\n for (let j = 0, pos = 0, len2 = parts.length; j < len2; j++) {\n if (pos === -1 || pos >= path.length) {\n continue ROUTES_LOOP;\n }\n const part = parts[j];\n if (part.charCodeAt(1) === 58) {\n let name = part.slice(2);\n let value;\n if (name.charCodeAt(name.length - 1) === 125) {\n const openBracePos = name.indexOf(\"{\");\n const pattern = name.slice(openBracePos + 1, -1);\n const restPath = path.slice(pos + 1);\n const match = new RegExp(pattern, \"d\").exec(restPath);\n if (!match || match.indices[0][0] !== 0 || match.indices[0][1] === 0) {\n continue ROUTES_LOOP;\n }\n name = name.slice(0, openBracePos);\n value = restPath.slice(...match.indices[0]);\n pos += match.indices[0][1] + 1;\n } else {\n let endValuePos = path.indexOf(\"/\", pos + 1);\n if (endValuePos === -1) {\n if (pos + 1 === path.length) {\n continue ROUTES_LOOP;\n }\n endValuePos = path.length;\n }\n value = path.slice(pos + 1, endValuePos);\n pos = endValuePos;\n }\n params[name] ||= value;\n } else {\n const index = path.indexOf(part, pos);\n if (index !== pos) {\n continue ROUTES_LOOP;\n }\n pos += part.length;\n }\n if (j === lastIndex) {\n if (pos !== path.length && !(pos === path.length - 1 && path.charCodeAt(pos) === 47)) {\n continue ROUTES_LOOP;\n }\n }\n }\n handlers.push([handler, params]);\n } else if (hasLabel && hasStar) {\n throw new UnsupportedPathError();\n }\n }\n return [handlers];\n }\n};\nexport {\n LinearRouter\n};\n","// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class {\n index;\n varIndex;\n children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.children[regexpStr];\n if (!node) {\n if (Object.keys(this.children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.children[regexpStr] = new Node();\n if (name !== \"\") {\n node.varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.varIndex]);\n }\n } else {\n node = this.children[token];\n if (!node) {\n if (Object.keys(this.children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.children[token] = new Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.children[k];\n return (typeof c.varIndex === \"number\" ? `(${k})@${c.varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.index === \"number\") {\n strList.unshift(`#${this.index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n","// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n context = { varIndex: 0 };\n root = new Node();\n insert(path, index, pathErrorCheckOnly) {\n const paramAssoc = [];\n const groups = [];\n for (let i = 0; ; ) {\n let replaced = false;\n path = path.replace(/\\{[^}]+\\}/g, (m) => {\n const mark = `@\\\\${i}`;\n groups[i] = [mark, m];\n i++;\n replaced = true;\n return mark;\n });\n if (!replaced) {\n break;\n }\n }\n const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = tokens.length - 1; j >= 0; j--) {\n if (tokens[j].indexOf(mark) !== -1) {\n tokens[j] = tokens[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n this.root.insert(tokens, index, paramAssoc, this.context, pathErrorCheckOnly);\n return paramAssoc;\n }\n buildRegExp() {\n let regexp = this.root.buildRegExpStr();\n if (regexp === \"\") {\n return [/^$/, [], []];\n }\n let captureIndex = 0;\n const indexReplacementMap = [];\n const paramReplacementMap = [];\n regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n if (typeof handlerIndex !== \"undefined\") {\n indexReplacementMap[++captureIndex] = Number(handlerIndex);\n return \"$()\";\n }\n if (typeof paramIndex !== \"undefined\") {\n paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n return \"\";\n }\n return \"\";\n });\n return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n }\n};\nexport {\n Trie\n};\n","// src/router/reg-exp-router/router.ts\nimport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHOD_NAME_ALL,\n UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar emptyParam = [];\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n return wildcardRegExpCache[path] ??= new RegExp(\n path === \"*\" ? \"\" : `^${path.replace(\n /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n )}$`\n );\n}\nfunction clearWildcardRegExpCache() {\n wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n const trie = new Trie();\n const handlerData = [];\n if (routes.length === 0) {\n return nullMatcher;\n }\n const routesWithStaticPathFlag = routes.map(\n (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n ).sort(\n ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n );\n const staticMap = /* @__PURE__ */ Object.create(null);\n for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n if (pathErrorCheckOnly) {\n staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n } else {\n j++;\n }\n let paramAssoc;\n try {\n paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n } catch (e) {\n throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n }\n if (pathErrorCheckOnly) {\n continue;\n }\n handlerData[j] = handlers.map(([h, paramCount]) => {\n const paramIndexMap = /* @__PURE__ */ Object.create(null);\n paramCount -= 1;\n for (; paramCount >= 0; paramCount--) {\n const [key, value] = paramAssoc[paramCount];\n paramIndexMap[key] = value;\n }\n return [h, paramIndexMap];\n });\n }\n const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n for (let i = 0, len = handlerData.length; i < len; i++) {\n for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n const map = handlerData[i][j]?.[1];\n if (!map) {\n continue;\n }\n const keys = Object.keys(map);\n for (let k = 0, len3 = keys.length; k < len3; k++) {\n map[keys[k]] = paramReplacementMap[map[keys[k]]];\n }\n }\n }\n const handlerMap = [];\n for (const i in indexReplacementMap) {\n handlerMap[i] = handlerData[indexReplacementMap[i]];\n }\n return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n if (!middleware) {\n return void 0;\n }\n for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n if (buildWildcardRegExp(k).test(path)) {\n return [...middleware[k]];\n }\n }\n return void 0;\n}\nvar RegExpRouter = class {\n name = \"RegExpRouter\";\n middleware;\n routes;\n constructor() {\n this.middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n }\n add(method, path, handler) {\n const { middleware, routes } = this;\n if (!middleware || !routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n if (!middleware[method]) {\n ;\n [middleware, routes].forEach((handlerMap) => {\n handlerMap[method] = /* @__PURE__ */ Object.create(null);\n Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n });\n });\n }\n if (path === \"/*\") {\n path = \"*\";\n }\n const paramCount = (path.match(/\\/:/g) || []).length;\n if (/\\*$/.test(path)) {\n const re = buildWildcardRegExp(path);\n if (method === METHOD_NAME_ALL) {\n Object.keys(middleware).forEach((m) => {\n middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n });\n } else {\n middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n }\n Object.keys(middleware).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(middleware[m]).forEach((p) => {\n re.test(p) && middleware[m][p].push([handler, paramCount]);\n });\n }\n });\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(routes[m]).forEach(\n (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n );\n }\n });\n return;\n }\n const paths = checkOptionalParameter(path) || [path];\n for (let i = 0, len = paths.length; i < len; i++) {\n const path2 = paths[i];\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n routes[m][path2] ||= [\n ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n ];\n routes[m][path2].push([handler, paramCount - len + i + 1]);\n }\n });\n }\n }\n match(method, path) {\n clearWildcardRegExpCache();\n const matchers = this.buildAllMatchers();\n this.match = (method2, path2) => {\n const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n const staticMatch = matcher[2][path2];\n if (staticMatch) {\n return staticMatch;\n }\n const match = path2.match(matcher[0]);\n if (!match) {\n return [[], emptyParam];\n }\n const index = match.indexOf(\"\", 1);\n return [matcher[1][index], match];\n };\n return this.match(method, path);\n }\n buildAllMatchers() {\n const matchers = /* @__PURE__ */ Object.create(null);\n [...Object.keys(this.routes), ...Object.keys(this.middleware)].forEach((method) => {\n matchers[method] ||= this.buildMatcher(method);\n });\n this.middleware = this.routes = void 0;\n return matchers;\n }\n buildMatcher(method) {\n const routes = [];\n let hasOwnRoute = method === METHOD_NAME_ALL;\n [this.middleware, this.routes].forEach((r) => {\n const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n if (ownRoute.length !== 0) {\n hasOwnRoute ||= true;\n routes.push(...ownRoute);\n } else if (method !== METHOD_NAME_ALL) {\n routes.push(\n ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n );\n }\n });\n if (!hasOwnRoute) {\n return null;\n } else {\n return buildMatcherFromPreprocessedRoutes(routes);\n }\n }\n};\nexport {\n RegExpRouter\n};\n"],"mappings":"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","names":["e","error"]}
package/dist/index.js CHANGED
@@ -3,10 +3,9 @@ import {
3
3
  createProcedureCaller,
4
4
  decorateMiddleware,
5
5
  decorateProcedure,
6
- hook,
7
6
  isProcedure,
8
7
  mergeContext
9
- } from "./chunk-ACLC6USM.js";
8
+ } from "./chunk-26DTFWOI.js";
10
9
 
11
10
  // src/builder.ts
12
11
  import {
@@ -115,7 +114,8 @@ var RouterBuilder = class _RouterBuilder {
115
114
  });
116
115
  }
117
116
  tags(...tags) {
118
- if (!tags.length) return this;
117
+ if (!tags.length)
118
+ return this;
119
119
  return new _RouterBuilder({
120
120
  ...this.zz$rb,
121
121
  tags: [...this.zz$rb.tags ?? [], ...tags]
@@ -304,6 +304,8 @@ var Builder = class _Builder {
304
304
  /**
305
305
  * Create ExtendedMiddleware
306
306
  */
307
+ // TODO: TOutput always any, infer not work at all, because TOutput used inside middleware params,
308
+ // solution (maybe): create new generic for .output() method
307
309
  middleware(middleware) {
308
310
  return decorateMiddleware(middleware);
309
311
  }
@@ -327,9 +329,6 @@ var Builder = class _Builder {
327
329
  }
328
330
  };
329
331
 
330
- // src/index.ts
331
- export * from "@orpc/shared/error";
332
-
333
332
  // src/router.ts
334
333
  import {
335
334
  isContractProcedure as isContractProcedure3
@@ -361,7 +360,6 @@ function createRouterCaller(options) {
361
360
  caller[key] = createProcedureCaller({
362
361
  procedure: item,
363
362
  context: options.context,
364
- hooks: options.hooks,
365
363
  path,
366
364
  internal,
367
365
  validate
@@ -370,7 +368,6 @@ function createRouterCaller(options) {
370
368
  caller[key] = createRouterCaller({
371
369
  router: item,
372
370
  context: options.context,
373
- hooks: options.hooks,
374
371
  basePath: path,
375
372
  internal,
376
373
  validate
@@ -381,6 +378,7 @@ function createRouterCaller(options) {
381
378
  }
382
379
 
383
380
  // src/index.ts
381
+ export * from "@orpc/shared/error";
384
382
  var os = new Builder();
385
383
  export {
386
384
  Builder,
@@ -394,7 +392,6 @@ export {
394
392
  createRouterCaller,
395
393
  decorateMiddleware,
396
394
  decorateProcedure,
397
- hook,
398
395
  isProcedure,
399
396
  mergeContext,
400
397
  os,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/builder.ts","../src/procedure-builder.ts","../src/procedure-implementer.ts","../src/router-builder.ts","../src/router-implementer.ts","../src/index.ts","../src/router.ts","../src/router-caller.ts"],"sourcesContent":["import {\n ContractProcedure,\n type ContractRouter,\n type HTTPPath,\n type RouteOptions,\n type Schema,\n type SchemaInput,\n type SchemaOutput,\n isContractProcedure,\n} from '@orpc/contract'\nimport type { IsEqual } from '@orpc/shared'\nimport {\n type DecoratedMiddleware,\n type MapInputMiddleware,\n type Middleware,\n decorateMiddleware,\n} from './middleware'\nimport {\n type DecoratedProcedure,\n type ProcedureHandler,\n decorateProcedure,\n} from './procedure'\nimport { ProcedureBuilder } from './procedure-builder'\nimport { ProcedureImplementer } from './procedure-implementer'\nimport type { HandledRouter, Router } from './router'\nimport { RouterBuilder } from './router-builder'\nimport {\n type ChainedRouterImplementer,\n chainRouterImplementer,\n} from './router-implementer'\nimport type { Context, MergeContext } from './types'\n\nexport class Builder<TContext extends Context, TExtraContext extends Context> {\n constructor(\n public zz$b: {\n middlewares?: Middleware<any, any, any, any>[]\n } = {},\n ) {}\n\n /**\n * Self chainable\n */\n\n context<UContext extends Context>(): IsEqual<UContext, Context> extends true\n ? Builder<TContext, TExtraContext>\n : Builder<UContext, TExtraContext> {\n return this as any\n }\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n unknown,\n unknown\n >,\n ): Builder<TContext, MergeContext<TExtraContext, UExtraContext>>\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n UMappedInput = unknown,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n UMappedInput,\n unknown\n >,\n mapInput: MapInputMiddleware<unknown, UMappedInput>,\n ): Builder<TContext, MergeContext<TExtraContext, UExtraContext>>\n\n use(\n middleware: Middleware<any, any, any, any>,\n mapInput?: MapInputMiddleware<any, any>,\n ): Builder<any, any> {\n const middleware_ = mapInput\n ? decorateMiddleware(middleware).mapInput(mapInput)\n : middleware\n\n return new Builder({\n ...this.zz$b,\n middlewares: [...(this.zz$b.middlewares || []), middleware_],\n })\n }\n\n /**\n * Convert to ContractProcedureBuilder\n */\n\n route(\n opts: RouteOptions,\n ): ProcedureBuilder<TContext, TExtraContext, undefined, undefined> {\n return new ProcedureBuilder({\n middlewares: this.zz$b.middlewares,\n contract: new ContractProcedure({\n ...opts,\n InputSchema: undefined,\n OutputSchema: undefined,\n }),\n })\n }\n\n input<USchema extends Schema = undefined>(\n schema: USchema,\n example?: SchemaInput<USchema>,\n ): ProcedureBuilder<TContext, TExtraContext, USchema, undefined> {\n return new ProcedureBuilder({\n middlewares: this.zz$b.middlewares,\n contract: new ContractProcedure({\n OutputSchema: undefined,\n InputSchema: schema,\n inputExample: example,\n }),\n })\n }\n\n output<USchema extends Schema = undefined>(\n schema: USchema,\n example?: SchemaOutput<USchema>,\n ): ProcedureBuilder<TContext, TExtraContext, undefined, USchema> {\n return new ProcedureBuilder({\n middlewares: this.zz$b.middlewares,\n contract: new ContractProcedure({\n InputSchema: undefined,\n OutputSchema: schema,\n outputExample: example,\n }),\n })\n }\n\n /**\n * Convert to Procedure\n */\n handler<UHandlerOutput = undefined>(\n handler: ProcedureHandler<\n TContext,\n TExtraContext,\n undefined,\n undefined,\n UHandlerOutput\n >,\n ): DecoratedProcedure<\n TContext,\n TExtraContext,\n undefined,\n undefined,\n UHandlerOutput\n > {\n return decorateProcedure({\n zz$p: {\n middlewares: this.zz$b.middlewares,\n contract: new ContractProcedure({\n InputSchema: undefined,\n OutputSchema: undefined,\n }),\n handler,\n },\n })\n }\n\n /**\n * Convert to ProcedureImplementer | RouterBuilder\n */\n\n contract<UContract extends ContractProcedure<any, any> | ContractRouter>(\n contract: UContract,\n ): UContract extends ContractProcedure<\n infer UInputSchema,\n infer UOutputSchema\n >\n ? ProcedureImplementer<TContext, TExtraContext, UInputSchema, UOutputSchema>\n : UContract extends ContractRouter\n ? ChainedRouterImplementer<TContext, UContract, TExtraContext>\n : never {\n if (isContractProcedure(contract)) {\n return new ProcedureImplementer({\n contract,\n middlewares: this.zz$b.middlewares,\n }) as any\n }\n\n return chainRouterImplementer(\n contract as ContractRouter,\n this.zz$b.middlewares,\n ) as any\n }\n\n /**\n * Create ExtendedMiddleware\n */\n\n middleware<UExtraContext extends Context = undefined, TInput = unknown>(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n TInput,\n unknown\n >,\n ): DecoratedMiddleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n TInput,\n unknown\n > {\n return decorateMiddleware(middleware)\n }\n\n prefix(prefix: HTTPPath): RouterBuilder<TContext, TExtraContext> {\n return new RouterBuilder({\n ...this.zz$b,\n prefix,\n })\n }\n\n tags(...tags: string[]): RouterBuilder<TContext, TExtraContext> {\n return new RouterBuilder({\n ...this.zz$b,\n tags,\n })\n }\n\n /**\n * Create DecoratedRouter\n */\n router<URouter extends Router<TContext>>(\n router: URouter,\n ): HandledRouter<URouter> {\n return new RouterBuilder<TContext, TExtraContext>(this.zz$b).router(router)\n }\n}\n","import {\n type ContractProcedure,\n DecoratedContractProcedure,\n type RouteOptions,\n type Schema,\n type SchemaInput,\n type SchemaOutput,\n} from '@orpc/contract'\nimport type { MapInputMiddleware, Middleware } from './middleware'\nimport {\n type DecoratedProcedure,\n type ProcedureHandler,\n decorateProcedure,\n} from './procedure'\nimport { ProcedureImplementer } from './procedure-implementer'\nimport type { Context, MergeContext } from './types'\n\nexport class ProcedureBuilder<\n TContext extends Context,\n TExtraContext extends Context,\n TInputSchema extends Schema,\n TOutputSchema extends Schema,\n> {\n constructor(\n public zz$pb: {\n contract: ContractProcedure<TInputSchema, TOutputSchema>\n middlewares?: Middleware<any, any, any, any>[]\n },\n ) {}\n\n /**\n * Self chainable\n */\n\n route(\n opts: RouteOptions,\n ): ProcedureBuilder<TContext, TExtraContext, TInputSchema, TOutputSchema> {\n return new ProcedureBuilder({\n ...this.zz$pb,\n contract: DecoratedContractProcedure.decorate(this.zz$pb.contract).route(\n opts,\n ),\n })\n }\n\n input<USchema extends Schema = undefined>(\n schema: USchema,\n example?: SchemaInput<USchema>,\n ): ProcedureBuilder<TContext, TExtraContext, USchema, TOutputSchema> {\n return new ProcedureBuilder({\n ...this.zz$pb,\n contract: DecoratedContractProcedure.decorate(this.zz$pb.contract).input(\n schema,\n example,\n ),\n })\n }\n\n output<USchema extends Schema = undefined>(\n schema: USchema,\n example?: SchemaOutput<USchema>,\n ): ProcedureBuilder<TContext, TExtraContext, TInputSchema, USchema> {\n return new ProcedureBuilder({\n ...this.zz$pb,\n contract: DecoratedContractProcedure.decorate(this.zz$pb.contract).output(\n schema,\n example,\n ),\n })\n }\n\n /**\n * Convert to ProcedureBuilder\n */\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n SchemaOutput<TInputSchema>,\n SchemaOutput<TOutputSchema>\n >,\n ): ProcedureImplementer<\n TContext,\n MergeContext<TExtraContext, UExtraContext>,\n TInputSchema,\n TOutputSchema\n >\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n UMappedInput = unknown,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n UMappedInput,\n SchemaOutput<TOutputSchema>\n >,\n mapInput: MapInputMiddleware<SchemaOutput<TInputSchema>, UMappedInput>,\n ): ProcedureImplementer<\n TContext,\n MergeContext<TExtraContext, UExtraContext>,\n TInputSchema,\n TOutputSchema\n >\n\n use(\n middleware: Middleware<any, any, any, any>,\n mapInput?: MapInputMiddleware<any, any>,\n ): ProcedureImplementer<any, any, any, any> {\n if (!mapInput) {\n return new ProcedureImplementer({\n contract: this.zz$pb.contract,\n middlewares: this.zz$pb.middlewares,\n }).use(middleware)\n }\n\n return new ProcedureImplementer({\n contract: this.zz$pb.contract,\n middlewares: this.zz$pb.middlewares,\n }).use(middleware, mapInput)\n }\n\n /**\n * Convert to Procedure\n */\n\n handler<UHandlerOutput extends SchemaOutput<TOutputSchema>>(\n handler: ProcedureHandler<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n UHandlerOutput\n >,\n ): DecoratedProcedure<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n UHandlerOutput\n > {\n return decorateProcedure({\n zz$p: {\n middlewares: this.zz$pb.middlewares,\n contract: this.zz$pb.contract,\n handler,\n },\n })\n }\n}\n","import type { ContractProcedure, SchemaOutput } from '@orpc/contract'\nimport type { Schema } from '@orpc/contract'\nimport {\n type MapInputMiddleware,\n type Middleware,\n decorateMiddleware,\n} from './middleware'\nimport {\n type DecoratedProcedure,\n type ProcedureHandler,\n decorateProcedure,\n} from './procedure'\nimport type { Context, MergeContext } from './types'\n\nexport class ProcedureImplementer<\n TContext extends Context,\n TExtraContext extends Context,\n TInputSchema extends Schema,\n TOutputSchema extends Schema,\n> {\n constructor(\n public zz$pi: {\n contract: ContractProcedure<TInputSchema, TOutputSchema>\n middlewares?: Middleware<any, any, any, any>[]\n },\n ) {}\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n SchemaOutput<TInputSchema>,\n SchemaOutput<TOutputSchema>\n >,\n ): ProcedureImplementer<\n TContext,\n MergeContext<TExtraContext, UExtraContext>,\n TInputSchema,\n TOutputSchema\n >\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n UMappedInput = unknown,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n UMappedInput,\n SchemaOutput<TOutputSchema>\n >,\n mapInput: MapInputMiddleware<SchemaOutput<TInputSchema>, UMappedInput>,\n ): ProcedureImplementer<\n TContext,\n MergeContext<TExtraContext, UExtraContext>,\n TInputSchema,\n TOutputSchema\n >\n\n use(\n middleware: Middleware<any, any, any, any>,\n mapInput?: MapInputMiddleware<any, any>,\n ): ProcedureImplementer<any, any, any, any> {\n const middleware_ = mapInput\n ? decorateMiddleware(middleware).mapInput(mapInput)\n : middleware\n\n return new ProcedureImplementer({\n ...this.zz$pi,\n middlewares: [...(this.zz$pi.middlewares ?? []), middleware_],\n })\n }\n\n handler<UHandlerOutput extends SchemaOutput<TOutputSchema>>(\n handler: ProcedureHandler<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n UHandlerOutput\n >,\n ): DecoratedProcedure<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n UHandlerOutput\n > {\n return decorateProcedure({\n zz$p: {\n middlewares: this.zz$pi.middlewares,\n contract: this.zz$pi.contract,\n handler,\n },\n })\n }\n}\n","import { DecoratedContractProcedure, type HTTPPath } from '@orpc/contract'\nimport {\n type MapInputMiddleware,\n type Middleware,\n decorateMiddleware,\n} from './middleware'\nimport { decorateProcedure, isProcedure } from './procedure'\nimport type { HandledRouter, Router } from './router'\nimport type { Context, MergeContext } from './types'\n\nexport class RouterBuilder<\n TContext extends Context,\n TExtraContext extends Context,\n> {\n constructor(\n public zz$rb: {\n prefix?: HTTPPath\n tags?: string[]\n middlewares?: Middleware<any, any, any, any>[]\n },\n ) {}\n\n prefix(prefix: HTTPPath): RouterBuilder<TContext, TExtraContext> {\n return new RouterBuilder({\n ...this.zz$rb,\n prefix: `${this.zz$rb.prefix ?? ''}${prefix}`,\n })\n }\n\n tags(...tags: string[]): RouterBuilder<TContext, TExtraContext> {\n if (!tags.length) return this\n\n return new RouterBuilder({\n ...this.zz$rb,\n tags: [...(this.zz$rb.tags ?? []), ...tags],\n })\n }\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n unknown,\n unknown\n >,\n ): RouterBuilder<TContext, MergeContext<TExtraContext, UExtraContext>>\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n UMappedInput = unknown,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n UMappedInput,\n unknown\n >,\n mapInput: MapInputMiddleware<unknown, UMappedInput>,\n ): RouterBuilder<TContext, MergeContext<TExtraContext, UExtraContext>>\n\n use(\n middleware: Middleware<any, any, any, any>,\n mapInput?: MapInputMiddleware<any, any>,\n ): RouterBuilder<any, any> {\n const middleware_ = mapInput\n ? decorateMiddleware(middleware).mapInput(mapInput)\n : middleware\n\n return new RouterBuilder({\n ...this.zz$rb,\n middlewares: [...(this.zz$rb.middlewares || []), middleware_],\n })\n }\n\n router<URouter extends Router<TContext>>(\n router: URouter,\n ): HandledRouter<URouter> {\n const handled: Router<TContext> = {}\n\n for (const key in router) {\n const item = router[key]\n\n if (isProcedure(item)) {\n const builderMiddlewares = this.zz$rb.middlewares ?? []\n const itemMiddlewares = item.zz$p.middlewares ?? []\n\n const middlewares = [\n ...builderMiddlewares,\n ...itemMiddlewares.filter(\n (item) => !builderMiddlewares.includes(item),\n ),\n ]\n\n const contract = DecoratedContractProcedure.decorate(\n item.zz$p.contract,\n ).addTags(...(this.zz$rb.tags ?? []))\n\n handled[key] = decorateProcedure({\n zz$p: {\n ...item.zz$p,\n contract: this.zz$rb.prefix\n ? contract.prefix(this.zz$rb.prefix)\n : contract,\n middlewares,\n },\n })\n } else {\n handled[key] = this.router(item as any)\n }\n }\n\n return handled as HandledRouter<URouter>\n }\n}\n","import {\n type ContractProcedure,\n type ContractRouter,\n isContractProcedure,\n} from '@orpc/contract'\nimport type { Middleware } from './middleware'\nimport { isProcedure } from './procedure'\nimport { ProcedureImplementer } from './procedure-implementer'\nimport type { RouterWithContract } from './router'\nimport type { Context } from './types'\n\nexport class RouterImplementer<\n TContext extends Context,\n TContract extends ContractRouter,\n> {\n constructor(\n public zz$ri: {\n contract: TContract\n },\n ) {}\n\n router(\n router: RouterWithContract<TContext, TContract>,\n ): RouterWithContract<TContext, TContract> {\n assertRouterImplementation(this.zz$ri.contract, router)\n\n return router\n }\n}\n\nexport type ChainedRouterImplementer<\n TContext extends Context,\n TContract extends ContractRouter,\n TExtraContext extends Context,\n> = {\n [K in keyof TContract]: TContract[K] extends ContractProcedure<\n infer UInputSchema,\n infer UOutputSchema\n >\n ? ProcedureImplementer<TContext, TExtraContext, UInputSchema, UOutputSchema>\n : TContract[K] extends ContractRouter\n ? ChainedRouterImplementer<TContext, TContract[K], TExtraContext>\n : never\n} & RouterImplementer<TContext, TContract>\n\nexport function chainRouterImplementer<\n TContext extends Context,\n TContract extends ContractRouter,\n TExtraContext extends Context,\n>(\n contract: TContract,\n middlewares?: Middleware<any, any, any, any>[],\n): ChainedRouterImplementer<TContext, TContract, TExtraContext> {\n const result: Record<string, unknown> = {}\n\n for (const key in contract) {\n const item = contract[key]\n\n if (isContractProcedure(item)) {\n result[key] = new ProcedureImplementer({\n contract: item,\n middlewares,\n })\n } else {\n result[key] = chainRouterImplementer(item as ContractRouter, middlewares)\n }\n }\n\n const implementer = new RouterImplementer({ contract })\n\n return Object.assign(implementer, result) as any\n}\n\nexport function assertRouterImplementation(\n contract: ContractRouter,\n router: RouterWithContract<any, any>,\n path: string[] = [],\n): void {\n for (const key in contract) {\n const currentPath = [...path, key]\n const contractItem = contract[key]\n const routerItem = router[key]\n\n if (!routerItem) {\n throw new Error(\n `Missing implementation for procedure at [${currentPath.join('.')}]`,\n )\n }\n\n if (isContractProcedure(contractItem)) {\n if (isProcedure(routerItem)) {\n if (routerItem.zz$p.contract !== contractItem) {\n throw new Error(\n `Mismatch implementation for procedure at [${currentPath.join('.')}]`,\n )\n }\n } else {\n throw new Error(\n `Mismatch implementation for procedure at [${currentPath.join('.')}]`,\n )\n }\n } else {\n assertRouterImplementation(\n contractItem as ContractRouter,\n routerItem as any,\n currentPath,\n )\n }\n }\n}\n","import { Builder } from './builder'\n\nexport * from './builder'\nexport * from '@orpc/shared/error'\nexport * from './middleware'\nexport * from './procedure'\nexport * from './procedure-caller'\nexport * from './procedure-builder'\nexport * from './procedure-implementer'\nexport * from './router'\nexport * from './router-caller'\nexport * from './router-implementer'\nexport * from './types'\nexport * from './utils'\n\nexport const os = new Builder<undefined | Record<string, unknown>, undefined>()\n","import {\n type ContractProcedure,\n type ContractRouter,\n isContractProcedure,\n} from '@orpc/contract'\nimport {\n type DecoratedProcedure,\n type Procedure,\n isProcedure,\n} from './procedure'\nimport type { Context } from './types'\n\nexport interface Router<TContext extends Context> {\n [k: string]: Procedure<TContext, any, any, any, any> | Router<TContext>\n}\n\nexport type HandledRouter<TRouter extends Router<any>> = {\n [K in keyof TRouter]: TRouter[K] extends Procedure<\n infer UContext,\n infer UExtraContext,\n infer UInputSchema,\n infer UOutputSchema,\n infer UHandlerOutput\n >\n ? DecoratedProcedure<\n UContext,\n UExtraContext,\n UInputSchema,\n UOutputSchema,\n UHandlerOutput\n >\n : TRouter[K] extends Router<any>\n ? HandledRouter<TRouter[K]>\n : never\n}\n\nexport type RouterWithContract<\n TContext extends Context,\n TContract extends ContractRouter,\n> = {\n [K in keyof TContract]: TContract[K] extends ContractProcedure<\n infer UInputSchema,\n infer UOutputSchema\n >\n ? Procedure<TContext, any, UInputSchema, UOutputSchema, any>\n : TContract[K] extends ContractRouter\n ? RouterWithContract<TContext, TContract[K]>\n : never\n}\n\nexport function toContractRouter(\n router: ContractRouter | Router<any>,\n): ContractRouter {\n const contract: ContractRouter = {}\n\n for (const key in router) {\n const item = router[key]\n\n if (isContractProcedure(item)) {\n contract[key] = item\n } else if (isProcedure(item)) {\n contract[key] = item.zz$p.contract\n } else {\n contract[key] = toContractRouter(item as any)\n }\n }\n\n return contract\n}\n","import type {} from '@orpc/contract'\nimport { type Procedure, isProcedure } from './procedure'\nimport { type ProcedureCaller, createProcedureCaller } from './procedure-caller'\nimport type { Router } from './router'\nimport type { Meta, Promisable } from './types'\nimport {} from './utils'\n\nexport interface CreateRouterCallerOptions<\n TRouter extends Router<any>,\n TValidate extends boolean,\n> {\n router: TRouter\n\n /**\n * The context used when calling the procedure.\n */\n context: TRouter extends Router<infer UContext> ? UContext : never\n\n /**\n * Helpful hooks to do some logics on specific time.\n */\n hooks?: (\n context: TRouter extends Router<infer UContext> ? UContext : never,\n meta: Meta<unknown>,\n ) => Promisable<void>\n\n /**\n * This is helpful for logging and analytics.\n */\n basePath?: string[]\n\n /**\n * This flag helpful when you want bypass some logics not necessary to internal server calls.\n *\n * @default true\n */\n internal?: boolean\n\n /**\n * Indicate whether validate input and output.\n *\n * @default true\n */\n validate?: TValidate\n}\n\nexport type RouterCaller<\n TRouter extends Router<any>,\n TValidate extends boolean,\n> = {\n [K in keyof TRouter]: TRouter[K] extends Procedure<any, any, any, any, any>\n ? ProcedureCaller<TRouter[K], TValidate>\n : TRouter[K] extends Router<any>\n ? RouterCaller<TRouter[K], TValidate>\n : never\n}\n\nexport function createRouterCaller<\n TRouter extends Router<any>,\n TValidate extends boolean = true,\n>(\n options: CreateRouterCallerOptions<TRouter, TValidate>,\n): RouterCaller<TRouter, TValidate> {\n const internal = options.internal ?? true\n const validate = options.validate ?? true\n\n const caller: Record<string, unknown> = {}\n\n for (const key in options.router) {\n const path = [...(options.basePath ?? []), key]\n const item = options.router[key]\n\n if (isProcedure(item)) {\n caller[key] = createProcedureCaller({\n procedure: item,\n context: options.context as any,\n hooks: options.hooks as any,\n path: path,\n internal,\n validate,\n })\n } else {\n caller[key] = createRouterCaller({\n router: item as any,\n context: options.context,\n hooks: options.hooks,\n basePath: path,\n internal,\n validate,\n })\n }\n }\n\n return caller as RouterCaller<TRouter, TValidate>\n}\n"],"mappings":"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","names":["isContractProcedure","DecoratedContractProcedure","item","DecoratedContractProcedure","isContractProcedure","isContractProcedure","isContractProcedure"]}
1
+ {"version":3,"sources":["../src/builder.ts","../src/procedure-builder.ts","../src/procedure-implementer.ts","../src/router-builder.ts","../src/router-implementer.ts","../src/router.ts","../src/router-caller.ts","../src/index.ts"],"sourcesContent":["import type { IsEqual } from '@orpc/shared'\nimport type { HandledRouter, Router } from './router'\nimport type { Context, MergeContext } from './types'\nimport {\n ContractProcedure,\n type ContractRouter,\n type HTTPPath,\n isContractProcedure,\n type RouteOptions,\n type Schema,\n type SchemaInput,\n type SchemaOutput,\n} from '@orpc/contract'\nimport {\n type DecoratedMiddleware,\n decorateMiddleware,\n type MapInputMiddleware,\n type Middleware,\n} from './middleware'\nimport {\n type DecoratedProcedure,\n decorateProcedure,\n type ProcedureHandler,\n} from './procedure'\nimport { ProcedureBuilder } from './procedure-builder'\nimport { ProcedureImplementer } from './procedure-implementer'\nimport { RouterBuilder } from './router-builder'\nimport {\n type ChainedRouterImplementer,\n chainRouterImplementer,\n} from './router-implementer'\n\nexport class Builder<TContext extends Context, TExtraContext extends Context> {\n constructor(\n public zz$b: {\n middlewares?: Middleware<any, any, any, any>[]\n } = {},\n ) {}\n\n /**\n * Self chainable\n */\n\n context<UContext extends Context>(): IsEqual<UContext, Context> extends true\n ? Builder<TContext, TExtraContext>\n : Builder<UContext, TExtraContext> {\n return this as any\n }\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n unknown,\n unknown\n >,\n ): Builder<TContext, MergeContext<TExtraContext, UExtraContext>>\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n UMappedInput = unknown,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n UMappedInput,\n unknown\n >,\n mapInput: MapInputMiddleware<unknown, UMappedInput>,\n ): Builder<TContext, MergeContext<TExtraContext, UExtraContext>>\n\n use(\n middleware: Middleware<any, any, any, any>,\n mapInput?: MapInputMiddleware<any, any>,\n ): Builder<any, any> {\n const middleware_ = mapInput\n ? decorateMiddleware(middleware).mapInput(mapInput)\n : middleware\n\n return new Builder({\n ...this.zz$b,\n middlewares: [...(this.zz$b.middlewares || []), middleware_],\n })\n }\n\n /**\n * Convert to ContractProcedureBuilder\n */\n\n route(\n opts: RouteOptions,\n ): ProcedureBuilder<TContext, TExtraContext, undefined, undefined> {\n return new ProcedureBuilder({\n middlewares: this.zz$b.middlewares,\n contract: new ContractProcedure({\n ...opts,\n InputSchema: undefined,\n OutputSchema: undefined,\n }),\n })\n }\n\n input<USchema extends Schema = undefined>(\n schema: USchema,\n example?: SchemaInput<USchema>,\n ): ProcedureBuilder<TContext, TExtraContext, USchema, undefined> {\n return new ProcedureBuilder({\n middlewares: this.zz$b.middlewares,\n contract: new ContractProcedure({\n OutputSchema: undefined,\n InputSchema: schema,\n inputExample: example,\n }),\n })\n }\n\n output<USchema extends Schema = undefined>(\n schema: USchema,\n example?: SchemaOutput<USchema>,\n ): ProcedureBuilder<TContext, TExtraContext, undefined, USchema> {\n return new ProcedureBuilder({\n middlewares: this.zz$b.middlewares,\n contract: new ContractProcedure({\n InputSchema: undefined,\n OutputSchema: schema,\n outputExample: example,\n }),\n })\n }\n\n /**\n * Convert to Procedure\n */\n handler<UHandlerOutput = undefined>(\n handler: ProcedureHandler<\n TContext,\n TExtraContext,\n undefined,\n undefined,\n UHandlerOutput\n >,\n ): DecoratedProcedure<\n TContext,\n TExtraContext,\n undefined,\n undefined,\n UHandlerOutput\n > {\n return decorateProcedure({\n zz$p: {\n middlewares: this.zz$b.middlewares,\n contract: new ContractProcedure({\n InputSchema: undefined,\n OutputSchema: undefined,\n }),\n handler,\n },\n })\n }\n\n /**\n * Convert to ProcedureImplementer | RouterBuilder\n */\n\n contract<UContract extends ContractProcedure<any, any> | ContractRouter>(\n contract: UContract,\n ): UContract extends ContractProcedure<\n infer UInputSchema,\n infer UOutputSchema\n >\n ? ProcedureImplementer<TContext, TExtraContext, UInputSchema, UOutputSchema>\n : UContract extends ContractRouter\n ? ChainedRouterImplementer<TContext, UContract, TExtraContext>\n : never {\n if (isContractProcedure(contract)) {\n return new ProcedureImplementer({\n contract,\n middlewares: this.zz$b.middlewares,\n }) as any\n }\n\n return chainRouterImplementer(\n contract as ContractRouter,\n this.zz$b.middlewares,\n ) as any\n }\n\n /**\n * Create ExtendedMiddleware\n */\n\n // TODO: TOutput always any, infer not work at all, because TOutput used inside middleware params,\n // solution (maybe): create new generic for .output() method\n middleware<UExtraContext extends Context = undefined, TInput = unknown, TOutput = any>(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n TInput,\n TOutput\n >,\n ): DecoratedMiddleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n TInput,\n TOutput\n > {\n return decorateMiddleware(middleware)\n }\n\n prefix(prefix: HTTPPath): RouterBuilder<TContext, TExtraContext> {\n return new RouterBuilder({\n ...this.zz$b,\n prefix,\n })\n }\n\n tags(...tags: string[]): RouterBuilder<TContext, TExtraContext> {\n return new RouterBuilder({\n ...this.zz$b,\n tags,\n })\n }\n\n /**\n * Create DecoratedRouter\n */\n router<URouter extends Router<TContext>>(\n router: URouter,\n ): HandledRouter<URouter> {\n return new RouterBuilder<TContext, TExtraContext>(this.zz$b).router(router)\n }\n}\n","import type { MapInputMiddleware, Middleware } from './middleware'\nimport type { Context, MergeContext } from './types'\nimport {\n type ContractProcedure,\n DecoratedContractProcedure,\n type RouteOptions,\n type Schema,\n type SchemaInput,\n type SchemaOutput,\n} from '@orpc/contract'\nimport {\n type DecoratedProcedure,\n decorateProcedure,\n type ProcedureHandler,\n} from './procedure'\nimport { ProcedureImplementer } from './procedure-implementer'\n\nexport class ProcedureBuilder<\n TContext extends Context,\n TExtraContext extends Context,\n TInputSchema extends Schema,\n TOutputSchema extends Schema,\n> {\n constructor(\n public zz$pb: {\n contract: ContractProcedure<TInputSchema, TOutputSchema>\n middlewares?: Middleware<any, any, any, any>[]\n },\n ) {}\n\n /**\n * Self chainable\n */\n\n route(\n opts: RouteOptions,\n ): ProcedureBuilder<TContext, TExtraContext, TInputSchema, TOutputSchema> {\n return new ProcedureBuilder({\n ...this.zz$pb,\n contract: DecoratedContractProcedure.decorate(this.zz$pb.contract).route(\n opts,\n ),\n })\n }\n\n input<USchema extends Schema = undefined>(\n schema: USchema,\n example?: SchemaInput<USchema>,\n ): ProcedureBuilder<TContext, TExtraContext, USchema, TOutputSchema> {\n return new ProcedureBuilder({\n ...this.zz$pb,\n contract: DecoratedContractProcedure.decorate(this.zz$pb.contract).input(\n schema,\n example,\n ),\n })\n }\n\n output<USchema extends Schema = undefined>(\n schema: USchema,\n example?: SchemaOutput<USchema>,\n ): ProcedureBuilder<TContext, TExtraContext, TInputSchema, USchema> {\n return new ProcedureBuilder({\n ...this.zz$pb,\n contract: DecoratedContractProcedure.decorate(this.zz$pb.contract).output(\n schema,\n example,\n ),\n })\n }\n\n /**\n * Convert to ProcedureBuilder\n */\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n SchemaOutput<TInputSchema>,\n SchemaInput<TOutputSchema>\n >,\n ): ProcedureImplementer<\n TContext,\n MergeContext<TExtraContext, UExtraContext>,\n TInputSchema,\n TOutputSchema\n >\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n UMappedInput = unknown,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n UMappedInput,\n SchemaInput<TOutputSchema>\n >,\n mapInput: MapInputMiddleware<SchemaOutput<TInputSchema>, UMappedInput>,\n ): ProcedureImplementer<\n TContext,\n MergeContext<TExtraContext, UExtraContext>,\n TInputSchema,\n TOutputSchema\n >\n\n use(\n middleware: Middleware<any, any, any, any>,\n mapInput?: MapInputMiddleware<any, any>,\n ): ProcedureImplementer<any, any, any, any> {\n if (!mapInput) {\n return new ProcedureImplementer({\n contract: this.zz$pb.contract,\n middlewares: this.zz$pb.middlewares,\n }).use(middleware)\n }\n\n return new ProcedureImplementer({\n contract: this.zz$pb.contract,\n middlewares: this.zz$pb.middlewares,\n }).use(middleware, mapInput)\n }\n\n /**\n * Convert to Procedure\n */\n\n handler<UHandlerOutput extends SchemaOutput<TOutputSchema>>(\n handler: ProcedureHandler<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n UHandlerOutput\n >,\n ): DecoratedProcedure<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n UHandlerOutput\n > {\n return decorateProcedure({\n zz$p: {\n middlewares: this.zz$pb.middlewares,\n contract: this.zz$pb.contract,\n handler,\n },\n })\n }\n}\n","import type { ContractProcedure, Schema, SchemaInput, SchemaOutput } from '@orpc/contract'\nimport type { Context, MergeContext } from './types'\nimport {\n decorateMiddleware,\n type MapInputMiddleware,\n type Middleware,\n} from './middleware'\nimport {\n type DecoratedProcedure,\n decorateProcedure,\n type ProcedureHandler,\n} from './procedure'\n\nexport class ProcedureImplementer<\n TContext extends Context,\n TExtraContext extends Context,\n TInputSchema extends Schema,\n TOutputSchema extends Schema,\n> {\n constructor(\n public zz$pi: {\n contract: ContractProcedure<TInputSchema, TOutputSchema>\n middlewares?: Middleware<any, any, any, any>[]\n },\n ) {}\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n SchemaOutput<TInputSchema>,\n SchemaInput<TOutputSchema>\n >,\n ): ProcedureImplementer<\n TContext,\n MergeContext<TExtraContext, UExtraContext>,\n TInputSchema,\n TOutputSchema\n >\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n UMappedInput = unknown,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n UMappedInput,\n SchemaInput<TOutputSchema>\n >,\n mapInput: MapInputMiddleware<SchemaOutput<TInputSchema>, UMappedInput>,\n ): ProcedureImplementer<\n TContext,\n MergeContext<TExtraContext, UExtraContext>,\n TInputSchema,\n TOutputSchema\n >\n\n use(\n middleware: Middleware<any, any, any, any>,\n mapInput?: MapInputMiddleware<any, any>,\n ): ProcedureImplementer<any, any, any, any> {\n const middleware_ = mapInput\n ? decorateMiddleware(middleware).mapInput(mapInput)\n : middleware\n\n return new ProcedureImplementer({\n ...this.zz$pi,\n middlewares: [...(this.zz$pi.middlewares ?? []), middleware_],\n })\n }\n\n handler<UHandlerOutput extends SchemaOutput<TOutputSchema>>(\n handler: ProcedureHandler<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n UHandlerOutput\n >,\n ): DecoratedProcedure<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n UHandlerOutput\n > {\n return decorateProcedure({\n zz$p: {\n middlewares: this.zz$pi.middlewares,\n contract: this.zz$pi.contract,\n handler,\n },\n })\n }\n}\n","import type { HandledRouter, Router } from './router'\nimport type { Context, MergeContext } from './types'\nimport { DecoratedContractProcedure, type HTTPPath } from '@orpc/contract'\nimport {\n decorateMiddleware,\n type MapInputMiddleware,\n type Middleware,\n} from './middleware'\nimport { decorateProcedure, isProcedure } from './procedure'\n\nexport class RouterBuilder<\n TContext extends Context,\n TExtraContext extends Context,\n> {\n constructor(\n public zz$rb: {\n prefix?: HTTPPath\n tags?: string[]\n middlewares?: Middleware<any, any, any, any>[]\n },\n ) {}\n\n prefix(prefix: HTTPPath): RouterBuilder<TContext, TExtraContext> {\n return new RouterBuilder({\n ...this.zz$rb,\n prefix: `${this.zz$rb.prefix ?? ''}${prefix}`,\n })\n }\n\n tags(...tags: string[]): RouterBuilder<TContext, TExtraContext> {\n if (!tags.length)\n return this\n\n return new RouterBuilder({\n ...this.zz$rb,\n tags: [...(this.zz$rb.tags ?? []), ...tags],\n })\n }\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n unknown,\n unknown\n >,\n ): RouterBuilder<TContext, MergeContext<TExtraContext, UExtraContext>>\n\n use<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n UMappedInput = unknown,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n UMappedInput,\n unknown\n >,\n mapInput: MapInputMiddleware<unknown, UMappedInput>,\n ): RouterBuilder<TContext, MergeContext<TExtraContext, UExtraContext>>\n\n use(\n middleware: Middleware<any, any, any, any>,\n mapInput?: MapInputMiddleware<any, any>,\n ): RouterBuilder<any, any> {\n const middleware_ = mapInput\n ? decorateMiddleware(middleware).mapInput(mapInput)\n : middleware\n\n return new RouterBuilder({\n ...this.zz$rb,\n middlewares: [...(this.zz$rb.middlewares || []), middleware_],\n })\n }\n\n router<URouter extends Router<TContext>>(\n router: URouter,\n ): HandledRouter<URouter> {\n const handled: Router<TContext> = {}\n\n for (const key in router) {\n const item = router[key]\n\n if (isProcedure(item)) {\n const builderMiddlewares = this.zz$rb.middlewares ?? []\n const itemMiddlewares = item.zz$p.middlewares ?? []\n\n const middlewares = [\n ...builderMiddlewares,\n ...itemMiddlewares.filter(\n item => !builderMiddlewares.includes(item),\n ),\n ]\n\n const contract = DecoratedContractProcedure.decorate(\n item.zz$p.contract,\n ).addTags(...(this.zz$rb.tags ?? []))\n\n handled[key] = decorateProcedure({\n zz$p: {\n ...item.zz$p,\n contract: this.zz$rb.prefix\n ? contract.prefix(this.zz$rb.prefix)\n : contract,\n middlewares,\n },\n })\n }\n else {\n handled[key] = this.router(item as any)\n }\n }\n\n return handled as HandledRouter<URouter>\n }\n}\n","import type { Middleware } from './middleware'\nimport type { RouterWithContract } from './router'\nimport type { Context } from './types'\nimport {\n type ContractProcedure,\n type ContractRouter,\n isContractProcedure,\n} from '@orpc/contract'\nimport { isProcedure } from './procedure'\nimport { ProcedureImplementer } from './procedure-implementer'\n\nexport class RouterImplementer<\n TContext extends Context,\n TContract extends ContractRouter,\n> {\n constructor(\n public zz$ri: {\n contract: TContract\n },\n ) {}\n\n router(\n router: RouterWithContract<TContext, TContract>,\n ): RouterWithContract<TContext, TContract> {\n assertRouterImplementation(this.zz$ri.contract, router)\n\n return router\n }\n}\n\nexport type ChainedRouterImplementer<\n TContext extends Context,\n TContract extends ContractRouter,\n TExtraContext extends Context,\n> = {\n [K in keyof TContract]: TContract[K] extends ContractProcedure<\n infer UInputSchema,\n infer UOutputSchema\n >\n ? ProcedureImplementer<TContext, TExtraContext, UInputSchema, UOutputSchema>\n : TContract[K] extends ContractRouter\n ? ChainedRouterImplementer<TContext, TContract[K], TExtraContext>\n : never\n} & RouterImplementer<TContext, TContract>\n\nexport function chainRouterImplementer<\n TContext extends Context,\n TContract extends ContractRouter,\n TExtraContext extends Context,\n>(\n contract: TContract,\n middlewares?: Middleware<any, any, any, any>[],\n): ChainedRouterImplementer<TContext, TContract, TExtraContext> {\n const result: Record<string, unknown> = {}\n\n for (const key in contract) {\n const item = contract[key]\n\n if (isContractProcedure(item)) {\n result[key] = new ProcedureImplementer({\n contract: item,\n middlewares,\n })\n }\n else {\n result[key] = chainRouterImplementer(item as ContractRouter, middlewares)\n }\n }\n\n const implementer = new RouterImplementer({ contract })\n\n return Object.assign(implementer, result) as any\n}\n\nexport function assertRouterImplementation(\n contract: ContractRouter,\n router: RouterWithContract<any, any>,\n path: string[] = [],\n): void {\n for (const key in contract) {\n const currentPath = [...path, key]\n const contractItem = contract[key]\n const routerItem = router[key]\n\n if (!routerItem) {\n throw new Error(\n `Missing implementation for procedure at [${currentPath.join('.')}]`,\n )\n }\n\n if (isContractProcedure(contractItem)) {\n if (isProcedure(routerItem)) {\n if (routerItem.zz$p.contract !== contractItem) {\n throw new Error(\n `Mismatch implementation for procedure at [${currentPath.join('.')}]`,\n )\n }\n }\n else {\n throw new Error(\n `Mismatch implementation for procedure at [${currentPath.join('.')}]`,\n )\n }\n }\n else {\n assertRouterImplementation(\n contractItem as ContractRouter,\n routerItem as any,\n currentPath,\n )\n }\n }\n}\n","import type { Context } from './types'\nimport {\n type ContractProcedure,\n type ContractRouter,\n isContractProcedure,\n} from '@orpc/contract'\nimport {\n type DecoratedProcedure,\n isProcedure,\n type Procedure,\n} from './procedure'\n\nexport interface Router<TContext extends Context> {\n [k: string]: Procedure<TContext, any, any, any, any> | Router<TContext>\n}\n\nexport type HandledRouter<TRouter extends Router<any>> = {\n [K in keyof TRouter]: TRouter[K] extends Procedure<\n infer UContext,\n infer UExtraContext,\n infer UInputSchema,\n infer UOutputSchema,\n infer UHandlerOutput\n >\n ? DecoratedProcedure<\n UContext,\n UExtraContext,\n UInputSchema,\n UOutputSchema,\n UHandlerOutput\n >\n : TRouter[K] extends Router<any>\n ? HandledRouter<TRouter[K]>\n : never\n}\n\nexport type RouterWithContract<\n TContext extends Context,\n TContract extends ContractRouter,\n> = {\n [K in keyof TContract]: TContract[K] extends ContractProcedure<\n infer UInputSchema,\n infer UOutputSchema\n >\n ? Procedure<TContext, any, UInputSchema, UOutputSchema, any>\n : TContract[K] extends ContractRouter\n ? RouterWithContract<TContext, TContract[K]>\n : never\n}\n\nexport function toContractRouter(\n router: ContractRouter | Router<any>,\n): ContractRouter {\n const contract: ContractRouter = {}\n\n for (const key in router) {\n const item = router[key]\n\n if (isContractProcedure(item)) {\n contract[key] = item\n }\n else if (isProcedure(item)) {\n contract[key] = item.zz$p.contract\n }\n else {\n contract[key] = toContractRouter(item as any)\n }\n }\n\n return contract\n}\n","import type {} from '@orpc/contract'\nimport type { Router } from './router'\nimport { isProcedure, type Procedure } from './procedure'\nimport { createProcedureCaller, type ProcedureCaller } from './procedure-caller'\n\nexport interface CreateRouterCallerOptions<\n TRouter extends Router<any>,\n TValidate extends boolean,\n> {\n router: TRouter\n\n /**\n * The context used when calling the procedure.\n */\n context: TRouter extends Router<infer UContext> ? UContext : never\n\n /**\n * This is helpful for logging and analytics.\n */\n basePath?: string[]\n\n /**\n * This flag helpful when you want bypass some logics not necessary to internal server calls.\n *\n * @default true\n */\n internal?: boolean\n\n /**\n * Indicate whether validate input and output.\n *\n * @default true\n */\n validate?: TValidate\n}\n\nexport type RouterCaller<\n TRouter extends Router<any>,\n TValidate extends boolean,\n> = {\n [K in keyof TRouter]: TRouter[K] extends Procedure<any, any, any, any, any>\n ? ProcedureCaller<TRouter[K], TValidate>\n : TRouter[K] extends Router<any>\n ? RouterCaller<TRouter[K], TValidate>\n : never\n}\n\nexport function createRouterCaller<\n TRouter extends Router<any>,\n TValidate extends boolean = true,\n>(\n options: CreateRouterCallerOptions<TRouter, TValidate>,\n): RouterCaller<TRouter, TValidate> {\n const internal = options.internal ?? true\n const validate = options.validate ?? true\n\n const caller: Record<string, unknown> = {}\n\n for (const key in options.router) {\n const path = [...(options.basePath ?? []), key]\n const item = options.router[key]\n\n if (isProcedure(item)) {\n caller[key] = createProcedureCaller({\n procedure: item,\n context: options.context as any,\n path,\n internal,\n validate,\n })\n }\n else {\n caller[key] = createRouterCaller({\n router: item as any,\n context: options.context,\n basePath: path,\n internal,\n validate,\n })\n }\n }\n\n return caller as RouterCaller<TRouter, TValidate>\n}\n","import { Builder } from './builder'\n\nexport * from './builder'\nexport * from './middleware'\nexport * from './procedure'\nexport * from './procedure-builder'\nexport * from './procedure-caller'\nexport * from './procedure-implementer'\nexport * from './router'\nexport * from './router-caller'\nexport * from './router-implementer'\nexport * from './types'\nexport * from './utils'\nexport * from '@orpc/shared/error'\n\nexport const os = new Builder<undefined | Record<string, unknown>, undefined>()\n"],"mappings":"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","names":["isContractProcedure","DecoratedContractProcedure","item","DecoratedContractProcedure","isContractProcedure","isContractProcedure","isContractProcedure"]}
@@ -1,9 +1,15 @@
1
- import { type PartialOnUndefinedDeep } from '@orpc/shared';
1
+ import type { PartialOnUndefinedDeep, Promisable } from '@orpc/shared';
2
2
  import type { Router } from '../router';
3
- import type { Meta, Promisable } from '../types';
3
+ export interface FetchHandlerHooks {
4
+ next: () => Promise<Response>;
5
+ response: (response: Response) => Response;
6
+ }
4
7
  export interface CreateFetchHandlerOptions<TRouter extends Router<any>> {
5
8
  router: TRouter;
6
- hooks?: (context: TRouter extends Router<infer UContext> ? UContext : never, meta: Meta<unknown>) => Promisable<void>;
9
+ /**
10
+ * Hooks for executing logics on lifecycle events.
11
+ */
12
+ hooks?: (context: TRouter extends Router<infer UContext> ? UContext : never, hooks: FetchHandlerHooks) => Promisable<Response>;
7
13
  /**
8
14
  * It will help improve the cold start time. But it will increase the performance.
9
15
  *
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/adapters/fetch.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,sBAAsB,EAK5B,MAAM,cAAc,CAAA;AAarB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAGhD,MAAM,WAAW,yBAAyB,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,CAAC;IACpE,MAAM,EAAE,OAAO,CAAA;IAEf,KAAK,CAAC,EAAE,CACN,OAAO,EAAE,OAAO,SAAS,MAAM,CAAC,MAAM,QAAQ,CAAC,GAAG,QAAQ,GAAG,KAAK,EAClE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAChB,UAAU,CAAC,IAAI,CAAC,CAAA;IAErB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,CAAC,EAC5D,OAAO,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAC1C,YAAY,CAAC,OAAO,CAAC,CA2LvB;AAMD,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,CAAC,IAAI;IAC7D;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAEhB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,sBAAsB,CAAC;IACzB;;OAEG;IACH,OAAO,EAAE,OAAO,SAAS,MAAM,CAAC,MAAM,QAAQ,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAA;CACnE,CAAC,CAAA;AAEF,MAAM,WAAW,YAAY,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,CAAC;IACvD,CAAC,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAC3D"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/adapters/fetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,sBAAsB,EACtB,UAAU,EACX,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AA0BvC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC7B,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,QAAQ,CAAA;CAC3C;AAED,MAAM,WAAW,yBAAyB,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,CAAC;IACpE,MAAM,EAAE,OAAO,CAAA;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,CACN,OAAO,EAAE,OAAO,SAAS,MAAM,CAAC,MAAM,QAAQ,CAAC,GAAG,QAAQ,GAAG,KAAK,EAClE,KAAK,EAAE,iBAAiB,KACrB,UAAU,CAAC,QAAQ,CAAC,CAAA;IAEzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,CAAC,EAC5D,OAAO,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAC1C,YAAY,CAAC,OAAO,CAAC,CA6LvB;AAMD,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,CAAC,IAAI;IAC7D;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAEhB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,sBAAsB,CAAC;IACzB;;OAEG;IACH,OAAO,EAAE,OAAO,SAAS,MAAM,CAAC,MAAM,QAAQ,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAA;CACnE,CAAC,CAAA;AAEF,MAAM,WAAW,YAAY,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,CAAC;IACvD,CAAC,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAC3D"}
@@ -1,13 +1,13 @@
1
- import { ContractProcedure, type ContractRouter, type HTTPPath, type RouteOptions, type Schema, type SchemaInput, type SchemaOutput } from '@orpc/contract';
2
1
  import type { IsEqual } from '@orpc/shared';
2
+ import type { HandledRouter, Router } from './router';
3
+ import type { Context, MergeContext } from './types';
4
+ import { ContractProcedure, type ContractRouter, type HTTPPath, type RouteOptions, type Schema, type SchemaInput, type SchemaOutput } from '@orpc/contract';
3
5
  import { type DecoratedMiddleware, type MapInputMiddleware, type Middleware } from './middleware';
4
6
  import { type DecoratedProcedure, type ProcedureHandler } from './procedure';
5
7
  import { ProcedureBuilder } from './procedure-builder';
6
8
  import { ProcedureImplementer } from './procedure-implementer';
7
- import type { HandledRouter, Router } from './router';
8
9
  import { RouterBuilder } from './router-builder';
9
10
  import { type ChainedRouterImplementer } from './router-implementer';
10
- import type { Context, MergeContext } from './types';
11
11
  export declare class Builder<TContext extends Context, TExtraContext extends Context> {
12
12
  zz$b: {
13
13
  middlewares?: Middleware<any, any, any, any>[];
@@ -38,7 +38,7 @@ export declare class Builder<TContext extends Context, TExtraContext extends Con
38
38
  /**
39
39
  * Create ExtendedMiddleware
40
40
  */
41
- middleware<UExtraContext extends Context = undefined, TInput = unknown>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, TInput, unknown>): DecoratedMiddleware<MergeContext<TContext, TExtraContext>, UExtraContext, TInput, unknown>;
41
+ middleware<UExtraContext extends Context = undefined, TInput = unknown, TOutput = any>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, TInput, TOutput>): DecoratedMiddleware<MergeContext<TContext, TExtraContext>, UExtraContext, TInput, TOutput>;
42
42
  prefix(prefix: HTTPPath): RouterBuilder<TContext, TExtraContext>;
43
43
  tags(...tags: string[]): RouterBuilder<TContext, TExtraContext>;
44
44
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/builder.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,15 @@
1
1
  import { Builder } from './builder';
2
2
  export * from './builder';
3
- export * from '@orpc/shared/error';
4
3
  export * from './middleware';
5
4
  export * from './procedure';
6
- export * from './procedure-caller';
7
5
  export * from './procedure-builder';
6
+ export * from './procedure-caller';
8
7
  export * from './procedure-implementer';
9
8
  export * from './router';
10
9
  export * from './router-caller';
11
10
  export * from './router-implementer';
12
11
  export * from './types';
13
12
  export * from './utils';
13
+ export * from '@orpc/shared/error';
14
14
  export declare const os: Builder<Record<string, unknown> | undefined, undefined>;
15
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AAEvB,eAAO,MAAM,EAAE,yDAAgE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,oBAAoB,CAAA;AAElC,eAAO,MAAM,EAAE,yDAAgE,CAAA"}
@@ -1,16 +1,26 @@
1
- import type { Context, MergeContext, Meta, Promisable } from './types';
1
+ import type { Promisable } from '@orpc/shared';
2
+ import type { Context, MergeContext, Meta } from './types';
3
+ export type MiddlewareResult<TExtraContext extends Context, TOutput> = Promisable<{
4
+ output: TOutput;
5
+ context: TExtraContext;
6
+ }>;
7
+ export interface MiddlewareMeta<TOutput> extends Meta {
8
+ next: <UExtraContext extends Context = undefined>(options: UExtraContext extends undefined ? {
9
+ context?: UExtraContext;
10
+ } : {
11
+ context: UExtraContext;
12
+ }) => MiddlewareResult<UExtraContext, TOutput>;
13
+ output: <UOutput>(output: UOutput) => MiddlewareResult<undefined, UOutput>;
14
+ }
2
15
  export interface Middleware<TContext extends Context, TExtraContext extends Context, TInput, TOutput> {
3
- (input: TInput, context: TContext, meta: Meta<TOutput>): Promisable<TExtraContext extends undefined ? void : {
4
- context: TExtraContext;
5
- }>;
16
+ (input: TInput, context: TContext, meta: MiddlewareMeta<TOutput>): Promisable<MiddlewareResult<TExtraContext, TOutput>>;
6
17
  }
7
18
  export interface MapInputMiddleware<TInput, TMappedInput> {
8
19
  (input: TInput): TMappedInput;
9
20
  }
10
21
  export interface DecoratedMiddleware<TContext extends Context, TExtraContext extends Context, TInput, TOutput> extends Middleware<TContext, TExtraContext, TInput, TOutput> {
11
- concat<UExtraContext extends Context = undefined, UInput = TInput>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, UInput & TInput, TOutput>): DecoratedMiddleware<TContext, MergeContext<TExtraContext, UExtraContext>, TInput & UInput, TOutput>;
12
- concat<UExtraContext extends Context = undefined, UInput = TInput, UMappedInput = unknown>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, UMappedInput, TOutput>, mapInput: MapInputMiddleware<UInput, UMappedInput>): DecoratedMiddleware<TContext, MergeContext<TExtraContext, UExtraContext>, TInput & UInput, TOutput>;
13
- mapInput<UInput = unknown>(map: MapInputMiddleware<UInput, TInput>): DecoratedMiddleware<TContext, TExtraContext, UInput, TOutput>;
22
+ concat: (<UExtraContext extends Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>> | undefined = undefined, UInput = TInput>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, UInput & TInput, TOutput>) => DecoratedMiddleware<TContext, MergeContext<TExtraContext, UExtraContext>, TInput & UInput, TOutput>) & (<UExtraContext extends Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>> | undefined = undefined, UInput = TInput, UMappedInput = unknown>(middleware: Middleware<MergeContext<TContext, TExtraContext>, UExtraContext, UMappedInput, TOutput>, mapInput: MapInputMiddleware<UInput, UMappedInput>) => DecoratedMiddleware<TContext, MergeContext<TExtraContext, UExtraContext>, TInput & UInput, TOutput>);
23
+ mapInput: <UInput = unknown>(map: MapInputMiddleware<UInput, TInput>) => DecoratedMiddleware<TContext, TExtraContext, UInput, TOutput>;
14
24
  }
15
25
  export declare function decorateMiddleware<TContext extends Context, TExtraContext extends Context, TInput, TOutput>(middleware: Middleware<TContext, TExtraContext, TInput, TOutput>): DecoratedMiddleware<TContext, TExtraContext, TInput, TOutput>;
16
26
  //# sourceMappingURL=middleware.d.ts.map