@orbit/jsonapi
Version:
JSON:API support for Orbit.
77 lines • 11.2 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.JSONAPIDocumentSerializer = void 0;
const jsonapi_base_serializer_1 = require("./jsonapi-base-serializer");
class JSONAPIDocumentSerializer extends jsonapi_base_serializer_1.JSONAPIBaseSerializer {
serialize(document) {
let resDocument = {
data: Array.isArray(document.data)
? this.serializeRecords(document.data)
: this.serializeRecord(document.data)
};
this.serializeLinks(document, resDocument);
this.serializeMeta(document, resDocument);
return resDocument;
}
deserialize(resDocument, customOptions) {
const options = this.buildSerializationOptions(customOptions);
let resData = resDocument.data;
let data;
if (Array.isArray(resData)) {
data = this.deserializeResources(resData, options === null || options === void 0 ? void 0 : options.primaryRecords);
}
else if (resData !== null) {
data = this.deserializeResource(resData, options === null || options === void 0 ? void 0 : options.primaryRecord);
}
else {
data = null;
}
let result = { data };
if (resDocument.included) {
result.included = resDocument.included.map((e) => this.deserializeResource(e));
}
this.deserializeLinks(resDocument, result);
this.deserializeMeta(resDocument, result);
return result;
}
serializeRecords(records) {
return records.map((record) => this.serializeRecord(record));
}
serializeRecord(record) {
return this.resourceSerializer.serialize(record);
}
/* eslint-disable @typescript-eslint/no-unused-vars */
serializeLinks(document, resDocument) { }
serializeMeta(document, resDocument) { }
/* eslint-enable @typescript-eslint/no-unused-vars */
deserializeResources(resources, primaryRecords) {
if (primaryRecords) {
return resources.map((entry, i) => {
return this.deserializeResource(entry, primaryRecords[i]);
});
}
else {
return resources.map((entry) => this.deserializeResource(entry));
}
}
deserializeResource(resource, primaryRecord) {
if (primaryRecord) {
return this.resourceSerializer.deserialize(resource, { primaryRecord });
}
else {
return this.resourceSerializer.deserialize(resource);
}
}
deserializeLinks(resDocument, document) {
if (resDocument.links) {
document.links = resDocument.links;
}
}
deserializeMeta(resDocument, document) {
if (resDocument.meta) {
document.meta = resDocument.meta;
}
}
}
exports.JSONAPIDocumentSerializer = JSONAPIDocumentSerializer;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmFwaS1kb2N1bWVudC1zZXJpYWxpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcmlhbGl6ZXJzL2pzb25hcGktZG9jdW1lbnQtc2VyaWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSx1RUFBa0U7QUFPbEUsTUFBYSx5QkFBMEIsU0FBUSwrQ0FLOUM7SUFDQyxTQUFTLENBQUMsUUFBd0I7UUFDaEMsSUFBSSxXQUFXLEdBQXFCO1lBQ2xDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQTJCLENBQUM7Z0JBQzdELENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUF5QixDQUFDO1NBQzdELENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUUxQyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsV0FBVyxDQUNULFdBQTZCLEVBQzdCLGFBQXFEO1FBRXJELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FDNUMsYUFBYSxDQUMyQixDQUFDO1FBQzNDLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUM7UUFFVCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDOUIsT0FBcUIsRUFDckIsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGNBQWMsQ0FDeEIsQ0FBQztTQUNIO2FBQU0sSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO1lBQzNCLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQzdCLE9BQW1CLEVBQ25CLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxhQUFhLENBQ3ZCLENBQUM7U0FDSDthQUFNO1lBQ0wsSUFBSSxHQUFHLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxNQUFNLEdBQW1CLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFdEMsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQ3hCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUMvQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQzVCLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFMUMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVTLGdCQUFnQixDQUFDLE9BQTRCO1FBQ3JELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFUyxlQUFlLENBQUMsTUFBeUI7UUFDakQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxzREFBc0Q7SUFDNUMsY0FBYyxDQUN0QixRQUF3QixFQUN4QixXQUE2QixJQUN0QixDQUFDO0lBRUEsYUFBYSxDQUNyQixRQUF3QixFQUN4QixXQUE2QixJQUN0QixDQUFDO0lBQ1YscURBQXFEO0lBRTNDLG9CQUFvQixDQUM1QixTQUFxQixFQUNyQixjQUFvQztRQUVwQyxJQUFJLGNBQWMsRUFBRTtZQUNsQixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2xFO0lBQ0gsQ0FBQztJQUVTLG1CQUFtQixDQUMzQixRQUFrQixFQUNsQixhQUFpQztRQUVqQyxJQUFJLGFBQWEsRUFBRTtZQUNqQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUN6RTthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3REO0lBQ0gsQ0FBQztJQUVTLGdCQUFnQixDQUN4QixXQUE2QixFQUM3QixRQUF3QjtRQUV4QixJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDckIsUUFBUSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUVTLGVBQWUsQ0FDdkIsV0FBNkIsRUFDN0IsUUFBd0I7UUFFeEIsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFO1lBQ3BCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztTQUNsQztJQUNILENBQUM7Q0FDRjtBQXRIRCw4REFzSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbml0aWFsaXplZFJlY29yZCB9IGZyb20gJ0BvcmJpdC9yZWNvcmRzJztcbmltcG9ydCB7IFJlc291cmNlLCBSZXNvdXJjZURvY3VtZW50IH0gZnJvbSAnLi4vcmVzb3VyY2UtZG9jdW1lbnQnO1xuaW1wb3J0IHsgUmVjb3JkRG9jdW1lbnQgfSBmcm9tICcuLi9yZWNvcmQtZG9jdW1lbnQnO1xuaW1wb3J0IHsgSlNPTkFQSUJhc2VTZXJpYWxpemVyIH0gZnJvbSAnLi9qc29uYXBpLWJhc2Utc2VyaWFsaXplcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTkFQSURvY3VtZW50RGVzZXJpYWxpemF0aW9uT3B0aW9ucyB7XG4gIHByaW1hcnlSZWNvcmQ/OiBJbml0aWFsaXplZFJlY29yZDtcbiAgcHJpbWFyeVJlY29yZHM/OiBJbml0aWFsaXplZFJlY29yZFtdO1xufVxuXG5leHBvcnQgY2xhc3MgSlNPTkFQSURvY3VtZW50U2VyaWFsaXplciBleHRlbmRzIEpTT05BUElCYXNlU2VyaWFsaXplcjxcbiAgUmVjb3JkRG9jdW1lbnQsXG4gIFJlc291cmNlRG9jdW1lbnQsXG4gIHVua25vd24sXG4gIEpTT05BUElEb2N1bWVudERlc2VyaWFsaXphdGlvbk9wdGlvbnNcbj4ge1xuICBzZXJpYWxpemUoZG9jdW1lbnQ6IFJlY29yZERvY3VtZW50KTogUmVzb3VyY2VEb2N1bWVudCB7XG4gICAgbGV0IHJlc0RvY3VtZW50OiBSZXNvdXJjZURvY3VtZW50ID0ge1xuICAgICAgZGF0YTogQXJyYXkuaXNBcnJheShkb2N1bWVudC5kYXRhKVxuICAgICAgICA/IHRoaXMuc2VyaWFsaXplUmVjb3Jkcyhkb2N1bWVudC5kYXRhIGFzIEluaXRpYWxpemVkUmVjb3JkW10pXG4gICAgICAgIDogdGhpcy5zZXJpYWxpemVSZWNvcmQoZG9jdW1lbnQuZGF0YSBhcyBJbml0aWFsaXplZFJlY29yZClcbiAgICB9O1xuXG4gICAgdGhpcy5zZXJpYWxpemVMaW5rcyhkb2N1bWVudCwgcmVzRG9jdW1lbnQpO1xuICAgIHRoaXMuc2VyaWFsaXplTWV0YShkb2N1bWVudCwgcmVzRG9jdW1lbnQpO1xuXG4gICAgcmV0dXJuIHJlc0RvY3VtZW50O1xuICB9XG5cbiAgZGVzZXJpYWxpemUoXG4gICAgcmVzRG9jdW1lbnQ6IFJlc291cmNlRG9jdW1lbnQsXG4gICAgY3VzdG9tT3B0aW9ucz86IEpTT05BUElEb2N1bWVudERlc2VyaWFsaXphdGlvbk9wdGlvbnNcbiAgKTogUmVjb3JkRG9jdW1lbnQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmJ1aWxkU2VyaWFsaXphdGlvbk9wdGlvbnMoXG4gICAgICBjdXN0b21PcHRpb25zXG4gICAgKSBhcyBKU09OQVBJRG9jdW1lbnREZXNlcmlhbGl6YXRpb25PcHRpb25zO1xuICAgIGxldCByZXNEYXRhID0gcmVzRG9jdW1lbnQuZGF0YTtcbiAgICBsZXQgZGF0YTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc0RhdGEpKSB7XG4gICAgICBkYXRhID0gdGhpcy5kZXNlcmlhbGl6ZVJlc291cmNlcyhcbiAgICAgICAgcmVzRGF0YSBhcyBSZXNvdXJjZVtdLFxuICAgICAgICBvcHRpb25zPy5wcmltYXJ5UmVjb3Jkc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHJlc0RhdGEgIT09IG51bGwpIHtcbiAgICAgIGRhdGEgPSB0aGlzLmRlc2VyaWFsaXplUmVzb3VyY2UoXG4gICAgICAgIHJlc0RhdGEgYXMgUmVzb3VyY2UsXG4gICAgICAgIG9wdGlvbnM/LnByaW1hcnlSZWNvcmRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQ6IFJlY29yZERvY3VtZW50ID0geyBkYXRhIH07XG5cbiAgICBpZiAocmVzRG9jdW1lbnQuaW5jbHVkZWQpIHtcbiAgICAgIHJlc3VsdC5pbmNsdWRlZCA9IHJlc0RvY3VtZW50LmluY2x1ZGVkLm1hcCgoZSkgPT5cbiAgICAgICAgdGhpcy5kZXNlcmlhbGl6ZVJlc291cmNlKGUpXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuZGVzZXJpYWxpemVMaW5rcyhyZXNEb2N1bWVudCwgcmVzdWx0KTtcbiAgICB0aGlzLmRlc2VyaWFsaXplTWV0YShyZXNEb2N1bWVudCwgcmVzdWx0KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VyaWFsaXplUmVjb3JkcyhyZWNvcmRzOiBJbml0aWFsaXplZFJlY29yZFtdKTogUmVzb3VyY2VbXSB7XG4gICAgcmV0dXJuIHJlY29yZHMubWFwKChyZWNvcmQpID0+IHRoaXMuc2VyaWFsaXplUmVjb3JkKHJlY29yZCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlcmlhbGl6ZVJlY29yZChyZWNvcmQ6IEluaXRpYWxpemVkUmVjb3JkKTogUmVzb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlU2VyaWFsaXplci5zZXJpYWxpemUocmVjb3JkKTtcbiAgfVxuXG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuICBwcm90ZWN0ZWQgc2VyaWFsaXplTGlua3MoXG4gICAgZG9jdW1lbnQ6IFJlY29yZERvY3VtZW50LFxuICAgIHJlc0RvY3VtZW50OiBSZXNvdXJjZURvY3VtZW50XG4gICk6IHZvaWQge31cblxuICBwcm90ZWN0ZWQgc2VyaWFsaXplTWV0YShcbiAgICBkb2N1bWVudDogUmVjb3JkRG9jdW1lbnQsXG4gICAgcmVzRG9jdW1lbnQ6IFJlc291cmNlRG9jdW1lbnRcbiAgKTogdm9pZCB7fVxuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG4gIHByb3RlY3RlZCBkZXNlcmlhbGl6ZVJlc291cmNlcyhcbiAgICByZXNvdXJjZXM6IFJlc291cmNlW10sXG4gICAgcHJpbWFyeVJlY29yZHM/OiBJbml0aWFsaXplZFJlY29yZFtdXG4gICk6IEluaXRpYWxpemVkUmVjb3JkW10ge1xuICAgIGlmIChwcmltYXJ5UmVjb3Jkcykge1xuICAgICAgcmV0dXJuIHJlc291cmNlcy5tYXAoKGVudHJ5LCBpKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlc2VyaWFsaXplUmVzb3VyY2UoZW50cnksIHByaW1hcnlSZWNvcmRzW2ldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzb3VyY2VzLm1hcCgoZW50cnkpID0+IHRoaXMuZGVzZXJpYWxpemVSZXNvdXJjZShlbnRyeSkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBkZXNlcmlhbGl6ZVJlc291cmNlKFxuICAgIHJlc291cmNlOiBSZXNvdXJjZSxcbiAgICBwcmltYXJ5UmVjb3JkPzogSW5pdGlhbGl6ZWRSZWNvcmRcbiAgKTogSW5pdGlhbGl6ZWRSZWNvcmQge1xuICAgIGlmIChwcmltYXJ5UmVjb3JkKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzb3VyY2UsIHsgcHJpbWFyeVJlY29yZCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTZXJpYWxpemVyLmRlc2VyaWFsaXplKHJlc291cmNlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVzZXJpYWxpemVMaW5rcyhcbiAgICByZXNEb2N1bWVudDogUmVzb3VyY2VEb2N1bWVudCxcbiAgICBkb2N1bWVudDogUmVjb3JkRG9jdW1lbnRcbiAgKTogdm9pZCB7XG4gICAgaWYgKHJlc0RvY3VtZW50LmxpbmtzKSB7XG4gICAgICBkb2N1bWVudC5saW5rcyA9IHJlc0RvY3VtZW50LmxpbmtzO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBkZXNlcmlhbGl6ZU1ldGEoXG4gICAgcmVzRG9jdW1lbnQ6IFJlc291cmNlRG9jdW1lbnQsXG4gICAgZG9jdW1lbnQ6IFJlY29yZERvY3VtZW50XG4gICk6IHZvaWQge1xuICAgIGlmIChyZXNEb2N1bWVudC5tZXRhKSB7XG4gICAgICBkb2N1bWVudC5tZXRhID0gcmVzRG9jdW1lbnQubWV0YTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
;