fix(browser): accept targetId prefixes
This commit is contained in:
24
src/browser/target-id.ts
Normal file
24
src/browser/target-id.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
export type TargetIdResolution =
|
||||
| { ok: true; targetId: string }
|
||||
| { ok: false; reason: "not_found" | "ambiguous"; matches?: string[] };
|
||||
|
||||
export function resolveTargetIdFromTabs(
|
||||
input: string,
|
||||
tabs: Array<{ targetId: string }>,
|
||||
): TargetIdResolution {
|
||||
const needle = input.trim();
|
||||
if (!needle) return { ok: false, reason: "not_found" };
|
||||
|
||||
const exact = tabs.find((t) => t.targetId === needle);
|
||||
if (exact) return { ok: true, targetId: exact.targetId };
|
||||
|
||||
const lower = needle.toLowerCase();
|
||||
const matches = tabs
|
||||
.map((t) => t.targetId)
|
||||
.filter((id) => id.toLowerCase().startsWith(lower));
|
||||
|
||||
const only = matches.length === 1 ? matches[0] : undefined;
|
||||
if (only) return { ok: true, targetId: only };
|
||||
if (matches.length === 0) return { ok: false, reason: "not_found" };
|
||||
return { ok: false, reason: "ambiguous", matches };
|
||||
}
|
||||
Reference in New Issue
Block a user