jsona
Version:
Provide data formatters (data model builder & json builder) to work with JSON API specification v1.0 in your JavaScript / TypeScript code
114 lines • 5.12 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.JsonPropertiesMapper = exports.defineRelationGetter = exports.ModelPropertiesMapper = exports.RELATIONSHIP_NAMES_PROP = void 0;
var tslib_1 = require("tslib");
exports.RELATIONSHIP_NAMES_PROP = 'relationshipNames';
var ModelPropertiesMapper = (function () {
function ModelPropertiesMapper() {
}
ModelPropertiesMapper.prototype.getId = function (model) {
return model.id;
};
ModelPropertiesMapper.prototype.getType = function (model) {
return model.type;
};
ModelPropertiesMapper.prototype.getAttributes = function (model) {
var exceptProps = ['id', 'type', exports.RELATIONSHIP_NAMES_PROP];
if (Array.isArray(model[exports.RELATIONSHIP_NAMES_PROP])) {
exceptProps.push.apply(exceptProps, model[exports.RELATIONSHIP_NAMES_PROP]);
}
else if (model[exports.RELATIONSHIP_NAMES_PROP]) {
console.warn("Can't getAttributes correctly, '".concat(exports.RELATIONSHIP_NAMES_PROP, "' property of ").concat(model.type, "-").concat(model.id, " model\n isn't array of relationship names"), model[exports.RELATIONSHIP_NAMES_PROP]);
}
var attributes = {};
Object.keys(model).forEach(function (attrName) {
if (exceptProps.indexOf(attrName) === -1) {
attributes[attrName] = model[attrName];
}
});
return attributes;
};
ModelPropertiesMapper.prototype.getRelationships = function (model) {
var relationshipNames = model[exports.RELATIONSHIP_NAMES_PROP];
if (!relationshipNames || Array.isArray(relationshipNames) && !relationshipNames.length) {
return;
}
else if (relationshipNames && !Array.isArray(relationshipNames)) {
console.warn("Can't getRelationships correctly,\n '".concat(exports.RELATIONSHIP_NAMES_PROP, "' property of ").concat(model.type, "-").concat(model.id, " model\n isn't array of relationship names"), model[exports.RELATIONSHIP_NAMES_PROP]);
return;
}
var relationships = {};
relationshipNames.forEach(function (relationName) {
if (model[relationName] !== undefined) {
relationships[relationName] = model[relationName];
}
});
return relationships;
};
return ModelPropertiesMapper;
}());
exports.ModelPropertiesMapper = ModelPropertiesMapper;
function defineRelationGetter(model, relationName, buildRelation) {
Object.defineProperty(model, relationName, {
enumerable: true,
configurable: true,
set: function (value) {
delete model[relationName];
model[relationName] = value;
},
get: function () {
delete model[relationName];
return model[relationName] = buildRelation();
},
});
}
exports.defineRelationGetter = defineRelationGetter;
var JsonPropertiesMapper = (function () {
function JsonPropertiesMapper() {
}
JsonPropertiesMapper.prototype.createModel = function (type) {
return { type: type };
};
JsonPropertiesMapper.prototype.setId = function (model, id) {
model.id = id;
};
JsonPropertiesMapper.prototype.setAttributes = function (model, attributes) {
Object.keys(attributes).forEach(function (propName) {
model[propName] = attributes[propName];
});
};
JsonPropertiesMapper.prototype.setMeta = function (model, meta) {
model.meta = meta;
};
JsonPropertiesMapper.prototype.setLinks = function (model, links) {
model.links = links;
};
JsonPropertiesMapper.prototype.setResourceIdObjMeta = function (model, meta) {
model.resourceIdObjMeta = meta;
};
JsonPropertiesMapper.prototype.setRelationships = function (model, relationships) {
Object.keys(relationships).forEach(function (propName) {
if (typeof relationships[propName] === 'function') {
defineRelationGetter(model, propName, relationships[propName]);
}
else {
model[propName] = relationships[propName];
}
});
var newNames = Object.keys(relationships);
var currentNames = model[exports.RELATIONSHIP_NAMES_PROP];
if (currentNames && currentNames.length) {
model[exports.RELATIONSHIP_NAMES_PROP] = tslib_1.__spreadArray(tslib_1.__spreadArray([], currentNames, true), newNames, true).filter(function (value, i, self) { return self.indexOf(value) === i; });
}
else {
model[exports.RELATIONSHIP_NAMES_PROP] = newNames;
}
};
JsonPropertiesMapper.prototype.setRelationshipLinks = function (parentModel, relationName, links) {
};
JsonPropertiesMapper.prototype.setRelationshipMeta = function (parentModel, relationName, links) {
};
return JsonPropertiesMapper;
}());
exports.JsonPropertiesMapper = JsonPropertiesMapper;
//# sourceMappingURL=simplePropertyMappers.js.map
;