docs: function applyMixins(derivedCtor, baseCtors, mergeObjectKeys = []) {
      baseCtors.forEach(baseCtor => {
          Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
              const baseValue = baseCtor.prototype[name];
              const derivedValue = derivedCtor.prototype[name];
              try {
                  if ((typeof baseValue === 'object' && typeof derivedValue === 'object') && mergeObjectKeys.indexOf(name) >= 0) {
                      derivedCtor.prototype[name] = Object.assign({}, baseValue, derivedValue);
                  }
                  else {
                      derivedCtor.prototype[name] = baseValue;
                  }
              }
              catch (error) {
                  if (error.message.includes('which has only a getter')) {
                      let result = undefined;
                      if ((typeof baseValue === 'object' && typeof derivedValue === 'object') && mergeObjectKeys.indexOf(name) >= 0) {
                          result = Object.assign({}, baseValue, derivedValue);
                      }
                      else {
                          result = baseValue;
                      }
                      Object.defineProperty(derivedCtor, name, {
                          get() {
                              return result;
                          },
                      });
                  }
                  else {
                      throw error;
                  }
              }
          });
      });
  }