@@ -46,28 +46,33 @@ function extractUrlFromText(text: string): string | null {
4646 return null ;
4747}
4848
49- function parseAppleMapsUrl ( url : URL ) : Coordinates | null {
50- // ll param takes precedence
51- const ll = url . searchParams . get ( "ll" ) ;
52- if ( ll ) {
53- const parts = ll . split ( "," ) ;
54- if ( parts . length === 2 ) {
55- const lat = parseFloat ( parts [ 0 ] ) ;
56- const lng = parseFloat ( parts [ 1 ] ) ;
57- if ( ! isNaN ( lat ) && ! isNaN ( lng ) ) return { lat, lng } ;
58- }
49+ function parseCoordParam ( value : string | null ) : Coordinates | null {
50+ if ( ! value ) return null ;
51+ const parts = value . split ( "," ) ;
52+ if ( parts . length === 2 ) {
53+ const lat = parseFloat ( parts [ 0 ] . trim ( ) ) ;
54+ const lng = parseFloat ( parts [ 1 ] . trim ( ) ) ;
55+ if ( ! isNaN ( lat ) && ! isNaN ( lng ) ) return { lat, lng } ;
5956 }
57+ return null ;
58+ }
59+
60+ function parseAppleMapsUrl ( url : URL ) : Coordinates | null {
61+ // coordinate param (iOS dropped pin: /place?coordinate=lat,lng)
62+ const coord = parseCoordParam ( url . searchParams . get ( "coordinate" ) ) ;
63+ if ( coord ) return coord ;
64+
65+ // ll param
66+ const ll = parseCoordParam ( url . searchParams . get ( "ll" ) ) ;
67+ if ( ll ) return ll ;
6068
6169 // Fall back to q param if it looks like coordinates
62- const q = url . searchParams . get ( "q" ) ;
63- if ( q ) {
64- const parts = q . split ( "," ) ;
65- if ( parts . length === 2 ) {
66- const lat = parseFloat ( parts [ 0 ] . trim ( ) ) ;
67- const lng = parseFloat ( parts [ 1 ] . trim ( ) ) ;
68- if ( ! isNaN ( lat ) && ! isNaN ( lng ) ) return { lat, lng } ;
69- }
70- }
70+ const q = parseCoordParam ( url . searchParams . get ( "q" ) ) ;
71+ if ( q ) return q ;
72+
73+ // sll param (sometimes included as starting location)
74+ const sll = parseCoordParam ( url . searchParams . get ( "sll" ) ) ;
75+ if ( sll ) return sll ;
7176
7277 return null ;
7378}
0 commit comments