web-infra-dev / modern.js

Modern.js is a web engineering system, including a web framework and a npm package solution.
https://modernjs.dev/en/
MIT License
4.44k stars 366 forks source link

[Feature]: Types Routes #6218

Open GiancarlosIO opened 1 month ago

GiancarlosIO commented 1 month ago

What problem does this feature solve?

Hi there!

Inspired by tanstack router, I have developed a simple script that analyzes the src/routes/ folder and then generates typescript code. Then it is used in our custom <Link /> component to have autocomplete in the paths and params props.

I'm just wondering if there is a plan to develop something like this. If not, maybe I can try to contribute to have this in modernjs?

Thanks!!!

What does the proposed API look like?

Simple path without params

image

Path with required params

For this you must use an object { path, params, searchParams } image

The params property is only required by typescript if the path is a dynamic path. It also autocomplete the required params. image

caohuilin commented 1 month ago

PR welcome

GiancarlosIO commented 1 month ago

Hi @caohuilin

I have created the initial version of a rspack plugin (using unplugin) with the base features (code generation). But I don't know how to integrate it with modernjs. Could you please help me with the following questions? 🙏🏼

I would also like to create a few end-to-end tests to make sure the plugin is generating the types correctly

Thanks!!!

caohuilin commented 1 month ago

You can directly write to https://github.com/web-infra-dev/modern.js/tree/main/packages/runtime/plugin-runtime/src/router/cli. It needs to support both rspack and webpack. See if you can implement it as a plugin for rsbuild. Then add the plugin into the config function of the router plugin.