Source: aftereffect/shapes/shapes/BaseShapeModifier.js

import DynamicPropertyContainer from '../helpers/dynamicProperties';
import shapeCollection_pool from '../pooling/shapeCollection_pool';

/**
 * a
 */
export default class ShapeModifier extends DynamicPropertyContainer {
  /**
   * a
   */
  initModifierProperties() {}
  /**
   * a
   */
  addShapeToModifier() {}
  /**
   * a
   * @param {*} data a
   */
  addShape(data) {
    if (!this.closed) {
      const shapeData = { shape: data.sh, data: data, localShapeCollection: shapeCollection_pool.newShapeCollection() };
      this.shapes.push(shapeData);
      this.addShapeToModifier(shapeData);
      if (this._isAnimated) {
        data.setAsAnimated();
      }
    }
  }

  /**
   * a
   * @param {*} elem a
   * @param {*} data a
   */
  init(elem, data) {
    this.shapes = [];
    this.elem = elem;
    this.initDynamicPropertyContainer(elem);
    this.initModifierProperties(elem, data);
    this.closed = false;
    this.k = false;
    if (this.dynamicProperties.length) {
      this.k = true;
    } else {
      this.getValue(-999999, true);
    }
  }

  /**
   * a
   */
  processKeys(frameNum) {
    this.iterateDynamicProperties(frameNum);
  }
}