all repos — sz-chrome-remote-cdp @ master

pi-browser-harness, patched to drive a Chrome on another host over CDP, with castle_cdp_search web search

src/util/guards.ts (view raw)

 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
export const isRecord = (v: unknown): v is Readonly<Record<string, unknown>> =>
  typeof v === "object" && v !== null && !Array.isArray(v);

export const asRecord = (v: unknown): Readonly<Record<string, unknown>> | undefined =>
  isRecord(v) ? v : undefined;

export const asString = (v: unknown): string | undefined => (typeof v === "string" ? v : undefined);

export const asNumber = (v: unknown): number | undefined => (typeof v === "number" ? v : undefined);

export const asBoolean = (v: unknown): boolean | undefined => (typeof v === "boolean" ? v : undefined);

export const asArrayOf = <T>(
  v: unknown,
  item: (x: unknown) => T | undefined,
): ReadonlyArray<T> | undefined => {
  if (!Array.isArray(v)) return undefined;
  const out: T[] = [];
  for (const x of v) {
    const parsed = item(x);
    if (parsed === undefined) return undefined;
    out.push(parsed);
  }
  return out;
};

export const errnoCode = (e: unknown): string | undefined => {
  if (!(e instanceof Error) || !("code" in e)) return undefined;
  return asString(e.code);
};