Skip to content

docs: add jsdoc comments to plugin/generator types #4644

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

RMHonor
Copy link
Contributor

@RMHonor RMHonor commented Jul 13, 2025

This PR adds JSDoc comments to the plugin/bundle config options, as discussed in #3790, giving usage hints inline and to hopefully pave the way for auto generated docs too.

The content for these docs were largely copied directly from the Router API docs with some tweaks to make it logical in the code context.

No logic changes have been made, purely type annotations.

Note about Zod

When adding JSDoc comments to fields with Zod, they are lost when using the z.input utility types (issue). To get around this, an interface is created, which is annotated with JSDoc, and then the accuracy of this is checked against again the schema with satisfies. This interface is then using for the type arguments in the plugin/generator.

A small drawback in this approach is that the compiler won't detect extraneous options being added to the schema.

Example output:
Screenshot 2025-05-18 at 22 52 14

Copy link

nx-cloud bot commented Jul 13, 2025

View your CI Pipeline Execution ↗ for commit 0364a41

Command Status Duration Result
nx affected --targets=test:eslint,test:unit,tes... ✅ Succeeded 4m 46s View ↗
nx run-many --target=build --exclude=examples/*... ✅ Succeeded 51s View ↗

☁️ Nx Cloud last updated this comment at 2025-07-13 15:13:51 UTC

Copy link

pkg-pr-new bot commented Jul 13, 2025

More templates

@tanstack/arktype-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/arktype-adapter@4644

@tanstack/directive-functions-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/directive-functions-plugin@4644

@tanstack/eslint-plugin-router

npm i https://pkg.pr.new/TanStack/router/@tanstack/eslint-plugin-router@4644

@tanstack/history

npm i https://pkg.pr.new/TanStack/router/@tanstack/history@4644

@tanstack/react-router

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router@4644

@tanstack/react-router-devtools

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router-devtools@4644

@tanstack/react-router-with-query

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router-with-query@4644

@tanstack/react-start

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start@4644

@tanstack/react-start-client

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-client@4644

@tanstack/react-start-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-plugin@4644

@tanstack/react-start-server

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-server@4644

@tanstack/router-cli

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-cli@4644

@tanstack/router-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-core@4644

@tanstack/router-devtools

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-devtools@4644

@tanstack/router-devtools-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-devtools-core@4644

@tanstack/router-generator

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-generator@4644

@tanstack/router-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-plugin@4644

@tanstack/router-utils

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-utils@4644

@tanstack/router-vite-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-vite-plugin@4644

@tanstack/server-functions-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/server-functions-plugin@4644

@tanstack/solid-router

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-router@4644

@tanstack/solid-router-devtools

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-router-devtools@4644

@tanstack/solid-start

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start@4644

@tanstack/solid-start-client

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-client@4644

@tanstack/solid-start-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-plugin@4644

@tanstack/solid-start-server

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-server@4644

@tanstack/start-client-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-client-core@4644

@tanstack/start-plugin-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-plugin-core@4644

@tanstack/start-server-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-core@4644

@tanstack/start-server-functions-client

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-client@4644

@tanstack/start-server-functions-fetcher

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-fetcher@4644

@tanstack/start-server-functions-server

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-server@4644

@tanstack/valibot-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/valibot-adapter@4644

@tanstack/virtual-file-routes

npm i https://pkg.pr.new/TanStack/router/@tanstack/virtual-file-routes@4644

@tanstack/zod-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/zod-adapter@4644

commit: 0364a41

@schiller-manuel
Copy link
Contributor

we could assert type equality using this

// copied from https://github.com/sindresorhus/type-fest/blob/4d7cc50fbec6ae631fca98ae8d7e498f0d5f61ab/source/is-equal.d.ts#L27
type IsEqual<A, B> =
	(<G>() => G extends A & G | G ? 1 : 2) extends
	(<G>() => G extends B & G | G ? 1 : 2)
		? true
		: false;
type Expect<T extends true> = T;
// this would error if X and Y are not equal
type E = Expect<IsEqual<X,Y>>


export type Config = z.infer<typeof configSchema>
export type Config = z.output<typeof configSchema>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
export type Config = z.output<typeof configSchema>
export type ValidatedConfig = z.output<typeof configSchema>


export const getConfig = (inlineConfig: Partial<Config>, root: string) => {
export const getConfig = (inlineConfig: ConfigInput, root: string) => {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could be unknown yeah?

Suggested change
export const getConfig = (inlineConfig: ConfigInput, root: string) => {
export const getConfig = (inlineConfig: unknown, root: string) => {

@SeanCassiere
Copy link
Member

Also, please see the conflict with packages/router-plugin/src/core/router-composed-plugin.ts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants