-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
55 lines (48 loc) · 1.36 KB
/
index.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
var _ = require('lodash')
module.exports = function (k, d, o) {
var json = {}
json[k] = serializeData(d, o || {})
return json
function deleteWithout (obj, keys) {
_.each(_.flatten(Array(keys)), function (key) {
delete obj[key]
})
}
function sideloadData (obj, relations) {
_.each(_.flatten(Array(relations)), function(relation) {
if (obj[relation.name]) {
var key = relation.key || 'id'
serializeData(obj[relation.name], relation)
addToJson(relation.plural || relation.name, obj[relation.name])
if (_.isArray(obj[relation.name])) {
obj[relation.name] = _.pluck(obj[relation.name], key)
} else {
obj[relation.name] = obj[relation.name][key]
}
}
})
}
function serializeData (data, options) {
if (_.isArray(data)) {
return _.map(data, function (object) {
serializeObject(object, options)
return object
})
} else {
serializeObject(data, options)
return data
}
}
function serializeObject (object, options) {
if (options.without) deleteWithout(object, options.without)
if (options.sideload) sideloadData(object, options.sideload)
}
function addToJson (name, data) {
data = _.flatten(Array(data))
if (json[name]) {
json[name].concat(data)
} else {
json[name] = data
}
}
}