Created
July 17, 2024 09:29
-
-
Save EdamAme-x/fd0b9d14b9eea8d84e8139f632802c65 to your computer and use it in GitHub Desktop.
Hono MergeRoutes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { Hono } from 'hono'; | |
import type { MergeSchemaPath, MergePath, Env, Schema } from 'hono/types'; | |
export interface Module { | |
path: string | |
routes: Hono | |
} | |
export function mergeRoutes<T extends Module[], H extends Hono>(base: H, ...routes: T) { | |
for (const route of routes) { | |
base.route(route.path, route.routes) | |
} | |
return base as unknown as H extends Hono<infer E, infer S, infer B> ? MergeRoutes<T, E, S, B> : never; | |
} | |
type MergeUnion<T> = (T extends any ? (x: T) => void : never) extends ((x: infer R) => void) ? R : never; | |
type MergeSchema<T extends any[], B extends string> = MergeUnion<T[number] extends infer module | |
? module extends { path: infer N, routes: infer H } ? | |
H extends Hono<infer _, infer S> | |
? MergeSchemaPath<S, MergePath<B, N extends string ? N : never>> | |
: never | |
: never | |
: never>; | |
type MergeRoutes<T extends any[], E extends Env, S extends Schema, B extends string> = Hono<E, MergeSchema<T, B> & S, B> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment