-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata-type.js
More file actions
75 lines (74 loc) · 1.72 KB
/
data-type.js
File metadata and controls
75 lines (74 loc) · 1.72 KB
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
66
67
68
69
70
71
72
73
74
75
export default class DataType {
/**
* @param name
* @param get
* @param set
*/
constructor({ name, get, set }) {
this.name = name;
this.get = get ?? (v => v);
this.set = set ?? (v => v);
}
}
export const DataTypes = {
ARRAY(Type) {
return new DataType({
name: 'ARRAY',
get(v) {
return v.split(/[\r\n]+/).map(row => Type.get(row)).filter(v => v !== '');
},
set(v) {
return v.map(row => Type.set(row)).join('\n');
},
});
},
STRING: new DataType({
name: 'STRING',
get(v) { return v; },
set(v) { return String(v); },
}),
PERCENTAGE: new DataType({
name: 'PERCENTAGE',
get(v) { return Number(((v || 0) * 100).toFixed(8)); },
set(v) { return (v || 0) / 100; },
}),
NUMBER: new DataType({
name: 'NUMBER',
get(v) { return Number(v || 0); },
set(v) { return (v || 0); },
}),
BOOLEAN: new DataType({
name: 'BOOLEAN',
get(v) { return v === 1; },
set(v) { return v ? 1 : 0; },
}),
JSON: new DataType({
name: 'JSON',
get(v) { return JSON.parse(v); },
set(v) { return JSON.stringify(v); },
}),
DATE: new DataType({
name: 'DATE',
get(v) {
const [mm, dd, yyyy] = v.split('/');
return [yyyy, mm, dd].join('-');
},
set(v) {
const [yyyy, mm, dd] = v.split('-');
return [mm, dd, yyyy].join('/');
},
}),
DATETIME: new DataType({
name: 'DATETIME',
get(v) {
const [date, time] = v.split(' ');
const [mm, dd, yyyy] = date.split('/');
return `${yyyy}-${mm}-${dd}T${time}`;
},
set(v) {
const [date, time] = v.split('T');
const [yyyy, mm, dd] = date.split('-');
return `${mm}/${dd}/${yyyy} ${time}`;
},
})
};