addShape(type, options) {
    options = options || {};

    this._setPositions(options);

    return this.execute(commands.ADD_SHAPE, type, options);
  }
Add shape
@param {string} type - Shape type (ex: 'rect', 'circle', 'triangle')
@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.left] - Shape x position
     @param {number} [options.top] - Shape y position
     @param {boolean} [options.isRegular] - Whether resizing shape has 1:1 ratio or not
@returns {Promise<ObjectProps, ErrorMsg>}
@example
imageEditor.addShape('rect', {
    fill: 'red',
    stroke: 'blue',
    strokeWidth: 3,
    width: 100,
    height: 200,
    left: 10,
    top: 10,
    isRegular: true
});
@example
imageEditor.addShape('circle', {
    fill: 'red',
    stroke: 'blue',
    strokeWidth: 3,
    rx: 10,
    ry: 100,
    isRegular: false
}).then(objectProps => {
    console.log(objectProps.id);
});
@example
imageEditor.addShape('rect', {
    fill: {
        type: 'filter',
        filter: [{blur: 0.3}, {pixelate: 20}]
    },
    stroke: 'blue',
    strokeWidth: 3,
    rx: 10,
    ry: 100,
    isRegular: false
}).then(objectProps => {
    console.log(objectProps.id);
});