38 lines
832 B
TypeScript
38 lines
832 B
TypeScript
// composables/useSafeQuery.ts
|
|
import { useRoute } from 'vue-router'
|
|
|
|
export const useSafeQuery = () => {
|
|
const route = useRoute()
|
|
|
|
const getNumber = (key: string): number | undefined => {
|
|
const value = route.query[key]
|
|
if (typeof value === 'string') {
|
|
const parsed = Number(value)
|
|
return isNaN(parsed) ? undefined : parsed
|
|
}
|
|
return undefined
|
|
}
|
|
|
|
const getArray = (key: string): string[] => {
|
|
const value = route.query[key]
|
|
if (Array.isArray(value)) {
|
|
return value.map(String)
|
|
}
|
|
if (typeof value === 'string') {
|
|
return [value]
|
|
}
|
|
return []
|
|
}
|
|
|
|
const getString = (key: string): string | undefined => {
|
|
const value = route.query[key]
|
|
return typeof value === 'string' ? value : undefined
|
|
}
|
|
|
|
return {
|
|
getNumber,
|
|
getArray,
|
|
getString,
|
|
}
|
|
}
|