@orbit/jsonapi
Version:
JSON:API support for Orbit.
108 lines • 14 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.JSONAPIResourceIdentitySerializer = void 0;
const core_1 = require("@orbit/core");
const jsonapi_base_serializer_1 = require("./jsonapi-base-serializer");
const { assert } = core_1.Orbit;
class JSONAPIResourceIdentitySerializer extends jsonapi_base_serializer_1.JSONAPIBaseSerializer {
constructor(settings) {
const { serializerFor, deserializationOptions, schema, keyMap, getResourceKey } = settings;
super({
serializerFor,
deserializationOptions,
schema,
keyMap
});
this._resourceKeys = {};
this._getCustomResourceKey = getResourceKey;
}
getResourceKey(type) {
let key = this._resourceKeys[type];
if (key === undefined) {
if (this._getCustomResourceKey) {
key = this._getCustomResourceKey(type);
}
if (key === undefined) {
const model = this.schema.getModel(type);
if (model === null || model === void 0 ? void 0 : model.keys) {
let availableKeys = Object.keys(model.keys);
if (availableKeys.length === 1) {
key = availableKeys[0];
}
}
if (key === undefined) {
key = 'id';
}
}
assert("JSONAPIResourceIdentitySerializer requires a keyMap to support resource keys other than 'id'", key === 'id' || this.keyMap !== undefined);
this._resourceKeys[type] = key;
}
return key;
}
serialize(recordIdentity) {
const { type, id } = recordIdentity;
const resourceKey = this.getResourceKey(type);
const resourceType = this.typeSerializer.serialize(type);
const keyMap = this.keyMap;
const resourceId = resourceKey === 'id' ? id : keyMap.idToKey(type, resourceKey, id);
const resource = {
type: resourceType
};
if (resourceId !== undefined) {
resource.id = resourceId;
}
return resource;
}
deserialize(resource, customOptions) {
var _a;
const options = this.buildDeserializationOptions(customOptions);
const type = this.typeSerializer.deserialize(resource.type);
const resourceKey = this.getResourceKey(type);
if (resourceKey === 'id') {
const { id } = resource;
if (id) {
return { type, id };
}
else {
throw new core_1.Assertion(`Resource of type '${type}' is missing 'id'`);
}
}
else {
const keyMap = this.keyMap;
const primaryRecord = options === null || options === void 0 ? void 0 : options.primaryRecord;
let id;
let keys;
if (resource.id) {
keys = {
[resourceKey]: resource.id
};
id =
((_a = options.primaryRecord) === null || _a === void 0 ? void 0 : _a.id) ||
keyMap.idFromKeys(type, keys) ||
this.schema.generateId(type);
}
else {
keys = null;
id =
(primaryRecord && primaryRecord.id) || this.schema.generateId(type);
}
const record = { type, id };
if (keys) {
if (options.includeKeys) {
record.keys = keys;
keyMap.pushRecord(record);
}
else {
keyMap.pushRecord({
type,
id,
keys
});
}
}
return record;
}
}
}
exports.JSONAPIResourceIdentitySerializer = JSONAPIResourceIdentitySerializer;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmFwaS1yZXNvdXJjZS1pZGVudGl0eS1zZXJpYWxpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcmlhbGl6ZXJzL2pzb25hcGktcmVzb3VyY2UtaWRlbnRpdHktc2VyaWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzQ0FBK0M7QUFJL0MsdUVBQWtFO0FBR2xFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxZQUFLLENBQUM7QUFlekIsTUFBYSxpQ0FBa0MsU0FBUSwrQ0FLdEQ7SUFrQ0MsWUFBWSxRQUFtRDtRQUM3RCxNQUFNLEVBQ0osYUFBYSxFQUNiLHNCQUFzQixFQUN0QixNQUFNLEVBQ04sTUFBTSxFQUNOLGNBQWMsRUFDZixHQUFHLFFBQVEsQ0FBQztRQUNiLEtBQUssQ0FBQztZQUNKLGFBQWE7WUFDYixzQkFBc0I7WUFDdEIsTUFBTTtZQUNOLE1BQU07U0FDUCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMscUJBQXFCLEdBQUcsY0FBYyxDQUFDO0lBQzlDLENBQUM7SUE5Q0QsY0FBYyxDQUFDLElBQVk7UUFDekIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7Z0JBQzlCLEdBQUcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEM7WUFFRCxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7Z0JBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxJQUFJLEVBQUU7b0JBQ2YsSUFBSSxh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Q0EsQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3ZFO1lBRUQsTUFBTSxNQUFNLEdBQXNCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBRS9DLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtvQkFDdkIsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7b0JBQ25CLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzNCO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxVQUFVLENBQUM7d0JBQ2hCLElBQUk7d0JBQ0osRUFBRTt3QkFDRixJQUFJO3FCQUNMLENBQUMsQ0FBQztpQkFDSjthQUNGO1lBRUQsT0FBTyxNQUFNLENBQUM7U0FDZjtJQUNILENBQUM7Q0FDRjtBQWxJRCw4RUFrSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcmJpdCwgQXNzZXJ0aW9uIH0gZnJvbSAnQG9yYml0L2NvcmUnO1xuaW1wb3J0IHsgSW5pdGlhbGl6ZWRSZWNvcmQsIFJlY29yZFNjaGVtYSwgUmVjb3JkS2V5TWFwIH0gZnJvbSAnQG9yYml0L3JlY29yZHMnO1xuaW1wb3J0IHsgRGljdCB9IGZyb20gJ0BvcmJpdC91dGlscyc7XG5pbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gJy4uL3Jlc291cmNlLWRvY3VtZW50JztcbmltcG9ydCB7IEpTT05BUElCYXNlU2VyaWFsaXplciB9IGZyb20gJy4vanNvbmFwaS1iYXNlLXNlcmlhbGl6ZXInO1xuaW1wb3J0IHsgU2VyaWFsaXplckZvckZuIH0gZnJvbSAnQG9yYml0L3NlcmlhbGl6ZXJzJztcblxuY29uc3QgeyBhc3NlcnQgfSA9IE9yYml0O1xuXG5leHBvcnQgaW50ZXJmYWNlIEpTT05BUElSZXNvdXJjZUlkZW50aXR5RGVzZXJpYWxpemF0aW9uT3B0aW9ucyB7XG4gIHByaW1hcnlSZWNvcmQ/OiBJbml0aWFsaXplZFJlY29yZDtcbiAgaW5jbHVkZUtleXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpTT05BUElSZXNvdXJjZUlkZW50aXR5U2VyaWFsaXplclNldHRpbmdzIHtcbiAgc2VyaWFsaXplckZvcjogU2VyaWFsaXplckZvckZuO1xuICBkZXNlcmlhbGl6YXRpb25PcHRpb25zPzogSlNPTkFQSVJlc291cmNlSWRlbnRpdHlEZXNlcmlhbGl6YXRpb25PcHRpb25zO1xuICBzY2hlbWE6IFJlY29yZFNjaGVtYTtcbiAga2V5TWFwPzogUmVjb3JkS2V5TWFwO1xuICBnZXRSZXNvdXJjZUtleT86IChyZWNvcmRUeXBlOiBzdHJpbmcpID0+IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEpTT05BUElSZXNvdXJjZUlkZW50aXR5U2VyaWFsaXplciBleHRlbmRzIEpTT05BUElCYXNlU2VyaWFsaXplcjxcbiAgSW5pdGlhbGl6ZWRSZWNvcmQsXG4gIFJlc291cmNlLFxuICB1bmtub3duLFxuICBKU09OQVBJUmVzb3VyY2VJZGVudGl0eURlc2VyaWFsaXphdGlvbk9wdGlvbnNcbj4ge1xuICBwcm90ZWN0ZWQgX3Jlc291cmNlS2V5czogRGljdDxzdHJpbmc+O1xuICBwcm90ZWN0ZWQgX2dldEN1c3RvbVJlc291cmNlS2V5PzogKHJlY29yZFR5cGU6IHN0cmluZykgPT4gc3RyaW5nO1xuXG4gIGdldFJlc291cmNlS2V5KHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGtleSA9IHRoaXMuX3Jlc291cmNlS2V5c1t0eXBlXTtcbiAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLl9nZXRDdXN0b21SZXNvdXJjZUtleSkge1xuICAgICAgICBrZXkgPSB0aGlzLl9nZXRDdXN0b21SZXNvdXJjZUtleSh0eXBlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5zY2hlbWEuZ2V0TW9kZWwodHlwZSk7XG4gICAgICAgIGlmIChtb2RlbD8ua2V5cykge1xuICAgICAgICAgIGxldCBhdmFpbGFibGVLZXlzID0gT2JqZWN0LmtleXMobW9kZWwua2V5cyk7XG4gICAgICAgICAgaWYgKGF2YWlsYWJsZUtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBrZXkgPSBhdmFpbGFibGVLZXlzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBrZXkgPSAnaWQnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChcbiAgICAgICAgXCJKU09OQVBJUmVzb3VyY2VJZGVudGl0eVNlcmlhbGl6ZXIgcmVxdWlyZXMgYSBrZXlNYXAgdG8gc3VwcG9ydCByZXNvdXJjZSBrZXlzIG90aGVyIHRoYW4gJ2lkJ1wiLFxuICAgICAgICBrZXkgPT09ICdpZCcgfHwgdGhpcy5rZXlNYXAgIT09IHVuZGVmaW5lZFxuICAgICAgKTtcblxuICAgICAgdGhpcy5fcmVzb3VyY2VLZXlzW3R5cGVdID0ga2V5O1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2V0dGluZ3M6IEpTT05BUElSZXNvdXJjZUlkZW50aXR5U2VyaWFsaXplclNldHRpbmdzKSB7XG4gICAgY29uc3Qge1xuICAgICAgc2VyaWFsaXplckZvcixcbiAgICAgIGRlc2VyaWFsaXphdGlvbk9wdGlvbnMsXG4gICAgICBzY2hlbWEsXG4gICAgICBrZXlNYXAsXG4gICAgICBnZXRSZXNvdXJjZUtleVxuICAgIH0gPSBzZXR0aW5ncztcbiAgICBzdXBlcih7XG4gICAgICBzZXJpYWxpemVyRm9yLFxuICAgICAgZGVzZXJpYWxpemF0aW9uT3B0aW9ucyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGtleU1hcFxuICAgIH0pO1xuICAgIHRoaXMuX3Jlc291cmNlS2V5cyA9IHt9O1xuICAgIHRoaXMuX2dldEN1c3RvbVJlc291cmNlS2V5ID0gZ2V0UmVzb3VyY2VLZXk7XG4gIH1cblxuICBzZXJpYWxpemUocmVjb3JkSWRlbnRpdHk6IEluaXRpYWxpemVkUmVjb3JkKTogUmVzb3VyY2Uge1xuICAgIGNvbnN0IHsgdHlwZSwgaWQgfSA9IHJlY29yZElkZW50aXR5O1xuICAgIGNvbnN0IHJlc291cmNlS2V5ID0gdGhpcy5nZXRSZXNvdXJjZUtleSh0eXBlKTtcbiAgICBjb25zdCByZXNvdXJjZVR5cGUgPSB0aGlzLnR5cGVTZXJpYWxpemVyLnNlcmlhbGl6ZSh0eXBlKSBhcyBzdHJpbmc7XG4gICAgY29uc3Qga2V5TWFwID0gdGhpcy5rZXlNYXAgYXMgUmVjb3JkS2V5TWFwO1xuICAgIGNvbnN0IHJlc291cmNlSWQgPVxuICAgICAgcmVzb3VyY2VLZXkgPT09ICdpZCcgPyBpZCA6IGtleU1hcC5pZFRvS2V5KHR5cGUsIHJlc291cmNlS2V5LCBpZCk7XG5cbiAgICBjb25zdCByZXNvdXJjZTogUmVzb3VyY2UgPSB7XG4gICAgICB0eXBlOiByZXNvdXJjZVR5cGVcbiAgICB9O1xuXG4gICAgaWYgKHJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzb3VyY2UuaWQgPSByZXNvdXJjZUlkO1xuICAgIH1cblxuICAgIHJldHVybiByZXNvdXJjZTtcbiAgfVxuXG4gIGRlc2VyaWFsaXplKFxuICAgIHJlc291cmNlOiBSZXNvdXJjZSxcbiAgICBjdXN0b21PcHRpb25zPzogSlNPTkFQSVJlc291cmNlSWRlbnRpdHlEZXNlcmlhbGl6YXRpb25PcHRpb25zXG4gICk6IEluaXRpYWxpemVkUmVjb3JkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5idWlsZERlc2VyaWFsaXphdGlvbk9wdGlvbnMoY3VzdG9tT3B0aW9ucyk7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMudHlwZVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzb3VyY2UudHlwZSkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHJlc291cmNlS2V5ID0gdGhpcy5nZXRSZXNvdXJjZUtleSh0eXBlKTtcblxuICAgIGlmIChyZXNvdXJjZUtleSA9PT0gJ2lkJykge1xuICAgICAgY29uc3QgeyBpZCB9ID0gcmVzb3VyY2U7XG4gICAgICBpZiAoaWQpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZSwgaWQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb24oYFJlc291cmNlIG9mIHR5cGUgJyR7dHlwZX0nIGlzIG1pc3NpbmcgJ2lkJ2ApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBrZXlNYXAgPSB0aGlzLmtleU1hcCBhcyBSZWNvcmRLZXlNYXA7XG4gICAgICBjb25zdCBwcmltYXJ5UmVjb3JkID0gb3B0aW9ucz8ucHJpbWFyeVJlY29yZDtcbiAgICAgIGxldCBpZDogc3RyaW5nO1xuICAgICAgbGV0IGtleXM6IERpY3Q8c3RyaW5nPiB8IG51bGw7XG5cbiAgICAgIGlmIChyZXNvdXJjZS5pZCkge1xuICAgICAgICBrZXlzID0ge1xuICAgICAgICAgIFtyZXNvdXJjZUtleV06IHJlc291cmNlLmlkXG4gICAgICAgIH07XG5cbiAgICAgICAgaWQgPVxuICAgICAgICAgIG9wdGlvbnMucHJpbWFyeVJlY29yZD8uaWQgfHxcbiAgICAgICAgICBrZXlNYXAuaWRGcm9tS2V5cyh0eXBlLCBrZXlzKSB8fFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmdlbmVyYXRlSWQodHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzID0gbnVsbDtcbiAgICAgICAgaWQgPVxuICAgICAgICAgIChwcmltYXJ5UmVjb3JkICYmIHByaW1hcnlSZWNvcmQuaWQpIHx8IHRoaXMuc2NoZW1hLmdlbmVyYXRlSWQodHlwZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlY29yZDogSW5pdGlhbGl6ZWRSZWNvcmQgPSB7IHR5cGUsIGlkIH07XG5cbiAgICAgIGlmIChrZXlzKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVLZXlzKSB7XG4gICAgICAgICAgcmVjb3JkLmtleXMgPSBrZXlzO1xuICAgICAgICAgIGtleU1hcC5wdXNoUmVjb3JkKHJlY29yZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2V5TWFwLnB1c2hSZWNvcmQoe1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAga2V5c1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfVxuICB9XG59XG4iXX0=
;