WAAYZZz 🍀
WAAYZZz 🍀
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
thx for your huge help
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
thx, used pkgroll and it works now
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
I'm trying this
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
and even doing that, the first level of routes are well typed, but not the second (eg: user)
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
last question, how to properly pass rpc client or typeof App to frontend in a monorepo architecture ? i have this repo https://github.com/iNeoO/sirena in apps/backend/src/hc.ts client or AppType are well typed but in apps/frontend/src/lib/api/hc.ts everything becomes any the only way i manged to make it works it's to not use factory, new app creation
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
wow well played
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
i think problem is related to use factory with initApp
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
Nodejs
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
Absolutely, but using new hono instead of createfacorry makes it show up
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
Doesn't appear in the openapi export
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
well encountred an other issue 😄 https://github.com/rhinobase/hono-openapi/issues/91 but with hono-openapi this time
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
i migrate to hono-openapi and factories and it works
export type AppBindings = {
Variables: {
logger: PinoLogger;
};
};

export default createFactory<AppBindings>({
initApp: (app) => {
app.use(pinoLogger());
app.onError((error, c) => {
if (error instanceof HTTPException) {
return error.getResponse();
}
const logger = c.get("logger");
logger.error(error);
return c.json({ message: "Internal server error" }, 500);
});
},
});

const app = factoryWithLogs.createApp().get(
"/",
describeRoute({
description: "Say hello to the user",
responses: {
200: {
description: "Successful response",
content: {
"text/plain": { schema: resolver(responseSchema) },
},
},
},
}),
zValidator("query", querySchema),
async (c) => {
const query = c.req.valid("query");
const user = await getUser();
return c.json(user, 200);
}
);

export default userApp;

const app = factoryWithLogs.createApp().route("/user", UserApp);
export type AppBindings = {
Variables: {
logger: PinoLogger;
};
};

export default createFactory<AppBindings>({
initApp: (app) => {
app.use(pinoLogger());
app.onError((error, c) => {
if (error instanceof HTTPException) {
return error.getResponse();
}
const logger = c.get("logger");
logger.error(error);
return c.json({ message: "Internal server error" }, 500);
});
},
});

const app = factoryWithLogs.createApp().get(
"/",
describeRoute({
description: "Say hello to the user",
responses: {
200: {
description: "Successful response",
content: {
"text/plain": { schema: resolver(responseSchema) },
},
},
},
}),
zValidator("query", querySchema),
async (c) => {
const query = c.req.valid("query");
const user = await getUser();
return c.json(user, 200);
}
);

export default userApp;

const app = factoryWithLogs.createApp().route("/user", UserApp);
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
const app = createInternalApp().openapi(getUserRoute, async (c) => {
const user = await getUser();
return c.json(user, 200);
});
const app = createInternalApp().openapi(getUserRoute, async (c) => {
const user = await getUser();
return c.json(user, 200);
});
was needed
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
ok i succed by better chaining
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
(code is splited, just grouped for demo)
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
import { OpenAPIHono } from "@hono/zod-openapi";

type AppBindings = {
Variables: {
logger: PinoLogger;
};
};

type AppOpenAPI = OpenAPIHono<AppBindings>;

function createInternalApp<T extends Env>() {
const app = new OpenAPIHono<AppBindings & T>();
app.use(pinoLogger());
app.onError((error, c) => {
if (error instanceof HTTPException) {
return error.getResponse();
}
const logger = c.get("logger");
logger.error(error);
return c.json({ message: "Internal server error" }, 500);
});
return app;
}

const userRoutes = createInternalApp().basePath("/user");

// getUserRoute is a simple openApi object
userRoutes.openapi(getUserRoute, async (c) => {
const user = await getUser();
return c.json(user, 200);
});

const app = createInternalApp().route("/", userRoutes);
const client = hc<typeof app>("http://localhost:8787/");
import { OpenAPIHono } from "@hono/zod-openapi";

type AppBindings = {
Variables: {
logger: PinoLogger;
};
};

type AppOpenAPI = OpenAPIHono<AppBindings>;

function createInternalApp<T extends Env>() {
const app = new OpenAPIHono<AppBindings & T>();
app.use(pinoLogger());
app.onError((error, c) => {
if (error instanceof HTTPException) {
return error.getResponse();
}
const logger = c.get("logger");
logger.error(error);
return c.json({ message: "Internal server error" }, 500);
});
return app;
}

const userRoutes = createInternalApp().basePath("/user");

// getUserRoute is a simple openApi object
userRoutes.openapi(getUserRoute, async (c) => {
const user = await getUser();
return c.json(user, 200);
});

const app = createInternalApp().route("/", userRoutes);
const client = hc<typeof app>("http://localhost:8787/");
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
(juste a function returning a hono instance with pino and error handler set, and a zodopenapi route returnin fixed data
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
i will share my code tomorrows, it's simple implementation for the moment
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
OK
44 replies
HHono
Created by WAAYZZz 🍀 on 4/7/2025 in #help
exemple for zod-openapi + rpc
(do you ahve simple exemple with hono-openapi + rpc ?)
44 replies