@@ -12,14 +12,22 @@ export type ParamParsersMap = Map<
12
12
}
13
13
>
14
14
15
+ // just for type strictness
16
+ const _NATIVE_PARAM_PARSERS = [ 'int' , 'bool' ] as const
17
+ const NATIVE_PARAM_PARSERS = _NATIVE_PARAM_PARSERS as readonly string [ ]
18
+ const NATIVE_PARAM_PARSERS_TYPES = {
19
+ int : 'number' ,
20
+ bool : 'boolean' ,
21
+ } satisfies Record < ( typeof _NATIVE_PARAM_PARSERS ) [ number ] , string >
22
+
15
23
export function warnMissingParamParsers (
16
24
tree : PrefixTree ,
17
25
paramParsers : ParamParsersMap
18
26
) {
19
27
for ( const node of tree . getChildrenDeepSorted ( ) ) {
20
28
for ( const param of node . params ) {
21
29
if ( param . parser && ! paramParsers . has ( param . parser ) ) {
22
- if ( param . parser !== 'int' ) {
30
+ if ( ! NATIVE_PARAM_PARSERS . includes ( param . parser ) ) {
23
31
console . warn (
24
32
`Parameter parser "${ param . parser } " not found for route "${ node . fullPath } ".`
25
33
)
@@ -48,8 +56,10 @@ export function generateParamsTypes(
48
56
if ( param . parser ) {
49
57
if ( parparsersMap . has ( param . parser ) ) {
50
58
return parparsersMap . get ( param . parser ) ! . typeName
51
- } else if ( param . parser === 'int' ) {
52
- return 'number'
59
+ } else if ( param . parser in NATIVE_PARAM_PARSERS_TYPES ) {
60
+ return NATIVE_PARAM_PARSERS_TYPES [
61
+ param . parser as keyof typeof NATIVE_PARAM_PARSERS_TYPES
62
+ ]
53
63
}
54
64
}
55
65
return null
@@ -61,15 +71,18 @@ export function generateParamParserOptions(
61
71
importsMap : ImportsMap ,
62
72
paramParsers : ParamParsersMap
63
73
) : string {
74
+ if ( ! param . parser ) return ''
75
+
64
76
// we prioritize custom parsers to let users override them
65
- if ( param . parser && paramParsers . has ( param . parser ) ) {
77
+ if ( paramParsers . has ( param . parser ) ) {
66
78
const { name, absolutePath } = paramParsers . get ( param . parser ) !
67
79
const varName = `PARAM_PARSER__${ name } `
68
80
importsMap . add ( absolutePath , { name : 'parser' , as : varName } )
69
81
return varName
70
- } else if ( param . parser === 'int' ) {
71
- importsMap . add ( 'vue-router/experimental' , `PARAM_PARSER_INT` )
72
- return `PARAM_PARSER_INT`
82
+ } else if ( NATIVE_PARAM_PARSERS . includes ( param . parser ) ) {
83
+ const varName = `PARAM_PARSER_${ param . parser . toUpperCase ( ) } `
84
+ importsMap . add ( 'vue-router/experimental' , varName )
85
+ return varName
73
86
}
74
87
return ''
75
88
}
0 commit comments