UNPKG

@benpsnyder/analogjs-esm-trpc

Version:

Angular/Nitro-based tRPC integration

1 lines 6.18 kB
{"version":3,"file":"benpsnyder-analogjs-esm-trpc-server.mjs","sources":["../../../../packages/trpc/server/src/lib/server.ts","../../../../packages/trpc/server/src/benpsnyder-analogjs-esm-trpc-server.ts"],"sourcesContent":["/**\n * ALl credit goes to the awesome trpc-nuxt plugin https://github.com/wobsoriano/trpc-nuxt\n * Since Analog currently uses Nitro as the underlying server we can\n * simply reuse the hard work done by Robert Soriano and friends\n * **/\n\nimport type { ResponseMeta } from '@trpc/server/http';\nimport { resolveHTTPResponse } from '@trpc/server/http';\nimport type {\n AnyRouter,\n inferRouterContext,\n inferRouterError,\n ProcedureType,\n} from '@trpc/server';\nimport { TRPCError } from '@trpc/server';\nimport { createURL } from 'ufo';\nimport type { H3Event } from 'h3';\nimport { createError, defineEventHandler, isMethod, readBody } from 'h3';\nimport type { TRPCResponse } from '@trpc/server/rpc';\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type CreateContextFn<TRouter extends AnyRouter> = (\n event: H3Event,\n) => MaybePromise<inferRouterContext<TRouter>>;\n\nexport interface ResponseMetaFnPayload<TRouter extends AnyRouter> {\n data: TRPCResponse<unknown, inferRouterError<TRouter>>[];\n ctx?: inferRouterContext<TRouter>;\n paths?: string[];\n type: ProcedureType | 'unknown';\n errors: TRPCError[];\n}\n\nexport type ResponseMetaFn<TRouter extends AnyRouter> = (\n opts: ResponseMetaFnPayload<TRouter>,\n) => ResponseMeta;\n\nexport interface OnErrorPayload<TRouter extends AnyRouter> {\n error: TRPCError;\n type: ProcedureType | 'unknown';\n path: string | undefined;\n req: H3Event['node']['req'];\n input: unknown;\n ctx: undefined | inferRouterContext<TRouter>;\n}\n\nexport type OnErrorFn<TRouter extends AnyRouter> = (\n opts: OnErrorPayload<TRouter>,\n) => void;\n\nexport interface ResolveHTTPRequestOptions<TRouter extends AnyRouter> {\n router: TRouter;\n createContext?: CreateContextFn<TRouter>;\n responseMeta?: ResponseMetaFn<TRouter>;\n onError?: OnErrorFn<TRouter>;\n batching?: {\n enabled: boolean;\n };\n}\n\nfunction getPath(event: H3Event): string | null {\n const { params } = event.context;\n\n if (typeof params?.['trpc'] === 'string') {\n return params['trpc'];\n }\n\n if (params?.['trpc'] && Array.isArray(params['trpc'])) {\n return (params['trpc'] as string[]).join('/');\n }\n\n return null;\n}\n\nexport function createTrpcNitroHandler<TRouter extends AnyRouter>({\n router,\n createContext,\n responseMeta,\n onError,\n batching,\n}: ResolveHTTPRequestOptions<TRouter>) {\n return defineEventHandler(async (event) => {\n const { req, res } = event.node;\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const $url = createURL(req.url!);\n\n const path = getPath(event);\n\n if (path === null) {\n const error = router.getErrorShape({\n error: new TRPCError({\n message:\n 'Param \"trpc\" not found - is the file named `[trpc]`.ts or `[...trpc].ts`?',\n code: 'INTERNAL_SERVER_ERROR',\n }),\n type: 'unknown',\n ctx: undefined,\n path: undefined,\n input: undefined,\n });\n\n throw createError({\n statusCode: 500,\n statusMessage: JSON.stringify(error),\n });\n }\n\n const httpResponse = await resolveHTTPResponse({\n batching,\n router,\n req: {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n method: req.method!,\n headers: req.headers,\n body: isMethod(event, 'GET') ? null : await readBody(event),\n query: $url.searchParams,\n },\n path,\n createContext: async () => await createContext?.(event),\n responseMeta,\n onError: (o) => {\n onError?.({\n ...o,\n req,\n });\n },\n });\n\n const { status, headers, body } = httpResponse;\n\n res.statusCode = status;\n\n headers &&\n Object.keys(headers).forEach((key) => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n res.setHeader(key, headers[key]!);\n });\n\n return body;\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAAA;;;;AAIM;AAyDN,SAAS,OAAO,CAAC,KAAc,EAAA;AAC7B,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO;IAEhC,IAAI,OAAO,MAAM,GAAG,MAAM,CAAC,KAAK,QAAQ,EAAE;AACxC,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC;;AAGvB,IAAA,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE;QACrD,OAAQ,MAAM,CAAC,MAAM,CAAc,CAAC,IAAI,CAAC,GAAG,CAAC;;AAG/C,IAAA,OAAO,IAAI;AACb;AAEgB,SAAA,sBAAsB,CAA4B,EAChE,MAAM,EACN,aAAa,EACb,YAAY,EACZ,OAAO,EACP,QAAQ,GAC2B,EAAA;AACnC,IAAA,OAAO,kBAAkB,CAAC,OAAO,KAAK,KAAI;QACxC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI;;QAG/B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAI,CAAC;AAEhC,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;AAE3B,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC;gBACjC,KAAK,EAAE,IAAI,SAAS,CAAC;AACnB,oBAAA,OAAO,EACL,2EAA2E;AAC7E,oBAAA,IAAI,EAAE,uBAAuB;iBAC9B,CAAC;AACF,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,KAAK,EAAE,SAAS;AACjB,aAAA,CAAC;AAEF,YAAA,MAAM,WAAW,CAAC;AAChB,gBAAA,UAAU,EAAE,GAAG;AACf,gBAAA,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACrC,aAAA,CAAC;;AAGJ,QAAA,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC;YAC7C,QAAQ;YACR,MAAM;AACN,YAAA,GAAG,EAAE;;gBAEH,MAAM,EAAE,GAAG,CAAC,MAAO;gBACnB,OAAO,EAAE,GAAG,CAAC,OAAO;AACpB,gBAAA,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC;gBAC3D,KAAK,EAAE,IAAI,CAAC,YAAY;AACzB,aAAA;YACD,IAAI;YACJ,aAAa,EAAE,YAAY,MAAM,aAAa,GAAG,KAAK,CAAC;YACvD,YAAY;AACZ,YAAA,OAAO,EAAE,CAAC,CAAC,KAAI;AACb,gBAAA,OAAO,GAAG;AACR,oBAAA,GAAG,CAAC;oBACJ,GAAG;AACJ,iBAAA,CAAC;aACH;AACF,SAAA,CAAC;QAEF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,YAAY;AAE9C,QAAA,GAAG,CAAC,UAAU,GAAG,MAAM;QAEvB,OAAO;YACL,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;;gBAEnC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAE,CAAC;AACnC,aAAC,CAAC;AAEJ,QAAA,OAAO,IAAI;AACb,KAAC,CAAC;AACJ;;AC9IA;;AAEG;;;;"}