Skip to content

Commit

Permalink
🐛 FIX: undefined hash is now well handled
Browse files Browse the repository at this point in the history
  • Loading branch information
jycouet committed Jan 20, 2025
1 parent 3adec41 commit 50d234c
Show file tree
Hide file tree
Showing 24 changed files with 600 additions and 751 deletions.
5 changes: 5 additions & 0 deletions .changeset/brave-ravens-shout.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'vite-plugin-kit-routes': patch
---

fix: undefined hash is now well handled
4 changes: 2 additions & 2 deletions packages/vite-plugin-kit-routes/src/lib/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ const PAGES = {
},
'/anchors/[id]': (params: {
id: string | number
hash: 'section0' | 'section1' | 'section2' | 'section3'
hash?: 'section0' | 'section1' | 'section2' | 'section3'
}) => {
return `/anchors/${params['id']}${appendSp({ __KIT_ROUTES_ANCHOR__: params['hash'] })}`
},
Expand Down Expand Up @@ -198,7 +198,7 @@ export const appendSp = (

let anchor = ''
for (const [name, val] of Object.entries(sp)) {
if (name === '__KIT_ROUTES_ANCHOR__') {
if (name === '__KIT_ROUTES_ANCHOR__' && val !== undefined) {
anchor = `#${val}`
continue
}
Expand Down
2 changes: 1 addition & 1 deletion packages/vite-plugin-kit-routes/src/lib/format.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export const appendSp = (
let anchor = ''
for (const [name, val] of Object.entries(sp)) {
if (name === '__KIT_ROUTES_ANCHOR__') {
if (name === '__KIT_ROUTES_ANCHOR__' && val !== undefined) {
anchor = \`#\${val}\`
continue
}
Expand Down
2 changes: 2 additions & 0 deletions packages/vite-plugin-kit-routes/src/routes/+layout.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@
>
|
<a href={route('/anchors/[id]', { hash: 'section2', id: '123' })}>Anchors with second param</a>
|
<a href={route('/anchors/[id]', { id: '123' })}>Anchors no hash</a>
</li>
</ul>

Expand Down
2 changes: 1 addition & 1 deletion packages/vite-plugin-kit-routes/src/test/ROUTES_base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ export const appendSp = (

let anchor = ''
for (const [name, val] of Object.entries(sp)) {
if (name === '__KIT_ROUTES_ANCHOR__') {
if (name === '__KIT_ROUTES_ANCHOR__' && val !== undefined) {
anchor = `#${val}`
continue
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,49 +13,47 @@ export const PAGES = {
"/subGroup": `/subGroup`,
"/subGroup/user": `/subGroup/user`,
"/subGroup2": (params: { first: (string | number) }) => {
return `/subGroup2${appendSp({ 'first': params['first'] })}`
return `/subGroup2${appendSp({ first: params.first })}`
},
"/contract": (params?: { lang?: ('fr' | 'en' | 'hu' | 'at' | string) }, sp?: Record<string, string | number>) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/contract${appendSp(sp)}`
return `${params?.lang ? `/${params?.lang}`: ''}/contract${appendSp(sp)}`
},
"/contract/[id]": (params: { id: (string | number), lang?: ('fr' | 'en' | 'hu' | 'at' | string) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/contract/${params['id']}`
return `${params?.lang ? `/${params?.lang}`: ''}/contract/${params.id}`
},
"/gp/one": (params?: { lang?: ('fr' | 'en' | 'hu' | 'at' | string) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/gp/one`
return `${params?.lang ? `/${params?.lang}`: ''}/gp/one`
},
"/gp/two": (params?: { lang?: ('fr' | 'en' | 'hu' | 'at' | string) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/gp/two`
return `${params?.lang ? `/${params?.lang}`: ''}/gp/two`
},
"/main": (params?: { lang?: ('fr' | 'en' | 'hu' | 'at' | string) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/main`
return `${params?.lang ? `/${params?.lang}`: ''}/main`
},
"/match/[id=ab]": (params: { id: (Parameters<typeof import('../params/ab.ts').match>[0]), lang?: ('fr' | 'en' | 'hu' | 'at' | string) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/match/${params['id']}`
return `${params?.lang ? `/${params?.lang}`: ''}/match/${params.id}`
},
"/match/[id=int]": (params: { id: (number), lang?: ('fr' | 'en' | 'hu' | 'at' | string) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/match/${params['id']}`
return `${params?.lang ? `/${params?.lang}`: ''}/match/${params.id}`
},
"/site": (params?: { lang?: ('fr' | 'en' | 'hu' | 'at' | string), limit?: (number) }, sp?: Record<string, string | number>) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/site${appendSp({ ...sp, 'limit': params?.['limit'] })}`
return `${params?.lang ? `/${params?.lang}`: ''}/site${appendSp({ ...sp, limit: params?.limit })}`
},
"/site/[id]": (params?: { lang?: ('fr' | 'hu' | undefined), id?: (string), limit?: (number), demo?: (string), 'da-sh'?: (string) }) => {
"/site/[id]": (params?: { lang?: ('fr' | 'hu' | undefined), id?: (string), limit?: (number), demo?: (string) }) => {
params = params ?? {}
params['lang'] = params['lang'] ?? "fr";
params['id'] = params['id'] ?? "Vienna";
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/site/${params['id']}${appendSp({ 'limit': params['limit'], 'demo': params['demo'], 'da-sh': params['da-sh'] })}`
params.lang = params.lang ?? "fr";
params.id = params.id ?? "Vienna";
return `${params?.lang ? `/${params?.lang}`: ''}/site/${params.id}${appendSp({ limit: params.limit, demo: params.demo })}`
},
"/site_contract/[siteId]-[contractId]": (params: { siteId: (string | number), contractId: (string | number), lang?: ('fr' | 'en' | 'hu' | 'at' | string), limit?: (number) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/site_contract/${params['siteId']}-${params['contractId']}${appendSp({ 'limit': params['limit'] })}`
return `${params?.lang ? `/${params?.lang}`: ''}/site_contract/${params.siteId}-${params.contractId}${appendSp({ limit: params.limit })}`
},
"/a/[...rest]/z": (params: { rest: (string | number)[] }) => {
return `/a/${params['rest']?.join('/')}/z`
return `/a/${params.rest?.join('/')}/z`
},
"/anchors": (params: { hash: ("section0" | "section1" | "section2" | "section3") }) => {
return `/anchors${appendSp({ '__KIT_ROUTES_ANCHOR__': params['hash'] })}`
},
"/anchors/[id]": (params: { id: (string | number), hash: ("section0" | "section1" | "section2" | "section3") }) => {
return `/anchors/${params['id']}${appendSp({ '__KIT_ROUTES_ANCHOR__': params['hash'] })}`
"/anchors": `/anchors`,
"/anchors/[id]": (params: { id: (string | number) }) => {
return `/anchors/${params.id}`
},
"/lay/normal": `/lay/normal`,
"/lay/root-layout": `/lay/root-layout`,
Expand All @@ -73,18 +71,18 @@ export const SERVERS = {
"GET /server_func_get_and_": `/server_func_get_and_`,
"POST /server_func_post": `/server_func_post`,
"GET /contract": (params?: { lang?: ('fr' | 'en' | 'hu' | 'at' | string) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/contract`
return `${params?.lang ? `/${params?.lang}`: ''}/contract`
},
"POST /contract": (params?: { lang?: ('fr' | 'en' | 'hu' | 'at' | string) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/contract`
return `${params?.lang ? `/${params?.lang}`: ''}/contract`
},
"GET /site": (params?: { lang?: ('fr' | 'en' | 'hu' | 'at' | string) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/site`
return `${params?.lang ? `/${params?.lang}`: ''}/site`
},
"GET /api/graphql": `/api/graphql`,
"POST /api/graphql": `/api/graphql`,
"GET /data/errors/[locale].json": (params: { locale: (string | number) }) => {
return `/data/errors/${params['locale']}.json`
return `/data/errors/${params.locale}.json`
}
}

Expand All @@ -93,23 +91,23 @@ export const SERVERS = {
*/
export const ACTIONS = {
"default /contract/[id]": (params: { id: (string | number), lang?: ('fr' | 'en' | 'hu' | 'at' | string), limit?: (number) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/contract/${params['id']}${appendSp({ 'limit': params['limit'] })}`
return `${params?.lang ? `/${params?.lang}`: ''}/contract/${params.id}${appendSp({ limit: params.limit })}`
},
"create /site": (params?: { lang?: ('fr' | 'en' | 'hu' | 'at' | string) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/site?/create`
return `${params?.lang ? `/${params?.lang}`: ''}/site?/create`
},
"update /site/[id]": (params: { id: (string | number), lang?: ('fr' | 'en' | 'hu' | 'at' | string) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/site/${params['id']}?/update`
return `${params?.lang ? `/${params?.lang}`: ''}/site/${params.id}?/update`
},
"delete /site/[id]": (params: { id: (string | number), lang?: ('fr' | 'en' | 'hu' | 'at' | string) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/site/${params['id']}?/delete`
return `${params?.lang ? `/${params?.lang}`: ''}/site/${params.id}?/delete`
},
"noSatisfies /site_contract": (params?: { lang?: ('fr' | 'en' | 'hu' | 'at' | string) }) => {
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/site_contract?/noSatisfies`
return `${params?.lang ? `/${params?.lang}`: ''}/site_contract?/noSatisfies`
},
"send /site_contract/[siteId]-[contractId]": (params: { siteId: (string | number), contractId: (string | number), lang?: ('fr' | 'en' | 'hu' | 'at' | string), extra?: ('A' | 'B') }) => {
params['extra'] = params['extra'] ?? "A";
return `${params?.['lang'] ? `/${params?.['lang']}`: ''}/site_contract/${params['siteId']}-${params['contractId']}?/send${appendSp({ 'extra': params['extra'] }, '&')}`
params.extra = params.extra ?? "A";
return `${params?.lang ? `/${params?.lang}`: ''}/site_contract/${params.siteId}-${params.contractId}?/send${appendSp({ extra: params.extra }, '&')}`
}
}

Expand All @@ -119,12 +117,12 @@ export const ACTIONS = {
export const LINKS = {
"twitter": `https://twitter.com/jycouet`,
"twitter_post": (params: { name: (string | number), id: (string | number) }) => {
return `https://twitter.com/${params['name']}/status/${params['id']}`
return `https://twitter.com/${params.name}/status/${params.id}`
},
"gravatar": (params: { str: (string | number), s?: (number), d?: ("retro" | "identicon") }) => {
params['s'] = params['s'] ?? 75;
params['d'] = params['d'] ?? "identicon";
return `https://www.gravatar.com/avatar/${params['str']}${appendSp({ 's': params['s'], 'd': params['d'] })}`
params.s = params.s ?? 75;
params.d = params.d ?? "identicon";
return `https://www.gravatar.com/avatar/${params.str}${appendSp({ s: params.s, d: params.d })}`
}
}

Expand All @@ -133,10 +131,7 @@ type ParamValue = string | number | undefined
/**
* Append search params to a string
*/
export const appendSp = (
sp?: Record<string, ParamValue | ParamValue[]>,
prefix: '?' | '&' = '?',
) => {
export const appendSp = (sp?: Record<string, ParamValue | ParamValue[]>, prefix: '?' | '&' = '?') => {
if (sp === undefined) return ''

const params = new URLSearchParams()
Expand All @@ -146,12 +141,7 @@ export const appendSp = (
}
}

let anchor = ''
for (const [name, val] of Object.entries(sp)) {
if (name === '__KIT_ROUTES_ANCHOR__') {
anchor = `#${val}`
continue
}
if (Array.isArray(val)) {
for (const v of val) {
append(name, v)
Expand All @@ -162,8 +152,8 @@ export const appendSp = (
}

const formatted = params.toString()
if (formatted || anchor) {
return `${prefix}${formatted}${anchor}`.replace('?#', '#')
if (formatted) {
return `${prefix}${formatted}`
}
return ''
}
Expand Down Expand Up @@ -205,5 +195,5 @@ export type KIT_ROUTES = {
SERVERS: { 'GET /server_func_get': never, 'GET /server_func_get_and_': never, 'POST /server_func_post': never, 'GET /contract': 'lang', 'POST /contract': 'lang', 'GET /site': 'lang', 'GET /api/graphql': never, 'POST /api/graphql': never, 'GET /data/errors/[locale].json': 'locale' }
ACTIONS: { 'default /contract/[id]': 'id' | 'lang', 'create /site': 'lang', 'update /site/[id]': 'id' | 'lang', 'delete /site/[id]': 'id' | 'lang', 'noSatisfies /site_contract': 'lang', 'send /site_contract/[siteId]-[contractId]': 'siteId' | 'contractId' | 'lang' }
LINKS: { 'twitter': never, 'twitter_post': 'name' | 'id', 'gravatar': 'str' }
Params: { 'first': never, 'lang': never, 'id': never, 'limit': never, 'demo': never, 'da-sh': never, 'siteId': never, 'contractId': never, 'rest': never, 'hash': never, 'locale': never, 'extra': never, 'name': never, 'str': never, 's': never, 'd': never }
Params: { first: never, lang: never, id: never, limit: never, demo: never, siteId: never, contractId: never, rest: never, locale: never, extra: never, name: never, str: never, s: never, d: never }
}
Loading

0 comments on commit 50d234c

Please sign in to comment.