summaryrefslogtreecommitdiff
path: root/src/server/api/get-params.ts
blob: 878f223cc3acc9a451c0ea8e533aca7710a4830a (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
import { Context } from 'cafy';

type Defs = {
	params: { [key: string]: Context<any> }
};

export default function <T extends Defs>(defs: T, params: any): [{
	[P in keyof T['params']]: ReturnType<T['params'][P]['get']>[0];
}, Error] {
	const x: any = {};
	let err: Error = null;
	Object.keys(defs.params).some(k => {
		const [v, e] = defs.params[k].get(params[k]);
		if (e) {
			err = new Error(e.message);
			err.name = 'INVALID_PARAM';
			(err as any).param = k;
			return true;
		} else {
			if (v === undefined && defs.params[k].data.default) {
				x[k] = defs.params[k].data.default;
			} else {
				x[k] = v;
			}
			return false;
		}
	});
	return [x, err];
}