change(shapeObj, options) {
    return new Promise((resolve, reject) => {
      if (!isShape(shapeObj)) {
        reject(rejectMessages.unsupportedType);
      }
      const hasFillOption = getFillTypeFromOption(options.fill) === 'filter';
      const { canvasImage, createStaticCanvas } = this.graphics;

      shapeObj.set(
        hasFillOption ? makeFabricFillOption(options, canvasImage, createStaticCanvas) : options
      );

      if (hasFillOption) {
        this._resetPositionFillFilter(shapeObj);
      }

      this.getCanvas().renderAll();
      resolve();
    });
  }
Change the shape
@ignore
@param {fabric.Object} shapeObj - Selected shape object on canvas
@param {Object} options - Shape options
     @param {(ShapeFillOption | string)} [options.fill] - {@link ShapeFillOption} or
       Shape foreground color (ex: '#fff', 'transparent')
     @param {string} [options.stroke] - Shape outline color
     @param {number} [options.strokeWidth] - Shape outline width
     @param {number} [options.width] - Width value (When type option is 'rect', this options can use)
     @param {number} [options.height] - Height value (When type option is 'rect', this options can use)
     @param {number} [options.rx] - Radius x value (When type option is 'circle', this options can use)
     @param {number} [options.ry] - Radius y value (When type option is 'circle', this options can use)
     @param {number} [options.isRegular] - Whether scaling shape has 1:1 ratio or not
@returns {Promise}