Source: symbols/symbolStructure.js

/**
 * Класс, используемый для заливки
 */
class Fill {
  /**
   * @param {object} params - опции стиля
   * @param params.color {string | array} - цвет заливки
   */
  constructor(params) {
    this.color = params.color;
  }
}

/**
 * Класс, используемый для описания стиля линии
 */
class Stroke {
  /**
   * @param {object} params - опции стиля
   * @param params.color {string | array} - цвет линии
   * @param params.width {number | undefined} - толщина
   * @param params.lineCap {string}  - тип завершения линии - butt, round, square
   * @param params.lineJoin {string} - тип соединения линии - bevel, round, miter
   * @param params.lineDash {array} - порядок штриховки
   * @param params.lineDashOffset {number} - отступ штриховки
   * @param params.miterLimit {number} - величина максимального отступа поворота
   */
  constructor(params) {
    this.color = params.color;
    this.width = params.width;
    this.lineCap = params.lineCap;
    this.lineJoin = params.lineJoin;
    this.lineDash = params.lineDash;
    this.miterLimit = params.miterLimit;
  }
}

/**
 * Класс, используемый для описания стиля значка
 */
class Icon {
  /**
   * @param {object} params - опции стиля
   * @param params.color {string | array} - цвет значка
   * @param params.anchor {array} - якорь, значение по умолчанию - [0.5, 0.5]
   * @param params.anchorOrigin {string} - привязка якоря: bottom-left, bottom-right, top-leftили top-right. По умолчанию top-left.
   * @param params.anchorXUnits {string} - Единицы, в которых указано значение привязки x. Значение 'fraction' указывает, что значение x является частью значка. Значение 'pixels' указывает значение x в пикселях. По умолчанию 'fraction'.
   * @param params.anchorYUnits {string} - Единицы, в которых указано значение привязки y. Значение 'fraction' указывает, что значение x является частью значка. Значение 'pixels' указывает значение x в пикселях. По умолчанию 'fraction'.
   * @param params.crossOrigin {string} - Атрибут для загруженных изображений. Обратите внимание, что вы должны указать crossOriginзначение, если используете средство визуализации WebGL, или хотите получить доступ к данным пикселя с помощью средства рендеринга Canvas
   * @param params.img {HTMLCanvasElement} - Объект изображения для значка. Если srcопция не указана, то предоставленное изображение уже должно быть загружено. И в этом случае требуется указать размер изображения с imgSizeопцией
   * @param params.offset {array} - Смещение, которое вместе с размером и началом смещения определяет суб-прямоугольник для использования с исходным изображением значка. Значение по умолчанию [0, 0].
   * @param params.offsetOrigin {string} - Происхождение смещения: bottom-left, bottom-right, top-leftили top-right. По умолчанию top-left.
   * @param params.opacity {number} - Прозрачность (0 - 1).
   * @param params.scale {number} - Масштаб (0 + Inf)
   * @param params.snapToPixel {boolean} - Привязка к пиксельным размерам
   * @param params.rotateWithView {boolean} - Вращать вместе с поворотом вида (карты)
   * @param params.rotation {number} - Вращение в радианах (положительное вращение по часовой стрелке). По умолчанию 0.
   * @param params.size {array} - Размер значка в пикселях. Может использоваться вместе с offsetцелью определения суб-прямоугольника для использования с изображением значка источника (спрайт).
   * @param params.imgSize {array} - Размер изображения в пикселях. Требуется только в том случае, если img установлено, а src - нет, и для изображений SVG в Internet Explorer 11. Приведенный imgSize должен соответствовать фактическому размеру изображения.
   * @param params.src {string} - URI исходного изображения.
   */
  constructor(params) {
    this.anchor = params.anchor;
    this.anchorOrigin = params.anchorOrigin;
    this.anchorXUnits = params.anchorXUnits;
    this.anchorYUnits = params.anchorYUnits;
    this.color = params.color;
    this.crossOrigin = params.crossOrigin;
    this.img = params.img;
    this.offset = params.offset;
    this.offsetOrigin = params.offsetOrigin;
    this.opacity = params.opacity;
    this.scale = params.scale;
    this.snapToPixel = params.snapToPixel;
    this.rotateWithView = params.rotateWithView;
    this.rotation = params.rotation;
    this.size = params.size;
    this.imgSize = params.imgSize;
    this.src = params.src;
  }
}

/**
 * Класс, используемый для обозначения подписывания
 */
