UNPKG

@orbit/jsonapi

Version:

JSON:API support for Orbit.

104 lines 13.9 kB
import { Orbit, Assertion } from '@orbit/core'; import { JSONAPIBaseSerializer } from './jsonapi-base-serializer'; const { assert } = Orbit; export class JSONAPIResourceIdentitySerializer extends 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 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; } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmFwaS1yZXNvdXJjZS1pZGVudGl0eS1zZXJpYWxpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcmlhbGl6ZXJzL2pzb25hcGktcmVzb3VyY2UtaWRlbnRpdHktc2VyaWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUkvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdsRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBZXpCLE1BQU0sT0FBTyxpQ0FBa0MsU0FBUSxxQkFLdEQ7SUFrQ0MsWUFBWSxRQUFtRDtRQUM3RCxNQUFNLEVBQ0osYUFBYSxFQUNiLHNCQUFzQixFQUN0QixNQUFNLEVBQ04sTUFBTSxFQUNOLGNBQWMsRUFDZixHQUFHLFFBQVEsQ0FBQztRQUNiLEtBQUssQ0FBQztZQUNKLGFBQWE7WUFDYixzQkFBc0I7WUFDdEIsTUFBTTtZQUNOLE1BQU07U0FDUCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMscUJBQXFCLEdBQUcsY0FBYyxDQUFDO0lBQzlDLENBQUM7SUE5Q0QsY0FBYyxDQUFDLElBQVk7UUFDekIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7Z0JBQzlCLEdBQUcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEM7WUFFRCxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7Z0JBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FB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QUFDLElBQUksQ0FBQyxDQUFDO2FBQ2hDO2lCQUFNO2dCQUNMLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ1osRUFBRTtvQkFDQSxDQUFDLGFBQWEsSUFBSSxhQUFhLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkU7WUFFRCxNQUFNLE1BQU0sR0FBc0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFFL0MsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO29CQUN2QixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDbkIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDM0I7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLFVBQVUsQ0FBQzt3QkFDaEIsSUFBSTt3QkFDSixFQUFFO3dCQUNGLElBQUk7cUJBQ0wsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7WUFFRCxPQUFPLE1BQU0sQ0FBQztTQUNmO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3JiaXQsIEFzc2VydGlvbiB9IGZyb20gJ0BvcmJpdC9jb3JlJztcbmltcG9ydCB7IEluaXRpYWxpemVkUmVjb3JkLCBSZWNvcmRTY2hlbWEsIFJlY29yZEtleU1hcCB9IGZyb20gJ0BvcmJpdC9yZWNvcmRzJztcbmltcG9ydCB7IERpY3QgfSBmcm9tICdAb3JiaXQvdXRpbHMnO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZS1kb2N1bWVudCc7XG5pbXBvcnQgeyBKU09OQVBJQmFzZVNlcmlhbGl6ZXIgfSBmcm9tICcuL2pzb25hcGktYmFzZS1zZXJpYWxpemVyJztcbmltcG9ydCB7IFNlcmlhbGl6ZXJGb3JGbiB9IGZyb20gJ0BvcmJpdC9zZXJpYWxpemVycyc7XG5cbmNvbnN0IHsgYXNzZXJ0IH0gPSBPcmJpdDtcblxuZXhwb3J0IGludGVyZmFjZSBKU09OQVBJUmVzb3VyY2VJZGVudGl0eURlc2VyaWFsaXphdGlvbk9wdGlvbnMge1xuICBwcmltYXJ5UmVjb3JkPzogSW5pdGlhbGl6ZWRSZWNvcmQ7XG4gIGluY2x1ZGVLZXlzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKU09OQVBJUmVzb3VyY2VJZGVudGl0eVNlcmlhbGl6ZXJTZXR0aW5ncyB7XG4gIHNlcmlhbGl6ZXJGb3I6IFNlcmlhbGl6ZXJGb3JGbjtcbiAgZGVzZXJpYWxpemF0aW9uT3B0aW9ucz86IEpTT05BUElSZXNvdXJjZUlkZW50aXR5RGVzZXJpYWxpemF0aW9uT3B0aW9ucztcbiAgc2NoZW1hOiBSZWNvcmRTY2hlbWE7XG4gIGtleU1hcD86IFJlY29yZEtleU1hcDtcbiAgZ2V0UmVzb3VyY2VLZXk/OiAocmVjb3JkVHlwZTogc3RyaW5nKSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBKU09OQVBJUmVzb3VyY2VJZGVudGl0eVNlcmlhbGl6ZXIgZXh0ZW5kcyBKU09OQVBJQmFzZVNlcmlhbGl6ZXI8XG4gIEluaXRpYWxpemVkUmVjb3JkLFxuICBSZXNvdXJjZSxcbiAgdW5rbm93bixcbiAgSlNPTkFQSVJlc291cmNlSWRlbnRpdHlEZXNlcmlhbGl6YXRpb25PcHRpb25zXG4+IHtcbiAgcHJvdGVjdGVkIF9yZXNvdXJjZUtleXM6IERpY3Q8c3RyaW5nPjtcbiAgcHJvdGVjdGVkIF9nZXRDdXN0b21SZXNvdXJjZUtleT86IChyZWNvcmRUeXBlOiBzdHJpbmcpID0+IHN0cmluZztcblxuICBnZXRSZXNvdXJjZUtleSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBrZXkgPSB0aGlzLl9yZXNvdXJjZUtleXNbdHlwZV07XG4gICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5fZ2V0Q3VzdG9tUmVzb3VyY2VLZXkpIHtcbiAgICAgICAga2V5ID0gdGhpcy5fZ2V0Q3VzdG9tUmVzb3VyY2VLZXkodHlwZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuc2NoZW1hLmdldE1vZGVsKHR5cGUpO1xuICAgICAgICBpZiAobW9kZWw/LmtleXMpIHtcbiAgICAgICAgICBsZXQgYXZhaWxhYmxlS2V5cyA9IE9iamVjdC5rZXlzKG1vZGVsLmtleXMpO1xuICAgICAgICAgIGlmIChhdmFpbGFibGVLZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAga2V5ID0gYXZhaWxhYmxlS2V5c1swXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAga2V5ID0gJ2lkJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhc3NlcnQoXG4gICAgICAgIFwiSlNPTkFQSVJlc291cmNlSWRlbnRpdHlTZXJpYWxpemVyIHJlcXVpcmVzIGEga2V5TWFwIHRvIHN1cHBvcnQgcmVzb3VyY2Uga2V5cyBvdGhlciB0aGFuICdpZCdcIixcbiAgICAgICAga2V5ID09PSAnaWQnIHx8IHRoaXMua2V5TWFwICE9PSB1bmRlZmluZWRcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuX3Jlc291cmNlS2V5c1t0eXBlXSA9IGtleTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBKU09OQVBJUmVzb3VyY2VJZGVudGl0eVNlcmlhbGl6ZXJTZXR0aW5ncykge1xuICAgIGNvbnN0IHtcbiAgICAgIHNlcmlhbGl6ZXJGb3IsXG4gICAgICBkZXNlcmlhbGl6YXRpb25PcHRpb25zLFxuICAgICAgc2NoZW1hLFxuICAgICAga2V5TWFwLFxuICAgICAgZ2V0UmVzb3VyY2VLZXlcbiAgICB9ID0gc2V0dGluZ3M7XG4gICAgc3VwZXIoe1xuICAgICAgc2VyaWFsaXplckZvcixcbiAgICAgIGRlc2VyaWFsaXphdGlvbk9wdGlvbnMsXG4gICAgICBzY2hlbWEsXG4gICAgICBrZXlNYXBcbiAgICB9KTtcbiAgICB0aGlzLl9yZXNvdXJjZUtleXMgPSB7fTtcbiAgICB0aGlzLl9nZXRDdXN0b21SZXNvdXJjZUtleSA9IGdldFJlc291cmNlS2V5O1xuICB9XG5cbiAgc2VyaWFsaXplKHJlY29yZElkZW50aXR5OiBJbml0aWFsaXplZFJlY29yZCk6IFJlc291cmNlIHtcbiAgICBjb25zdCB7IHR5cGUsIGlkIH0gPSByZWNvcmRJZGVudGl0eTtcbiAgICBjb25zdCByZXNvdXJjZUtleSA9IHRoaXMuZ2V0UmVzb3VyY2VLZXkodHlwZSk7XG4gICAgY29uc3QgcmVzb3VyY2VUeXBlID0gdGhpcy50eXBlU2VyaWFsaXplci5zZXJpYWxpemUodHlwZSkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGtleU1hcCA9IHRoaXMua2V5TWFwIGFzIFJlY29yZEtleU1hcDtcbiAgICBjb25zdCByZXNvdXJjZUlkID1cbiAgICAgIHJlc291cmNlS2V5ID09PSAnaWQnID8gaWQgOiBrZXlNYXAuaWRUb0tleSh0eXBlLCByZXNvdXJjZUtleSwgaWQpO1xuXG4gICAgY29uc3QgcmVzb3VyY2U6IFJlc291cmNlID0ge1xuICAgICAgdHlwZTogcmVzb3VyY2VUeXBlXG4gICAgfTtcblxuICAgIGlmIChyZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc291cmNlLmlkID0gcmVzb3VyY2VJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb3VyY2U7XG4gIH1cblxuICBkZXNlcmlhbGl6ZShcbiAgICByZXNvdXJjZTogUmVzb3VyY2UsXG4gICAgY3VzdG9tT3B0aW9ucz86IEpTT05BUElSZXNvdXJjZUlkZW50aXR5RGVzZXJpYWxpemF0aW9uT3B0aW9uc1xuICApOiBJbml0aWFsaXplZFJlY29yZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuYnVpbGREZXNlcmlhbGl6YXRpb25PcHRpb25zKGN1c3RvbU9wdGlvbnMpO1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLnR5cGVTZXJpYWxpemVyLmRlc2VyaWFsaXplKHJlc291cmNlLnR5cGUpIGFzIHN0cmluZztcbiAgICBjb25zdCByZXNvdXJjZUtleSA9IHRoaXMuZ2V0UmVzb3VyY2VLZXkodHlwZSk7XG5cbiAgICBpZiAocmVzb3VyY2VLZXkgPT09ICdpZCcpIHtcbiAgICAgIGNvbnN0IHsgaWQgfSA9IHJlc291cmNlO1xuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGUsIGlkIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uKGBSZXNvdXJjZSBvZiB0eXBlICcke3R5cGV9JyBpcyBtaXNzaW5nICdpZCdgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qga2V5TWFwID0gdGhpcy5rZXlNYXAgYXMgUmVjb3JkS2V5TWFwO1xuICAgICAgY29uc3QgcHJpbWFyeVJlY29yZCA9IG9wdGlvbnM/LnByaW1hcnlSZWNvcmQ7XG4gICAgICBsZXQgaWQ6IHN0cmluZztcbiAgICAgIGxldCBrZXlzOiBEaWN0PHN0cmluZz4gfCBudWxsO1xuXG4gICAgICBpZiAocmVzb3VyY2UuaWQpIHtcbiAgICAgICAga2V5cyA9IHtcbiAgICAgICAgICBbcmVzb3VyY2VLZXldOiByZXNvdXJjZS5pZFxuICAgICAgICB9O1xuXG4gICAgICAgIGlkID1cbiAgICAgICAgICBvcHRpb25zLnByaW1hcnlSZWNvcmQ/LmlkIHx8XG4gICAgICAgICAga2V5TWFwLmlkRnJvbUtleXModHlwZSwga2V5cykgfHxcbiAgICAgICAgICB0aGlzLnNjaGVtYS5nZW5lcmF0ZUlkKHR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IG51bGw7XG4gICAgICAgIGlkID1cbiAgICAgICAgICAocHJpbWFyeVJlY29yZCAmJiBwcmltYXJ5UmVjb3JkLmlkKSB8fCB0aGlzLnNjaGVtYS5nZW5lcmF0ZUlkKHR5cGUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWNvcmQ6IEluaXRpYWxpemVkUmVjb3JkID0geyB0eXBlLCBpZCB9O1xuXG4gICAgICBpZiAoa2V5cykge1xuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlS2V5cykge1xuICAgICAgICAgIHJlY29yZC5rZXlzID0ga2V5cztcbiAgICAgICAgICBrZXlNYXAucHVzaFJlY29yZChyZWNvcmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleU1hcC5wdXNoUmVjb3JkKHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGtleXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH1cbiAgfVxufVxuIl19