-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.js
76 lines (65 loc) · 1.57 KB
/
main.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
66
67
68
69
70
71
72
73
74
75
76
module.exports = function() {
var tu = {};
tu.getSchema = function(rec, name, id) {
var schema = {
"type": "SCHEMA",
"stream": name,
"key_properties": [id],
"schema": {
"type": "object",
"properties": inferSchema(rec)
}
}
return schema;
}
tu.printSchema = function(rec, name, id) {
var schema = this.getSchema(rec, name, id);
console.log(JSON.stringify(schema));
return schema;
}
tu.convertRec = function(rec, schema) {
var keys = Object.keys(schema.schema.properties);
var record = {};
keys.forEach( function(key) {
record[key] = rec[key];
});
return record;
}
tu.getRecord = function(rec) {
return {
type: "RECORD",
stream: "people",
record: rec
};
}
function inferSchema(rec) {
var keys = Object.keys(rec);
var properties = {};
keys.forEach( function(key) {
properties[key] = inferDatatype(key);
});
return properties;
}
function isDate(name) {
var dates = ['created', 'edited', 'created_at', 'updated_at'];
return dates.indexOf(name) > -1;
}
function isCollection(name) {
var collections = ['planets', 'films', 'species', 'vehicles', 'starships'];
return collections.indexOf(name) > -1;
}
function inferDatatype(name) {
var type = "";
if (isDate(name)) {
type = {"type":"string", "format":"date-time"}
}
if (isCollection(name)) {
type = {"type":"array","items":{"type":"string"}};
}
else {
type = {"type":"string"};
}
return type;
}
return tu;
}