UNPKG

@data-client/endpoint

Version:

Declarative Network Interface Definitions

62 lines (56 loc) 8.32 kB
import { Entity as EntityMixin } from '../schema.js'; const EmptyBase = class {}; /** * Entity defines a single (globally) unique object. * @see https://dataclient.io/rest/api/Entity */ export default class Entity extends EntityMixin(EmptyBase) { /** Control how automatic schema validation is handled * * `undefined`: Defaults - throw error in worst offense * 'warn': only ever warn * 'silent': Don't bother with processing at all * * Note: this only applies to non-nested members. */ /** Factory method to convert from Plain JS Objects. * * @see https://dataclient.io/rest/api/Entity#fromJS * @param [props] Plain Object of properties to assign. */ /** * A unique identifier for each Entity * * @see https://dataclient.io/rest/api/Entity#pk * @param [value] POJO of the entity or subset used * @param [parent] When normalizing, the object which included the entity * @param [key] When normalizing, the key where this entity was found * @param [args] ...args sent to Endpoint */ /** Do any transformations when first receiving input * * @see https://dataclient.io/rest/api/Entity#process */ static process(input, parent, key, args) { /* istanbul ignore else */ if (process.env.NODE_ENV !== 'production' && this.automaticValidation !== 'silent') { if (Array.isArray(input)) { const errorMessage = `Attempted to initialize ${this.name} with an array, but named members were expected This is likely due to a malformed response. Try inspecting the network response or fetch() return value. Or use debugging tools: https://dataclient.io/docs/getting-started/debugging Learn more about schemas: https://dataclient.io/docs/api/schema If this is a mistake, you can disable this check by setting static automaticValidation = 'silent' First three members: ${JSON.stringify(input.slice(0, 3), null, 2)}`; if (this.automaticValidation !== 'warn') { const error = new Error(errorMessage); error.status = 400; throw error; } console.warn(errorMessage); } } return super.process(input, parent, key, args); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFbnRpdHkiLCJFbnRpdHlNaXhpbiIsIkVtcHR5QmFzZSIsInByb2Nlc3MiLCJpbnB1dCIsInBhcmVudCIsImtleSIsImFyZ3MiLCJlbnYiLCJOT0RFX0VOViIsImF1dG9tYXRpY1ZhbGlkYXRpb24iLCJBcnJheSIsImlzQXJyYXkiLCJlcnJvck1lc3NhZ2UiLCJuYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsInNsaWNlIiwiZXJyb3IiLCJFcnJvciIsInN0YXR1cyIsImNvbnNvbGUiLCJ3YXJuIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYXMvRW50aXR5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0SW5zdGFuY2VUeXBlIH0gZnJvbSAnLi4vbm9ybWFsLmpzJztcbmltcG9ydCB7IEVudGl0eSBhcyBFbnRpdHlNaXhpbiB9IGZyb20gJy4uL3NjaGVtYS5qcyc7XG5cbmNvbnN0IEVtcHR5QmFzZSA9IGNsYXNzIHt9IGFzIGFueSBhcyBhYnN0cmFjdCBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gIHBrKFxuICAgIHBhcmVudD86IGFueSxcbiAgICBrZXk/OiBzdHJpbmcsXG4gICAgYXJncz86IHJlYWRvbmx5IGFueVtdLFxuICApOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIEVudGl0eSBkZWZpbmVzIGEgc2luZ2xlIChnbG9iYWxseSkgdW5pcXVlIG9iamVjdC5cbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL0VudGl0eVxuICovXG5leHBvcnQgZGVmYXVsdCBhYnN0cmFjdCBjbGFzcyBFbnRpdHkgZXh0ZW5kcyBFbnRpdHlNaXhpbihFbXB0eUJhc2UpIHtcbiAgLyoqIENvbnRyb2wgaG93IGF1dG9tYXRpYyBzY2hlbWEgdmFsaWRhdGlvbiBpcyBoYW5kbGVkXG4gICAqXG4gICAqIGB1bmRlZmluZWRgOiBEZWZhdWx0cyAtIHRocm93IGVycm9yIGluIHdvcnN0IG9mZmVuc2VcbiAgICogJ3dhcm4nOiBvbmx5IGV2ZXIgd2FyblxuICAgKiAnc2lsZW50JzogRG9uJ3QgYm90aGVyIHdpdGggcHJvY2Vzc2luZyBhdCBhbGxcbiAgICpcbiAgICogTm90ZTogdGhpcyBvbmx5IGFwcGxpZXMgdG8gbm9uLW5lc3RlZCBtZW1iZXJzLlxuICAgKi9cbiAgZGVjbGFyZSBwcm90ZWN0ZWQgc3RhdGljIGF1dG9tYXRpY1ZhbGlkYXRpb24/OiAnd2FybicgfCAnc2lsZW50JztcblxuICAvKiogRmFjdG9yeSBtZXRob2QgdG8gY29udmVydCBmcm9tIFBsYWluIEpTIE9iamVjdHMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL0VudGl0eSNmcm9tSlNcbiAgICogQHBhcmFtIFtwcm9wc10gUGxhaW4gT2JqZWN0IG9mIHByb3BlcnRpZXMgdG8gYXNzaWduLlxuICAgKi9cbiAgZGVjbGFyZSBzdGF0aWMgZnJvbUpTOiA8VCBleHRlbmRzIHR5cGVvZiBFbnRpdHk+KFxuICAgIHRoaXM6IFQsXG4gICAgLy8gVE9ETzogdGhpcyBzaG91bGQgb25seSBhY2NlcHQgbWVtYmVycyB0aGF0IGFyZSBub3QgZnVuY3Rpb25zXG4gICAgcHJvcHM/OiBQYXJ0aWFsPEFic3RyYWN0SW5zdGFuY2VUeXBlPFQ+PixcbiAgKSA9PiBBYnN0cmFjdEluc3RhbmNlVHlwZTxUPjtcblxuICAvKipcbiAgICogQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgZWFjaCBFbnRpdHlcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvRW50aXR5I3BrXG4gICAqIEBwYXJhbSBbdmFsdWVdIFBPSk8gb2YgdGhlIGVudGl0eSBvciBzdWJzZXQgdXNlZFxuICAgKiBAcGFyYW0gW3BhcmVudF0gV2hlbiBub3JtYWxpemluZywgdGhlIG9iamVjdCB3aGljaCBpbmNsdWRlZCB0aGUgZW50aXR5XG4gICAqIEBwYXJhbSBba2V5XSBXaGVuIG5vcm1hbGl6aW5nLCB0aGUga2V5IHdoZXJlIHRoaXMgZW50aXR5IHdhcyBmb3VuZFxuICAgKiBAcGFyYW0gW2FyZ3NdIC4uLmFyZ3Mgc2VudCB0byBFbmRwb2ludFxuICAgKi9cbiAgZGVjbGFyZSBzdGF0aWMgcGs6IDxUIGV4dGVuZHMgdHlwZW9mIEVudGl0eT4oXG4gICAgdGhpczogVCxcbiAgICB2YWx1ZTogUGFydGlhbDxBYnN0cmFjdEluc3RhbmNlVHlwZTxUPj4sXG4gICAgcGFyZW50PzogYW55LFxuICAgIGtleT86IHN0cmluZyxcbiAgICBhcmdzPzogYW55W10sXG4gICkgPT4gc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBEbyBhbnkgdHJhbnNmb3JtYXRpb25zIHdoZW4gZmlyc3QgcmVjZWl2aW5nIGlucHV0XG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL0VudGl0eSNwcm9jZXNzXG4gICAqL1xuICBzdGF0aWMgcHJvY2VzcyhcbiAgICBpbnB1dDogYW55LFxuICAgIHBhcmVudDogYW55LFxuICAgIGtleTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGFyZ3M6IGFueVtdLFxuICApOiBhbnkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgdGhpcy5hdXRvbWF0aWNWYWxpZGF0aW9uICE9PSAnc2lsZW50J1xuICAgICkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBBdHRlbXB0ZWQgdG8gaW5pdGlhbGl6ZSAke1xuICAgICAgICAgIHRoaXMubmFtZVxuICAgICAgICB9IHdpdGggYW4gYXJyYXksIGJ1dCBuYW1lZCBtZW1iZXJzIHdlcmUgZXhwZWN0ZWRcblxuVGhpcyBpcyBsaWtlbHkgZHVlIHRvIGEgbWFsZm9ybWVkIHJlc3BvbnNlLlxuVHJ5IGluc3BlY3RpbmcgdGhlIG5ldHdvcmsgcmVzcG9uc2Ugb3IgZmV0Y2goKSByZXR1cm4gdmFsdWUuXG5PciB1c2UgZGVidWdnaW5nIHRvb2xzOiBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9nZXR0aW5nLXN0YXJ0ZWQvZGVidWdnaW5nXG5MZWFybiBtb3JlIGFib3V0IHNjaGVtYXM6IGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9zY2hlbWFcbklmIHRoaXMgaXMgYSBtaXN0YWtlLCB5b3UgY2FuIGRpc2FibGUgdGhpcyBjaGVjayBieSBzZXR0aW5nIHN0YXRpYyBhdXRvbWF0aWNWYWxpZGF0aW9uID0gJ3NpbGVudCdcblxuRmlyc3QgdGhyZWUgbWVtYmVyczogJHtKU09OLnN0cmluZ2lmeShpbnB1dC5zbGljZSgwLCAzKSwgbnVsbCwgMil9YDtcbiAgICAgICAgaWYgKHRoaXMuYXV0b21hdGljVmFsaWRhdGlvbiAhPT0gJ3dhcm4nKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAoZXJyb3IgYXMgYW55KS5zdGF0dXMgPSA0MDA7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS53YXJuKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLnByb2Nlc3MoaW5wdXQsIHBhcmVudCwga2V5LCBhcmdzKTtcbiAgfVxuXG4gIGRlY2xhcmUgc3RhdGljIGRlbm9ybWFsaXplOiA8VCBleHRlbmRzIHR5cGVvZiBFbnRpdHk+KFxuICAgIHRoaXM6IFQsXG4gICAgaW5wdXQ6IGFueSxcbiAgICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgICB1bnZpc2l0OiAoc2NoZW1hOiBhbnksIGlucHV0OiBhbnkpID0+IGFueSxcbiAgKSA9PiBBYnN0cmFjdEluc3RhbmNlVHlwZTxUPjtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0EsTUFBTSxJQUFJQyxXQUFXLFFBQVEsY0FBYztBQUVwRCxNQUFNQyxTQUFTLEdBQUcsTUFBTSxFQU12Qjs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBZUYsTUFBTSxTQUFTQyxXQUFXLENBQUNDLFNBQVMsQ0FBQyxDQUFDO0VBQ2xFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7RUFPRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBU0U7QUFDRjtBQUNBO0FBQ0E7RUFDRSxPQUFPQyxPQUFPQSxDQUNaQyxLQUFVLEVBQ1ZDLE1BQVcsRUFDWEMsR0FBdUIsRUFDdkJDLElBQVcsRUFDTjtJQUNMO0lBQ0EsSUFDRUosT0FBTyxDQUFDSyxHQUFHLENBQUNDLFFBQVEsS0FBSyxZQUFZLElBQ3JDLElBQUksQ0FBQ0MsbUJBQW1CLEtBQUssUUFBUSxFQUNyQztNQUNBLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDUixLQUFLLENBQUMsRUFBRTtRQUN4QixNQUFNUyxZQUFZLEdBQUcsMkJBQ25CLElBQUksQ0FBQ0MsSUFBSTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUN1QkMsSUFBSSxDQUFDQyxTQUFTLENBQUNaLEtBQUssQ0FBQ2EsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDM0QsSUFBSSxJQUFJLENBQUNQLG1CQUFtQixLQUFLLE1BQU0sRUFBRTtVQUN2QyxNQUFNUSxLQUFLLEdBQUcsSUFBSUMsS0FBSyxDQUFDTixZQUFZLENBQUM7VUFDcENLLEtBQUssQ0FBU0UsTUFBTSxHQUFHLEdBQUc7VUFDM0IsTUFBTUYsS0FBSztRQUNiO1FBQ0FHLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDVCxZQUFZLENBQUM7TUFDNUI7SUFDRjtJQUVBLE9BQU8sS0FBSyxDQUFDVixPQUFPLENBQUNDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxHQUFHLEVBQUVDLElBQUksQ0FBQztFQUNoRDtBQVFGIiwiaWdub3JlTGlzdCI6W119