@tdb/web
Version:
Common condiguration for serving a web-site and testing web-based UI components.
44 lines (40 loc) • 1.05 kB
text/typescript
import { yaml, fs } from '../common';
import { IParseResponse } from './types';
/**
* Parse JSON and return data or error safely
*/
export function parseJson<T>(input?: string): IParseResponse<T> {
if (!input) {
return {};
}
try {
const data = JSON.parse(input);
return { data, error: undefined };
} catch (err) {
const message = `Failed to parse JSON. ${err.message}`;
return { data: undefined, error: { message } };
}
}
/**
* Parse YAML and return data or error safely
*/
export function parseYaml<T>(input?: string): IParseResponse<T> {
if (!input) {
return {};
}
try {
input = input.replace(/\t/g, ' ');
const data = yaml.safeLoad(input);
return { data, error: undefined };
} catch (err) {
const message = `Failed to parse YAML. ${err.message}`;
return { data: undefined, error: { message } };
}
}
/**
* Loads a YAML file and parses it.
*/
export async function parseYamlFile<T>(path: string) {
const file = await fs.readFile(path);
return parseYaml<T>(file.toString());
}