From 61532635bfe920593b93b8edafd211a26bdb32c9 Mon Sep 17 00:00:00 2001 From: Wei Zhu Date: Fri, 28 Feb 2025 00:48:30 +1030 Subject: [PATCH] fix: optional params was wrapped inside quotes (#138) close #137 --- src/build.ts | 13 ++++++++++++- src/template.ts | 2 +- tests/__snapshots__/build.test.ts.snap | 7 ++++++- tests/fixture.ts | 6 ++++++ 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/build.ts b/src/build.ts index 7793b612..018ecda2 100644 --- a/src/build.ts +++ b/src/build.ts @@ -116,7 +116,18 @@ function parse(routes: RouteManifestEntry[]) { .split('/') .filter((seg) => seg.startsWith(':') || seg == '*') .map((param) => param.split('.')[0]) - .map((param) => param.replace(':', '')), + .map((param) => { + let keyable = param.replace(':', ''); + const isOptional = keyable.match(/\?$/); + if (isOptional) { + keyable = keyable.replace(/\?$/, ''); + } + keyable = `'${keyable}'` + if (isOptional) { + keyable = `${keyable}?` + } + return keyable; + }) ) ); }); diff --git a/src/template.ts b/src/template.ts index c91ddf43..a04054e9 100644 --- a/src/template.ts +++ b/src/template.ts @@ -23,7 +23,7 @@ function exportedQuery(ctx: Context) { function routes(ctx: Context) { const routes = ctx.routes.map(({ route, params, fileName }) => `"${route}": { - params: ${params.length > 0 ? `{${params.map(param => `'${param}': string | number`).join('; ')}}` : 'never'}, + params: ${params.length > 0 ? `{${params.map(param => `${param}: string | number`).join('; ')}}` : 'never'}, query: ExportedQuery, }` ); diff --git a/tests/__snapshots__/build.test.ts.snap b/tests/__snapshots__/build.test.ts.snap index 77afe82a..0fcf8044 100644 --- a/tests/__snapshots__/build.test.ts.snap +++ b/tests/__snapshots__/build.test.ts.snap @@ -14,9 +14,13 @@ exports[`gen route types 1`] = ` query: ExportedQuery, }, "/:lang?/about": { - params: {'lang?': string | number}, + params: {'lang'?: string | number}, query: ExportedQuery, }, + "/:provider-key?/about": { + params: {'provider-key'?: string | number}, + query: ExportedQuery, + }, "/admin": { params: never, query: ExportedQuery, @@ -166,6 +170,7 @@ exports[`gen route types 1`] = ` | 'routes/blog' | 'routes/blog._index' | 'routes/auth.$provider-key' + | 'routes/($provider-key).about' | 'catchall'; export function $path< diff --git a/tests/fixture.ts b/tests/fixture.ts index 743fdcae..e5373f3a 100644 --- a/tests/fixture.ts +++ b/tests/fixture.ts @@ -190,6 +190,12 @@ export const testRoutes = path: "auth/:provider-key", parentId: "root", }, + "routes/($provider-key).about": { + file: "routes/($provider-key).about.tsx", + id: "routes/($provider-key).about", + path: ":provider-key?/about", + parentId: "root", + }, catchall: { path: "/somewhere/cool/*", index: undefined,