-
Notifications
You must be signed in to change notification settings - Fork 30.6k
Expand file tree
/
Copy pathmatch-segments.ts
More file actions
35 lines (30 loc) · 1.03 KB
/
match-segments.ts
File metadata and controls
35 lines (30 loc) · 1.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import { getSegmentParam } from '../../server/app-render/get-segment-param'
import type { Segment } from '../../server/app-render/types'
export const matchSegment = (
existingSegment: Segment,
segment: Segment
): boolean => {
// Common case: segment is just a string
if (typeof existingSegment === 'string' && typeof segment === 'string') {
return existingSegment === segment
}
// Dynamic parameter case: segment is an array with param/value. Both param and value are compared.
if (Array.isArray(existingSegment) && Array.isArray(segment)) {
return (
existingSegment[0] === segment[0] && existingSegment[1] === segment[1]
)
}
return false
}
/*
* This function is used to determine if an existing segment can be overridden by the incoming segment.
*/
export const canSegmentBeOverridden = (
existingSegment: Segment,
segment: Segment
): boolean => {
if (Array.isArray(existingSegment) || !Array.isArray(segment)) {
return false
}
return getSegmentParam(existingSegment)?.param === segment[0]
}