@@ -2,7 +2,11 @@ import type {
2
2
AlternateLinkDescriptor ,
3
3
ResolvedAlternateURLs ,
4
4
} from '../types/alternative-urls-types'
5
- import type { Metadata , ResolvedMetadata } from '../types/metadata-interface'
5
+ import type {
6
+ Metadata ,
7
+ ResolvedMetadata ,
8
+ Viewport ,
9
+ } from '../types/metadata-interface'
6
10
import type { ResolvedVerification } from '../types/metadata-types'
7
11
import type {
8
12
FieldResolver ,
@@ -15,19 +19,21 @@ import { resolveAbsoluteUrlWithPathname } from './resolve-url'
15
19
function resolveAlternateUrl (
16
20
url : string | URL ,
17
21
metadataBase : URL | null ,
18
- pathname : string
22
+ metadataContext : MetadataContext
19
23
) {
20
24
// If alter native url is an URL instance,
21
25
// we treat it as a URL base and resolve with current pathname
22
26
if ( url instanceof URL ) {
23
- url = new URL ( pathname , url )
27
+ url = new URL ( metadataContext . pathname , url )
24
28
}
25
- return resolveAbsoluteUrlWithPathname ( url , metadataBase , pathname )
29
+ return resolveAbsoluteUrlWithPathname ( url , metadataBase , metadataContext )
26
30
}
27
31
28
- export const resolveThemeColor : FieldResolver < 'themeColor' > = ( themeColor ) => {
32
+ export const resolveThemeColor : FieldResolver < 'themeColor' , Viewport > = (
33
+ themeColor
34
+ ) => {
29
35
if ( ! themeColor ) return null
30
- const themeColorDescriptors : ResolvedMetadata [ 'themeColor' ] = [ ]
36
+ const themeColorDescriptors : Viewport [ 'themeColor' ] = [ ]
31
37
32
38
resolveAsArrayOrUndefined ( themeColor ) ?. forEach ( ( descriptor ) => {
33
39
if ( typeof descriptor === 'string' )
@@ -51,7 +57,7 @@ function resolveUrlValuesOfObject(
51
57
| null
52
58
| undefined ,
53
59
metadataBase : ResolvedMetadata [ 'metadataBase' ] ,
54
- pathname : string
60
+ metadataContext : MetadataContext
55
61
) : null | Record < string , AlternateLinkDescriptor [ ] > {
56
62
if ( ! obj ) return null
57
63
@@ -60,13 +66,13 @@ function resolveUrlValuesOfObject(
60
66
if ( typeof value === 'string' || value instanceof URL ) {
61
67
result [ key ] = [
62
68
{
63
- url : resolveAlternateUrl ( value , metadataBase , pathname ) ,
69
+ url : resolveAlternateUrl ( value , metadataBase , metadataContext ) ,
64
70
} ,
65
71
]
66
72
} else {
67
73
result [ key ] = [ ]
68
74
value ?. forEach ( ( item , index ) => {
69
- const url = resolveAlternateUrl ( item . url , metadataBase , pathname )
75
+ const url = resolveAlternateUrl ( item . url , metadataBase , metadataContext )
70
76
result [ key ] [ index ] = {
71
77
url,
72
78
title : item . title ,
@@ -80,7 +86,7 @@ function resolveUrlValuesOfObject(
80
86
function resolveCanonicalUrl (
81
87
urlOrDescriptor : string | URL | null | AlternateLinkDescriptor | undefined ,
82
88
metadataBase : URL | null ,
83
- pathname : string
89
+ metadataContext : MetadataContext
84
90
) : null | AlternateLinkDescriptor {
85
91
if ( ! urlOrDescriptor ) return null
86
92
@@ -91,35 +97,35 @@ function resolveCanonicalUrl(
91
97
92
98
// Return string url because structureClone can't handle URL instance
93
99
return {
94
- url : resolveAlternateUrl ( url , metadataBase , pathname ) ,
100
+ url : resolveAlternateUrl ( url , metadataBase , metadataContext ) ,
95
101
}
96
102
}
97
103
98
104
export const resolveAlternates : FieldResolverExtraArgs <
99
105
'alternates' ,
100
106
[ ResolvedMetadata [ 'metadataBase' ] , MetadataContext ]
101
- > = ( alternates , metadataBase , { pathname } ) => {
107
+ > = ( alternates , metadataBase , context ) => {
102
108
if ( ! alternates ) return null
103
109
104
110
const canonical = resolveCanonicalUrl (
105
111
alternates . canonical ,
106
112
metadataBase ,
107
- pathname
113
+ context
108
114
)
109
115
const languages = resolveUrlValuesOfObject (
110
116
alternates . languages ,
111
117
metadataBase ,
112
- pathname
118
+ context
113
119
)
114
120
const media = resolveUrlValuesOfObject (
115
121
alternates . media ,
116
122
metadataBase ,
117
- pathname
123
+ context
118
124
)
119
125
const types = resolveUrlValuesOfObject (
120
126
alternates . types ,
121
127
metadataBase ,
122
- pathname
128
+ context
123
129
)
124
130
125
131
const result : ResolvedAlternateURLs = {
@@ -236,12 +242,12 @@ export const resolveAppLinks: FieldResolver<'appLinks'> = (appLinks) => {
236
242
export const resolveItunes : FieldResolverExtraArgs <
237
243
'itunes' ,
238
244
[ ResolvedMetadata [ 'metadataBase' ] , MetadataContext ]
239
- > = ( itunes , metadataBase , { pathname } ) => {
245
+ > = ( itunes , metadataBase , context ) => {
240
246
if ( ! itunes ) return null
241
247
return {
242
248
appId : itunes . appId ,
243
249
appArgument : itunes . appArgument
244
- ? resolveAlternateUrl ( itunes . appArgument , metadataBase , pathname )
250
+ ? resolveAlternateUrl ( itunes . appArgument , metadataBase , context )
245
251
: undefined ,
246
252
}
247
253
}
0 commit comments