Source: graph-model.js

/**
 * The base class used when deserializing response data.
 * Provides rich features, like functions to generate queries to refetch a node or fetch the next page.
 *
 * @class
 */
export default class GraphModel {

  /**
   * @param {Object} attrs Attributes on the GraphModel.
   */
  constructor(attrs) {
    Object.defineProperty(this, 'attrs', {value: attrs, enumerable: false});

    Object.keys(this.attrs).filter((key) => {
      return !(key in this);
    }).forEach((key) => {
      let descriptor;

      if (attrs[key] === null) {
        descriptor = {
          enumerable: true,
          get() {
            return null;
          }
        };
      } else {
        descriptor = {
          enumerable: true,
          get() {
            return this.attrs[key].valueOf();
          }
        };
      }
      Object.defineProperty(this, key, descriptor);
    });
  }
}