js-data-jsonapi-light
Version:
JsonApi adapter serializer/dezerializer light.
55 lines • 1.99 kB
JavaScript
;
var utils_1 = require("./utils");
var js_data_1 = require("js-data");
function wrapSerialize(self) {
return function (mapper, data, opts) {
var beforeSerialize = opts.beforeSerialize || mapper.beforeSerialize || self.options.beforeSerialize, afterSerialize = opts.afterSerialize || mapper.afterSerialize || self.options.afterSerialize;
if (beforeSerialize)
data = beforeSerialize.call(self, mapper, data, opts);
data = jsonApiSerialize.call(self, mapper, data, opts);
if (afterSerialize)
data = afterSerialize.call(self, mapper, data, opts);
return data;
};
}
exports.wrapSerialize = wrapSerialize;
function jsonApiSerialize(mapper, data, opts) {
var id = data[mapper.idAttribute];
delete data[mapper.idAttribute];
utils_1.mapperCacheRelationByField(mapper);
var output = { data: { type: mapper.name } };
if (id)
output.data.id = id;
var relationships = {};
var attributes = {};
if (!opts.forceReplace && opts.changes && id) {
data = js_data_1.utils.deepMixIn(js_data_1.utils.deepMixIn({}, opts.changes.changed), opts.changes.added);
}
if (opts.forceRelationshipsInAttributes !== true) {
for (var key in data) {
var relation = mapper.relationByFieldId[key];
if (!relation) {
attributes[key] = data[key];
continue;
}
relationships[relation.localField] = {
data: {
type: relation.relation,
id: data[key]
}
};
}
}
else {
attributes = data;
}
if (Object.keys(relationships).length !== 0) {
output.data.relationships = relationships;
}
if (Object.keys(attributes).length !== 0) {
output.data.attributes = attributes;
}
return output;
}
exports.jsonApiSerialize = jsonApiSerialize;
//# sourceMappingURL=serializer.js.map