@orbit/jsonapi
Version:
JSON:API support for Orbit.
73 lines • 11.1 kB
JavaScript
import { JSONAPIBaseSerializer } from './jsonapi-base-serializer';
export class JSONAPIDocumentSerializer extends 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;
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmFwaS1kb2N1bWVudC1zZXJpYWxpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcmlhbGl6ZXJzL2pzb25hcGktZG9jdW1lbnQtc2VyaWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU9sRSxNQUFNLE9BQU8seUJBQTBCLFNBQVEscUJBSzlDO0lBQ0MsU0FBUyxDQUFDLFFBQXdCO1FBQ2hDLElBQUksV0FBVyxHQUFxQjtZQUNsQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUEyQixDQUFDO2dCQUM3RCxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBeUIsQ0FBQztTQUM3RCxDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFMUMsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVcsQ0FDVCxXQUE2QixFQUM3QixhQUFxRDtRQUVyRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQzVDLGFBQWEsQ0FDMkIsQ0FBQztRQUMzQyxJQUFJLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFDO1FBRVQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzFCLElBQUksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQzlCLE9BQXFCLEVBQ3JCLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxjQUFjLENBQ3hCLENBQUM7U0FDSDthQUFNLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtZQUMzQixJQUFJLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUM3QixPQUFtQixFQUNuQixPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsYUFBYSxDQUN2QixDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksR0FBRyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUksTUFBTSxHQUFtQixFQUFFLElBQUksRUFBRSxDQUFDO1FBRXRDLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUN4QixNQUFNLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDL0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUM1QixDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxPQUE0QjtRQUNyRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRVMsZUFBZSxDQUFDLE1BQXlCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsc0RBQXNEO0lBQzVDLGNBQWMsQ0FDdEIsUUFBd0IsRUFDeEIsV0FBNkIsSUFDdEIsQ0FBQztJQUVBLGFBQWEsQ0FDckIsUUFBd0IsRUFDeEIsV0FBNkIsSUFDdEIsQ0FBQztJQUNWLHFEQUFxRDtJQUUzQyxvQkFBb0IsQ0FDNUIsU0FBcUIsRUFDckIsY0FBb0M7UUFFcEMsSUFBSSxjQUFjLEVBQUU7WUFDbEIsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNoQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNsRTtJQUNILENBQUM7SUFFUyxtQkFBbUIsQ0FDM0IsUUFBa0IsRUFDbEIsYUFBaUM7UUFFakMsSUFBSSxhQUFhLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7U0FDekU7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN0RDtJQUNILENBQUM7SUFFUyxnQkFBZ0IsQ0FDeEIsV0FBNkIsRUFDN0IsUUFBd0I7UUFFeEIsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQ3JCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztTQUNwQztJQUNILENBQUM7SUFFUyxlQUFlLENBQ3ZCLFdBQTZCLEVBQzdCLFFBQXdCO1FBRXhCLElBQUksV0FBVyxDQUFDLElBQUksRUFBRTtZQUNwQixRQUFRLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7U0FDbEM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbml0aWFsaXplZFJlY29yZCB9IGZyb20gJ0BvcmJpdC9yZWNvcmRzJztcbmltcG9ydCB7IFJlc291cmNlLCBSZXNvdXJjZURvY3VtZW50IH0gZnJvbSAnLi4vcmVzb3VyY2UtZG9jdW1lbnQnO1xuaW1wb3J0IHsgUmVjb3JkRG9jdW1lbnQgfSBmcm9tICcuLi9yZWNvcmQtZG9jdW1lbnQnO1xuaW1wb3J0IHsgSlNPTkFQSUJhc2VTZXJpYWxpemVyIH0gZnJvbSAnLi9qc29uYXBpLWJhc2Utc2VyaWFsaXplcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTkFQSURvY3VtZW50RGVzZXJpYWxpemF0aW9uT3B0aW9ucyB7XG4gIHByaW1hcnlSZWNvcmQ/OiBJbml0aWFsaXplZFJlY29yZDtcbiAgcHJpbWFyeVJlY29yZHM/OiBJbml0aWFsaXplZFJlY29yZFtdO1xufVxuXG5leHBvcnQgY2xhc3MgSlNPTkFQSURvY3VtZW50U2VyaWFsaXplciBleHRlbmRzIEpTT05BUElCYXNlU2VyaWFsaXplcjxcbiAgUmVjb3JkRG9jdW1lbnQsXG4gIFJlc291cmNlRG9jdW1lbnQsXG4gIHVua25vd24sXG4gIEpTT05BUElEb2N1bWVudERlc2VyaWFsaXphdGlvbk9wdGlvbnNcbj4ge1xuICBzZXJpYWxpemUoZG9jdW1lbnQ6IFJlY29yZERvY3VtZW50KTogUmVzb3VyY2VEb2N1bWVudCB7XG4gICAgbGV0IHJlc0RvY3VtZW50OiBSZXNvdXJjZURvY3VtZW50ID0ge1xuICAgICAgZGF0YTogQXJyYXkuaXNBcnJheShkb2N1bWVudC5kYXRhKVxuICAgICAgICA/IHRoaXMuc2VyaWFsaXplUmVjb3Jkcyhkb2N1bWVudC5kYXRhIGFzIEluaXRpYWxpemVkUmVjb3JkW10pXG4gICAgICAgIDogdGhpcy5zZXJpYWxpemVSZWNvcmQoZG9jdW1lbnQuZGF0YSBhcyBJbml0aWFsaXplZFJlY29yZClcbiAgICB9O1xuXG4gICAgdGhpcy5zZXJpYWxpemVMaW5rcyhkb2N1bWVudCwgcmVzRG9jdW1lbnQpO1xuICAgIHRoaXMuc2VyaWFsaXplTWV0YShkb2N1bWVudCwgcmVzRG9jdW1lbnQpO1xuXG4gICAgcmV0dXJuIHJlc0RvY3VtZW50O1xuICB9XG5cbiAgZGVzZXJpYWxpemUoXG4gICAgcmVzRG9jdW1lbnQ6IFJlc291cmNlRG9jdW1lbnQsXG4gICAgY3VzdG9tT3B0aW9ucz86IEpTT05BUElEb2N1bWVudERlc2VyaWFsaXphdGlvbk9wdGlvbnNcbiAgKTogUmVjb3JkRG9jdW1lbnQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmJ1aWxkU2VyaWFsaXphdGlvbk9wdGlvbnMoXG4gICAgICBjdXN0b21PcHRpb25zXG4gICAgKSBhcyBKU09OQVBJRG9jdW1lbnREZXNlcmlhbGl6YXRpb25PcHRpb25zO1xuICAgIGxldCByZXNEYXRhID0gcmVzRG9jdW1lbnQuZGF0YTtcbiAgICBsZXQgZGF0YTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc0RhdGEpKSB7XG4gICAgICBkYXRhID0gdGhpcy5kZXNlcmlhbGl6ZVJlc291cmNlcyhcbiAgICAgICAgcmVzRGF0YSBhcyBSZXNvdXJjZVtdLFxuICAgICAgICBvcHRpb25zPy5wcmltYXJ5UmVjb3Jkc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHJlc0RhdGEgIT09IG51bGwpIHtcbiAgICAgIGRhdGEgPSB0aGlzLmRlc2VyaWFsaXplUmVzb3VyY2UoXG4gICAgICAgIHJlc0RhdGEgYXMgUmVzb3VyY2UsXG4gICAgICAgIG9wdGlvbnM/LnByaW1hcnlSZWNvcmRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQ6IFJlY29yZERvY3VtZW50ID0geyBkYXRhIH07XG5cbiAgICBpZiAocmVzRG9jdW1lbnQuaW5jbHVkZWQpIHtcbiAgICAgIHJlc3VsdC5pbmNsdWRlZCA9IHJlc0RvY3VtZW50LmluY2x1ZGVkLm1hcCgoZSkgPT5cbiAgICAgICAgdGhpcy5kZXNlcmlhbGl6ZVJlc291cmNlKGUpXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuZGVzZXJpYWxpemVMaW5rcyhyZXNEb2N1bWVudCwgcmVzdWx0KTtcbiAgICB0aGlzLmRlc2VyaWFsaXplTWV0YShyZXNEb2N1bWVudCwgcmVzdWx0KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VyaWFsaXplUmVjb3JkcyhyZWNvcmRzOiBJbml0aWFsaXplZFJlY29yZFtdKTogUmVzb3VyY2VbXSB7XG4gICAgcmV0dXJuIHJlY29yZHMubWFwKChyZWNvcmQpID0+IHRoaXMuc2VyaWFsaXplUmVjb3JkKHJlY29yZCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlcmlhbGl6ZVJlY29yZChyZWNvcmQ6IEluaXRpYWxpemVkUmVjb3JkKTogUmVzb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlU2VyaWFsaXplci5zZXJpYWxpemUocmVjb3JkKTtcbiAgfVxuXG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuICBwcm90ZWN0ZWQgc2VyaWFsaXplTGlua3MoXG4gICAgZG9jdW1lbnQ6IFJlY29yZERvY3VtZW50LFxuICAgIHJlc0RvY3VtZW50OiBSZXNvdXJjZURvY3VtZW50XG4gICk6IHZvaWQge31cblxuICBwcm90ZWN0ZWQgc2VyaWFsaXplTWV0YShcbiAgICBkb2N1bWVudDogUmVjb3JkRG9jdW1lbnQsXG4gICAgcmVzRG9jdW1lbnQ6IFJlc291cmNlRG9jdW1lbnRcbiAgKTogdm9pZCB7fVxuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG4gIHByb3RlY3RlZCBkZXNlcmlhbGl6ZVJlc291cmNlcyhcbiAgICByZXNvdXJjZXM6IFJlc291cmNlW10sXG4gICAgcHJpbWFyeVJlY29yZHM/OiBJbml0aWFsaXplZFJlY29yZFtdXG4gICk6IEluaXRpYWxpemVkUmVjb3JkW10ge1xuICAgIGlmIChwcmltYXJ5UmVjb3Jkcykge1xuICAgICAgcmV0dXJuIHJlc291cmNlcy5tYXAoKGVudHJ5LCBpKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlc2VyaWFsaXplUmVzb3VyY2UoZW50cnksIHByaW1hcnlSZWNvcmRzW2ldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzb3VyY2VzLm1hcCgoZW50cnkpID0+IHRoaXMuZGVzZXJpYWxpemVSZXNvdXJjZShlbnRyeSkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBkZXNlcmlhbGl6ZVJlc291cmNlKFxuICAgIHJlc291cmNlOiBSZXNvdXJjZSxcbiAgICBwcmltYXJ5UmVjb3JkPzogSW5pdGlhbGl6ZWRSZWNvcmRcbiAgKTogSW5pdGlhbGl6ZWRSZWNvcmQge1xuICAgIGlmIChwcmltYXJ5UmVjb3JkKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzb3VyY2UsIHsgcHJpbWFyeVJlY29yZCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTZXJpYWxpemVyLmRlc2VyaWFsaXplKHJlc291cmNlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVzZXJpYWxpemVMaW5rcyhcbiAgICByZXNEb2N1bWVudDogUmVzb3VyY2VEb2N1bWVudCxcbiAgICBkb2N1bWVudDogUmVjb3JkRG9jdW1lbnRcbiAgKTogdm9pZCB7XG4gICAgaWYgKHJlc0RvY3VtZW50LmxpbmtzKSB7XG4gICAgICBkb2N1bWVudC5saW5rcyA9IHJlc0RvY3VtZW50LmxpbmtzO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBkZXNlcmlhbGl6ZU1ldGEoXG4gICAgcmVzRG9jdW1lbnQ6IFJlc291cmNlRG9jdW1lbnQsXG4gICAgZG9jdW1lbnQ6IFJlY29yZERvY3VtZW50XG4gICk6IHZvaWQge1xuICAgIGlmIChyZXNEb2N1bWVudC5tZXRhKSB7XG4gICAgICBkb2N1bWVudC5tZXRhID0gcmVzRG9jdW1lbnQubWV0YTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==