blob: 7bdb002a366e7ba952ee17a5251f228053ec3ee2 (
plain)
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
|
export const deepLinkEvent = "opencode:deep-link"
export const parseDeepLink = (input: string) => {
if (!input.startsWith("opencode://")) return
if (typeof URL.canParse === "function" && !URL.canParse(input)) return
const url = (() => {
try {
return new URL(input)
} catch {
return undefined
}
})()
if (!url) return
if (url.hostname !== "open-project") return
const directory = url.searchParams.get("directory")
if (!directory) return
return directory
}
export const collectOpenProjectDeepLinks = (urls: string[]) =>
urls.map(parseDeepLink).filter((directory): directory is string => !!directory)
type OpenCodeWindow = Window & {
__OPENCODE__?: {
deepLinks?: string[]
}
}
export const drainPendingDeepLinks = (target: OpenCodeWindow) => {
const pending = target.__OPENCODE__?.deepLinks ?? []
if (pending.length === 0) return []
if (target.__OPENCODE__) target.__OPENCODE__.deepLinks = []
return pending
}
|