class Label {
  /**
   * @param {object} params - опции стиля
   * @param params.field {string } - поле для подписывания
   * @param params.exceedLength {boolean } - Разрешение тексту превышать ширину многоугольника в позиции метки или длину пути, за которым он следует. По умолчанию false
   * @param params.font {string } - поле для подписывания
   * @param params.maxAngle {number} - максимальный угол между соседними символами
   * @param params.offsetX {number} - Горизонтальное смещение текста в пикселях. Положительный сдвиг текста будет правильным. По умолчанию 0
   * @param params.offsetY {number} - Вертикальное смещение текста в пикселях. Положительный сдвинет текст вниз. По умолчанию 0.
   * @param params.placement {string} - Размещение текста ('point', 'line')
   * @param params.scale {number} - Масштаб (0 + Inf)
   * @param params.rotateWithView {boolean} - Вращать вместе с поворотом вида (карты)
   * @param params.rotation {number} - Вращение в радианах (положительное вращение по часовой стрелке). По умолчанию 0.
   * @param params.textAlign {string} - Размер значка в пикселях. Может использоваться вместе с offsetцелью определения суб-прямоугольника для использования с изображением значка источника (спрайт).
   * @param params.textBaseline {string} - Выравнивание текста. Возможные значения
   * @param params.fill {Fill} - Стиль заливки текста.
   * @param params.stroke {Stroke} - Стиль линии текста
   * @param params.text {string} - Статическая подпись, используется, если не задано поле подписывания (field) или свойство от этого поля равно null или undefined
   */
  constructor(params) {
    this.field = params.field;
    this.exceedLength = params.exceedLength;
    this.font = params.font;
    this.maxAngle = params.maxAngle;
    this.offsetX = params.offsetX;
    this.offsetY = params.offsetY;
    this.placement = params.placement;
    this.scale = params.scale;
    this.rotateWithView = params.rotateWithView;
    this.rotation = params.rotation;
    this.textAlign = params.textAlign;
    this.textBaseline = params.textBaseline;
    this.fill = params.fill;
    this.stroke = params.stroke;
  }
}

/**
 * Обобщенный класс униформенной конфигурации
 */
class UniformStyleConfig {
}

/**
 * Класс - конфигурация униформенного стиля для точечной геометрии
 */
class PointUniformConfig extends UniformStyleConfig {
  /**
   * @param params {object} - параметры стиля
   * @param params.label {Label} - описание подписывания
   * @param params.icon {Icon} - описание значка
   */
  constructor(params) {
    super();
    this.label = params.label;
    this.icon = params.icon;
  }
}

/**
 * Класс - конфигурация униформенного стиля для линейной геометрии
 */
class LineStringUniformConfig extends UniformStyleConfig {
  /**
   * @param params {object} - параметры стиля
   * @param params.label {Label} - описание подписывания
   * @param params.stroke {Stroke} - описание значка
   */
  constructor(params) {
    super();
    this.stroke = params.stroke;
    this.label = params.label;
  }
}

/**
 * Класс - конфигурация униформенного стиля для полигональной геометрии
 */
class PolygonUniformConfig extends UniformStyleConfig {
  /**
   * @param params {object} - параметры стиля
   * @param params.label {Label} - описание подписывания
   * @param params.stroke {Stroke} - описание линии
   * @param params.fill {Fill} - описание заливки
   */
  constructor(params) {
    super();
    this.fill = params.fill;
    this.stroke = params.stroke;
    this.label = params.label;
  }
}

/**
 * Класс - конфигурация для уникальных значений стиля
 */
class UniqueStyleConfig {
  /**
   * @param params {object} - опции стиля
   * @param params.geometryType {string} - тип геометрии
   * @param params.field {string} - поле классификации
   * @param params.default {UniformStyleConfig} - конфигурация униформленного стиля для дефолтовых значений
   * @param params.values {object} - множество пар ключ-значений, где ключ - значение классифицируемого объекта, значение - объект типа UniformStyleConfig
   */
  constructor(params) {
    this.geometryType = params.geometryType;
    this.field = params.field;
    this.default = params.default;
    this.values = params.values;
  }
}

/**
 * Класс - конфигурация для уникальных интервальных значений
 */
class IntervalStyleConfig {
  /**
   * @param params {object} - опции стиля
   * @param params.geometryType {string} - тип геометрии
   * @param params.field {string} - поле классификации
   * @param params.default {UniformStyleConfig} - конфигурация униформленного стиля для дефолтовых значений
   * @param params.values {object} - множество пар ключ-значений, где ключ - интервал значений классифицируемого объекта, значение - объект типа UniformStyleConfig
   * п.с.: интервал описывается в виде выражения (X~Y) или [X~Y) или [X~Y] или (X~Y],
   * где X, Y - крайние значения диапазона, [ и ] - включение границ, ( и ) - исключение границ, ~ разделитель значений
   */
  constructor(params) {
    this.type = params.type;
    this.geometryType = params.geometryType;
    this.field = params.field;
    this.default = params.default;
    this.values = params.values;
  }
}

module.exports = {
  Fill,
  Stroke,
  Icon,
  Label,
  UniformStyleConfig,
  PointUniformConfig,
  LineStringUniformConfig,
  PolygonUniformConfig,
  UniqueStyleConfig,
  IntervalStyleConfig
}