blob: 2744c683ff62da93c38ed5def8f994bcc7c6e5be (
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
|
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);
};
|