Migrate @data-client/rest path strings from path-to-regexp v6 to v8 syntax. Use when upgrading path-to-regexp, updating RestEndpoint.path or resource path strings, or when seeing errors about unexpected ?, +, (, or ) in paths.
Applies to path in RestEndpoint, resource(), and any string passed to path-to-regexp.
Reference: path-to-regexp README errors section
? suffix removed. Wrap the optional segment (including its prefix) in {}.
/:id? → {/:id}
/users/:id? → /users{/:id}
/files/:name? → /files{/:name}
+ (one-or-more) and * (zero-or-more) suffixes removed. Use wildcard syntax.
*name/:path+ → /*path
/:path* → {/*path}
Parameter names must be valid JS identifiers. Names with special characters need double quotes.
/:with-dash → /:"with-dash"
/:my.param → /:"my.param"
Characters including {}()[]+?!:*\\ must be escaped with \\ when used as literals (see
path-to-regexp errors). A literal ? in the path
(e.g. before fixed query text like ?per_page=50) must stay as \\? in the source string — removing the
backslash causes Unexpected ? at compile() time.
/(literal) → /\\(literal\\)
/[bracket] → /\\[bracket\\]
/a+b → /a\\+b (+ is special unless escaped)
/resource?p=1 → /resource\\?p=1 (? starts a modifier unless escaped)
Optional path params no longer use a trailing ? on :name — use {/:name} instead (see above); that is different from a literal ? in the URL.
Inline regex like /:id(\d+) is no longer supported. Remove regex patterns.
/:id(\d+) → /:id
Optional with prefix:
/:attr1?{-:attr2}?{-:attr3}? → {/:attr1}{-:attr2}{-:attr3}
Query params embedded in path (prefer grouped params; do not drop \\ before a literal ? unless you rewrite to this form):
/search\\?q=:q?&page=:page? → /search?{q=:q}{&page=:page}
Search patterns for locating v6 paths in a codebase:
path: properties in RestEndpoint, resource(), .extend() callsdocs/rest/api/typescript-tests/pathTypes.ts infers TypeScript parameter types from path strings:
:name and *name → required parameter{/:name} and {/*name} → optional parameter (trailing } signals optionality):"quoted" → CleanKey strips quotes for the property name\\: / \\* / \\} → escaped, not treated as parameters