{"version":3,"file":"pages/TreeShaking/range.mjs","sources":["../../../src/pages/TreeShaking/range.ts"],"sourcesContent":["/**\n * The following is modified based on source found in\n * https://github.com/microsoft/monaco-editor\n *\n * MIT Licensed\n * Copyright (c) 2016 - present Microsoft Corporation\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n */\n\nexport class Range {\n  public startLineNumber: number;\n  public startColumn: number;\n  public endLineNumber: number;\n  public endColumn: number;\n\n  constructor(\n    startLineNumber: number,\n    startColumn: number,\n    endLineNumber: number,\n    endColumn: number,\n  ) {\n    if (\n      startLineNumber > endLineNumber ||\n      (startLineNumber === endLineNumber && startColumn > endColumn)\n    ) {\n      this.startLineNumber = endLineNumber;\n      this.startColumn = endColumn;\n      this.endLineNumber = startLineNumber;\n      this.endColumn = startColumn;\n    } else {\n      this.startLineNumber = startLineNumber;\n      this.startColumn = startColumn;\n      this.endLineNumber = endLineNumber;\n      this.endColumn = endColumn;\n    }\n  }\n  /**\n   * Test if this range is empty.\n   */\n  isEmpty() {\n    return Range.isEmpty(this);\n  }\n  /**\n   * Test if `range` is empty.\n   */\n  static isEmpty(range: Range) {\n    return (\n      range.startLineNumber === range.endLineNumber &&\n      range.startColumn === range.endColumn\n    );\n  }\n  /**\n   * Test if position is in this range. If the position is at the edges, will return true.\n   */\n  containsPosition(position: any) {\n    return Range.containsPosition(this, position);\n  }\n  /**\n   * Test if `position` is in `range`. If the position is at the edges, will return true.\n   */\n  static containsPosition(\n    range: Range,\n    position: {\n      lineNumber: number;\n      column: number;\n    },\n  ) {\n    if (\n      position.lineNumber < range.startLineNumber ||\n      position.lineNumber > range.endLineNumber\n    ) {\n      return false;\n    }\n    if (\n      position.lineNumber === range.startLineNumber &&\n      position.column < range.startColumn\n    ) {\n      return false;\n    }\n    if (\n      position.lineNumber === range.endLineNumber &&\n      position.column > range.endColumn\n    ) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * Test if `position` is in `range`. If the position is at the edges, will return false.\n   * @internal\n   */\n  static strictContainsPosition(\n    range: Range,\n    position: {\n      lineNumber: number;\n      column: number;\n    },\n  ) {\n    if (\n      position.lineNumber < range.startLineNumber ||\n      position.lineNumber > range.endLineNumber\n    ) {\n      return false;\n    }\n    if (\n      position.lineNumber === range.startLineNumber &&\n      position.column <= range.startColumn\n    ) {\n      return false;\n    }\n    if (\n      position.lineNumber === range.endLineNumber &&\n      position.column >= range.endColumn\n    ) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * Test if range is in this range. If the range is equal to this range, will return true.\n   */\n  containsRange(range: Range) {\n    return Range.containsRange(this, range);\n  }\n  /**\n   * Test if `otherRange` is in `range`. If the ranges are equal, will return true.\n   */\n  static containsRange(\n    range: Range,\n    otherRange: {\n      startLineNumber: number;\n      endLineNumber: number;\n      startColumn: number;\n      endColumn: number;\n    },\n  ) {\n    if (\n      otherRange.startLineNumber < range.startLineNumber ||\n      otherRange.endLineNumber < range.startLineNumber\n    ) {\n      return false;\n    }\n    if (\n      otherRange.startLineNumber > range.endLineNumber ||\n      otherRange.endLineNumber > range.endLineNumber\n    ) {\n      return false;\n    }\n    if (\n      otherRange.startLineNumber === range.startLineNumber &&\n      otherRange.startColumn < range.startColumn\n    ) {\n      return false;\n    }\n    if (\n      otherRange.endLineNumber === range.endLineNumber &&\n      otherRange.endColumn > range.endColumn\n    ) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * Test if `range` is strictly in this range. `range` must start after and end before this range for the result to be true.\n   */\n  strictContainsRange(range: Range) {\n    return Range.strictContainsRange(this, range);\n  }\n  /**\n   * Test if `otherRange` is strictly in `range` (must start after, and end before). If the ranges are equal, will return false.\n   */\n  static strictContainsRange(\n    range: Range,\n    otherRange: {\n      startLineNumber: number;\n      endLineNumber: number;\n      startColumn: number;\n      endColumn: number;\n    },\n  ) {\n    if (\n      otherRange.startLineNumber < range.startLineNumber ||\n      otherRange.endLineNumber < range.startLineNumber\n    ) {\n      return false;\n    }\n    if (\n      otherRange.startLineNumber > range.endLineNumber ||\n      otherRange.endLineNumber > range.endLineNumber\n    ) {\n      return false;\n    }\n    if (\n      otherRange.startLineNumber === range.startLineNumber &&\n      otherRange.startColumn <= range.startColumn\n    ) {\n      return false;\n    }\n    if (\n      otherRange.endLineNumber === range.endLineNumber &&\n      otherRange.endColumn >= range.endColumn\n    ) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * A reunion of the two ranges.\n   * The smallest position will be used as the start point, and the largest one as the end point.\n   */\n  plusRange(range: Range) {\n    return Range.plusRange(this, range);\n  }\n  /**\n   * A reunion of the two ranges.\n   * The smallest position will be used as the start point, and the largest one as the end point.\n   */\n  static plusRange(a: Range, b: Range) {\n    let startLineNumber;\n    let startColumn;\n    let endLineNumber;\n    let endColumn;\n    if (b.startLineNumber < a.startLineNumber) {\n      startLineNumber = b.startLineNumber;\n      startColumn = b.startColumn;\n    } else if (b.startLineNumber === a.startLineNumber) {\n      startLineNumber = b.startLineNumber;\n      startColumn = Math.min(b.startColumn, a.startColumn);\n    } else {\n      startLineNumber = a.startLineNumber;\n      startColumn = a.startColumn;\n    }\n    if (b.endLineNumber > a.endLineNumber) {\n      endLineNumber = b.endLineNumber;\n      endColumn = b.endColumn;\n    } else if (b.endLineNumber === a.endLineNumber) {\n      endLineNumber = b.endLineNumber;\n      endColumn = Math.max(b.endColumn, a.endColumn);\n    } else {\n      endLineNumber = a.endLineNumber;\n      endColumn = a.endColumn;\n    }\n    return new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n  }\n  /**\n   * A intersection of the two ranges.\n   */\n  intersectRanges(range: Range) {\n    return Range.intersectRanges(this, range);\n  }\n  /**\n   * A intersection of the two ranges.\n   */\n  static intersectRanges(a: Range, b: Range) {\n    let resultStartLineNumber = a.startLineNumber;\n    let resultStartColumn = a.startColumn;\n    let resultEndLineNumber = a.endLineNumber;\n    let resultEndColumn = a.endColumn;\n    const otherStartLineNumber = b.startLineNumber;\n    const otherStartColumn = b.startColumn;\n    const otherEndLineNumber = b.endLineNumber;\n    const otherEndColumn = b.endColumn;\n    if (resultStartLineNumber < otherStartLineNumber) {\n      resultStartLineNumber = otherStartLineNumber;\n      resultStartColumn = otherStartColumn;\n    } else if (resultStartLineNumber === otherStartLineNumber) {\n      resultStartColumn = Math.max(resultStartColumn, otherStartColumn);\n    }\n    if (resultEndLineNumber > otherEndLineNumber) {\n      resultEndLineNumber = otherEndLineNumber;\n      resultEndColumn = otherEndColumn;\n    } else if (resultEndLineNumber === otherEndLineNumber) {\n      resultEndColumn = Math.min(resultEndColumn, otherEndColumn);\n    }\n    // Check if selection is now empty\n    if (resultStartLineNumber > resultEndLineNumber) {\n      return null;\n    }\n    if (\n      resultStartLineNumber === resultEndLineNumber &&\n      resultStartColumn > resultEndColumn\n    ) {\n      return null;\n    }\n    return new Range(\n      resultStartLineNumber,\n      resultStartColumn,\n      resultEndLineNumber,\n      resultEndColumn,\n    );\n  }\n  /**\n   * Test if this range equals other.\n   */\n  equalsRange(other: Range) {\n    return Range.equalsRange(this, other);\n  }\n  /**\n   * Test if range `a` equals `b`.\n   */\n  static equalsRange(a: Range, b: Range) {\n    if (!a && !b) {\n      return true;\n    }\n    return (\n      !!a &&\n      !!b &&\n      a.startLineNumber === b.startLineNumber &&\n      a.startColumn === b.startColumn &&\n      a.endLineNumber === b.endLineNumber &&\n      a.endColumn === b.endColumn\n    );\n  }\n  /**\n   * Return the end position (which will be after or equal to the start position)\n   */\n  getEndPosition() {\n    return Range.getEndPosition(this);\n  }\n  /**\n   * Return the end position (which will be after or equal to the start position)\n   */\n  static getEndPosition(range: Range) {\n    return new Position(range.endLineNumber, range.endColumn);\n  }\n  /**\n   * Return the start position (which will be before or equal to the end position)\n   */\n  getStartPosition() {\n    return Range.getStartPosition(this);\n  }\n  /**\n   * Return the start position (which will be before or equal to the end position)\n   */\n  static getStartPosition(range: Range) {\n    return new Position(range.startLineNumber, range.startColumn);\n  }\n  /**\n   * Transform to a user presentable string representation.\n   */\n  toString() {\n    return `[${this.startLineNumber},${this.startColumn} -> ${this.endLineNumber},${this.endColumn}]`;\n  }\n  /**\n   * Create a new range using this range's start position, and using endLineNumber and endColumn as the end position.\n   */\n  setEndPosition(endLineNumber: number, endColumn: number) {\n    return new Range(\n      this.startLineNumber,\n      this.startColumn,\n      endLineNumber,\n      endColumn,\n    );\n  }\n  /**\n   * Create a new range using this range's end position, and using startLineNumber and startColumn as the start position.\n   */\n  setStartPosition(startLineNumber: number, startColumn: number) {\n    return new Range(\n      startLineNumber,\n      startColumn,\n      this.endLineNumber,\n      this.endColumn,\n    );\n  }\n  /**\n   * Create a new empty range using this range's start position.\n   */\n  collapseToStart() {\n    return Range.collapseToStart(this);\n  }\n  /**\n   * Create a new empty range using this range's start position.\n   */\n  static collapseToStart(range: Range) {\n    return new Range(\n      range.startLineNumber,\n      range.startColumn,\n      range.startLineNumber,\n      range.startColumn,\n    );\n  }\n  /**\n   * Create a new empty range using this range's end position.\n   */\n  collapseToEnd() {\n    return Range.collapseToEnd(this);\n  }\n  /**\n   * Create a new empty range using this range's end position.\n   */\n  static collapseToEnd(range: Range) {\n    return new Range(\n      range.endLineNumber,\n      range.endColumn,\n      range.endLineNumber,\n      range.endColumn,\n    );\n  }\n  /**\n   * Moves the range by the given amount of lines.\n   */\n  delta(lineCount: number) {\n    return new Range(\n      this.startLineNumber + lineCount,\n      this.startColumn,\n      this.endLineNumber + lineCount,\n      this.endColumn,\n    );\n  }\n  // ---\n  static fromPositions(\n    start: {\n      lineNumber: number;\n      column: number;\n    },\n    end = start,\n  ) {\n    return new Range(\n      start.lineNumber,\n      start.column,\n      end.lineNumber,\n      end.column,\n    );\n  }\n  static lift(range: Range) {\n    if (!range) {\n      return null;\n    }\n    return new Range(\n      range.startLineNumber,\n      range.startColumn,\n      range.endLineNumber,\n      range.endColumn,\n    );\n  }\n  /**\n   * Test if `obj` is an `IRange`.\n   */\n  static isIRange(obj: Range) {\n    return (\n      obj &&\n      typeof obj.startLineNumber === 'number' &&\n      typeof obj.startColumn === 'number' &&\n      typeof obj.endLineNumber === 'number' &&\n      typeof obj.endColumn === 'number'\n    );\n  }\n  /**\n   * Test if the two ranges are touching in any way.\n   */\n  static areIntersectingOrTouching(a: Range, b: Range) {\n    // Check if `a` is before `b`\n    if (\n      a.endLineNumber < b.startLineNumber ||\n      (a.endLineNumber === b.startLineNumber && a.endColumn < b.startColumn)\n    ) {\n      return false;\n    }\n    // Check if `b` is before `a`\n    if (\n      b.endLineNumber < a.startLineNumber ||\n      (b.endLineNumber === a.startLineNumber && b.endColumn < a.startColumn)\n    ) {\n      return false;\n    }\n    // These ranges must intersect\n    return true;\n  }\n  /**\n   * Test if the two ranges are intersecting. If the ranges are touching it returns true.\n   */\n  static areIntersecting(a: Range, b: Range) {\n    // Check if `a` is before `b`\n    if (\n      a.endLineNumber < b.startLineNumber ||\n      (a.endLineNumber === b.startLineNumber && a.endColumn <= b.startColumn)\n    ) {\n      return false;\n    }\n    // Check if `b` is before `a`\n    if (\n      b.endLineNumber < a.startLineNumber ||\n      (b.endLineNumber === a.startLineNumber && b.endColumn <= a.startColumn)\n    ) {\n      return false;\n    }\n    // These ranges must intersect\n    return true;\n  }\n  /**\n   * A function that compares ranges, useful for sorting ranges\n   * It will first compare ranges on the startPosition and then on the endPosition\n   */\n  static compareRangesUsingStarts(a: Range, b: Range) {\n    if (a && b) {\n      const aStartLineNumber = a.startLineNumber | 0;\n      const bStartLineNumber = b.startLineNumber | 0;\n      if (aStartLineNumber === bStartLineNumber) {\n        const aStartColumn = a.startColumn | 0;\n        const bStartColumn = b.startColumn | 0;\n        if (aStartColumn === bStartColumn) {\n          const aEndLineNumber = a.endLineNumber | 0;\n          const bEndLineNumber = b.endLineNumber | 0;\n          if (aEndLineNumber === bEndLineNumber) {\n            const aEndColumn = a.endColumn | 0;\n            const bEndColumn = b.endColumn | 0;\n            return aEndColumn - bEndColumn;\n          }\n          return aEndLineNumber - bEndLineNumber;\n        }\n        return aStartColumn - bStartColumn;\n      }\n      return aStartLineNumber - bStartLineNumber;\n    }\n    const aExists = a ? 1 : 0;\n    const bExists = b ? 1 : 0;\n    return aExists - bExists;\n  }\n  /**\n   * A function that compares ranges, useful for sorting ranges\n   * It will first compare ranges on the endPosition and then on the startPosition\n   */\n  static compareRangesUsingEnds(\n    a: {\n      endLineNumber: number;\n      endColumn: number;\n      startLineNumber: number;\n      startColumn: number;\n    },\n    b: {\n      endLineNumber: number;\n      endColumn: number;\n      startLineNumber: number;\n      startColumn: number;\n    },\n  ) {\n    if (a.endLineNumber === b.endLineNumber) {\n      if (a.endColumn === b.endColumn) {\n        if (a.startLineNumber === b.startLineNumber) {\n          return a.startColumn - b.startColumn;\n        }\n        return a.startLineNumber - b.startLineNumber;\n      }\n      return a.endColumn - b.endColumn;\n    }\n    return a.endLineNumber - b.endLineNumber;\n  }\n  /**\n   * Test if the range spans multiple lines.\n   */\n  static spansMultipleLines(range: Range) {\n    return range.endLineNumber > range.startLineNumber;\n  }\n  toJSON() {\n    return this;\n  }\n}\n\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * A position in the editor.\n */\nexport class Position {\n  lineNumber: number;\n  column: number;\n\n  constructor(lineNumber: number, column: number) {\n    this.lineNumber = lineNumber;\n    this.column = column;\n  }\n  /**\n   * Create a new position from this position.\n   *\n   * @param newLineNumber new line number\n   * @param newColumn new column\n   */\n  with(newLineNumber = this.lineNumber, newColumn = this.column) {\n    if (newLineNumber === this.lineNumber && newColumn === this.column) {\n      return this;\n    }\n    return new Position(newLineNumber, newColumn);\n  }\n  /**\n   * Derive a new position from this position.\n   *\n   * @param deltaLineNumber line number delta\n   * @param deltaColumn column delta\n   */\n  delta(deltaLineNumber = 0, deltaColumn = 0) {\n    return this.with(\n      this.lineNumber + deltaLineNumber,\n      this.column + deltaColumn,\n    );\n  }\n  /**\n   * Test if this position equals other position\n   */\n  equals(other: any) {\n    return Position.equals(this, other);\n  }\n  /**\n   * Test if position `a` equals position `b`\n   */\n  static equals(\n    a: any,\n    b: {\n      lineNumber: any;\n      column: any;\n    },\n  ) {\n    if (!a && !b) {\n      return true;\n    }\n    return !!a && !!b && a.lineNumber === b.lineNumber && a.column === b.column;\n  }\n  /**\n   * Test if this position is before other position.\n   * If the two positions are equal, the result will be false.\n   */\n  isBefore(other: any) {\n    return Position.isBefore(this, other);\n  }\n  /**\n   * Test if position `a` is before position `b`.\n   * If the two positions are equal, the result will be false.\n   */\n  static isBefore(\n    a: any,\n    b: {\n      lineNumber: number;\n      column: number;\n    },\n  ) {\n    if (a.lineNumber < b.lineNumber) {\n      return true;\n    }\n    if (b.lineNumber < a.lineNumber) {\n      return false;\n    }\n    return a.column < b.column;\n  }\n  /**\n   * Test if this position is before other position.\n   * If the two positions are equal, the result will be true.\n   */\n  isBeforeOrEqual(other: any) {\n    return Position.isBeforeOrEqual(this, other);\n  }\n  /**\n   * Test if position `a` is before position `b`.\n   * If the two positions are equal, the result will be true.\n   */\n  static isBeforeOrEqual(\n    a: any,\n    b: {\n      lineNumber: number;\n      column: number;\n    },\n  ) {\n    if (a.lineNumber < b.lineNumber) {\n      return true;\n    }\n    if (b.lineNumber < a.lineNumber) {\n      return false;\n    }\n    return a.column <= b.column;\n  }\n  /**\n   * A function that compares positions, useful for sorting\n   */\n  static compare(\n    a: {\n      lineNumber: number;\n      column: number;\n    },\n    b: {\n      lineNumber: number;\n      column: number;\n    },\n  ) {\n    const aLineNumber = a.lineNumber | 0;\n    const bLineNumber = b.lineNumber | 0;\n    if (aLineNumber === bLineNumber) {\n      const aColumn = a.column | 0;\n      const bColumn = b.column | 0;\n      return aColumn - bColumn;\n    }\n    return aLineNumber - bLineNumber;\n  }\n  /**\n   * Clone this position.\n   */\n  clone() {\n    return new Position(this.lineNumber, this.column);\n  }\n  /**\n   * Convert to a human-readable representation.\n   */\n  toString() {\n    return `(${this.lineNumber},${this.column})`;\n  }\n  // ---\n  /**\n   * Create a `Position` from an `IPosition`.\n   */\n  static lift(pos: { lineNumber: any; column: any }) {\n    return new Position(pos.lineNumber, pos.column);\n  }\n  /**\n   * Test if `obj` is an `IPosition`.\n   */\n  static isIPosition(obj: { lineNumber: any; column: any }) {\n    return (\n      obj &&\n      typeof obj.lineNumber === 'number' &&\n      typeof obj.column === 'number'\n    );\n  }\n  toJSON() {\n    return {\n      lineNumber: this.lineNumber,\n      column: this.column,\n    };\n  }\n}\n"],"names":["Range","range","position","otherRange","a","b","startLineNumber","startColumn","endLineNumber","endColumn","Math","resultStartLineNumber","resultStartColumn","resultEndLineNumber","resultEndColumn","otherStartLineNumber","otherStartColumn","otherEndLineNumber","otherEndColumn","other","Position","lineCount","start","end","obj","aStartLineNumber","bStartLineNumber","aStartColumn","bStartColumn","aEndLineNumber","bEndLineNumber","aEndColumn","bEndColumn","aExists","bExists","newLineNumber","newColumn","deltaLineNumber","deltaColumn","aLineNumber","bLineNumber","aColumn","bColumn","pos","lineNumber","column"],"mappings":"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"}