@data-client/endpoint
Version:
Declarative Network Interface Definitions
34 lines (33 loc) • 5.18 kB
JavaScript
import PolymorphicSchema from './Polymorphic.js';
/**
* Represents polymorphic values.
* @see https://dataclient.io/rest/api/Union
*/
export default class UnionSchema extends PolymorphicSchema {
constructor(definition, schemaAttribute) {
if (!schemaAttribute) {
throw new Error('Expected option "schemaAttribute" not found on UnionSchema.');
}
super(definition, schemaAttribute);
}
normalize(input, parent, key, args, visit, addEntity, getEntity, checkLoop) {
return this.normalizeValue(input, parent, key, args, visit);
}
denormalize(input, args, unvisit) {
return this.denormalizeValue(input, unvisit);
}
queryKey(args, queryKey, getEntity, getIndex) {
if (!args[0]) return;
const schema = this.getSchemaAttribute(args[0], undefined, '');
const discriminatedSchema = this.schema[schema];
// Was unable to infer the entity's schema from params
if (discriminatedSchema === undefined) return;
const id = queryKey(discriminatedSchema, args, getEntity, getIndex);
if (id === undefined) return;
return {
id,
schema
};
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQb2x5bW9ycGhpY1NjaGVtYSIsIlVuaW9uU2NoZW1hIiwiY29uc3RydWN0b3IiLCJkZWZpbml0aW9uIiwic2NoZW1hQXR0cmlidXRlIiwiRXJyb3IiLCJub3JtYWxpemUiLCJpbnB1dCIsInBhcmVudCIsImtleSIsImFyZ3MiLCJ2aXNpdCIsImFkZEVudGl0eSIsImdldEVudGl0eSIsImNoZWNrTG9vcCIsIm5vcm1hbGl6ZVZhbHVlIiwiZGVub3JtYWxpemUiLCJ1bnZpc2l0IiwiZGVub3JtYWxpemVWYWx1ZSIsInF1ZXJ5S2V5IiwiZ2V0SW5kZXgiLCJzY2hlbWEiLCJnZXRTY2hlbWFBdHRyaWJ1dGUiLCJ1bmRlZmluZWQiLCJkaXNjcmltaW5hdGVkU2NoZW1hIiwiaWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NoZW1hcy9Vbmlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUG9seW1vcnBoaWNTY2hlbWEgZnJvbSAnLi9Qb2x5bW9ycGhpYy5qcyc7XG5pbXBvcnQgeyBHZXRJbmRleCwgR2V0RW50aXR5LCBWaXNpdCB9IGZyb20gJy4uL2ludGVyZmFjZS5qcyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBwb2x5bW9ycGhpYyB2YWx1ZXMuXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9VbmlvblxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVbmlvblNjaGVtYSBleHRlbmRzIFBvbHltb3JwaGljU2NoZW1hIHtcbiAgY29uc3RydWN0b3IoZGVmaW5pdGlvbjogYW55LCBzY2hlbWFBdHRyaWJ1dGU6IGFueSkge1xuICAgIGlmICghc2NoZW1hQXR0cmlidXRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdFeHBlY3RlZCBvcHRpb24gXCJzY2hlbWFBdHRyaWJ1dGVcIiBub3QgZm91bmQgb24gVW5pb25TY2hlbWEuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHN1cGVyKGRlZmluaXRpb24sIHNjaGVtYUF0dHJpYnV0ZSk7XG4gIH1cblxuICBub3JtYWxpemUoXG4gICAgaW5wdXQ6IGFueSxcbiAgICBwYXJlbnQ6IGFueSxcbiAgICBrZXk6IGFueSxcbiAgICBhcmdzOiBhbnlbXSxcbiAgICB2aXNpdDogVmlzaXQsXG4gICAgYWRkRW50aXR5OiBhbnksXG4gICAgZ2V0RW50aXR5OiBhbnksXG4gICAgY2hlY2tMb29wOiBhbnksXG4gICkge1xuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZVZhbHVlKGlucHV0LCBwYXJlbnQsIGtleSwgYXJncywgdmlzaXQpO1xuICB9XG5cbiAgZGVub3JtYWxpemUoXG4gICAgaW5wdXQ6IHt9LFxuICAgIGFyZ3M6IHJlYWRvbmx5IGFueVtdLFxuICAgIHVudmlzaXQ6IChzY2hlbWE6IGFueSwgaW5wdXQ6IGFueSkgPT4gYW55LFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5kZW5vcm1hbGl6ZVZhbHVlKGlucHV0LCB1bnZpc2l0KTtcbiAgfVxuXG4gIHF1ZXJ5S2V5KFxuICAgIGFyZ3M6IGFueSxcbiAgICBxdWVyeUtleTogKFxuICAgICAgc2NoZW1hOiBhbnksXG4gICAgICBhcmdzOiBhbnksXG4gICAgICBnZXRFbnRpdHk6IEdldEVudGl0eSxcbiAgICAgIGdldEluZGV4OiBHZXRJbmRleCxcbiAgICApID0+IGFueSxcbiAgICBnZXRFbnRpdHk6IEdldEVudGl0eSxcbiAgICBnZXRJbmRleDogR2V0SW5kZXgsXG4gICkge1xuICAgIGlmICghYXJnc1swXSkgcmV0dXJuO1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hQXR0cmlidXRlKGFyZ3NbMF0sIHVuZGVmaW5lZCwgJycpO1xuICAgIGNvbnN0IGRpc2NyaW1pbmF0ZWRTY2hlbWEgPSB0aGlzLnNjaGVtYVtzY2hlbWFdO1xuXG4gICAgLy8gV2FzIHVuYWJsZSB0byBpbmZlciB0aGUgZW50aXR5J3Mgc2NoZW1hIGZyb20gcGFyYW1zXG4gICAgaWYgKGRpc2NyaW1pbmF0ZWRTY2hlbWEgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIGNvbnN0IGlkID0gcXVlcnlLZXkoZGlzY3JpbWluYXRlZFNjaGVtYSwgYXJncywgZ2V0RW50aXR5LCBnZXRJbmRleCk7XG4gICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICByZXR1cm4geyBpZCwgc2NoZW1hIH07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsaUJBQWlCLE1BQU0sa0JBQWtCO0FBR2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNQyxXQUFXLFNBQVNELGlCQUFpQixDQUFDO0VBQ3pERSxXQUFXQSxDQUFDQyxVQUFlLEVBQUVDLGVBQW9CLEVBQUU7SUFDakQsSUFBSSxDQUFDQSxlQUFlLEVBQUU7TUFDcEIsTUFBTSxJQUFJQyxLQUFLLENBQ2IsNkRBQ0YsQ0FBQztJQUNIO0lBQ0EsS0FBSyxDQUFDRixVQUFVLEVBQUVDLGVBQWUsQ0FBQztFQUNwQztFQUVBRSxTQUFTQSxDQUNQQyxLQUFVLEVBQ1ZDLE1BQVcsRUFDWEMsR0FBUSxFQUNSQyxJQUFXLEVBQ1hDLEtBQVksRUFDWkMsU0FBYyxFQUNkQyxTQUFjLEVBQ2RDLFNBQWMsRUFDZDtJQUNBLE9BQU8sSUFBSSxDQUFDQyxjQUFjLENBQUNSLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxHQUFHLEVBQUVDLElBQUksRUFBRUMsS0FBSyxDQUFDO0VBQzdEO0VBRUFLLFdBQVdBLENBQ1RULEtBQVMsRUFDVEcsSUFBb0IsRUFDcEJPLE9BQXlDLEVBQ3pDO0lBQ0EsT0FBTyxJQUFJLENBQUNDLGdCQUFnQixDQUFDWCxLQUFLLEVBQUVVLE9BQU8sQ0FBQztFQUM5QztFQUVBRSxRQUFRQSxDQUNOVCxJQUFTLEVBQ1RTLFFBS1EsRUFDUk4sU0FBb0IsRUFDcEJPLFFBQWtCLEVBQ2xCO0lBQ0EsSUFBSSxDQUFDVixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDZCxNQUFNVyxNQUFNLEdBQUcsSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQ1osSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFYSxTQUFTLEVBQUUsRUFBRSxDQUFDO0lBQzlELE1BQU1DLG1CQUFtQixHQUFHLElBQUksQ0FBQ0gsTUFBTSxDQUFDQSxNQUFNLENBQUM7O0lBRS9DO0lBQ0EsSUFBSUcsbUJBQW1CLEtBQUtELFNBQVMsRUFBRTtJQUN2QyxNQUFNRSxFQUFFLEdBQUdOLFFBQVEsQ0FBQ0ssbUJBQW1CLEVBQUVkLElBQUksRUFBRUcsU0FBUyxFQUFFTyxRQUFRLENBQUM7SUFDbkUsSUFBSUssRUFBRSxLQUFLRixTQUFTLEVBQUU7SUFDdEIsT0FBTztNQUFFRSxFQUFFO01BQUVKO0lBQU8sQ0FBQztFQUN2QjtBQUNGIiwiaWdub3JlTGlzdCI6W119