diff --git a/apps/builder/app/builder/shared/url-pattern.test.ts b/apps/builder/app/builder/shared/url-pattern.test.ts index a0157cdba2..2b450a16e2 100644 --- a/apps/builder/app/builder/shared/url-pattern.test.ts +++ b/apps/builder/app/builder/shared/url-pattern.test.ts @@ -216,3 +216,9 @@ test(`forbid named group with static parts before or after`, () => { `Static parts cannot be mixed with dynamic parameters at 'prefix-:id-suffix'.`, ]); }); + +test(`? should be allowed in named groups only`, () => { + expect(validatePathnamePattern("/name?")).toEqual([ + `Optional parameter indicator ? must be at the end of the named parameter. Correct usage: /:param?`, + ]); +}); diff --git a/apps/builder/app/builder/shared/url-pattern.ts b/apps/builder/app/builder/shared/url-pattern.ts index 6598eae203..996e0c6c33 100644 --- a/apps/builder/app/builder/shared/url-pattern.ts +++ b/apps/builder/app/builder/shared/url-pattern.ts @@ -147,6 +147,10 @@ export const validatePathnamePattern = (pathname: string) => { `Static parts cannot be mixed with dynamic parameters at '${segment}'.` ); } + } else if (segment.includes("?")) { + messages.push( + `Optional parameter indicator ? must be at the end of the named parameter. Correct usage: /:param?` + ); } }