/
field-definitions.js
65 lines (63 loc) · 1.57 KB
/
field-definitions.js
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
const identity = (v) => v;
const mkFn = (
def,
meta = {
marshall: identity,
unmarshall: identity
}
) => {
const r = (...args) => args.reduce((prev, arg) => ({ ...prev, ...arg }), def);
r.meta = meta;
return r;
};
export default {
date: mkFn({ type: 'date', format: 'yyyy-MM-dd' }),
boolean: mkFn({ type: 'boolean' }),
integer: mkFn({ type: 'long' }),
email: mkFn({ type: 'keyword' }),
uuid: mkFn({ type: 'keyword' }),
id: mkFn({ type: 'keyword' }),
keyword: mkFn({ type: 'keyword' }),
point: mkFn(
{ type: 'geo_point' },
{
marshall: (v) => (v ? [v[0], v[1]] : null),
unmarshall: identity
}
),
shape: mkFn(
{ type: 'geo_shape' },
{
marshall: (v) => (v ? { type: 'Polygon', coordinates: [v] } : null),
unmarshall: (v) => (v !== null ? v.coordinates[0] : null)
}
),
polygon: mkFn(
{ type: 'geo_shape' },
{
marshall: (v) => (v ? { type: 'Polygon', coordinates: v } : null),
unmarshall: (v) => (v !== null ? v.coordinates : null)
}
),
polygons: mkFn(
{ type: 'geo_shape' },
{
marshall: (vs) => (
Array.isArray(vs) && vs.length !== 0
? { type: 'Multipolygon', coordinates: vs }
: null
),
unmarshall: (vs) => (vs !== null ? vs.coordinates : null)
}
),
datetime: mkFn({ type: 'date', format: "yyyy-MM-dd'T'HH:mm:ss.SSSX" }),
string: mkFn({ type: 'text' }),
enum: mkFn({ type: 'keyword' }),
object: mkFn(
{ type: 'object', enabled: false },
{
marshall: (v) => [v],
unmarshall: (v) => v[0]
}
)
};