lib/cache.ts
1.6 KB · sha256:323245400e81b77f1a5a121b8d0493463434369cda4f52a64f9131a918435f4f
import { listGroupNames } from "../models/Group";
import { listTrackNames } from "../models/Track";
let groupNames: string[] = [];
let trackNames: string[] = [];
export async function refreshGroups(): Promise<void> {
try {
groupNames = await listGroupNames();
} catch (e) {
console.warn("ward.cache: refreshGroups failed:", (e as Error)?.message);
}
}
export async function refreshTracks(): Promise<void> {
try {
trackNames = await listTrackNames();
} catch (e) {
console.warn("ward.cache: refreshTracks failed:", (e as Error)?.message);
}
}
export async function primeCaches(): Promise<void> {
await Promise.all([refreshGroups(), refreshTracks()]);
}
export const syncGroupNames = (): string[] => groupNames;
export const syncTrackNames = (): string[] => trackNames;
export const groupSuggester = (partial: string) =>
groupNames.filter((n) =>
n.toLowerCase().startsWith(partial.toLowerCase()),
);
export const groupOrNoneSuggester = (partial: string) =>
["none", ...groupNames].filter((n) =>
n.toLowerCase().startsWith(partial.toLowerCase()),
);
export const trackSuggester = (partial: string) =>
trackNames.filter((n) =>
n.toLowerCase().startsWith(partial.toLowerCase()),
);
export const playerSuggester = (partial: string) => {
const lc = partial.toLowerCase();
const names = (rune.bukkit.getOnlinePlayers() as any[]).map((p) =>
String(p.getName()),
);
return names.filter((n) => n.toLowerCase().startsWith(lc));
};
export const booleanSuggester = (partial: string) =>
["true", "false"].filter((v) => v.startsWith(partial.toLowerCase()));