UNPKG

js-data-jsonapi-light

Version:

JsonApi adapter serializer/dezerializer light.

55 lines 1.99 kB
"use strict"; 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